From e724c8d3461e80aff70808fa710283a3f9171fbf Mon Sep 17 00:00:00 2001 From: Martin Schneppenheim <23424570+weeco@users.noreply.github.com> Date: Fri, 2 Feb 2024 10:31:12 +0000 Subject: [PATCH] Add set topic configs endpoint (#1065) * proto: update protos for SetTopicConfig * chore: compile protos * backend: implement SetTopicConfigurations endpoint --- .../pkg/api/connect/integration/topic_test.go | 258 ++++++++++ .../pkg/api/connect/service/topic/mapper.go | 23 + .../pkg/api/connect/service/topic/service.go | 83 +++- ...ntal_alter_configs.go => alter_configs.go} | 7 + backend/pkg/console/servicer.go | 2 + ...ntal_alter_configs.go => alter_configs.go} | 5 + .../dataplanev1alpha1connect/topic.connect.go | 42 +- .../topic.connect.gw.go | 8 +- .../api/dataplane/v1alpha1/topic.pb.go | 442 +++++++++--------- .../api/dataplane/v1alpha1/topic.pb.gw.go | 45 +- .../api/dataplane/v1alpha1/topic_grpc.pb.go | 30 +- .../api/dataplane/v1alpha1/topic_connect.ts | 12 +- .../api/dataplane/v1alpha1/topic_pb.ts | 90 ++-- proto/gen/openapi/openapi.json | 2 +- proto/gen/openapi/openapi.yaml | 58 +-- .../api/dataplane/v1alpha1/topic.proto | 23 +- 16 files changed, 754 insertions(+), 376 deletions(-) rename backend/pkg/console/{incremental_alter_configs.go => alter_configs.go} (83%) rename backend/pkg/kafka/{incremental_alter_configs.go => alter_configs.go} (74%) diff --git a/backend/pkg/api/connect/integration/topic_test.go b/backend/pkg/api/connect/integration/topic_test.go index c33b25a7b..a6cd6c06f 100644 --- a/backend/pkg/api/connect/integration/topic_test.go +++ b/backend/pkg/api/connect/integration/topic_test.go @@ -855,3 +855,261 @@ func (s *APISuite) TestUpdateTopicConfiguration() { assert.Error(err) }) } + +func (s *APISuite) TestSetTopicConfiguration() { + t := s.T() + require := require.New(t) + assert := assert.New(t) + + t.Run("set topic configuration of a valid topic (connect-go)", func(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), 12*time.Second) + defer cancel() + + // 1. Create new topic + topicName := "console-integration-test-update-topic-config-valid-connect-go" + topicConfigs := map[string]*string{ + "cleanup.policy": kmsg.StringPtr("delete"), + "retention.bytes": kmsg.StringPtr("1000"), + "compression.type": kmsg.StringPtr("snappy"), + } + _, err := s.kafkaAdminClient.CreateTopic(ctx, 1, 1, topicConfigs, topicName) + require.NoError(err) + + defer func() { + ctx, cancel := context.WithTimeout(context.Background(), 6*time.Second) + defer cancel() + _, err := s.kafkaAdminClient.DeleteTopics(ctx, topicName) + assert.NoError(err) + }() + + // 2. Update two topic configs where one shall be removed and another set to a different value + client := v1alpha1connect.NewTopicServiceClient(http.DefaultClient, s.httpAddress()) + setConfigReq := &v1alpha1.SetTopicConfigurationsRequest{ + TopicName: topicName, + Configurations: []*v1alpha1.SetTopicConfigurationsRequest_SetConfiguration{ + { + Key: "cleanup.policy", + Value: kmsg.StringPtr("delete"), + }, + { + Key: "compression.type", + Value: kmsg.StringPtr("producer"), + }, + }, + } + response, err := client.SetTopicConfigurations(ctx, connect.NewRequest(setConfigReq)) + require.NoError(err) + require.NotNil(response.Msg.Configurations) + assert.GreaterOrEqual(len(response.Msg.Configurations), 10) // We expect at least 10 config props to be returned + + // 3. Compare the returned config values against our expectations + var cleanupPolicyConfig *v1alpha1.Topic_Configuration + var compressionTypeConfig *v1alpha1.Topic_Configuration + var retentionBytesConfig *v1alpha1.Topic_Configuration + for _, config := range response.Msg.Configurations { + switch config.Name { + case "cleanup.policy": + cleanupPolicyConfig = config + case "compression.type": + compressionTypeConfig = config + case "retention.bytes": + retentionBytesConfig = config + } + } + require.NotNil(cleanupPolicyConfig) + require.NotNil(compressionTypeConfig) + require.NotNil(retentionBytesConfig) + + assert.Equal("delete", *cleanupPolicyConfig.Value) + assert.Equal(v1alpha1.ConfigSource_CONFIG_SOURCE_DYNAMIC_TOPIC_CONFIG.String(), cleanupPolicyConfig.Source.String()) + + assert.Equal(kmsg.StringPtr("producer"), compressionTypeConfig.Value) + assert.Equal(v1alpha1.ConfigSource_CONFIG_SOURCE_DYNAMIC_TOPIC_CONFIG.String(), compressionTypeConfig.Source.String()) + + assert.Equal(v1alpha1.ConfigSource_CONFIG_SOURCE_DEFAULT_CONFIG.String(), retentionBytesConfig.Source.String()) + }) + + t.Run("set topic configuration of a valid topic (http)", func(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), 12*time.Second) + defer cancel() + + // 1. Create new topic + topicName := "console-integration-test-update-topic-config-valid-http" + topicConfigs := map[string]*string{ + "cleanup.policy": kmsg.StringPtr("delete"), + "retention.bytes": kmsg.StringPtr("1000"), + "compression.type": kmsg.StringPtr("snappy"), + } + _, err := s.kafkaAdminClient.CreateTopic(ctx, 1, 1, topicConfigs, topicName) + require.NoError(err) + + defer func() { + ctx, cancel := context.WithTimeout(context.Background(), 6*time.Second) + defer cancel() + _, err := s.kafkaAdminClient.DeleteTopics(ctx, topicName) + assert.NoError(err) + }() + + // 2. Update two topic configs where one shall be removed and another set to a different value + type setTopicConfigRequest struct { + Key string `json:"key"` + Value *string `json:"value"` + } + type setTopicConfigResponse struct { + ConfigSynonyms []any `json:"config_synonyms"` + Documentation string `json:"documentation"` + IsReadOnly bool `json:"is_read_only"` + IsSensitive bool `json:"is_sensitive"` + Name string `json:"name"` + Source string `json:"source"` + Type string `json:"type"` + Value *string `json:"value"` + } + + var httpRes []setTopicConfigResponse + httpReq := []setTopicConfigRequest{ + { + Key: "cleanup.policy", + Value: kmsg.StringPtr("delete"), + }, + { + Key: "compression.type", + Value: kmsg.StringPtr("producer"), + }, + } + + var errResponse string + err = requests. + URL(s.httpAddress() + fmt.Sprintf("/v1alpha1/topics/%v/configurations", topicName)). + BodyJSON(&httpReq). + ToJSON(&httpRes). + Put(). + AddValidator(requests.ValidatorHandler( + requests.CheckStatus(http.StatusOK), + requests.ToString(&errResponse), + )). + Fetch(ctx) + assert.Empty(errResponse) + require.NoError(err) + require.NotNil(httpRes) + assert.GreaterOrEqual(len(httpRes), 10) // We expect at least 10 config props to be returned + + // 3. Compare the returned config values against our expectations + var cleanupPolicyConfig *setTopicConfigResponse + var compressionTypeConfig *setTopicConfigResponse + var retentionBytesConfig *setTopicConfigResponse + for _, config := range httpRes { + copiedConfig := config + switch config.Name { + case "cleanup.policy": + cleanupPolicyConfig = &copiedConfig + case "compression.type": + compressionTypeConfig = &copiedConfig + case "retention.bytes": + retentionBytesConfig = &copiedConfig + } + } + require.NotNil(cleanupPolicyConfig) + require.NotNil(compressionTypeConfig) + require.NotNil(retentionBytesConfig) + + assert.Equal("delete", *cleanupPolicyConfig.Value) + assert.Equal(v1alpha1.ConfigSource_CONFIG_SOURCE_DYNAMIC_TOPIC_CONFIG.String(), cleanupPolicyConfig.Source) + + assert.Equal("producer", *compressionTypeConfig.Value) + assert.Equal(v1alpha1.ConfigSource_CONFIG_SOURCE_DYNAMIC_TOPIC_CONFIG.String(), compressionTypeConfig.Source) + + assert.Equal(v1alpha1.ConfigSource_CONFIG_SOURCE_DEFAULT_CONFIG.String(), retentionBytesConfig.Source) + }) + + t.Run("set topic configuration with an invalid request (connect-go)", func(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), 12*time.Second) + defer cancel() + + // 1. Create new topic + topicName := "console-integration-test-update-topic-config-invalid-connect-go" + topicConfigs := map[string]*string{ + "cleanup.policy": kmsg.StringPtr("delete"), + "retention.bytes": kmsg.StringPtr("1000"), + "compression.type": kmsg.StringPtr("snappy"), + } + _, err := s.kafkaAdminClient.CreateTopic(ctx, 1, 1, topicConfigs, topicName) + require.NoError(err) + + defer func() { + ctx, cancel := context.WithTimeout(context.Background(), 6*time.Second) + defer cancel() + _, err := s.kafkaAdminClient.DeleteTopics(ctx, topicName) + assert.NoError(err) + }() + + // 2. Send alter config request with invalid config key + client := v1alpha1connect.NewTopicServiceClient(http.DefaultClient, s.httpAddress()) + setConfigReq := &v1alpha1.SetTopicConfigurationsRequest{ + TopicName: topicName, + Configurations: []*v1alpha1.SetTopicConfigurationsRequest_SetConfiguration{ + { + Key: "key-doesnt-exist", + Value: kmsg.StringPtr("delete"), + }, + }, + } + response, err := client.SetTopicConfigurations(ctx, connect.NewRequest(setConfigReq)) + assert.Error(err) + assert.Nil(response) + assert.Equal(connect.CodeInternal.String(), connect.CodeOf(err).String()) + }) + + t.Run("set topic configuration for a non existent topic (connect-go)", func(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), 12*time.Second) + defer cancel() + + // 2. Send alter config request with invalid config key + client := v1alpha1connect.NewTopicServiceClient(http.DefaultClient, s.httpAddress()) + setConfigReq := &v1alpha1.SetTopicConfigurationsRequest{ + TopicName: "topic-does-not-exist", + Configurations: []*v1alpha1.SetTopicConfigurationsRequest_SetConfiguration{ + { + Key: "cleanup.policy", + Value: kmsg.StringPtr("delete"), + }, + }, + } + response, err := client.SetTopicConfigurations(ctx, connect.NewRequest(setConfigReq)) + assert.Error(err) + assert.Nil(response) + assert.Equal(connect.CodeNotFound.String(), connect.CodeOf(err).String()) + }) + + t.Run("set topic configuration for a non existent topic (http)", func(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), 12*time.Second) + defer cancel() + + // 2. Update two topic configs where one shall be removed and another set to a different value + type setTopicConfigRequest struct { + Key string `json:"key"` + Value *string `json:"value"` + } + httpReq := []setTopicConfigRequest{ + { + Key: "cleanup.policy", + Value: kmsg.StringPtr("delete"), + }, + } + + var errResponse string + err := requests. + URL(s.httpAddress() + fmt.Sprintf("/v1alpha1/topics/%v/configurations", "topic-does-not-exist")). + BodyJSON(&httpReq). + Put(). + AddValidator(requests.ValidatorHandler( + requests.CheckStatus(http.StatusOK), + requests.ToString(&errResponse), + )). + Fetch(ctx) + assert.NotEmpty(errResponse) + require.Error(err) + assert.Contains(errResponse, "RESOURCE_NOT_FOUND") + assert.Truef(requests.HasStatusErr(err, http.StatusNotFound), "Status code should be 404") + }) +} diff --git a/backend/pkg/api/connect/service/topic/mapper.go b/backend/pkg/api/connect/service/topic/mapper.go index a82127eb1..8b15d81a9 100644 --- a/backend/pkg/api/connect/service/topic/mapper.go +++ b/backend/pkg/api/connect/service/topic/mapper.go @@ -195,3 +195,26 @@ func (*kafkaClientMapper) kafkaTopicMetadataToProto(topicMetadata kmsg.MetadataR ReplicationFactor: int32(replicationFactor), } } + +func (k *kafkaClientMapper) setTopicConfigurationsToKafka(req *v1alpha1.SetTopicConfigurationsRequest) *kmsg.AlterConfigsRequest { + alterConfigResource := kmsg.NewAlterConfigsRequestResource() + alterConfigResource.ResourceType = kmsg.ConfigResourceTypeTopic + alterConfigResource.ResourceName = req.TopicName + + for _, config := range req.Configurations { + alterConfigResource.Configs = append(alterConfigResource.Configs, k.setTopicConfigurationsResourceToKafka(config)) + } + + kafkaReq := kmsg.NewAlterConfigsRequest() + kafkaReq.Resources = []kmsg.AlterConfigsRequestResource{alterConfigResource} + + return &kafkaReq +} + +func (*kafkaClientMapper) setTopicConfigurationsResourceToKafka(req *v1alpha1.SetTopicConfigurationsRequest_SetConfiguration) kmsg.AlterConfigsRequestResourceConfig { + kafkaReq := kmsg.NewAlterConfigsRequestResourceConfig() + kafkaReq.Name = req.Key + kafkaReq.Value = req.Value + + return kafkaReq +} diff --git a/backend/pkg/api/connect/service/topic/service.go b/backend/pkg/api/connect/service/topic/service.go index 8bb8d178a..70448aeb2 100644 --- a/backend/pkg/api/connect/service/topic/service.go +++ b/backend/pkg/api/connect/service/topic/service.go @@ -25,7 +25,6 @@ import ( apierrors "github.com/redpanda-data/console/backend/pkg/api/connect/errors" "github.com/redpanda-data/console/backend/pkg/config" "github.com/redpanda-data/console/backend/pkg/console" - commonv1alpha1 "github.com/redpanda-data/console/backend/pkg/protogen/redpanda/api/common/v1alpha1" v1alpha1 "github.com/redpanda-data/console/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1" "github.com/redpanda-data/console/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/dataplanev1alpha1connect" ) @@ -230,16 +229,82 @@ func (s *Service) UpdateTopicConfigurations(ctx context.Context, req *connect.Re return connect.NewResponse(&v1alpha1.UpdateTopicConfigurationsResponse{Configurations: protoTopicConfigs}), nil } -// SetTopicConfiguration applies the given configuration to a topic, which may reset +// SetTopicConfigurations applies the given configuration to a topic, which may reset // or overwrite existing configurations that are not provided as part of the request. // If you want to patch certain configurations use UpdateTopicConfiguration instead. -func (*Service) SetTopicConfiguration(context.Context, *connect.Request[v1alpha1.SetTopicConfigurationRequest]) (*connect.Response[v1alpha1.SetTopicConfigurationResponse], error) { - return nil, apierrors.NewConnectError( - connect.CodeUnimplemented, - errors.New("this endpoint is not yet implemented"), - apierrors.NewErrorInfo(commonv1alpha1.Reason_REASON_INVALID_INPUT.String()), - apierrors.NewHelp(apierrors.NewHelpLinkConsoleReferenceConfig()), - ) +func (s *Service) SetTopicConfigurations(ctx context.Context, req *connect.Request[v1alpha1.SetTopicConfigurationsRequest]) (*connect.Response[v1alpha1.SetTopicConfigurationsResponse], error) { + // 1. Map proto request to a Kafka request that can be processed by the Kafka client. + kafkaReq := s.mapper.setTopicConfigurationsToKafka(req.Msg) + + // 2. Send incremental alter request and handle errors + alterConfigsRes, err := s.consoleSvc.AlterConfigs(ctx, kafkaReq) + if err != nil { + return nil, apierrors.NewConnectError( + connect.CodeInternal, + err, + apierrors.NewErrorInfo(v1alpha1.Reason_REASON_KAFKA_API_ERROR.String(), apierrors.KeyValsFromKafkaError(err)...), + ) + } + + if len(alterConfigsRes.Resources) != 1 { + // Should never happen since we only edit configs for one topic, but if it happens we want to err early. + return nil, apierrors.NewConnectError( + connect.CodeInternal, + errors.New("unexpected number of resources in alter configs response"), + apierrors.NewErrorInfo(v1alpha1.Reason_REASON_CONSOLE_ERROR.String(), apierrors.KeyVal{ + Key: "retrieved_results", + Value: strconv.Itoa(len(alterConfigsRes.Resources)), + }), + ) + } + + // Check for inner Kafka error + result := alterConfigsRes.Resources[0] + if connectErr := s.handleKafkaTopicError(result.ErrorCode, result.ErrorMessage); connectErr != nil { + return nil, connectErr + } + + // 3. Now let's describe the topic config and return the entire topic configuration. + // This is very similar to GetTopicConfigurations, but we handle errors differently + describeKafkaReq := s.mapper.describeTopicConfigsToKafka(&v1alpha1.GetTopicConfigurationsRequest{TopicName: req.Msg.TopicName}) + configsRes, err := s.consoleSvc.DescribeConfigs(ctx, &describeKafkaReq) + if err != nil { + return nil, apierrors.NewConnectError( + connect.CodeInternal, + fmt.Errorf("failed to describe topic configs after successfully applying config change: %w", err), + apierrors.NewErrorInfo(v1alpha1.Reason_REASON_KAFKA_API_ERROR.String(), apierrors.KeyValsFromKafkaError(err)...), + ) + } + + if len(configsRes.Resources) != 1 { + // Should never happen since we only describe one topic, but if it happens we want to err early. + return nil, apierrors.NewConnectError( + connect.CodeInternal, + errors.New("failed to describe topic configs after successfully applying config change: unexpected number of resources in describe configs response"), + apierrors.NewErrorInfo(v1alpha1.Reason_REASON_CONSOLE_ERROR.String(), apierrors.KeyVal{ + Key: "retrieved_resources", + Value: strconv.Itoa(len(configsRes.Resources)), + }), + ) + } + + // Check for inner Kafka error + describeConfigsResult := configsRes.Resources[0] + if connectErr := s.handleKafkaTopicError(describeConfigsResult.ErrorCode, describeConfigsResult.ErrorMessage); connectErr != nil { + return nil, connectErr + } + + // 4. Convert describe topic config response into the proto response + protoTopicConfigs, err := s.mapper.describeTopicConfigsToProto(describeConfigsResult.Configs) + if err != nil { + return nil, apierrors.NewConnectError( + connect.CodeInternal, + err, + apierrors.NewErrorInfo(v1alpha1.Reason_REASON_CONSOLE_ERROR.String()), + ) + } + + return connect.NewResponse(&v1alpha1.SetTopicConfigurationsResponse{Configurations: protoTopicConfigs}), nil } // NewService creates a new user service handler. diff --git a/backend/pkg/console/incremental_alter_configs.go b/backend/pkg/console/alter_configs.go similarity index 83% rename from backend/pkg/console/incremental_alter_configs.go rename to backend/pkg/console/alter_configs.go index 61a4432d5..501c75d29 100644 --- a/backend/pkg/console/incremental_alter_configs.go +++ b/backend/pkg/console/alter_configs.go @@ -68,3 +68,10 @@ func (s *Service) IncrementalAlterConfigs(ctx context.Context, func (s *Service) IncrementalAlterConfigsKafka(ctx context.Context, req *kmsg.IncrementalAlterConfigsRequest) (*kmsg.IncrementalAlterConfigsResponse, error) { return s.kafkaSvc.IncrementalAlterConfigs(ctx, req) } + +// AlterConfigs proxies the request/response to set configs (not incrementally) via the Kafka API. The difference +// between AlterConfigs and IncrementalAlterConfigs is that AlterConfigs sets the entire configuration so that +// all properties that are not set as part of this request will be reset to their default values. +func (s *Service) AlterConfigs(ctx context.Context, req *kmsg.AlterConfigsRequest) (*kmsg.AlterConfigsResponse, error) { + return s.kafkaSvc.AlterConfigs(ctx, req) +} diff --git a/backend/pkg/console/servicer.go b/backend/pkg/console/servicer.go index 04295a214..c2c6e8202 100644 --- a/backend/pkg/console/servicer.go +++ b/backend/pkg/console/servicer.go @@ -91,4 +91,6 @@ type Servicer interface { GetMetadata(ctx context.Context, metadataReq *kmsg.MetadataRequest) (*kmsg.MetadataResponse, error) // IncrementalAlterConfigsKafka proxies the request/response to incrementally alter configs via the Kafka API. IncrementalAlterConfigsKafka(ctx context.Context, req *kmsg.IncrementalAlterConfigsRequest) (*kmsg.IncrementalAlterConfigsResponse, error) + // AlterConfigs proxies the request/response to set configs (not incrementally) via the Kafka API. + AlterConfigs(ctx context.Context, req *kmsg.AlterConfigsRequest) (*kmsg.AlterConfigsResponse, error) } diff --git a/backend/pkg/kafka/incremental_alter_configs.go b/backend/pkg/kafka/alter_configs.go similarity index 74% rename from backend/pkg/kafka/incremental_alter_configs.go rename to backend/pkg/kafka/alter_configs.go index addc28487..15ad433f1 100644 --- a/backend/pkg/kafka/incremental_alter_configs.go +++ b/backend/pkg/kafka/alter_configs.go @@ -19,3 +19,8 @@ import ( func (s *Service) IncrementalAlterConfigs(ctx context.Context, req *kmsg.IncrementalAlterConfigsRequest) (*kmsg.IncrementalAlterConfigsResponse, error) { return req.RequestWith(ctx, s.KafkaClient) } + +// AlterConfigs sends a request to set a Kafka resource's (broker, topics, ...) configuration. +func (s *Service) AlterConfigs(ctx context.Context, req *kmsg.AlterConfigsRequest) (*kmsg.AlterConfigsResponse, error) { + return req.RequestWith(ctx, s.KafkaClient) +} diff --git a/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/dataplanev1alpha1connect/topic.connect.go b/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/dataplanev1alpha1connect/topic.connect.go index 8fb8fe895..058c9788a 100644 --- a/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/dataplanev1alpha1connect/topic.connect.go +++ b/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/dataplanev1alpha1connect/topic.connect.go @@ -49,9 +49,9 @@ const ( // TopicServiceUpdateTopicConfigurationsProcedure is the fully-qualified name of the TopicService's // UpdateTopicConfigurations RPC. TopicServiceUpdateTopicConfigurationsProcedure = "/redpanda.api.dataplane.v1alpha1.TopicService/UpdateTopicConfigurations" - // TopicServiceSetTopicConfigurationProcedure is the fully-qualified name of the TopicService's - // SetTopicConfiguration RPC. - TopicServiceSetTopicConfigurationProcedure = "/redpanda.api.dataplane.v1alpha1.TopicService/SetTopicConfiguration" + // TopicServiceSetTopicConfigurationsProcedure is the fully-qualified name of the TopicService's + // SetTopicConfigurations RPC. + TopicServiceSetTopicConfigurationsProcedure = "/redpanda.api.dataplane.v1alpha1.TopicService/SetTopicConfigurations" ) // These variables are the protoreflect.Descriptor objects for the RPCs defined in this package. @@ -62,7 +62,7 @@ var ( topicServiceDeleteTopicMethodDescriptor = topicServiceServiceDescriptor.Methods().ByName("DeleteTopic") topicServiceGetTopicConfigurationsMethodDescriptor = topicServiceServiceDescriptor.Methods().ByName("GetTopicConfigurations") topicServiceUpdateTopicConfigurationsMethodDescriptor = topicServiceServiceDescriptor.Methods().ByName("UpdateTopicConfigurations") - topicServiceSetTopicConfigurationMethodDescriptor = topicServiceServiceDescriptor.Methods().ByName("SetTopicConfiguration") + topicServiceSetTopicConfigurationsMethodDescriptor = topicServiceServiceDescriptor.Methods().ByName("SetTopicConfigurations") ) // TopicServiceClient is a client for the redpanda.api.dataplane.v1alpha1.TopicService service. @@ -72,7 +72,7 @@ type TopicServiceClient interface { DeleteTopic(context.Context, *connect.Request[v1alpha1.DeleteTopicRequest]) (*connect.Response[v1alpha1.DeleteTopicResponse], error) GetTopicConfigurations(context.Context, *connect.Request[v1alpha1.GetTopicConfigurationsRequest]) (*connect.Response[v1alpha1.GetTopicConfigurationsResponse], error) UpdateTopicConfigurations(context.Context, *connect.Request[v1alpha1.UpdateTopicConfigurationsRequest]) (*connect.Response[v1alpha1.UpdateTopicConfigurationsResponse], error) - SetTopicConfiguration(context.Context, *connect.Request[v1alpha1.SetTopicConfigurationRequest]) (*connect.Response[v1alpha1.SetTopicConfigurationResponse], error) + SetTopicConfigurations(context.Context, *connect.Request[v1alpha1.SetTopicConfigurationsRequest]) (*connect.Response[v1alpha1.SetTopicConfigurationsResponse], error) } // NewTopicServiceClient constructs a client for the redpanda.api.dataplane.v1alpha1.TopicService @@ -115,10 +115,10 @@ func NewTopicServiceClient(httpClient connect.HTTPClient, baseURL string, opts . connect.WithSchema(topicServiceUpdateTopicConfigurationsMethodDescriptor), connect.WithClientOptions(opts...), ), - setTopicConfiguration: connect.NewClient[v1alpha1.SetTopicConfigurationRequest, v1alpha1.SetTopicConfigurationResponse]( + setTopicConfigurations: connect.NewClient[v1alpha1.SetTopicConfigurationsRequest, v1alpha1.SetTopicConfigurationsResponse]( httpClient, - baseURL+TopicServiceSetTopicConfigurationProcedure, - connect.WithSchema(topicServiceSetTopicConfigurationMethodDescriptor), + baseURL+TopicServiceSetTopicConfigurationsProcedure, + connect.WithSchema(topicServiceSetTopicConfigurationsMethodDescriptor), connect.WithClientOptions(opts...), ), } @@ -131,7 +131,7 @@ type topicServiceClient struct { deleteTopic *connect.Client[v1alpha1.DeleteTopicRequest, v1alpha1.DeleteTopicResponse] getTopicConfigurations *connect.Client[v1alpha1.GetTopicConfigurationsRequest, v1alpha1.GetTopicConfigurationsResponse] updateTopicConfigurations *connect.Client[v1alpha1.UpdateTopicConfigurationsRequest, v1alpha1.UpdateTopicConfigurationsResponse] - setTopicConfiguration *connect.Client[v1alpha1.SetTopicConfigurationRequest, v1alpha1.SetTopicConfigurationResponse] + setTopicConfigurations *connect.Client[v1alpha1.SetTopicConfigurationsRequest, v1alpha1.SetTopicConfigurationsResponse] } // CreateTopic calls redpanda.api.dataplane.v1alpha1.TopicService.CreateTopic. @@ -160,9 +160,9 @@ func (c *topicServiceClient) UpdateTopicConfigurations(ctx context.Context, req return c.updateTopicConfigurations.CallUnary(ctx, req) } -// SetTopicConfiguration calls redpanda.api.dataplane.v1alpha1.TopicService.SetTopicConfiguration. -func (c *topicServiceClient) SetTopicConfiguration(ctx context.Context, req *connect.Request[v1alpha1.SetTopicConfigurationRequest]) (*connect.Response[v1alpha1.SetTopicConfigurationResponse], error) { - return c.setTopicConfiguration.CallUnary(ctx, req) +// SetTopicConfigurations calls redpanda.api.dataplane.v1alpha1.TopicService.SetTopicConfigurations. +func (c *topicServiceClient) SetTopicConfigurations(ctx context.Context, req *connect.Request[v1alpha1.SetTopicConfigurationsRequest]) (*connect.Response[v1alpha1.SetTopicConfigurationsResponse], error) { + return c.setTopicConfigurations.CallUnary(ctx, req) } // TopicServiceHandler is an implementation of the redpanda.api.dataplane.v1alpha1.TopicService @@ -173,7 +173,7 @@ type TopicServiceHandler interface { DeleteTopic(context.Context, *connect.Request[v1alpha1.DeleteTopicRequest]) (*connect.Response[v1alpha1.DeleteTopicResponse], error) GetTopicConfigurations(context.Context, *connect.Request[v1alpha1.GetTopicConfigurationsRequest]) (*connect.Response[v1alpha1.GetTopicConfigurationsResponse], error) UpdateTopicConfigurations(context.Context, *connect.Request[v1alpha1.UpdateTopicConfigurationsRequest]) (*connect.Response[v1alpha1.UpdateTopicConfigurationsResponse], error) - SetTopicConfiguration(context.Context, *connect.Request[v1alpha1.SetTopicConfigurationRequest]) (*connect.Response[v1alpha1.SetTopicConfigurationResponse], error) + SetTopicConfigurations(context.Context, *connect.Request[v1alpha1.SetTopicConfigurationsRequest]) (*connect.Response[v1alpha1.SetTopicConfigurationsResponse], error) } // NewTopicServiceHandler builds an HTTP handler from the service implementation. It returns the @@ -212,10 +212,10 @@ func NewTopicServiceHandler(svc TopicServiceHandler, opts ...connect.HandlerOpti connect.WithSchema(topicServiceUpdateTopicConfigurationsMethodDescriptor), connect.WithHandlerOptions(opts...), ) - topicServiceSetTopicConfigurationHandler := connect.NewUnaryHandler( - TopicServiceSetTopicConfigurationProcedure, - svc.SetTopicConfiguration, - connect.WithSchema(topicServiceSetTopicConfigurationMethodDescriptor), + topicServiceSetTopicConfigurationsHandler := connect.NewUnaryHandler( + TopicServiceSetTopicConfigurationsProcedure, + svc.SetTopicConfigurations, + connect.WithSchema(topicServiceSetTopicConfigurationsMethodDescriptor), connect.WithHandlerOptions(opts...), ) return "/redpanda.api.dataplane.v1alpha1.TopicService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -230,8 +230,8 @@ func NewTopicServiceHandler(svc TopicServiceHandler, opts ...connect.HandlerOpti topicServiceGetTopicConfigurationsHandler.ServeHTTP(w, r) case TopicServiceUpdateTopicConfigurationsProcedure: topicServiceUpdateTopicConfigurationsHandler.ServeHTTP(w, r) - case TopicServiceSetTopicConfigurationProcedure: - topicServiceSetTopicConfigurationHandler.ServeHTTP(w, r) + case TopicServiceSetTopicConfigurationsProcedure: + topicServiceSetTopicConfigurationsHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -261,6 +261,6 @@ func (UnimplementedTopicServiceHandler) UpdateTopicConfigurations(context.Contex return nil, connect.NewError(connect.CodeUnimplemented, errors.New("redpanda.api.dataplane.v1alpha1.TopicService.UpdateTopicConfigurations is not implemented")) } -func (UnimplementedTopicServiceHandler) SetTopicConfiguration(context.Context, *connect.Request[v1alpha1.SetTopicConfigurationRequest]) (*connect.Response[v1alpha1.SetTopicConfigurationResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("redpanda.api.dataplane.v1alpha1.TopicService.SetTopicConfiguration is not implemented")) +func (UnimplementedTopicServiceHandler) SetTopicConfigurations(context.Context, *connect.Request[v1alpha1.SetTopicConfigurationsRequest]) (*connect.Response[v1alpha1.SetTopicConfigurationsResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("redpanda.api.dataplane.v1alpha1.TopicService.SetTopicConfigurations is not implemented")) } diff --git a/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/dataplanev1alpha1connect/topic.connect.gw.go b/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/dataplanev1alpha1connect/topic.connect.gw.go index 5ce04dcee..123bc71b2 100644 --- a/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/dataplanev1alpha1connect/topic.connect.gw.go +++ b/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/dataplanev1alpha1connect/topic.connect.gw.go @@ -22,7 +22,7 @@ type TopicServiceGatewayServer struct { deleteTopic connect_gateway.UnaryHandler[v1alpha1.DeleteTopicRequest, v1alpha1.DeleteTopicResponse] getTopicConfigurations connect_gateway.UnaryHandler[v1alpha1.GetTopicConfigurationsRequest, v1alpha1.GetTopicConfigurationsResponse] updateTopicConfigurations connect_gateway.UnaryHandler[v1alpha1.UpdateTopicConfigurationsRequest, v1alpha1.UpdateTopicConfigurationsResponse] - setTopicConfiguration connect_gateway.UnaryHandler[v1alpha1.SetTopicConfigurationRequest, v1alpha1.SetTopicConfigurationResponse] + setTopicConfigurations connect_gateway.UnaryHandler[v1alpha1.SetTopicConfigurationsRequest, v1alpha1.SetTopicConfigurationsResponse] } // NewTopicServiceGatewayServer constructs a Connect-Gateway gRPC server for the TopicService @@ -34,7 +34,7 @@ func NewTopicServiceGatewayServer(svc TopicServiceHandler, opts ...connect_gatew deleteTopic: connect_gateway.NewUnaryHandler(TopicServiceDeleteTopicProcedure, svc.DeleteTopic, opts...), getTopicConfigurations: connect_gateway.NewUnaryHandler(TopicServiceGetTopicConfigurationsProcedure, svc.GetTopicConfigurations, opts...), updateTopicConfigurations: connect_gateway.NewUnaryHandler(TopicServiceUpdateTopicConfigurationsProcedure, svc.UpdateTopicConfigurations, opts...), - setTopicConfiguration: connect_gateway.NewUnaryHandler(TopicServiceSetTopicConfigurationProcedure, svc.SetTopicConfiguration, opts...), + setTopicConfigurations: connect_gateway.NewUnaryHandler(TopicServiceSetTopicConfigurationsProcedure, svc.SetTopicConfigurations, opts...), } } @@ -58,8 +58,8 @@ func (s *TopicServiceGatewayServer) UpdateTopicConfigurations(ctx context.Contex return s.updateTopicConfigurations(ctx, req) } -func (s *TopicServiceGatewayServer) SetTopicConfiguration(ctx context.Context, req *v1alpha1.SetTopicConfigurationRequest) (*v1alpha1.SetTopicConfigurationResponse, error) { - return s.setTopicConfiguration(ctx, req) +func (s *TopicServiceGatewayServer) SetTopicConfigurations(ctx context.Context, req *v1alpha1.SetTopicConfigurationsRequest) (*v1alpha1.SetTopicConfigurationsResponse, error) { + return s.setTopicConfigurations(ctx, req) } // RegisterTopicServiceHandlerGatewayServer registers the Connect handlers for the TopicService diff --git a/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/topic.pb.go b/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/topic.pb.go index 8c93892ac..1ebd3d58b 100644 --- a/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/topic.pb.go +++ b/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/topic.pb.go @@ -569,17 +569,17 @@ func (x *UpdateTopicConfigurationsResponse) GetConfigurations() []*Topic_Configu return nil } -type SetTopicConfigurationRequest struct { +type SetTopicConfigurationsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TopicName string `protobuf:"bytes,1,opt,name=topic_name,json=topicName,proto3" json:"topic_name,omitempty"` - Configuration []*SetTopicConfigurationRequest_SetConfiguration `protobuf:"bytes,2,rep,name=configuration,proto3" json:"configuration,omitempty"` + TopicName string `protobuf:"bytes,1,opt,name=topic_name,json=topicName,proto3" json:"topic_name,omitempty"` + Configurations []*SetTopicConfigurationsRequest_SetConfiguration `protobuf:"bytes,2,rep,name=configurations,proto3" json:"configurations,omitempty"` } -func (x *SetTopicConfigurationRequest) Reset() { - *x = SetTopicConfigurationRequest{} +func (x *SetTopicConfigurationsRequest) Reset() { + *x = SetTopicConfigurationsRequest{} if protoimpl.UnsafeEnabled { mi := &file_redpanda_api_dataplane_v1alpha1_topic_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -587,13 +587,13 @@ func (x *SetTopicConfigurationRequest) Reset() { } } -func (x *SetTopicConfigurationRequest) String() string { +func (x *SetTopicConfigurationsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SetTopicConfigurationRequest) ProtoMessage() {} +func (*SetTopicConfigurationsRequest) ProtoMessage() {} -func (x *SetTopicConfigurationRequest) ProtoReflect() protoreflect.Message { +func (x *SetTopicConfigurationsRequest) ProtoReflect() protoreflect.Message { mi := &file_redpanda_api_dataplane_v1alpha1_topic_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -605,35 +605,35 @@ func (x *SetTopicConfigurationRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SetTopicConfigurationRequest.ProtoReflect.Descriptor instead. -func (*SetTopicConfigurationRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use SetTopicConfigurationsRequest.ProtoReflect.Descriptor instead. +func (*SetTopicConfigurationsRequest) Descriptor() ([]byte, []int) { return file_redpanda_api_dataplane_v1alpha1_topic_proto_rawDescGZIP(), []int{11} } -func (x *SetTopicConfigurationRequest) GetTopicName() string { +func (x *SetTopicConfigurationsRequest) GetTopicName() string { if x != nil { return x.TopicName } return "" } -func (x *SetTopicConfigurationRequest) GetConfiguration() []*SetTopicConfigurationRequest_SetConfiguration { +func (x *SetTopicConfigurationsRequest) GetConfigurations() []*SetTopicConfigurationsRequest_SetConfiguration { if x != nil { - return x.Configuration + return x.Configurations } return nil } -type SetTopicConfigurationResponse struct { +type SetTopicConfigurationsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Configuration []*Topic_Configuration `protobuf:"bytes,1,rep,name=configuration,proto3" json:"configuration,omitempty"` + Configurations []*Topic_Configuration `protobuf:"bytes,1,rep,name=configurations,proto3" json:"configurations,omitempty"` } -func (x *SetTopicConfigurationResponse) Reset() { - *x = SetTopicConfigurationResponse{} +func (x *SetTopicConfigurationsResponse) Reset() { + *x = SetTopicConfigurationsResponse{} if protoimpl.UnsafeEnabled { mi := &file_redpanda_api_dataplane_v1alpha1_topic_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -641,13 +641,13 @@ func (x *SetTopicConfigurationResponse) Reset() { } } -func (x *SetTopicConfigurationResponse) String() string { +func (x *SetTopicConfigurationsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SetTopicConfigurationResponse) ProtoMessage() {} +func (*SetTopicConfigurationsResponse) ProtoMessage() {} -func (x *SetTopicConfigurationResponse) ProtoReflect() protoreflect.Message { +func (x *SetTopicConfigurationsResponse) ProtoReflect() protoreflect.Message { mi := &file_redpanda_api_dataplane_v1alpha1_topic_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -659,14 +659,14 @@ func (x *SetTopicConfigurationResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SetTopicConfigurationResponse.ProtoReflect.Descriptor instead. -func (*SetTopicConfigurationResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use SetTopicConfigurationsResponse.ProtoReflect.Descriptor instead. +func (*SetTopicConfigurationsResponse) Descriptor() ([]byte, []int) { return file_redpanda_api_dataplane_v1alpha1_topic_proto_rawDescGZIP(), []int{12} } -func (x *SetTopicConfigurationResponse) GetConfiguration() []*Topic_Configuration { +func (x *SetTopicConfigurationsResponse) GetConfigurations() []*Topic_Configuration { if x != nil { - return x.Configuration + return x.Configurations } return nil } @@ -1160,17 +1160,17 @@ func (x *UpdateTopicConfigurationsRequest_UpdateConfiguration) GetOperation() Co return ConfigAlterOperation_CONFIG_ALTER_OPERATION_UNSPECIFIED } -type SetTopicConfigurationRequest_SetConfiguration struct { +type SetTopicConfigurationsRequest_SetConfiguration struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value *string `protobuf:"bytes,2,opt,name=value,proto3,oneof" json:"value,omitempty"` } -func (x *SetTopicConfigurationRequest_SetConfiguration) Reset() { - *x = SetTopicConfigurationRequest_SetConfiguration{} +func (x *SetTopicConfigurationsRequest_SetConfiguration) Reset() { + *x = SetTopicConfigurationsRequest_SetConfiguration{} if protoimpl.UnsafeEnabled { mi := &file_redpanda_api_dataplane_v1alpha1_topic_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1178,13 +1178,13 @@ func (x *SetTopicConfigurationRequest_SetConfiguration) Reset() { } } -func (x *SetTopicConfigurationRequest_SetConfiguration) String() string { +func (x *SetTopicConfigurationsRequest_SetConfiguration) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SetTopicConfigurationRequest_SetConfiguration) ProtoMessage() {} +func (*SetTopicConfigurationsRequest_SetConfiguration) ProtoMessage() {} -func (x *SetTopicConfigurationRequest_SetConfiguration) ProtoReflect() protoreflect.Message { +func (x *SetTopicConfigurationsRequest_SetConfiguration) ProtoReflect() protoreflect.Message { mi := &file_redpanda_api_dataplane_v1alpha1_topic_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1196,21 +1196,21 @@ func (x *SetTopicConfigurationRequest_SetConfiguration) ProtoReflect() protorefl return mi.MessageOf(x) } -// Deprecated: Use SetTopicConfigurationRequest_SetConfiguration.ProtoReflect.Descriptor instead. -func (*SetTopicConfigurationRequest_SetConfiguration) Descriptor() ([]byte, []int) { +// Deprecated: Use SetTopicConfigurationsRequest_SetConfiguration.ProtoReflect.Descriptor instead. +func (*SetTopicConfigurationsRequest_SetConfiguration) Descriptor() ([]byte, []int) { return file_redpanda_api_dataplane_v1alpha1_topic_proto_rawDescGZIP(), []int{11, 0} } -func (x *SetTopicConfigurationRequest_SetConfiguration) GetKey() string { +func (x *SetTopicConfigurationsRequest_SetConfiguration) GetKey() string { if x != nil { return x.Key } return "" } -func (x *SetTopicConfigurationRequest_SetConfiguration) GetValue() string { - if x != nil { - return x.Value +func (x *SetTopicConfigurationsRequest_SetConfiguration) GetValue() string { + if x != nil && x.Value != nil { + return *x.Value } return "" } @@ -1404,188 +1404,195 @@ var file_redpanda_api_dataplane_v1alpha1_topic_proto_rawDesc = []byte{ 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xef, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x74, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x72, 0x65, - 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, - 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3a, 0x0a, 0x10, 0x53, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7b, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, - 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x32, 0x9e, 0x11, 0x0a, 0x0c, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x80, 0x02, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, - 0x6f, 0x70, 0x69, 0x63, 0x12, 0x33, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x72, 0x65, 0x64, 0x70, - 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x85, 0x01, 0x92, 0x41, 0x63, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x54, 0x6f, - 0x70, 0x69, 0x63, 0x1a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x54, 0x6f, - 0x70, 0x69, 0x63, 0x2e, 0x4a, 0x42, 0x0a, 0x03, 0x32, 0x30, 0x31, 0x12, 0x3b, 0x0a, 0x0d, 0x54, - 0x6f, 0x70, 0x69, 0x63, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x28, - 0x1a, 0x26, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x05, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0xf2, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0x32, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, - 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x72, 0x65, 0x64, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x82, 0x02, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x77, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4f, 0x2e, + 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x49, + 0x0a, 0x10, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, + 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7e, 0x0a, 0x1e, 0x53, 0x65, 0x74, + 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0xf3, 0x11, 0x0a, 0x0c, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x80, 0x02, 0x0a, 0x0b, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x33, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x7b, 0x92, 0x41, 0x60, 0x12, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x54, 0x6f, 0x70, 0x69, 0x63, - 0x73, 0x1a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x4a, 0x44, - 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x3d, 0x0a, 0x02, 0x4f, 0x4b, 0x12, 0x37, 0x0a, 0x35, 0x1a, - 0x33, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, + 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x34, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0xd6, 0x02, 0x0a, - 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x33, 0x2e, 0x72, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x85, 0x01, 0x92, 0x41, 0x63, 0x12, 0x0c, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x20, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x1a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x20, 0x61, 0x20, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x4a, 0x42, 0x0a, 0x03, 0x32, 0x30, + 0x31, 0x12, 0x3b, 0x0a, 0x0d, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x28, 0x1a, 0x26, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x22, 0x10, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0xf2, 0x01, + 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0x32, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x34, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdb, 0x01, 0x92, 0x41, 0xb8, 0x01, 0x12, 0x14, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x20, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x1a, 0x30, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x4a, 0x29, 0x0a, 0x03, 0x32, 0x30, 0x34, 0x12, 0x22, 0x0a, - 0x1e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x12, - 0x00, 0x4a, 0x43, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x3c, 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, - 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x12, 0x16, - 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x97, 0x03, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x3e, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x33, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x3f, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xfb, 0x01, 0x92, 0x41, 0xb3, 0x01, 0x12, 0x18, 0x47, 0x65, 0x74, 0x20, 0x54, 0x6f, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7b, 0x92, 0x41, 0x60, 0x12, 0x0b, 0x4c, 0x69, 0x73, 0x74, + 0x20, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x1a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x73, 0x4a, 0x44, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x3d, 0x0a, 0x02, 0x4f, + 0x4b, 0x12, 0x37, 0x0a, 0x35, 0x1a, 0x33, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, + 0x12, 0x10, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x73, 0x12, 0xd6, 0x02, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6f, 0x70, + 0x69, 0x63, 0x12, 0x33, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, + 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdb, 0x01, + 0x92, 0x41, 0xb8, 0x01, 0x12, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x4b, + 0x61, 0x66, 0x6b, 0x61, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x1a, 0x30, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x20, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x4a, 0x29, 0x0a, 0x03, + 0x32, 0x30, 0x34, 0x12, 0x22, 0x0a, 0x1e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x77, 0x61, 0x73, + 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x12, 0x00, 0x4a, 0x43, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x3c, + 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, + 0x78, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x97, 0x03, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xfb, 0x01, 0x92, 0x41, 0xb3, 0x01, 0x12, 0x18, + 0x47, 0x65, 0x74, 0x20, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x19, 0x47, 0x65, 0x74, 0x20, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x1a, 0x19, 0x47, 0x65, 0x74, 0x20, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x50, 0x0a, + 0x6e, 0x73, 0x2e, 0x4a, 0x50, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x49, 0x0a, 0x02, 0x4f, 0x6b, + 0x12, 0x43, 0x0a, 0x41, 0x1a, 0x3f, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x2a, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, 0x09, + 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x62, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xc8, 0x03, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa3, 0x02, 0x92, 0x41, 0xcb, + 0x01, 0x12, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x20, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x2c, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, + 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4a, 0x53, 0x0a, 0x03, 0x32, + 0x30, 0x30, 0x12, 0x4c, 0x0a, 0x02, 0x4f, 0x6b, 0x12, 0x46, 0x0a, 0x44, 0x1a, 0x42, 0x2e, 0x72, + 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4a, 0x2a, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, + 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x4e, 0x3a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x62, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x32, 0x2c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0xac, 0x04, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x2e, 0x72, 0x65, + 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, + 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x72, 0x65, + 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, + 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x90, 0x03, 0x92, + 0x41, 0xb8, 0x02, 0x12, 0x18, 0x53, 0x65, 0x74, 0x20, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x9d, 0x01, + 0x53, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x20, 0x73, + 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x2e, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x66, 0x61, 0x6c, 0x6c, 0x2d, + 0x62, 0x61, 0x63, 0x6b, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x4a, 0x50, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x49, 0x0a, 0x02, 0x4f, 0x6b, 0x12, 0x43, 0x0a, 0x41, 0x1a, 0x3f, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x2e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x2a, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x3e, 0x62, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x6f, 0x70, + 0x4e, 0x3a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x62, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x1a, 0x2c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0xc8, 0x03, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x2e, - 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x42, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa3, 0x02, 0x92, 0x41, 0xcb, 0x01, 0x12, 0x1a, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x20, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x2c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, - 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4a, 0x53, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x4c, 0x0a, 0x02, - 0x4f, 0x6b, 0x12, 0x46, 0x0a, 0x44, 0x1a, 0x42, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, - 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, - 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x2a, 0x0a, 0x03, 0x34, 0x30, - 0x34, 0x12, 0x23, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, - 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x3a, 0x0e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x0e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0x2c, 0x2f, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd7, 0x03, 0x0a, 0x15, 0x53, - 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0xbe, 0x02, 0x92, 0x41, 0xf8, 0x01, 0x12, 0x17, 0x53, 0x65, 0x74, 0x20, - 0x54, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x1a, 0x60, 0x53, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, - 0x69, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x20, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x64, 0x2e, 0x4a, 0x4f, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x48, 0x0a, 0x02, - 0x4f, 0x6b, 0x12, 0x42, 0x0a, 0x40, 0x1a, 0x3e, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, - 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x2a, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, - 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x3a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x2b, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0xb9, 0x02, 0x0a, 0x23, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x65, 0x64, - 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0a, 0x54, 0x6f, - 0x70, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x67, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2d, - 0x64, 0x61, 0x74, 0x61, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2f, 0x62, 0x61, 0x63, - 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x67, 0x65, - 0x6e, 0x2f, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, - 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x3b, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x52, 0x41, 0x44, 0xaa, 0x02, 0x1f, 0x52, 0x65, 0x64, 0x70, - 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x1f, 0x52, 0x65, - 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x44, 0x61, 0x74, 0x61, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2b, - 0x52, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x44, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x22, 0x52, 0x65, - 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x44, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, + 0xb9, 0x02, 0x0a, 0x23, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0a, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x67, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, + 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x67, 0x65, 0x6e, 0x2f, 0x72, 0x65, 0x64, + 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x64, 0x61, 0x74, + 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, + 0x03, 0x52, 0x41, 0x44, 0xaa, 0x02, 0x1f, 0x52, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, + 0x41, 0x70, 0x69, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x56, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x1f, 0x52, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, + 0x61, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5c, + 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2b, 0x52, 0x65, 0x64, 0x70, 0x61, + 0x6e, 0x64, 0x61, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x22, 0x52, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, + 0x61, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -1613,8 +1620,8 @@ var file_redpanda_api_dataplane_v1alpha1_topic_proto_goTypes = []interface{}{ (*GetTopicConfigurationsResponse)(nil), // 8: redpanda.api.dataplane.v1alpha1.GetTopicConfigurationsResponse (*UpdateTopicConfigurationsRequest)(nil), // 9: redpanda.api.dataplane.v1alpha1.UpdateTopicConfigurationsRequest (*UpdateTopicConfigurationsResponse)(nil), // 10: redpanda.api.dataplane.v1alpha1.UpdateTopicConfigurationsResponse - (*SetTopicConfigurationRequest)(nil), // 11: redpanda.api.dataplane.v1alpha1.SetTopicConfigurationRequest - (*SetTopicConfigurationResponse)(nil), // 12: redpanda.api.dataplane.v1alpha1.SetTopicConfigurationResponse + (*SetTopicConfigurationsRequest)(nil), // 11: redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsRequest + (*SetTopicConfigurationsResponse)(nil), // 12: redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsResponse (*Topic_Configuration)(nil), // 13: redpanda.api.dataplane.v1alpha1.Topic.Configuration (*CreateTopicRequest_Topic)(nil), // 14: redpanda.api.dataplane.v1alpha1.CreateTopicRequest.Topic (*CreateTopicRequest_Topic_Config)(nil), // 15: redpanda.api.dataplane.v1alpha1.CreateTopicRequest.Topic.Config @@ -1622,7 +1629,7 @@ var file_redpanda_api_dataplane_v1alpha1_topic_proto_goTypes = []interface{}{ (*ListTopicsRequest_Filter)(nil), // 17: redpanda.api.dataplane.v1alpha1.ListTopicsRequest.Filter (*ListTopicsResponse_Topic)(nil), // 18: redpanda.api.dataplane.v1alpha1.ListTopicsResponse.Topic (*UpdateTopicConfigurationsRequest_UpdateConfiguration)(nil), // 19: redpanda.api.dataplane.v1alpha1.UpdateTopicConfigurationsRequest.UpdateConfiguration - (*SetTopicConfigurationRequest_SetConfiguration)(nil), // 20: redpanda.api.dataplane.v1alpha1.SetTopicConfigurationRequest.SetConfiguration + (*SetTopicConfigurationsRequest_SetConfiguration)(nil), // 20: redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsRequest.SetConfiguration (ConfigType)(0), // 21: redpanda.api.dataplane.v1alpha1.ConfigType (ConfigSource)(0), // 22: redpanda.api.dataplane.v1alpha1.ConfigSource (*ConfigSynonym)(nil), // 23: redpanda.api.dataplane.v1alpha1.ConfigSynonym @@ -1635,8 +1642,8 @@ var file_redpanda_api_dataplane_v1alpha1_topic_proto_depIdxs = []int32{ 13, // 3: redpanda.api.dataplane.v1alpha1.GetTopicConfigurationsResponse.configurations:type_name -> redpanda.api.dataplane.v1alpha1.Topic.Configuration 19, // 4: redpanda.api.dataplane.v1alpha1.UpdateTopicConfigurationsRequest.configurations:type_name -> redpanda.api.dataplane.v1alpha1.UpdateTopicConfigurationsRequest.UpdateConfiguration 13, // 5: redpanda.api.dataplane.v1alpha1.UpdateTopicConfigurationsResponse.configurations:type_name -> redpanda.api.dataplane.v1alpha1.Topic.Configuration - 20, // 6: redpanda.api.dataplane.v1alpha1.SetTopicConfigurationRequest.configuration:type_name -> redpanda.api.dataplane.v1alpha1.SetTopicConfigurationRequest.SetConfiguration - 13, // 7: redpanda.api.dataplane.v1alpha1.SetTopicConfigurationResponse.configuration:type_name -> redpanda.api.dataplane.v1alpha1.Topic.Configuration + 20, // 6: redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsRequest.configurations:type_name -> redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsRequest.SetConfiguration + 13, // 7: redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsResponse.configurations:type_name -> redpanda.api.dataplane.v1alpha1.Topic.Configuration 21, // 8: redpanda.api.dataplane.v1alpha1.Topic.Configuration.type:type_name -> redpanda.api.dataplane.v1alpha1.ConfigType 22, // 9: redpanda.api.dataplane.v1alpha1.Topic.Configuration.source:type_name -> redpanda.api.dataplane.v1alpha1.ConfigSource 23, // 10: redpanda.api.dataplane.v1alpha1.Topic.Configuration.config_synonyms:type_name -> redpanda.api.dataplane.v1alpha1.ConfigSynonym @@ -1648,13 +1655,13 @@ var file_redpanda_api_dataplane_v1alpha1_topic_proto_depIdxs = []int32{ 5, // 16: redpanda.api.dataplane.v1alpha1.TopicService.DeleteTopic:input_type -> redpanda.api.dataplane.v1alpha1.DeleteTopicRequest 7, // 17: redpanda.api.dataplane.v1alpha1.TopicService.GetTopicConfigurations:input_type -> redpanda.api.dataplane.v1alpha1.GetTopicConfigurationsRequest 9, // 18: redpanda.api.dataplane.v1alpha1.TopicService.UpdateTopicConfigurations:input_type -> redpanda.api.dataplane.v1alpha1.UpdateTopicConfigurationsRequest - 11, // 19: redpanda.api.dataplane.v1alpha1.TopicService.SetTopicConfiguration:input_type -> redpanda.api.dataplane.v1alpha1.SetTopicConfigurationRequest + 11, // 19: redpanda.api.dataplane.v1alpha1.TopicService.SetTopicConfigurations:input_type -> redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsRequest 2, // 20: redpanda.api.dataplane.v1alpha1.TopicService.CreateTopic:output_type -> redpanda.api.dataplane.v1alpha1.CreateTopicResponse 4, // 21: redpanda.api.dataplane.v1alpha1.TopicService.ListTopics:output_type -> redpanda.api.dataplane.v1alpha1.ListTopicsResponse 6, // 22: redpanda.api.dataplane.v1alpha1.TopicService.DeleteTopic:output_type -> redpanda.api.dataplane.v1alpha1.DeleteTopicResponse 8, // 23: redpanda.api.dataplane.v1alpha1.TopicService.GetTopicConfigurations:output_type -> redpanda.api.dataplane.v1alpha1.GetTopicConfigurationsResponse 10, // 24: redpanda.api.dataplane.v1alpha1.TopicService.UpdateTopicConfigurations:output_type -> redpanda.api.dataplane.v1alpha1.UpdateTopicConfigurationsResponse - 12, // 25: redpanda.api.dataplane.v1alpha1.TopicService.SetTopicConfiguration:output_type -> redpanda.api.dataplane.v1alpha1.SetTopicConfigurationResponse + 12, // 25: redpanda.api.dataplane.v1alpha1.TopicService.SetTopicConfigurations:output_type -> redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsResponse 20, // [20:26] is the sub-list for method output_type 14, // [14:20] is the sub-list for method input_type 14, // [14:14] is the sub-list for extension type_name @@ -1802,7 +1809,7 @@ func file_redpanda_api_dataplane_v1alpha1_topic_proto_init() { } } file_redpanda_api_dataplane_v1alpha1_topic_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetTopicConfigurationRequest); i { + switch v := v.(*SetTopicConfigurationsRequest); i { case 0: return &v.state case 1: @@ -1814,7 +1821,7 @@ func file_redpanda_api_dataplane_v1alpha1_topic_proto_init() { } } file_redpanda_api_dataplane_v1alpha1_topic_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetTopicConfigurationResponse); i { + switch v := v.(*SetTopicConfigurationsResponse); i { case 0: return &v.state case 1: @@ -1910,7 +1917,7 @@ func file_redpanda_api_dataplane_v1alpha1_topic_proto_init() { } } file_redpanda_api_dataplane_v1alpha1_topic_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetTopicConfigurationRequest_SetConfiguration); i { + switch v := v.(*SetTopicConfigurationsRequest_SetConfiguration); i { case 0: return &v.state case 1: @@ -1926,6 +1933,7 @@ func file_redpanda_api_dataplane_v1alpha1_topic_proto_init() { file_redpanda_api_dataplane_v1alpha1_topic_proto_msgTypes[14].OneofWrappers = []interface{}{} file_redpanda_api_dataplane_v1alpha1_topic_proto_msgTypes[15].OneofWrappers = []interface{}{} file_redpanda_api_dataplane_v1alpha1_topic_proto_msgTypes[19].OneofWrappers = []interface{}{} + file_redpanda_api_dataplane_v1alpha1_topic_proto_msgTypes[20].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/topic.pb.gw.go b/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/topic.pb.gw.go index 3ed9848ae..97481d0c7 100644 --- a/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/topic.pb.gw.go +++ b/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/topic.pb.gw.go @@ -291,15 +291,15 @@ func local_request_TopicService_UpdateTopicConfigurations_0(ctx context.Context, } -func request_TopicService_SetTopicConfiguration_0(ctx context.Context, marshaler runtime.Marshaler, client TopicServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SetTopicConfigurationRequest +func request_TopicService_SetTopicConfigurations_0(ctx context.Context, marshaler runtime.Marshaler, client TopicServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SetTopicConfigurationsRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Configuration); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Configurations); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -320,20 +320,20 @@ func request_TopicService_SetTopicConfiguration_0(ctx context.Context, marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "topic_name", err) } - msg, err := client.SetTopicConfiguration(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.SetTopicConfigurations(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_TopicService_SetTopicConfiguration_0(ctx context.Context, marshaler runtime.Marshaler, server TopicServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SetTopicConfigurationRequest +func local_request_TopicService_SetTopicConfigurations_0(ctx context.Context, marshaler runtime.Marshaler, server TopicServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SetTopicConfigurationsRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Configuration); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Configurations); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -354,7 +354,7 @@ func local_request_TopicService_SetTopicConfiguration_0(ctx context.Context, mar return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "topic_name", err) } - msg, err := server.SetTopicConfiguration(ctx, &protoReq) + msg, err := server.SetTopicConfigurations(ctx, &protoReq) return msg, metadata, err } @@ -490,7 +490,7 @@ func RegisterTopicServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu }) - mux.Handle("PUT", pattern_TopicService_SetTopicConfiguration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_TopicService_SetTopicConfigurations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -498,12 +498,12 @@ func RegisterTopicServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/redpanda.api.dataplane.v1alpha1.TopicService/SetTopicConfiguration", runtime.WithHTTPPathPattern("/v1alpha1/topics/{topic_name}/configuration")) + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/redpanda.api.dataplane.v1alpha1.TopicService/SetTopicConfigurations", runtime.WithHTTPPathPattern("/v1alpha1/topics/{topic_name}/configurations")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_TopicService_SetTopicConfiguration_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_TopicService_SetTopicConfigurations_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { @@ -511,7 +511,7 @@ func RegisterTopicServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu return } - forward_TopicService_SetTopicConfiguration_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_TopicService_SetTopicConfigurations_0(annotatedContext, mux, outboundMarshaler, w, req, response_TopicService_SetTopicConfigurations_0{resp}, mux.GetForwardResponseOptions()...) }) @@ -666,25 +666,25 @@ func RegisterTopicServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) - mux.Handle("PUT", pattern_TopicService_SetTopicConfiguration_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PUT", pattern_TopicService_SetTopicConfigurations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/redpanda.api.dataplane.v1alpha1.TopicService/SetTopicConfiguration", runtime.WithHTTPPathPattern("/v1alpha1/topics/{topic_name}/configuration")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/redpanda.api.dataplane.v1alpha1.TopicService/SetTopicConfigurations", runtime.WithHTTPPathPattern("/v1alpha1/topics/{topic_name}/configurations")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_TopicService_SetTopicConfiguration_0(annotatedContext, inboundMarshaler, client, req, pathParams) + resp, md, err := request_TopicService_SetTopicConfigurations_0(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_TopicService_SetTopicConfiguration_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_TopicService_SetTopicConfigurations_0(annotatedContext, mux, outboundMarshaler, w, req, response_TopicService_SetTopicConfigurations_0{resp}, mux.GetForwardResponseOptions()...) }) @@ -709,6 +709,15 @@ func (m response_TopicService_UpdateTopicConfigurations_0) XXX_ResponseBody() in return response.Configurations } +type response_TopicService_SetTopicConfigurations_0 struct { + proto.Message +} + +func (m response_TopicService_SetTopicConfigurations_0) XXX_ResponseBody() interface{} { + response := m.Message.(*SetTopicConfigurationsResponse) + return response.Configurations +} + var ( pattern_TopicService_CreateTopic_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1alpha1", "topics"}, "")) @@ -720,7 +729,7 @@ var ( pattern_TopicService_UpdateTopicConfigurations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1alpha1", "topics", "topic_name", "configurations"}, "")) - pattern_TopicService_SetTopicConfiguration_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1alpha1", "topics", "topic_name", "configuration"}, "")) + pattern_TopicService_SetTopicConfigurations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1alpha1", "topics", "topic_name", "configurations"}, "")) ) var ( @@ -734,5 +743,5 @@ var ( forward_TopicService_UpdateTopicConfigurations_0 = runtime.ForwardResponseMessage - forward_TopicService_SetTopicConfiguration_0 = runtime.ForwardResponseMessage + forward_TopicService_SetTopicConfigurations_0 = runtime.ForwardResponseMessage ) diff --git a/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/topic_grpc.pb.go b/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/topic_grpc.pb.go index dc3039341..bc0e70228 100644 --- a/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/topic_grpc.pb.go +++ b/backend/pkg/protogen/redpanda/api/dataplane/v1alpha1/topic_grpc.pb.go @@ -25,7 +25,7 @@ const ( TopicService_DeleteTopic_FullMethodName = "/redpanda.api.dataplane.v1alpha1.TopicService/DeleteTopic" TopicService_GetTopicConfigurations_FullMethodName = "/redpanda.api.dataplane.v1alpha1.TopicService/GetTopicConfigurations" TopicService_UpdateTopicConfigurations_FullMethodName = "/redpanda.api.dataplane.v1alpha1.TopicService/UpdateTopicConfigurations" - TopicService_SetTopicConfiguration_FullMethodName = "/redpanda.api.dataplane.v1alpha1.TopicService/SetTopicConfiguration" + TopicService_SetTopicConfigurations_FullMethodName = "/redpanda.api.dataplane.v1alpha1.TopicService/SetTopicConfigurations" ) // TopicServiceClient is the client API for TopicService service. @@ -37,7 +37,7 @@ type TopicServiceClient interface { DeleteTopic(ctx context.Context, in *DeleteTopicRequest, opts ...grpc.CallOption) (*DeleteTopicResponse, error) GetTopicConfigurations(ctx context.Context, in *GetTopicConfigurationsRequest, opts ...grpc.CallOption) (*GetTopicConfigurationsResponse, error) UpdateTopicConfigurations(ctx context.Context, in *UpdateTopicConfigurationsRequest, opts ...grpc.CallOption) (*UpdateTopicConfigurationsResponse, error) - SetTopicConfiguration(ctx context.Context, in *SetTopicConfigurationRequest, opts ...grpc.CallOption) (*SetTopicConfigurationResponse, error) + SetTopicConfigurations(ctx context.Context, in *SetTopicConfigurationsRequest, opts ...grpc.CallOption) (*SetTopicConfigurationsResponse, error) } type topicServiceClient struct { @@ -93,9 +93,9 @@ func (c *topicServiceClient) UpdateTopicConfigurations(ctx context.Context, in * return out, nil } -func (c *topicServiceClient) SetTopicConfiguration(ctx context.Context, in *SetTopicConfigurationRequest, opts ...grpc.CallOption) (*SetTopicConfigurationResponse, error) { - out := new(SetTopicConfigurationResponse) - err := c.cc.Invoke(ctx, TopicService_SetTopicConfiguration_FullMethodName, in, out, opts...) +func (c *topicServiceClient) SetTopicConfigurations(ctx context.Context, in *SetTopicConfigurationsRequest, opts ...grpc.CallOption) (*SetTopicConfigurationsResponse, error) { + out := new(SetTopicConfigurationsResponse) + err := c.cc.Invoke(ctx, TopicService_SetTopicConfigurations_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -111,7 +111,7 @@ type TopicServiceServer interface { DeleteTopic(context.Context, *DeleteTopicRequest) (*DeleteTopicResponse, error) GetTopicConfigurations(context.Context, *GetTopicConfigurationsRequest) (*GetTopicConfigurationsResponse, error) UpdateTopicConfigurations(context.Context, *UpdateTopicConfigurationsRequest) (*UpdateTopicConfigurationsResponse, error) - SetTopicConfiguration(context.Context, *SetTopicConfigurationRequest) (*SetTopicConfigurationResponse, error) + SetTopicConfigurations(context.Context, *SetTopicConfigurationsRequest) (*SetTopicConfigurationsResponse, error) mustEmbedUnimplementedTopicServiceServer() } @@ -134,8 +134,8 @@ func (UnimplementedTopicServiceServer) GetTopicConfigurations(context.Context, * func (UnimplementedTopicServiceServer) UpdateTopicConfigurations(context.Context, *UpdateTopicConfigurationsRequest) (*UpdateTopicConfigurationsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateTopicConfigurations not implemented") } -func (UnimplementedTopicServiceServer) SetTopicConfiguration(context.Context, *SetTopicConfigurationRequest) (*SetTopicConfigurationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetTopicConfiguration not implemented") +func (UnimplementedTopicServiceServer) SetTopicConfigurations(context.Context, *SetTopicConfigurationsRequest) (*SetTopicConfigurationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetTopicConfigurations not implemented") } func (UnimplementedTopicServiceServer) mustEmbedUnimplementedTopicServiceServer() {} @@ -240,20 +240,20 @@ func _TopicService_UpdateTopicConfigurations_Handler(srv interface{}, ctx contex return interceptor(ctx, in, info, handler) } -func _TopicService_SetTopicConfiguration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SetTopicConfigurationRequest) +func _TopicService_SetTopicConfigurations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetTopicConfigurationsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(TopicServiceServer).SetTopicConfiguration(ctx, in) + return srv.(TopicServiceServer).SetTopicConfigurations(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: TopicService_SetTopicConfiguration_FullMethodName, + FullMethod: TopicService_SetTopicConfigurations_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TopicServiceServer).SetTopicConfiguration(ctx, req.(*SetTopicConfigurationRequest)) + return srv.(TopicServiceServer).SetTopicConfigurations(ctx, req.(*SetTopicConfigurationsRequest)) } return interceptor(ctx, in, info, handler) } @@ -286,8 +286,8 @@ var TopicService_ServiceDesc = grpc.ServiceDesc{ Handler: _TopicService_UpdateTopicConfigurations_Handler, }, { - MethodName: "SetTopicConfiguration", - Handler: _TopicService_SetTopicConfiguration_Handler, + MethodName: "SetTopicConfigurations", + Handler: _TopicService_SetTopicConfigurations_Handler, }, }, Streams: []grpc.StreamDesc{}, diff --git a/frontend/src/protogen/redpanda/api/dataplane/v1alpha1/topic_connect.ts b/frontend/src/protogen/redpanda/api/dataplane/v1alpha1/topic_connect.ts index e1772db5c..bd47698ff 100644 --- a/frontend/src/protogen/redpanda/api/dataplane/v1alpha1/topic_connect.ts +++ b/frontend/src/protogen/redpanda/api/dataplane/v1alpha1/topic_connect.ts @@ -3,7 +3,7 @@ /* eslint-disable */ // @ts-nocheck -import { CreateTopicRequest, CreateTopicResponse, DeleteTopicRequest, DeleteTopicResponse, GetTopicConfigurationsRequest, GetTopicConfigurationsResponse, ListTopicsRequest, ListTopicsResponse, SetTopicConfigurationRequest, SetTopicConfigurationResponse, UpdateTopicConfigurationsRequest, UpdateTopicConfigurationsResponse } from "./topic_pb"; +import { CreateTopicRequest, CreateTopicResponse, DeleteTopicRequest, DeleteTopicResponse, GetTopicConfigurationsRequest, GetTopicConfigurationsResponse, ListTopicsRequest, ListTopicsResponse, SetTopicConfigurationsRequest, SetTopicConfigurationsResponse, UpdateTopicConfigurationsRequest, UpdateTopicConfigurationsResponse } from "./topic_pb"; import { MethodKind } from "@bufbuild/protobuf"; /** @@ -58,12 +58,12 @@ export const TopicService = { kind: MethodKind.Unary, }, /** - * @generated from rpc redpanda.api.dataplane.v1alpha1.TopicService.SetTopicConfiguration + * @generated from rpc redpanda.api.dataplane.v1alpha1.TopicService.SetTopicConfigurations */ - setTopicConfiguration: { - name: "SetTopicConfiguration", - I: SetTopicConfigurationRequest, - O: SetTopicConfigurationResponse, + setTopicConfigurations: { + name: "SetTopicConfigurations", + I: SetTopicConfigurationsRequest, + O: SetTopicConfigurationsResponse, kind: MethodKind.Unary, }, } diff --git a/frontend/src/protogen/redpanda/api/dataplane/v1alpha1/topic_pb.ts b/frontend/src/protogen/redpanda/api/dataplane/v1alpha1/topic_pb.ts index 3d8ac053a..e44cb4abc 100644 --- a/frontend/src/protogen/redpanda/api/dataplane/v1alpha1/topic_pb.ts +++ b/frontend/src/protogen/redpanda/api/dataplane/v1alpha1/topic_pb.ts @@ -836,125 +836,125 @@ export class UpdateTopicConfigurationsResponse extends Message { +export class SetTopicConfigurationsRequest extends Message { /** * @generated from field: string topic_name = 1; */ topicName = ""; /** - * @generated from field: repeated redpanda.api.dataplane.v1alpha1.SetTopicConfigurationRequest.SetConfiguration configuration = 2; + * @generated from field: repeated redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsRequest.SetConfiguration configurations = 2; */ - configuration: SetTopicConfigurationRequest_SetConfiguration[] = []; + configurations: SetTopicConfigurationsRequest_SetConfiguration[] = []; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "redpanda.api.dataplane.v1alpha1.SetTopicConfigurationRequest"; + static readonly typeName = "redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsRequest"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "topic_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "configuration", kind: "message", T: SetTopicConfigurationRequest_SetConfiguration, repeated: true }, + { no: 2, name: "configurations", kind: "message", T: SetTopicConfigurationsRequest_SetConfiguration, repeated: true }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): SetTopicConfigurationRequest { - return new SetTopicConfigurationRequest().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): SetTopicConfigurationsRequest { + return new SetTopicConfigurationsRequest().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): SetTopicConfigurationRequest { - return new SetTopicConfigurationRequest().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): SetTopicConfigurationsRequest { + return new SetTopicConfigurationsRequest().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): SetTopicConfigurationRequest { - return new SetTopicConfigurationRequest().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): SetTopicConfigurationsRequest { + return new SetTopicConfigurationsRequest().fromJsonString(jsonString, options); } - static equals(a: SetTopicConfigurationRequest | PlainMessage | undefined, b: SetTopicConfigurationRequest | PlainMessage | undefined): boolean { - return proto3.util.equals(SetTopicConfigurationRequest, a, b); + static equals(a: SetTopicConfigurationsRequest | PlainMessage | undefined, b: SetTopicConfigurationsRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(SetTopicConfigurationsRequest, a, b); } } /** - * @generated from message redpanda.api.dataplane.v1alpha1.SetTopicConfigurationRequest.SetConfiguration + * @generated from message redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsRequest.SetConfiguration */ -export class SetTopicConfigurationRequest_SetConfiguration extends Message { +export class SetTopicConfigurationsRequest_SetConfiguration extends Message { /** * @generated from field: string key = 1; */ key = ""; /** - * @generated from field: string value = 2; + * @generated from field: optional string value = 2; */ - value = ""; + value?: string; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "redpanda.api.dataplane.v1alpha1.SetTopicConfigurationRequest.SetConfiguration"; + static readonly typeName = "redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsRequest.SetConfiguration"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "value", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "value", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): SetTopicConfigurationRequest_SetConfiguration { - return new SetTopicConfigurationRequest_SetConfiguration().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): SetTopicConfigurationsRequest_SetConfiguration { + return new SetTopicConfigurationsRequest_SetConfiguration().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): SetTopicConfigurationRequest_SetConfiguration { - return new SetTopicConfigurationRequest_SetConfiguration().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): SetTopicConfigurationsRequest_SetConfiguration { + return new SetTopicConfigurationsRequest_SetConfiguration().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): SetTopicConfigurationRequest_SetConfiguration { - return new SetTopicConfigurationRequest_SetConfiguration().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): SetTopicConfigurationsRequest_SetConfiguration { + return new SetTopicConfigurationsRequest_SetConfiguration().fromJsonString(jsonString, options); } - static equals(a: SetTopicConfigurationRequest_SetConfiguration | PlainMessage | undefined, b: SetTopicConfigurationRequest_SetConfiguration | PlainMessage | undefined): boolean { - return proto3.util.equals(SetTopicConfigurationRequest_SetConfiguration, a, b); + static equals(a: SetTopicConfigurationsRequest_SetConfiguration | PlainMessage | undefined, b: SetTopicConfigurationsRequest_SetConfiguration | PlainMessage | undefined): boolean { + return proto3.util.equals(SetTopicConfigurationsRequest_SetConfiguration, a, b); } } /** - * @generated from message redpanda.api.dataplane.v1alpha1.SetTopicConfigurationResponse + * @generated from message redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsResponse */ -export class SetTopicConfigurationResponse extends Message { +export class SetTopicConfigurationsResponse extends Message { /** - * @generated from field: repeated redpanda.api.dataplane.v1alpha1.Topic.Configuration configuration = 1; + * @generated from field: repeated redpanda.api.dataplane.v1alpha1.Topic.Configuration configurations = 1; */ - configuration: Topic_Configuration[] = []; + configurations: Topic_Configuration[] = []; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "redpanda.api.dataplane.v1alpha1.SetTopicConfigurationResponse"; + static readonly typeName = "redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsResponse"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "configuration", kind: "message", T: Topic_Configuration, repeated: true }, + { no: 1, name: "configurations", kind: "message", T: Topic_Configuration, repeated: true }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): SetTopicConfigurationResponse { - return new SetTopicConfigurationResponse().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): SetTopicConfigurationsResponse { + return new SetTopicConfigurationsResponse().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): SetTopicConfigurationResponse { - return new SetTopicConfigurationResponse().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): SetTopicConfigurationsResponse { + return new SetTopicConfigurationsResponse().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): SetTopicConfigurationResponse { - return new SetTopicConfigurationResponse().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): SetTopicConfigurationsResponse { + return new SetTopicConfigurationsResponse().fromJsonString(jsonString, options); } - static equals(a: SetTopicConfigurationResponse | PlainMessage | undefined, b: SetTopicConfigurationResponse | PlainMessage | undefined): boolean { - return proto3.util.equals(SetTopicConfigurationResponse, a, b); + static equals(a: SetTopicConfigurationsResponse | PlainMessage | undefined, b: SetTopicConfigurationsResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(SetTopicConfigurationsResponse, a, b); } } diff --git a/proto/gen/openapi/openapi.json b/proto/gen/openapi/openapi.json index 7463d25b4..d563a626b 100644 --- a/proto/gen/openapi/openapi.json +++ b/proto/gen/openapi/openapi.json @@ -1 +1 @@ -{"components":{"schemas":{"ACL.Operation":{"enum":["OPERATION_ANY","OPERATION_ALL","OPERATION_READ","OPERATION_WRITE","OPERATION_CREATE","OPERATION_DELETE","OPERATION_ALTER","OPERATION_DESCRIBE","OPERATION_CLUSTER_ACTION","OPERATION_DESCRIBE_CONFIGS","OPERATION_ALTER_CONFIGS","OPERATION_IDEMPOTENT_WRITE","OPERATION_CREATE_TOKENS","OPERATION_DESCRIBE_TOKENS"],"type":"string"},"BadRequest":{"description":"Describes violations in a client request. This error type focuses on the\nsyntactic aspects of the request.","properties":{"field_violations":{"description":"Describes all violations in a client request.","items":{"$ref":"#/components/schemas/FieldViolation"},"type":"array"}},"title":"BadRequest","type":"object"},"Config":{"properties":{"name":{"description":"Name is a topic level config key (e.g. segment.bytes).","type":"string"},"value":{"nullable":true,"title":"Value is a topic level config value (e.g. 1073741824)","type":"string"}},"type":"object"},"ConfigAlterOperation":{"enum":["CONFIG_ALTER_OPERATION_SET","CONFIG_ALTER_OPERATION_DELETE","CONFIG_ALTER_OPERATION_APPEND","CONFIG_ALTER_OPERATION_SUBTRACT"],"type":"string"},"ConfigSource":{"enum":["CONFIG_SOURCE_DYNAMIC_TOPIC_CONFIG","CONFIG_SOURCE_DYNAMIC_BROKER_CONFIG","CONFIG_SOURCE_DYNAMIC_DEFAULT_BROKER_CONFIG","CONFIG_SOURCE_STATIC_BROKER_CONFIG","CONFIG_SOURCE_DEFAULT_CONFIG","CONFIG_SOURCE_DYNAMIC_BROKER_LOGGER_CONFIG"],"type":"string"},"ConfigSynonym":{"properties":{"name":{"type":"string"},"source":{"$ref":"#/components/schemas/ConfigSource"},"value":{"nullable":true,"type":"string"}},"type":"object"},"ConfigType":{"enum":["CONFIG_TYPE_BOOLEAN","CONFIG_TYPE_STRING","CONFIG_TYPE_INT","CONFIG_TYPE_SHORT","CONFIG_TYPE_LONG","CONFIG_TYPE_DOUBLE","CONFIG_TYPE_LIST","CONFIG_TYPE_CLASS","CONFIG_TYPE_PASSWORD"],"type":"string"},"Configuration":{"properties":{"config_synonyms":{"items":{"$ref":"#/components/schemas/ConfigSynonym"},"type":"array"},"documentation":{"nullable":true,"type":"string"},"is_read_only":{"type":"boolean"},"is_sensitive":{"type":"boolean"},"name":{"type":"string"},"source":{"$ref":"#/components/schemas/ConfigSource"},"type":{"$ref":"#/components/schemas/ConfigType"},"value":{"nullable":true,"type":"string"}},"type":"object"},"ConnectCluster":{"properties":{"address":{"type":"string"},"info":{"$ref":"#/components/schemas/ConnectCluster.Info"},"name":{"type":"string"},"plugins":{"items":{"$ref":"#/components/schemas/ConnectorPlugin"},"type":"array"}},"type":"object"},"ConnectCluster.Info":{"properties":{"commit":{"type":"string"},"kafka_cluster_id":{"type":"string"},"version":{"type":"string"}},"type":"object"},"Connector":{"properties":{"state":{"type":"string"},"trace":{"type":"string"},"worker_id":{"type":"string"}},"type":"object"},"ConnectorError":{"properties":{"content":{"type":"string"},"title":{"type":"string"},"type":{"$ref":"#/components/schemas/ConnectorError.Type"}},"title":"ConnectorError is the error of a connector, this is holistic error\nabstraction, made parsing the error trace of connector or Task","type":"object"},"ConnectorError.Type":{"enum":["TYPE_ERROR","TYPE_WARNING"],"type":"string"},"ConnectorHolisticState":{"description":"- CONNECTOR_HOLISTIC_STATE_PAUSED: PAUSED: The connector/task has been administratively paused.\n - CONNECTOR_HOLISTIC_STATE_RESTARTING: RESTARTING: he connector/task is restarting.\n - CONNECTOR_HOLISTIC_STATE_DESTROYED: DESTROYED: Connector is in destroyed state, regardless of any tasks.\n - CONNECTOR_HOLISTIC_STATE_STOPPED: STOPPED: The connector/task has been stopped.\n - CONNECTOR_HOLISTIC_STATE_UNASSIGNED: The connector/task has not yet been assigned to a worker\nUNASSIGNED: Connector is in unassigned state.\n Or Connector is in running state, and there are unassigned tasks.\n - CONNECTOR_HOLISTIC_STATE_HEALTHY: HEALTHY: Connector is in running state, \u003e 0 tasks, all of them in running state.\n - CONNECTOR_HOLISTIC_STATE_UNHEALTHY: UNHEALTHY: Connector is failed state.\n\t\t\tOr Connector is in running state but has 0 tasks.\n\t\t\tOr Connector is in running state, has \u003e 0 tasks, and all tasks are in failed state.\n - CONNECTOR_HOLISTIC_STATE_DEGRADED: DEGRADED: Connector is in running state, has \u003e 0 tasks, but has at least one state in failed state, but not all tasks are failed.\n - CONNECTOR_HOLISTIC_STATE_UNKNOWN: UNKNOWN: The connector/task could no be determined","enum":["CONNECTOR_HOLISTIC_STATE_PAUSED","CONNECTOR_HOLISTIC_STATE_RESTARTING","CONNECTOR_HOLISTIC_STATE_DESTROYED","CONNECTOR_HOLISTIC_STATE_STOPPED","CONNECTOR_HOLISTIC_STATE_UNASSIGNED","CONNECTOR_HOLISTIC_STATE_HEALTHY","CONNECTOR_HOLISTIC_STATE_UNHEALTHY","CONNECTOR_HOLISTIC_STATE_DEGRADED","CONNECTOR_HOLISTIC_STATE_UNKNOWN"],"title":"The following states are possible for a connector or one of its tasks\nimplement the state interface described in the Kafka connect API @see\nhttps://docs.confluent.io/platform/current/connect/monitoring.html#connector-and-task-status\nthis includes holistic unified connector status that takes into account not\njust the connector instance state, but also state of all the tasks within the\nconnector","type":"string"},"ConnectorInfoStatus":{"properties":{"info":{"$ref":"#/components/schemas/ConnectorSpec"},"name":{"title":"name is the connector name","type":"string"},"status":{"$ref":"#/components/schemas/ConnectorStatus"}},"type":"object"},"ConnectorPlugin":{"properties":{"class":{"type":"string"},"type":{"type":"string"},"version":{"type":"string"}},"type":"object"},"ConnectorSpec":{"properties":{"config":{"additionalProperties":{"type":"string"},"type":"object"},"name":{"type":"string"},"tasks":{"items":{"$ref":"#/components/schemas/TaskInfo"},"readOnly":true,"type":"array"},"type":{"readOnly":true,"type":"string"}},"required":["name","config"],"title":"ConectorInfo is the spec of the connector, as defined in the Kafka connect\nAPI, it can be used as input of the connector creation or output of the\nconnectors","type":"object"},"ConnectorStatus":{"properties":{"connector":{"$ref":"#/components/schemas/Connector"},"errors":{"items":{"$ref":"#/components/schemas/ConnectorError"},"title":"Errors is list of parsed connectors' and tasks' errors","type":"array"},"holistic_state":{"$ref":"#/components/schemas/ConnectorHolisticState"},"name":{"type":"string"},"tasks":{"items":{"$ref":"#/components/schemas/TaskStatus"},"type":"array"},"type":{"type":"string"}},"type":"object"},"CreateACLRequest":{"properties":{"host":{"description":"Host is the host address to use for this acl. Each host to allow\nthe principal access from must be specified as a new creation.","type":"string"},"operation":{"$ref":"#/components/schemas/ACL.Operation"},"permission_type":{"$ref":"#/components/schemas/PermissionType"},"principal":{"description":"Principal is the user to apply this acl for. With the Kafka simple\nauthorizer, this must begin with \"User:\".","type":"string"},"resource_name":{"description":"ResourceName is the name of the resource this acl entry will be on.\nFor requests with resource_type CLUSTER, this will default to the expected\nvalue \"kafka-cluster\".","type":"string"},"resource_pattern_type":{"$ref":"#/components/schemas/ResourcePatternType"},"resource_type":{"$ref":"#/components/schemas/ResourceType"}},"required":["resource_type","resource_pattern_type","principal","host","operation","permission_type"],"type":"object"},"CreateACLResponse":{"type":"object"},"CreateConnectorResponse":{"properties":{"connector":{"$ref":"#/components/schemas/ConnectorSpec"}},"type":"object"},"CreateSecretResponse":{"properties":{"secret":{"$ref":"#/components/schemas/Secret"}},"title":"CreateSecretResponse is the response of CreateSecret","type":"object"},"CreateTopicRequest.Topic":{"properties":{"configs":{"description":"Configs is an array of key value config pairs for a topic.\nThese correspond to Kafka Topic-Level Configs.","items":{"$ref":"#/components/schemas/Config"},"type":"array"},"name":{"description":"Name is the topic's name.","type":"string"},"partition_count":{"description":"NumPartitions is how many partitions to give a topic. This must\nbe null if specifying partitions manually (see ReplicaAssignment)\nor, to use the cluster default partitions.","format":"int32","nullable":true,"type":"integer"},"replica_assignment":{"description":"ReplicaAssignment is an array to manually dictate replicas and their\npartitions for a topic. If using this, both ReplicationFactor and\nNumPartitions must be -1.","items":{"$ref":"#/components/schemas/ReplicaAssignment"},"type":"array"},"replication_factor":{"description":"ReplicationFactor is how many replicas every partition must have.\nThis must be null if specifying partitions manually (see ReplicaAssignment)\nor, to use the cluster default replication factor.","format":"int32","nullable":true,"type":"integer"}},"type":"object"},"CreateTopicResponse":{"properties":{"name":{"description":"Name is the topic's name.","type":"string"}},"type":"object"},"CreateUserRequest.User":{"properties":{"mechanism":{"$ref":"#/components/schemas/SASLMechanism"},"name":{"type":"string"},"password":{"type":"string"}},"type":"object"},"CreateUserResponse":{"properties":{"user":{"$ref":"#/components/schemas/CreateUserResponse.User"}},"type":"object"},"CreateUserResponse.User":{"properties":{"mechanism":{"$ref":"#/components/schemas/SASLMechanism"},"name":{"type":"string"}},"type":"object"},"DeleteACLsRequest.Filter":{"properties":{"host":{"nullable":true,"type":"string"},"operation":{"$ref":"#/components/schemas/ACL.Operation"},"permission_type":{"$ref":"#/components/schemas/PermissionType"},"principal":{"nullable":true,"type":"string"},"resource_name":{"nullable":true,"type":"string"},"resource_pattern_type":{"$ref":"#/components/schemas/ResourcePatternType"},"resource_type":{"$ref":"#/components/schemas/ResourceType"}},"required":["resource_type","resource_pattern_type","operation","permission_type"],"type":"object"},"DeleteACLsResponse":{"properties":{"matching_acls":{"items":{"$ref":"#/components/schemas/MatchingACL"},"type":"array"}},"type":"object"},"DeleteSecretResponse":{"title":"DeleteSecretResponse is the response of DeleteSecret","type":"object"},"DeleteTopicResponse":{"type":"object"},"DeleteUserResponse":{"type":"object"},"ErrorInfo":{"description":"Describes the cause of the error with structured details.\n\nExample of an error when contacting the \"pubsub.googleapis.com\" API when it\nis not enabled:\n\n { \"reason\": \"API_DISABLED\"\n \"domain\": \"googleapis.com\"\n \"metadata\": {\n \"resource\": \"projects/123\",\n \"service\": \"pubsub.googleapis.com\"\n }\n }\n\nThis response indicates that the pubsub.googleapis.com API is not enabled.\n\nExample of an error that is returned when attempting to create a Spanner\ninstance in a region that is out of stock:\n\n { \"reason\": \"STOCKOUT\"\n \"domain\": \"spanner.googleapis.com\",\n \"metadata\": {\n \"availableRegions\": \"us-central1,us-east2\"\n }\n }","properties":{"domain":{"description":"The logical grouping to which the \"reason\" belongs. The error domain\nis typically the registered service name of the tool or product that\ngenerates the error. Example: \"pubsub.googleapis.com\". If the error is\ngenerated by some common infrastructure, the error domain must be a\nglobally unique value that identifies the infrastructure. For Google API\ninfrastructure, the error domain is \"googleapis.com\".","type":"string"},"metadata":{"additionalProperties":{"type":"string"},"description":"Additional structured details about this error.\n\nKeys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in\nlength. When identifying the current value of an exceeded limit, the units\nshould be contained in the key, not the value. For example, rather than\n{\"instanceLimit\": \"100/request\"}, should be returned as,\n{\"instanceLimitPerRequest\": \"100\"}, if the client exceeds the number of\ninstances that can be created in a single (batch) request.","type":"object"},"reason":{"description":"The reason of the error. This is a constant value that identifies the\nproximate cause of the error. Error reasons are unique within a particular\ndomain of errors. This should be at most 63 characters and match a\nregular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`, which represents\nUPPER_SNAKE_CASE.","type":"string"}},"title":"ErrorInfo","type":"object"},"FieldViolation":{"description":"A message type used to describe a single bad request field.","properties":{"description":{"description":"A description of why the request element is bad.","type":"string"},"field":{"description":"A path that leads to a field in the request body. The value will be a\nsequence of dot-separated identifiers that identify a protocol buffer\nfield.\n\nConsider the following:\n\n message CreateContactRequest {\n message EmailAddress {\n enum Type {\n TYPE_UNSPECIFIED = 0;\n HOME = 1;\n WORK = 2;\n }\n\n optional string email = 1;\n repeated EmailType type = 2;\n }\n\n string full_name = 1;\n repeated EmailAddress email_addresses = 2;\n }\n\nIn this example, in proto `field` could take one of the following values:\n\n* `full_name` for a violation in the `full_name` value\n* `email_addresses[1].email` for a violation in the `email` field of the\n first `email_addresses` message\n* `email_addresses[3].type[2]` for a violation in the second `type`\n value in the third `email_addresses` message.\n\nIn JSON, the same values are represented as:\n\n* `fullName` for a violation in the `fullName` value\n* `emailAddresses[1].email` for a violation in the `email` field of the\n first `emailAddresses` message\n* `emailAddresses[3].type[2]` for a violation in the second `type`\n value in the third `emailAddresses` message.","type":"string"}},"type":"object"},"GetConnectClusterResponse":{"properties":{"cluster":{"$ref":"#/components/schemas/ConnectCluster"}},"type":"object"},"GetConnectorConfigResponse":{"properties":{"config":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"GetConnectorResponse":{"properties":{"connector":{"$ref":"#/components/schemas/ConnectorSpec"}},"type":"object"},"GetConnectorStatusResponse":{"properties":{"status":{"$ref":"#/components/schemas/ConnectorStatus"}},"type":"object"},"GetTopicConfigurationsResponse":{"properties":{"configurations":{"items":{"$ref":"#/components/schemas/Configuration"},"type":"array"}},"type":"object"},"Help":{"description":"Provides links to documentation or for performing an out of band action.\n\nFor example, if a quota check failed with an error indicating the calling\nproject hasn't enabled the accessed service, this can contain a URL pointing\ndirectly to the right place in the developer console to flip the bit.","properties":{"links":{"description":"URL(s) pointing to additional information on handling the current error.","items":{"$ref":"#/components/schemas/Link"},"type":"array"}},"title":"Help","type":"object"},"Link":{"description":"Describes a URL link.","properties":{"description":{"description":"Describes what the link offers.","type":"string"},"url":{"description":"The URL of the link.","type":"string"}},"type":"object"},"ListACLsRequest.Filter":{"properties":{"host":{"nullable":true,"type":"string"},"operation":{"$ref":"#/components/schemas/ACL.Operation"},"permission_type":{"$ref":"#/components/schemas/PermissionType"},"principal":{"nullable":true,"type":"string"},"resource_name":{"nullable":true,"type":"string"},"resource_pattern_type":{"$ref":"#/components/schemas/ResourcePatternType"},"resource_type":{"$ref":"#/components/schemas/ResourceType"}},"type":"object"},"ListACLsResponse":{"properties":{"resources":{"items":{"$ref":"#/components/schemas/Resource"},"type":"array"}},"type":"object"},"ListConnectClustersResponse":{"properties":{"clusters":{"items":{"$ref":"#/components/schemas/ConnectCluster"},"type":"array"}},"type":"object"},"ListConnectorTopicsResponse":{"properties":{"topics":{"items":{"type":"string"},"type":"array"}},"type":"object"},"ListConnectorsResponse":{"properties":{"connectors":{"items":{"$ref":"#/components/schemas/ConnectorInfoStatus"},"title":"connectors is the list of connectors the key is the connector name","type":"array"},"next_page_token":{"description":"Page Token to fetch the next page. The value can be used as page_token in the next call to this endpoint.","type":"string"}},"type":"object"},"ListSecretsRequest.Filter":{"properties":{"labels[string]":{"additionalProperties":{"type":"string"},"type":"object"},"name":{"type":"string"}},"title":"Defines the filter for Secrets","type":"object"},"ListSecretsResponse":{"properties":{"next_page_token":{"description":"token to retrieve the next page.","type":"string"},"secrets":{"items":{"$ref":"#/components/schemas/Secret"},"type":"array"}},"title":"ListSecretsResponse is the response of ListSecrets","type":"object"},"ListTopicsRequest.Filter":{"properties":{"name_contains":{"type":"string"}},"type":"object"},"ListTopicsResponse":{"properties":{"next_page_token":{"type":"string"},"topics":{"items":{"$ref":"#/components/schemas/ListTopicsResponse.Topic"},"type":"array"}},"type":"object"},"ListTopicsResponse.Topic":{"properties":{"is_internal":{"type":"boolean"},"name":{"type":"string"},"partition_count":{"format":"int32","type":"integer"},"replication_factor":{"format":"int32","type":"integer"}},"type":"object"},"ListUsersResponse":{"properties":{"users":{"items":{"$ref":"#/components/schemas/ListUsersResponse.User"},"type":"array"}},"type":"object"},"ListUsersResponse.User":{"properties":{"mechanism":{"$ref":"#/components/schemas/SASLMechanism"},"name":{"type":"string"}},"type":"object"},"MatchingACL":{"properties":{"error":{"$ref":"#/components/schemas/Status"},"host":{"type":"string"},"operation":{"$ref":"#/components/schemas/ACL.Operation"},"permission_type":{"$ref":"#/components/schemas/PermissionType"},"principal":{"type":"string"},"resource_name":{"type":"string"},"resource_pattern_type":{"$ref":"#/components/schemas/ResourcePatternType"},"resource_type":{"$ref":"#/components/schemas/ResourceType"}},"type":"object"},"Options":{"properties":{"include_tasks":{"type":"boolean"},"only_failed":{"type":"boolean"}},"type":"object"},"PermissionType":{"enum":["PERMISSION_TYPE_ANY","PERMISSION_TYPE_DENY","PERMISSION_TYPE_ALLOW"],"type":"string"},"Policy":{"properties":{"host":{"type":"string"},"operation":{"$ref":"#/components/schemas/ACL.Operation"},"permission_type":{"$ref":"#/components/schemas/PermissionType"},"principal":{"type":"string"}},"type":"object"},"QuotaFailure":{"description":"Describes how a quota check failed.\n\nFor example if a daily limit was exceeded for the calling project,\na service could respond with a QuotaFailure detail containing the project\nid and the description of the quota limit that was exceeded. If the\ncalling project hasn't enabled the service in the developer console, then\na service could respond with the project id and set `service_disabled`\nto true.\n\nAlso see RetryInfo and Help types for other details about handling a\nquota failure.","properties":{"violations":{"description":"Describes all quota violations.","items":{"$ref":"#/components/schemas/QuotaFailure.Violation"},"type":"array"}},"title":"QuotaFailure","type":"object"},"QuotaFailure.Violation":{"description":"A message type used to describe a single quota violation. For example, a\ndaily quota or a custom quota that was exceeded.","properties":{"description":{"description":"A description of how the quota check failed. Clients can use this\ndescription to find more about the quota configuration in the service's\npublic documentation, or find the relevant quota limit to adjust through\ndeveloper console.\n\nFor example: \"Service disabled\" or \"Daily Limit for read operations\nexceeded\".","type":"string"},"subject":{"description":"The subject on which the quota check failed.\nFor example, \"clientip:\u003cip address of client\u003e\" or \"project:\u003cGoogle\ndeveloper project id\u003e\".","type":"string"}},"type":"object"},"ReplicaAssignment":{"properties":{"partition":{"description":"Partition is a partition to create.","format":"int32","type":"integer"},"replicas":{"description":"Replicas are broker IDs the partition must exist on.","items":{"format":"int32","type":"integer"},"type":"array"}},"type":"object"},"Resource":{"properties":{"acls":{"items":{"$ref":"#/components/schemas/Policy"},"type":"array"},"resource_name":{"type":"string"},"resource_pattern_type":{"$ref":"#/components/schemas/ResourcePatternType"},"resource_type":{"$ref":"#/components/schemas/ResourceType"}},"type":"object"},"ResourcePatternType":{"enum":["RESOURCE_PATTERN_TYPE_ANY","RESOURCE_PATTERN_TYPE_MATCH","RESOURCE_PATTERN_TYPE_LITERAL","RESOURCE_PATTERN_TYPE_PREFIXED"],"type":"string"},"ResourceType":{"enum":["RESOURCE_TYPE_ANY","RESOURCE_TYPE_TOPIC","RESOURCE_TYPE_GROUP","RESOURCE_TYPE_CLUSTER","RESOURCE_TYPE_TRANSACTIONAL_ID","RESOURCE_TYPE_DELEGATION_TOKEN","RESOURCE_TYPE_USER"],"type":"string"},"SASLMechanism":{"enum":["SASL_MECHANISM_SCRAM_SHA_256","SASL_MECHANISM_SCRAM_SHA_512"],"type":"string"},"Secret":{"properties":{"id":{"readOnly":true,"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"}},"title":"Secret defienes the secret resource","type":"object"},"SecretInput":{"properties":{"id":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"secret_data":{"format":"byte","type":"string"}},"required":["secret_data"],"type":"object"},"SetConfiguration":{"properties":{"key":{"type":"string"},"value":{"type":"string"}},"type":"object"},"SetTopicConfigurationResponse":{"properties":{"configuration":{"items":{"$ref":"#/components/schemas/Configuration"},"type":"array"}},"type":"object"},"Status":{"description":"The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors).","properties":{"code":{"description":"RPC status code, as described [here](https://github.com/googleapis/googleapis/blob/b4c238feaa1097c53798ed77035bbfeb7fc72e96/google/rpc/code.proto#L32).","enum":["OK","CANCELLED","UNKNOWN","INVALID_ARGUMENT","DEADLINE_EXCEEDED","NOT_FOUND","ALREADY_EXISTS","PERMISSION_DENIED","UNAUTHENTICATED","RESOURCE_EXHAUSTED","FAILED_PRECONDITION","ABORTED","OUT_OF_RANGE","UNIMPLEMENTED","INTERNAL","UNAVAILABLE","DATA_LOSS"],"format":"int32","type":"string"},"details":{"items":{"description":"Details of the error.","oneOf":[{"allOf":[{"properties":{"@type":{"description":"Fully qualified protobuf type name of the underlying response, prefixed with `type.googleapis.com/`.","enum":["type.googleapis.com/google.rpc.BadRequest"],"type":"string"}}},{"$ref":"#/components/schemas/BadRequest"}]},{"allOf":[{"properties":{"@type":{"description":"Fully qualified protobuf type name of the underlying response, prefixed with `type.googleapis.com/`.","enum":["type.googleapis.com/google.rpc.ErrorInfo"],"type":"string"}}},{"$ref":"#/components/schemas/ErrorInfo"}]},{"allOf":[{"properties":{"@type":{"description":"Fully qualified protobuf type name of the underlying response, prefixed with `type.googleapis.com/`.","enum":["type.googleapis.com/google.rpc.QuotaFailure"],"type":"string"}}},{"$ref":"#/components/schemas/QuotaFailure"}]},{"allOf":[{"properties":{"@type":{"description":"Fully qualified protobuf type name of the underlying response, prefixed with `type.googleapis.com/`.","enum":["type.googleapis.com/google.rpc.Help"],"type":"string"}}},{"$ref":"#/components/schemas/Help"}]}]},"type":"array"},"message":{"description":"Detailed error message. No compatibility guarantees are given for the text contained in this message.","type":"string"}},"type":"object"},"TaskInfo":{"properties":{"connector":{"type":"string"},"task":{"format":"int32","type":"integer"}},"type":"object"},"TaskStatus":{"properties":{"id":{"format":"int32","type":"integer"},"state":{"type":"string"},"trace":{"type":"string"},"worker_id":{"type":"string"}},"type":"object"},"UpdateConfiguration":{"properties":{"key":{"type":"string"},"operation":{"$ref":"#/components/schemas/ConfigAlterOperation"},"value":{"nullable":true,"type":"string"}},"type":"object"},"UpdateSecretResponse":{"properties":{"secret":{"$ref":"#/components/schemas/Secret"}},"title":"UpdateSecretResponse is the response of UpdateSecret","type":"object"},"UpdateTopicConfigurationsResponse":{"properties":{"configurations":{"description":"Topic's complete set of configurations after this partial patch has been applied.","items":{"$ref":"#/components/schemas/Configuration"},"type":"array"}},"type":"object"},"UpdateUserRequest.User":{"properties":{"mechanism":{"$ref":"#/components/schemas/SASLMechanism"},"name":{"type":"string"},"password":{"type":"string"}},"type":"object"},"UpdateUserResponse":{"properties":{"user":{"$ref":"#/components/schemas/UpdateUserResponse.User"}},"type":"object"},"UpdateUserResponse.User":{"properties":{"mechanism":{"$ref":"#/components/schemas/SASLMechanism"},"name":{"type":"string"}},"type":"object"},"UpsertConnectorResponse":{"properties":{"connector":{"$ref":"#/components/schemas/ConnectorSpec"}},"type":"object"},"v1alpha1.Topic":{"type":"object"}},"securitySchemes":{"auth0":{"description":"RedpandaCloud","flows":{"implicit":{"authorizationUrl":"https://prod-cloudv2.us.auth0.com/oauth/authorize","scopes":{},"x-client-id":"dQjapNIAHhF7EQqQToRla3yEII9sUSap"}},"type":"oauth2"}}},"info":{"description":"Welcome to Redpanda Cloud's Dataplane API documentation.","title":"Redpanda Cloud","version":"v1alpha1"},"openapi":"3.0.3","paths":{"/v1alpha1/acls":{"delete":{"description":"Delete all ACLs that match the given filter","operationId":"ACLService_DeleteACLs","parameters":[{"in":"query","name":"filter.resource_type","required":true,"schema":{"enum":["RESOURCE_TYPE_ANY","RESOURCE_TYPE_TOPIC","RESOURCE_TYPE_GROUP","RESOURCE_TYPE_CLUSTER","RESOURCE_TYPE_TRANSACTIONAL_ID","RESOURCE_TYPE_DELEGATION_TOKEN","RESOURCE_TYPE_USER"],"type":"string"}},{"in":"query","name":"filter.resource_name","schema":{"type":"string"}},{"in":"query","name":"filter.resource_pattern_type","required":true,"schema":{"enum":["RESOURCE_PATTERN_TYPE_ANY","RESOURCE_PATTERN_TYPE_MATCH","RESOURCE_PATTERN_TYPE_LITERAL","RESOURCE_PATTERN_TYPE_PREFIXED"],"type":"string"}},{"in":"query","name":"filter.principal","schema":{"type":"string"}},{"in":"query","name":"filter.host","schema":{"type":"string"}},{"in":"query","name":"filter.operation","required":true,"schema":{"enum":["OPERATION_ANY","OPERATION_ALL","OPERATION_READ","OPERATION_WRITE","OPERATION_CREATE","OPERATION_DELETE","OPERATION_ALTER","OPERATION_DESCRIBE","OPERATION_CLUSTER_ACTION","OPERATION_DESCRIBE_CONFIGS","OPERATION_ALTER_CONFIGS","OPERATION_IDEMPOTENT_WRITE","OPERATION_CREATE_TOKENS","OPERATION_DESCRIBE_TOKENS"],"type":"string"}},{"in":"query","name":"filter.permission_type","required":true,"schema":{"enum":["PERMISSION_TYPE_ANY","PERMISSION_TYPE_DENY","PERMISSION_TYPE_ALLOW"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteACLsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Delete ACLs","tags":["ACLService"]},"get":{"description":"List ACLs","operationId":"ACLService_ListACLs","parameters":[{"in":"query","name":"filter.resource_type","schema":{"enum":["RESOURCE_TYPE_ANY","RESOURCE_TYPE_TOPIC","RESOURCE_TYPE_GROUP","RESOURCE_TYPE_CLUSTER","RESOURCE_TYPE_TRANSACTIONAL_ID","RESOURCE_TYPE_DELEGATION_TOKEN","RESOURCE_TYPE_USER"],"type":"string"}},{"in":"query","name":"filter.resource_name","schema":{"type":"string"}},{"in":"query","name":"filter.resource_pattern_type","schema":{"enum":["RESOURCE_PATTERN_TYPE_ANY","RESOURCE_PATTERN_TYPE_MATCH","RESOURCE_PATTERN_TYPE_LITERAL","RESOURCE_PATTERN_TYPE_PREFIXED"],"type":"string"}},{"in":"query","name":"filter.principal","schema":{"type":"string"}},{"in":"query","name":"filter.host","schema":{"type":"string"}},{"in":"query","name":"filter.operation","schema":{"enum":["OPERATION_ANY","OPERATION_ALL","OPERATION_READ","OPERATION_WRITE","OPERATION_CREATE","OPERATION_DELETE","OPERATION_ALTER","OPERATION_DESCRIBE","OPERATION_CLUSTER_ACTION","OPERATION_DESCRIBE_CONFIGS","OPERATION_ALTER_CONFIGS","OPERATION_IDEMPOTENT_WRITE","OPERATION_CREATE_TOKENS","OPERATION_DESCRIBE_TOKENS"],"type":"string"}},{"in":"query","name":"filter.permission_type","schema":{"enum":["PERMISSION_TYPE_ANY","PERMISSION_TYPE_DENY","PERMISSION_TYPE_ALLOW"],"type":"string"}},{"description":"Limit the paginated response to a number of items.","in":"query","name":"page_size","schema":{"format":"int32","type":"integer"}},{"description":"Value of the next_page_token field returned by the previous response.\nIf not provided, the system assumes the first page is requested.","in":"query","name":"page_token","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListACLsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"List ACLs","tags":["ACLService"]},"post":{"description":"Create ACL","operationId":"ACLService_CreateACL","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateACLRequest"}}},"required":true,"x-originalParamName":"body"},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateACLResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Create ACL","tags":["ACLService"]}},"/v1alpha1/connect/clusters":{"get":{"description":"List connect clusters available for being consumed by the console's kafka-connect service.","operationId":"KafkaConnectService_ListConnectClusters","responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"List connect clusters","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}":{"get":{"description":"Get information about an available kafka connect cluster, use the cluster_name defined in console's configuration file.","operationId":"KafkaConnectService_GetConnectCluster","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Get connect cluster","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors":{"get":{"description":"List connectors managed by the kafka-connect service, use the cluster_name defined in the configuration file.","operationId":"KafkaConnectService_ListConnectors","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"description":"Value of the next_page_token field returned by the previous response. If not provided, the system assumes the first page is requested.","in":"query","name":"page_token","schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"List connectors","tags":["KafkaConnectService"]},"post":{"description":"Attempt to create a connector with the specific configuration.","operationId":"KafkaConnectService_CreateConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectorSpec"}}},"required":true,"x-originalParamName":"connector"},"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Create connector","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}":{"delete":{"description":"Delete a connector forcefully stoping all tasks and deleting its configuration.","operationId":"KafkaConnectService_DeleteConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Delete connector","tags":["KafkaConnectService"]},"get":{"description":"Get information about a connector in a specific cluster.","operationId":"KafkaConnectService_GetConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Get connector","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/config":{"get":{"description":"Get the configuration for the connector.","operationId":"KafkaConnectService_GetConnectorConfig","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Get connector configuration","tags":["KafkaConnectService"]},"put":{"description":"Create a new connector using the given configuration, or update the configuration for an existing connector. Returns information about the connector after the change has been made.","operationId":"KafkaConnectService_UpsertConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"required":["config"],"type":"object"}}},"required":true,"x-originalParamName":"config"},"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Upsert connector configuration","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/pause":{"put":{"description":"Pause the connector and its tasks, which stops message processing until the connector is resumed. This call asynchronous.","operationId":"KafkaConnectService_PauseConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Pause connector","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/restart":{"post":{"description":"Restarts a connector, triggers a connector restart, you can specify the only_failed or/and the include_tasks options.","operationId":"KafkaConnectService_RestartConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Options"}}},"required":true,"x-originalParamName":"options"},"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Restart connector","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/resume":{"put":{"description":"Resume a paused connector and its tasks, resumes message processing after the connector has been paused. It won't do nothing if the connector is not paused.","operationId":"KafkaConnectService_ResumeConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Resume connector","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/status":{"get":{"description":"Gets the current status of the connector, including, The state of all of its tasks, error information etc.","operationId":"KafkaConnectService_GetConnectorStatus","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Get connector status","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/stop":{"put":{"description":"Stops a connector, it stops the connector but does not delete the connector. All tasks for the connector are shut down completely.","operationId":"KafkaConnectService_StopConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Stop connector","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/topics":{"get":{"description":"Returns a list of connector topic names, it will return an empty list if the connector is not running.","operationId":"KafkaConnectService_ListConnectorTopics","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"List connector topics","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/topics/reset":{"put":{"description":"Resets the set of topic names that the connector has been using.","operationId":"KafkaConnectService_ResetConnectorTopics","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Reset connector topics","tags":["KafkaConnectService"]}},"/v1alpha1/secret/{secret.id}":{"put":{"description":"Update a Secret content.","operationId":"SecretService_UpdateSecret","parameters":[{"in":"path","name":"secret.id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"labels":{"additionalProperties":{"type":"string"},"type":"object"},"secret_data":{"format":"byte","type":"string"}},"required":["secret_data"],"type":"object"}}},"required":true,"x-originalParamName":"secret"},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Secret"}}},"description":"Ok"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Update Secret","tags":["SecretService"]}},"/v1alpha1/secrets":{"get":{"description":"List Secrets","operationId":"SecretService_ListSecrets","parameters":[{"in":"query","name":"filter.name","schema":{"type":"string"}},{"description":"This is a request variable of the map type. The query format is \"map_name[key]=value\", e.g. If the map name is Age, the key type is string, and the value type is integer, the query parameter is expressed as Age[\"bob\"]=18","in":"query","name":"filter.labels[string]","schema":{"type":"string"}},{"description":"Value of the next_page_token field returned by the previous response. If not provided, the system assumes the first page is requested.","in":"query","name":"page_token","schema":{"type":"string"}},{"description":"Limit the paginated response to a number of items.","in":"query","name":"page_size","schema":{"format":"int32","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListSecretsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"List Secrets","tags":["SecretService"]},"post":{"description":"Create a Secret.","operationId":"SecretService_CreateSecret","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecretInput"}}},"required":true,"x-originalParamName":"secret"},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Secret"}}},"description":"Secret Created."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Create Secret","tags":["SecretService"]}},"/v1alpha1/secrets/{id}":{"delete":{"description":"Delete a Secret.","operationId":"SecretService_DeleteSecret","parameters":[{"description":"The id of the secret you want to delete","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"application/json":{"schema":{}}},"description":"Secret was deleted successfully."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Delete Secret","tags":["SecretService"]}},"/v1alpha1/topics":{"get":{"description":"List Topics","operationId":"TopicService_ListTopics","parameters":[{"in":"query","name":"filter.name_contains","schema":{"type":"string"}},{"description":"Limit the paginated response to a number of items.","in":"query","name":"page_size","schema":{"format":"int32","type":"integer"}},{"description":"Value of the next_page_token field returned by the previous response. If not provided, the system assumes the first page is requested.","in":"query","name":"page_token","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListTopicsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"List Topics","tags":["TopicService"]},"post":{"description":"Create a Topic.","operationId":"TopicService_CreateTopic","parameters":[{"description":"ValidateOnly makes this request a dry-run; everything is validated but\nno topics are actually created.","in":"query","name":"validate_only","schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTopicRequest.Topic"}}},"description":"Topic is the topic to attempt to create.","required":true,"x-originalParamName":"topic"},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1alpha1.Topic"}}},"description":"Topic Created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Create Topic","tags":["TopicService"]}},"/v1alpha1/topics/{name}":{"delete":{"description":"Deletes the Kafka topic with the requested name.","operationId":"TopicService_DeleteTopic","parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"application/json":{"schema":{}}},"description":"Topic was deleted successfully"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"The requested topic does not exist"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Delete a Kafka topic","tags":["TopicService"]}},"/v1alpha1/topics/{topic_name}/configuration":{"put":{"description":"Set the entire configuration of a topic. Config entries not provided in the request are removed.","operationId":"TopicService_SetTopicConfiguration","parameters":[{"in":"path","name":"topic_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SetConfiguration"},"type":"array"}}},"required":true,"x-originalParamName":"configuration"},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTopicConfigurationResponse"}}},"description":"Ok"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Set Topic Configuration","tags":["TopicService"]}},"/v1alpha1/topics/{topic_name}/configurations":{"get":{"description":"Get Topic Configurations.","operationId":"TopicService_GetTopicConfigurations","parameters":[{"in":"path","name":"topic_name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTopicConfigurationsResponse"}}},"description":"Ok"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Get Topic Configurations","tags":["TopicService"]},"patch":{"description":"Updates a subset of the topic configuration.","operationId":"TopicService_UpdateTopicConfigurations","parameters":[{"in":"path","name":"topic_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UpdateConfiguration"},"type":"array"}}},"required":true,"x-originalParamName":"configurations"},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTopicConfigurationsResponse"}}},"description":"Ok"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Update Topic Configuration","tags":["TopicService"]}},"/v1alpha1/users":{"get":{"description":"List Users","operationId":"UserService_ListUsers","parameters":[{"in":"query","name":"name","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"users":[{"name":"payment-service"},{"name":"jane"}]},"schema":{"$ref":"#/components/schemas/ListUsersResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"List Users","tags":["UserService"]},"post":{"description":"Create a User.","operationId":"UserService_CreateUser","requestBody":{"content":{"application/json":{"example":{"mechanism":"SASL_MECHANISM_SCRAM_SHA_256","name":"payment-service","password":"secure-password"},"schema":{"$ref":"#/components/schemas/CreateUserRequest.User"}}},"required":true,"x-originalParamName":"user"},"responses":{"201":{"content":{"application/json":{"example":{"user":{"mechanism":"SASL_MECHANISM_SCRAM_SHA_256","name":"payment-service"}},"schema":{"$ref":"#/components/schemas/CreateUserRequest.User"}}},"description":"Creates a user"},"400":{"content":{"application/json":{"example":{"code":"INVALID_ARGUMENT","details":[{"@type":"type.googleapis.com/google.rpc.ErrorInfo","domain":"redpanda.com/dataplane","metadata":{},"reason":"REASON_INVALID_INPUT"},{"@type":"type.googleapis.com/google.rpc.BadRequest","field_violations":[{"description":"value length must be at least 3 characters","field":"user.password"},{"description":"value is required","field":"user.mechanism"}]}],"message":"provided parameters are invalid"},"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Bad Request. Check API documentation and update request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Create User","tags":["UserService"]}},"/v1alpha1/users/{name}":{"delete":{"description":"Delete Users","operationId":"UserService_DeleteUser","parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"application/json":{"example":{},"schema":{}}},"description":"User was deleted successfully."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"404":{"content":{"application/json":{"example":{"code":"NOT_FOUND","details":[{"@type":"type.googleapis.com/google.rpc.ErrorInfo","domain":"redpanda.com/dataplane","metadata":{},"reason":"REASON_RESOURCE_NOT_FOUND"}],"message":"user not found"},"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Delete Users","tags":["UserService"]}},"/v1alpha1/users/{user.name}":{"put":{"description":"Update a User.","operationId":"UserService_UpdateUser","parameters":[{"in":"path","name":"user.name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"user":{"mechanism":"SASL_MECHANISM_SCRAM_SHA_256","password":"new-password"}},"schema":{"properties":{"mechanism":{"$ref":"#/components/schemas/SASLMechanism"},"password":{"type":"string"}},"type":"object"}}},"required":true,"x-originalParamName":"user"},"responses":{"200":{"content":{"application/json":{"example":{"user":{"mechanism":"SASL_MECHANISM_SCRAM_SHA_256","name":"payment-service"}},"schema":{"$ref":"#/components/schemas/UpdateUserResponse.User"}}},"description":"Ok"},"400":{"content":{"application/json":{"example":{"code":"INVALID_ARGUMENT","details":[{"@type":"type.googleapis.com/google.rpc.ErrorInfo","domain":"redpanda.com/dataplane","metadata":{},"reason":"REASON_INVALID_INPUT"},{"@type":"type.googleapis.com/google.rpc.BadRequest","field_violations":[{"description":"value length must be at least 3 characters","field":"user.password"},{"description":"value is required","field":"user.mechanism"}]}],"message":"provided parameters are invalid"},"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Bad Request. Check API documentation and update request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Update User","tags":["UserService"]}}},"security":[{"auth0":[]}],"servers":[{"description":"Dataplane API","url":"{dataplane_api_url}","variables":{"dataplane_api_url":{"default":"https://api-a4cb21.ck09ma3c4vs12cng3cig.fmc.prd.cloud.redpanda.com","description":"Dataplane API.\u003cbr\u003e\n\t\t\t\t\tThe Dataplane API allows management of Topics,ACLs,Service accounts. It is exposed by each individual cluster.\n\t\t\t\t\tRetrieve the Dataplane API URL of a cluster by using the dataplane_api.url field returned by the Get Cluster endpoint.\u003cbr\u003e\u003cbr\u003e\n\t\t\t\t\tExample (Dedicated): https://api-a4cb21.ck09mi9c4vs17hng9gig.fmc.prd.cloud.redpanda.com\u003cbr\u003e\n\t\t\t\t\tExample (BYOC): https://api-a4cb21.ck09mi9c4vs17hng9gig.byoc.prd.cloud.redpanda.com"}}}],"tags":[{"name":"ACLService"},{"name":"KafkaConnectService"},{"name":"SecretService"},{"name":"TopicService"},{"name":"UserService"}]} \ No newline at end of file +{"components":{"schemas":{"ACL.Operation":{"enum":["OPERATION_ANY","OPERATION_ALL","OPERATION_READ","OPERATION_WRITE","OPERATION_CREATE","OPERATION_DELETE","OPERATION_ALTER","OPERATION_DESCRIBE","OPERATION_CLUSTER_ACTION","OPERATION_DESCRIBE_CONFIGS","OPERATION_ALTER_CONFIGS","OPERATION_IDEMPOTENT_WRITE","OPERATION_CREATE_TOKENS","OPERATION_DESCRIBE_TOKENS"],"type":"string"},"BadRequest":{"description":"Describes violations in a client request. This error type focuses on the\nsyntactic aspects of the request.","properties":{"field_violations":{"description":"Describes all violations in a client request.","items":{"$ref":"#/components/schemas/FieldViolation"},"type":"array"}},"title":"BadRequest","type":"object"},"Config":{"properties":{"name":{"description":"Name is a topic level config key (e.g. segment.bytes).","type":"string"},"value":{"nullable":true,"title":"Value is a topic level config value (e.g. 1073741824)","type":"string"}},"type":"object"},"ConfigAlterOperation":{"enum":["CONFIG_ALTER_OPERATION_SET","CONFIG_ALTER_OPERATION_DELETE","CONFIG_ALTER_OPERATION_APPEND","CONFIG_ALTER_OPERATION_SUBTRACT"],"type":"string"},"ConfigSource":{"enum":["CONFIG_SOURCE_DYNAMIC_TOPIC_CONFIG","CONFIG_SOURCE_DYNAMIC_BROKER_CONFIG","CONFIG_SOURCE_DYNAMIC_DEFAULT_BROKER_CONFIG","CONFIG_SOURCE_STATIC_BROKER_CONFIG","CONFIG_SOURCE_DEFAULT_CONFIG","CONFIG_SOURCE_DYNAMIC_BROKER_LOGGER_CONFIG"],"type":"string"},"ConfigSynonym":{"properties":{"name":{"type":"string"},"source":{"$ref":"#/components/schemas/ConfigSource"},"value":{"nullable":true,"type":"string"}},"type":"object"},"ConfigType":{"enum":["CONFIG_TYPE_BOOLEAN","CONFIG_TYPE_STRING","CONFIG_TYPE_INT","CONFIG_TYPE_SHORT","CONFIG_TYPE_LONG","CONFIG_TYPE_DOUBLE","CONFIG_TYPE_LIST","CONFIG_TYPE_CLASS","CONFIG_TYPE_PASSWORD"],"type":"string"},"Configuration":{"properties":{"config_synonyms":{"items":{"$ref":"#/components/schemas/ConfigSynonym"},"type":"array"},"documentation":{"nullable":true,"type":"string"},"is_read_only":{"type":"boolean"},"is_sensitive":{"type":"boolean"},"name":{"type":"string"},"source":{"$ref":"#/components/schemas/ConfigSource"},"type":{"$ref":"#/components/schemas/ConfigType"},"value":{"nullable":true,"type":"string"}},"type":"object"},"ConnectCluster":{"properties":{"address":{"type":"string"},"info":{"$ref":"#/components/schemas/ConnectCluster.Info"},"name":{"type":"string"},"plugins":{"items":{"$ref":"#/components/schemas/ConnectorPlugin"},"type":"array"}},"type":"object"},"ConnectCluster.Info":{"properties":{"commit":{"type":"string"},"kafka_cluster_id":{"type":"string"},"version":{"type":"string"}},"type":"object"},"Connector":{"properties":{"state":{"type":"string"},"trace":{"type":"string"},"worker_id":{"type":"string"}},"type":"object"},"ConnectorError":{"properties":{"content":{"type":"string"},"title":{"type":"string"},"type":{"$ref":"#/components/schemas/ConnectorError.Type"}},"title":"ConnectorError is the error of a connector, this is holistic error\nabstraction, made parsing the error trace of connector or Task","type":"object"},"ConnectorError.Type":{"enum":["TYPE_ERROR","TYPE_WARNING"],"type":"string"},"ConnectorHolisticState":{"description":"- CONNECTOR_HOLISTIC_STATE_PAUSED: PAUSED: The connector/task has been administratively paused.\n - CONNECTOR_HOLISTIC_STATE_RESTARTING: RESTARTING: he connector/task is restarting.\n - CONNECTOR_HOLISTIC_STATE_DESTROYED: DESTROYED: Connector is in destroyed state, regardless of any tasks.\n - CONNECTOR_HOLISTIC_STATE_STOPPED: STOPPED: The connector/task has been stopped.\n - CONNECTOR_HOLISTIC_STATE_UNASSIGNED: The connector/task has not yet been assigned to a worker\nUNASSIGNED: Connector is in unassigned state.\n Or Connector is in running state, and there are unassigned tasks.\n - CONNECTOR_HOLISTIC_STATE_HEALTHY: HEALTHY: Connector is in running state, \u003e 0 tasks, all of them in running state.\n - CONNECTOR_HOLISTIC_STATE_UNHEALTHY: UNHEALTHY: Connector is failed state.\n\t\t\tOr Connector is in running state but has 0 tasks.\n\t\t\tOr Connector is in running state, has \u003e 0 tasks, and all tasks are in failed state.\n - CONNECTOR_HOLISTIC_STATE_DEGRADED: DEGRADED: Connector is in running state, has \u003e 0 tasks, but has at least one state in failed state, but not all tasks are failed.\n - CONNECTOR_HOLISTIC_STATE_UNKNOWN: UNKNOWN: The connector/task could no be determined","enum":["CONNECTOR_HOLISTIC_STATE_PAUSED","CONNECTOR_HOLISTIC_STATE_RESTARTING","CONNECTOR_HOLISTIC_STATE_DESTROYED","CONNECTOR_HOLISTIC_STATE_STOPPED","CONNECTOR_HOLISTIC_STATE_UNASSIGNED","CONNECTOR_HOLISTIC_STATE_HEALTHY","CONNECTOR_HOLISTIC_STATE_UNHEALTHY","CONNECTOR_HOLISTIC_STATE_DEGRADED","CONNECTOR_HOLISTIC_STATE_UNKNOWN"],"title":"The following states are possible for a connector or one of its tasks\nimplement the state interface described in the Kafka connect API @see\nhttps://docs.confluent.io/platform/current/connect/monitoring.html#connector-and-task-status\nthis includes holistic unified connector status that takes into account not\njust the connector instance state, but also state of all the tasks within the\nconnector","type":"string"},"ConnectorInfoStatus":{"properties":{"info":{"$ref":"#/components/schemas/ConnectorSpec"},"name":{"title":"name is the connector name","type":"string"},"status":{"$ref":"#/components/schemas/ConnectorStatus"}},"type":"object"},"ConnectorPlugin":{"properties":{"class":{"type":"string"},"type":{"type":"string"},"version":{"type":"string"}},"type":"object"},"ConnectorSpec":{"properties":{"config":{"additionalProperties":{"type":"string"},"type":"object"},"name":{"type":"string"},"tasks":{"items":{"$ref":"#/components/schemas/TaskInfo"},"readOnly":true,"type":"array"},"type":{"readOnly":true,"type":"string"}},"required":["name","config"],"title":"ConectorInfo is the spec of the connector, as defined in the Kafka connect\nAPI, it can be used as input of the connector creation or output of the\nconnectors","type":"object"},"ConnectorStatus":{"properties":{"connector":{"$ref":"#/components/schemas/Connector"},"errors":{"items":{"$ref":"#/components/schemas/ConnectorError"},"title":"Errors is list of parsed connectors' and tasks' errors","type":"array"},"holistic_state":{"$ref":"#/components/schemas/ConnectorHolisticState"},"name":{"type":"string"},"tasks":{"items":{"$ref":"#/components/schemas/TaskStatus"},"type":"array"},"type":{"type":"string"}},"type":"object"},"CreateACLRequest":{"properties":{"host":{"description":"Host is the host address to use for this acl. Each host to allow\nthe principal access from must be specified as a new creation.","type":"string"},"operation":{"$ref":"#/components/schemas/ACL.Operation"},"permission_type":{"$ref":"#/components/schemas/PermissionType"},"principal":{"description":"Principal is the user to apply this acl for. With the Kafka simple\nauthorizer, this must begin with \"User:\".","type":"string"},"resource_name":{"description":"ResourceName is the name of the resource this acl entry will be on.\nFor requests with resource_type CLUSTER, this will default to the expected\nvalue \"kafka-cluster\".","type":"string"},"resource_pattern_type":{"$ref":"#/components/schemas/ResourcePatternType"},"resource_type":{"$ref":"#/components/schemas/ResourceType"}},"required":["resource_type","resource_pattern_type","principal","host","operation","permission_type"],"type":"object"},"CreateACLResponse":{"type":"object"},"CreateConnectorResponse":{"properties":{"connector":{"$ref":"#/components/schemas/ConnectorSpec"}},"type":"object"},"CreateSecretResponse":{"properties":{"secret":{"$ref":"#/components/schemas/Secret"}},"title":"CreateSecretResponse is the response of CreateSecret","type":"object"},"CreateTopicRequest.Topic":{"properties":{"configs":{"description":"Configs is an array of key value config pairs for a topic.\nThese correspond to Kafka Topic-Level Configs.","items":{"$ref":"#/components/schemas/Config"},"type":"array"},"name":{"description":"Name is the topic's name.","type":"string"},"partition_count":{"description":"NumPartitions is how many partitions to give a topic. This must\nbe null if specifying partitions manually (see ReplicaAssignment)\nor, to use the cluster default partitions.","format":"int32","nullable":true,"type":"integer"},"replica_assignment":{"description":"ReplicaAssignment is an array to manually dictate replicas and their\npartitions for a topic. If using this, both ReplicationFactor and\nNumPartitions must be -1.","items":{"$ref":"#/components/schemas/ReplicaAssignment"},"type":"array"},"replication_factor":{"description":"ReplicationFactor is how many replicas every partition must have.\nThis must be null if specifying partitions manually (see ReplicaAssignment)\nor, to use the cluster default replication factor.","format":"int32","nullable":true,"type":"integer"}},"type":"object"},"CreateTopicResponse":{"properties":{"name":{"description":"Name is the topic's name.","type":"string"}},"type":"object"},"CreateUserRequest.User":{"properties":{"mechanism":{"$ref":"#/components/schemas/SASLMechanism"},"name":{"type":"string"},"password":{"type":"string"}},"type":"object"},"CreateUserResponse":{"properties":{"user":{"$ref":"#/components/schemas/CreateUserResponse.User"}},"type":"object"},"CreateUserResponse.User":{"properties":{"mechanism":{"$ref":"#/components/schemas/SASLMechanism"},"name":{"type":"string"}},"type":"object"},"DeleteACLsRequest.Filter":{"properties":{"host":{"nullable":true,"type":"string"},"operation":{"$ref":"#/components/schemas/ACL.Operation"},"permission_type":{"$ref":"#/components/schemas/PermissionType"},"principal":{"nullable":true,"type":"string"},"resource_name":{"nullable":true,"type":"string"},"resource_pattern_type":{"$ref":"#/components/schemas/ResourcePatternType"},"resource_type":{"$ref":"#/components/schemas/ResourceType"}},"required":["resource_type","resource_pattern_type","operation","permission_type"],"type":"object"},"DeleteACLsResponse":{"properties":{"matching_acls":{"items":{"$ref":"#/components/schemas/MatchingACL"},"type":"array"}},"type":"object"},"DeleteSecretResponse":{"title":"DeleteSecretResponse is the response of DeleteSecret","type":"object"},"DeleteTopicResponse":{"type":"object"},"DeleteUserResponse":{"type":"object"},"ErrorInfo":{"description":"Describes the cause of the error with structured details.\n\nExample of an error when contacting the \"pubsub.googleapis.com\" API when it\nis not enabled:\n\n { \"reason\": \"API_DISABLED\"\n \"domain\": \"googleapis.com\"\n \"metadata\": {\n \"resource\": \"projects/123\",\n \"service\": \"pubsub.googleapis.com\"\n }\n }\n\nThis response indicates that the pubsub.googleapis.com API is not enabled.\n\nExample of an error that is returned when attempting to create a Spanner\ninstance in a region that is out of stock:\n\n { \"reason\": \"STOCKOUT\"\n \"domain\": \"spanner.googleapis.com\",\n \"metadata\": {\n \"availableRegions\": \"us-central1,us-east2\"\n }\n }","properties":{"domain":{"description":"The logical grouping to which the \"reason\" belongs. The error domain\nis typically the registered service name of the tool or product that\ngenerates the error. Example: \"pubsub.googleapis.com\". If the error is\ngenerated by some common infrastructure, the error domain must be a\nglobally unique value that identifies the infrastructure. For Google API\ninfrastructure, the error domain is \"googleapis.com\".","type":"string"},"metadata":{"additionalProperties":{"type":"string"},"description":"Additional structured details about this error.\n\nKeys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in\nlength. When identifying the current value of an exceeded limit, the units\nshould be contained in the key, not the value. For example, rather than\n{\"instanceLimit\": \"100/request\"}, should be returned as,\n{\"instanceLimitPerRequest\": \"100\"}, if the client exceeds the number of\ninstances that can be created in a single (batch) request.","type":"object"},"reason":{"description":"The reason of the error. This is a constant value that identifies the\nproximate cause of the error. Error reasons are unique within a particular\ndomain of errors. This should be at most 63 characters and match a\nregular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`, which represents\nUPPER_SNAKE_CASE.","type":"string"}},"title":"ErrorInfo","type":"object"},"FieldViolation":{"description":"A message type used to describe a single bad request field.","properties":{"description":{"description":"A description of why the request element is bad.","type":"string"},"field":{"description":"A path that leads to a field in the request body. The value will be a\nsequence of dot-separated identifiers that identify a protocol buffer\nfield.\n\nConsider the following:\n\n message CreateContactRequest {\n message EmailAddress {\n enum Type {\n TYPE_UNSPECIFIED = 0;\n HOME = 1;\n WORK = 2;\n }\n\n optional string email = 1;\n repeated EmailType type = 2;\n }\n\n string full_name = 1;\n repeated EmailAddress email_addresses = 2;\n }\n\nIn this example, in proto `field` could take one of the following values:\n\n* `full_name` for a violation in the `full_name` value\n* `email_addresses[1].email` for a violation in the `email` field of the\n first `email_addresses` message\n* `email_addresses[3].type[2]` for a violation in the second `type`\n value in the third `email_addresses` message.\n\nIn JSON, the same values are represented as:\n\n* `fullName` for a violation in the `fullName` value\n* `emailAddresses[1].email` for a violation in the `email` field of the\n first `emailAddresses` message\n* `emailAddresses[3].type[2]` for a violation in the second `type`\n value in the third `emailAddresses` message.","type":"string"}},"type":"object"},"GetConnectClusterResponse":{"properties":{"cluster":{"$ref":"#/components/schemas/ConnectCluster"}},"type":"object"},"GetConnectorConfigResponse":{"properties":{"config":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"GetConnectorResponse":{"properties":{"connector":{"$ref":"#/components/schemas/ConnectorSpec"}},"type":"object"},"GetConnectorStatusResponse":{"properties":{"status":{"$ref":"#/components/schemas/ConnectorStatus"}},"type":"object"},"GetTopicConfigurationsResponse":{"properties":{"configurations":{"items":{"$ref":"#/components/schemas/Configuration"},"type":"array"}},"type":"object"},"Help":{"description":"Provides links to documentation or for performing an out of band action.\n\nFor example, if a quota check failed with an error indicating the calling\nproject hasn't enabled the accessed service, this can contain a URL pointing\ndirectly to the right place in the developer console to flip the bit.","properties":{"links":{"description":"URL(s) pointing to additional information on handling the current error.","items":{"$ref":"#/components/schemas/Link"},"type":"array"}},"title":"Help","type":"object"},"Link":{"description":"Describes a URL link.","properties":{"description":{"description":"Describes what the link offers.","type":"string"},"url":{"description":"The URL of the link.","type":"string"}},"type":"object"},"ListACLsRequest.Filter":{"properties":{"host":{"nullable":true,"type":"string"},"operation":{"$ref":"#/components/schemas/ACL.Operation"},"permission_type":{"$ref":"#/components/schemas/PermissionType"},"principal":{"nullable":true,"type":"string"},"resource_name":{"nullable":true,"type":"string"},"resource_pattern_type":{"$ref":"#/components/schemas/ResourcePatternType"},"resource_type":{"$ref":"#/components/schemas/ResourceType"}},"type":"object"},"ListACLsResponse":{"properties":{"resources":{"items":{"$ref":"#/components/schemas/Resource"},"type":"array"}},"type":"object"},"ListConnectClustersResponse":{"properties":{"clusters":{"items":{"$ref":"#/components/schemas/ConnectCluster"},"type":"array"}},"type":"object"},"ListConnectorTopicsResponse":{"properties":{"topics":{"items":{"type":"string"},"type":"array"}},"type":"object"},"ListConnectorsResponse":{"properties":{"connectors":{"items":{"$ref":"#/components/schemas/ConnectorInfoStatus"},"title":"connectors is the list of connectors the key is the connector name","type":"array"},"next_page_token":{"description":"Page Token to fetch the next page. The value can be used as page_token in the next call to this endpoint.","type":"string"}},"type":"object"},"ListSecretsRequest.Filter":{"properties":{"labels[string]":{"additionalProperties":{"type":"string"},"type":"object"},"name":{"type":"string"}},"title":"Defines the filter for Secrets","type":"object"},"ListSecretsResponse":{"properties":{"next_page_token":{"description":"token to retrieve the next page.","type":"string"},"secrets":{"items":{"$ref":"#/components/schemas/Secret"},"type":"array"}},"title":"ListSecretsResponse is the response of ListSecrets","type":"object"},"ListTopicsRequest.Filter":{"properties":{"name_contains":{"type":"string"}},"type":"object"},"ListTopicsResponse":{"properties":{"next_page_token":{"type":"string"},"topics":{"items":{"$ref":"#/components/schemas/ListTopicsResponse.Topic"},"type":"array"}},"type":"object"},"ListTopicsResponse.Topic":{"properties":{"is_internal":{"type":"boolean"},"name":{"type":"string"},"partition_count":{"format":"int32","type":"integer"},"replication_factor":{"format":"int32","type":"integer"}},"type":"object"},"ListUsersResponse":{"properties":{"users":{"items":{"$ref":"#/components/schemas/ListUsersResponse.User"},"type":"array"}},"type":"object"},"ListUsersResponse.User":{"properties":{"mechanism":{"$ref":"#/components/schemas/SASLMechanism"},"name":{"type":"string"}},"type":"object"},"MatchingACL":{"properties":{"error":{"$ref":"#/components/schemas/Status"},"host":{"type":"string"},"operation":{"$ref":"#/components/schemas/ACL.Operation"},"permission_type":{"$ref":"#/components/schemas/PermissionType"},"principal":{"type":"string"},"resource_name":{"type":"string"},"resource_pattern_type":{"$ref":"#/components/schemas/ResourcePatternType"},"resource_type":{"$ref":"#/components/schemas/ResourceType"}},"type":"object"},"Options":{"properties":{"include_tasks":{"type":"boolean"},"only_failed":{"type":"boolean"}},"type":"object"},"PermissionType":{"enum":["PERMISSION_TYPE_ANY","PERMISSION_TYPE_DENY","PERMISSION_TYPE_ALLOW"],"type":"string"},"Policy":{"properties":{"host":{"type":"string"},"operation":{"$ref":"#/components/schemas/ACL.Operation"},"permission_type":{"$ref":"#/components/schemas/PermissionType"},"principal":{"type":"string"}},"type":"object"},"QuotaFailure":{"description":"Describes how a quota check failed.\n\nFor example if a daily limit was exceeded for the calling project,\na service could respond with a QuotaFailure detail containing the project\nid and the description of the quota limit that was exceeded. If the\ncalling project hasn't enabled the service in the developer console, then\na service could respond with the project id and set `service_disabled`\nto true.\n\nAlso see RetryInfo and Help types for other details about handling a\nquota failure.","properties":{"violations":{"description":"Describes all quota violations.","items":{"$ref":"#/components/schemas/QuotaFailure.Violation"},"type":"array"}},"title":"QuotaFailure","type":"object"},"QuotaFailure.Violation":{"description":"A message type used to describe a single quota violation. For example, a\ndaily quota or a custom quota that was exceeded.","properties":{"description":{"description":"A description of how the quota check failed. Clients can use this\ndescription to find more about the quota configuration in the service's\npublic documentation, or find the relevant quota limit to adjust through\ndeveloper console.\n\nFor example: \"Service disabled\" or \"Daily Limit for read operations\nexceeded\".","type":"string"},"subject":{"description":"The subject on which the quota check failed.\nFor example, \"clientip:\u003cip address of client\u003e\" or \"project:\u003cGoogle\ndeveloper project id\u003e\".","type":"string"}},"type":"object"},"ReplicaAssignment":{"properties":{"partition":{"description":"Partition is a partition to create.","format":"int32","type":"integer"},"replicas":{"description":"Replicas are broker IDs the partition must exist on.","items":{"format":"int32","type":"integer"},"type":"array"}},"type":"object"},"Resource":{"properties":{"acls":{"items":{"$ref":"#/components/schemas/Policy"},"type":"array"},"resource_name":{"type":"string"},"resource_pattern_type":{"$ref":"#/components/schemas/ResourcePatternType"},"resource_type":{"$ref":"#/components/schemas/ResourceType"}},"type":"object"},"ResourcePatternType":{"enum":["RESOURCE_PATTERN_TYPE_ANY","RESOURCE_PATTERN_TYPE_MATCH","RESOURCE_PATTERN_TYPE_LITERAL","RESOURCE_PATTERN_TYPE_PREFIXED"],"type":"string"},"ResourceType":{"enum":["RESOURCE_TYPE_ANY","RESOURCE_TYPE_TOPIC","RESOURCE_TYPE_GROUP","RESOURCE_TYPE_CLUSTER","RESOURCE_TYPE_TRANSACTIONAL_ID","RESOURCE_TYPE_DELEGATION_TOKEN","RESOURCE_TYPE_USER"],"type":"string"},"SASLMechanism":{"enum":["SASL_MECHANISM_SCRAM_SHA_256","SASL_MECHANISM_SCRAM_SHA_512"],"type":"string"},"Secret":{"properties":{"id":{"readOnly":true,"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"}},"title":"Secret defienes the secret resource","type":"object"},"SecretInput":{"properties":{"id":{"type":"string"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"secret_data":{"format":"byte","type":"string"}},"required":["secret_data"],"type":"object"},"SetConfiguration":{"properties":{"key":{"type":"string"},"value":{"nullable":true,"type":"string"}},"type":"object"},"SetTopicConfigurationsResponse":{"properties":{"configurations":{"items":{"$ref":"#/components/schemas/Configuration"},"type":"array"}},"type":"object"},"Status":{"description":"The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors).","properties":{"code":{"description":"RPC status code, as described [here](https://github.com/googleapis/googleapis/blob/b4c238feaa1097c53798ed77035bbfeb7fc72e96/google/rpc/code.proto#L32).","enum":["OK","CANCELLED","UNKNOWN","INVALID_ARGUMENT","DEADLINE_EXCEEDED","NOT_FOUND","ALREADY_EXISTS","PERMISSION_DENIED","UNAUTHENTICATED","RESOURCE_EXHAUSTED","FAILED_PRECONDITION","ABORTED","OUT_OF_RANGE","UNIMPLEMENTED","INTERNAL","UNAVAILABLE","DATA_LOSS"],"format":"int32","type":"string"},"details":{"items":{"description":"Details of the error.","oneOf":[{"allOf":[{"properties":{"@type":{"description":"Fully qualified protobuf type name of the underlying response, prefixed with `type.googleapis.com/`.","enum":["type.googleapis.com/google.rpc.BadRequest"],"type":"string"}}},{"$ref":"#/components/schemas/BadRequest"}]},{"allOf":[{"properties":{"@type":{"description":"Fully qualified protobuf type name of the underlying response, prefixed with `type.googleapis.com/`.","enum":["type.googleapis.com/google.rpc.ErrorInfo"],"type":"string"}}},{"$ref":"#/components/schemas/ErrorInfo"}]},{"allOf":[{"properties":{"@type":{"description":"Fully qualified protobuf type name of the underlying response, prefixed with `type.googleapis.com/`.","enum":["type.googleapis.com/google.rpc.QuotaFailure"],"type":"string"}}},{"$ref":"#/components/schemas/QuotaFailure"}]},{"allOf":[{"properties":{"@type":{"description":"Fully qualified protobuf type name of the underlying response, prefixed with `type.googleapis.com/`.","enum":["type.googleapis.com/google.rpc.Help"],"type":"string"}}},{"$ref":"#/components/schemas/Help"}]}]},"type":"array"},"message":{"description":"Detailed error message. No compatibility guarantees are given for the text contained in this message.","type":"string"}},"type":"object"},"TaskInfo":{"properties":{"connector":{"type":"string"},"task":{"format":"int32","type":"integer"}},"type":"object"},"TaskStatus":{"properties":{"id":{"format":"int32","type":"integer"},"state":{"type":"string"},"trace":{"type":"string"},"worker_id":{"type":"string"}},"type":"object"},"UpdateConfiguration":{"properties":{"key":{"type":"string"},"operation":{"$ref":"#/components/schemas/ConfigAlterOperation"},"value":{"nullable":true,"type":"string"}},"type":"object"},"UpdateSecretResponse":{"properties":{"secret":{"$ref":"#/components/schemas/Secret"}},"title":"UpdateSecretResponse is the response of UpdateSecret","type":"object"},"UpdateTopicConfigurationsResponse":{"properties":{"configurations":{"description":"Topic's complete set of configurations after this partial patch has been applied.","items":{"$ref":"#/components/schemas/Configuration"},"type":"array"}},"type":"object"},"UpdateUserRequest.User":{"properties":{"mechanism":{"$ref":"#/components/schemas/SASLMechanism"},"name":{"type":"string"},"password":{"type":"string"}},"type":"object"},"UpdateUserResponse":{"properties":{"user":{"$ref":"#/components/schemas/UpdateUserResponse.User"}},"type":"object"},"UpdateUserResponse.User":{"properties":{"mechanism":{"$ref":"#/components/schemas/SASLMechanism"},"name":{"type":"string"}},"type":"object"},"UpsertConnectorResponse":{"properties":{"connector":{"$ref":"#/components/schemas/ConnectorSpec"}},"type":"object"},"v1alpha1.Topic":{"type":"object"}},"securitySchemes":{"auth0":{"description":"RedpandaCloud","flows":{"implicit":{"authorizationUrl":"https://prod-cloudv2.us.auth0.com/oauth/authorize","scopes":{},"x-client-id":"dQjapNIAHhF7EQqQToRla3yEII9sUSap"}},"type":"oauth2"}}},"info":{"description":"Welcome to Redpanda Cloud's Dataplane API documentation.","title":"Redpanda Cloud","version":"v1alpha1"},"openapi":"3.0.3","paths":{"/v1alpha1/acls":{"delete":{"description":"Delete all ACLs that match the given filter","operationId":"ACLService_DeleteACLs","parameters":[{"in":"query","name":"filter.resource_type","required":true,"schema":{"enum":["RESOURCE_TYPE_ANY","RESOURCE_TYPE_TOPIC","RESOURCE_TYPE_GROUP","RESOURCE_TYPE_CLUSTER","RESOURCE_TYPE_TRANSACTIONAL_ID","RESOURCE_TYPE_DELEGATION_TOKEN","RESOURCE_TYPE_USER"],"type":"string"}},{"in":"query","name":"filter.resource_name","schema":{"type":"string"}},{"in":"query","name":"filter.resource_pattern_type","required":true,"schema":{"enum":["RESOURCE_PATTERN_TYPE_ANY","RESOURCE_PATTERN_TYPE_MATCH","RESOURCE_PATTERN_TYPE_LITERAL","RESOURCE_PATTERN_TYPE_PREFIXED"],"type":"string"}},{"in":"query","name":"filter.principal","schema":{"type":"string"}},{"in":"query","name":"filter.host","schema":{"type":"string"}},{"in":"query","name":"filter.operation","required":true,"schema":{"enum":["OPERATION_ANY","OPERATION_ALL","OPERATION_READ","OPERATION_WRITE","OPERATION_CREATE","OPERATION_DELETE","OPERATION_ALTER","OPERATION_DESCRIBE","OPERATION_CLUSTER_ACTION","OPERATION_DESCRIBE_CONFIGS","OPERATION_ALTER_CONFIGS","OPERATION_IDEMPOTENT_WRITE","OPERATION_CREATE_TOKENS","OPERATION_DESCRIBE_TOKENS"],"type":"string"}},{"in":"query","name":"filter.permission_type","required":true,"schema":{"enum":["PERMISSION_TYPE_ANY","PERMISSION_TYPE_DENY","PERMISSION_TYPE_ALLOW"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteACLsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Delete ACLs","tags":["ACLService"]},"get":{"description":"List ACLs","operationId":"ACLService_ListACLs","parameters":[{"in":"query","name":"filter.resource_type","schema":{"enum":["RESOURCE_TYPE_ANY","RESOURCE_TYPE_TOPIC","RESOURCE_TYPE_GROUP","RESOURCE_TYPE_CLUSTER","RESOURCE_TYPE_TRANSACTIONAL_ID","RESOURCE_TYPE_DELEGATION_TOKEN","RESOURCE_TYPE_USER"],"type":"string"}},{"in":"query","name":"filter.resource_name","schema":{"type":"string"}},{"in":"query","name":"filter.resource_pattern_type","schema":{"enum":["RESOURCE_PATTERN_TYPE_ANY","RESOURCE_PATTERN_TYPE_MATCH","RESOURCE_PATTERN_TYPE_LITERAL","RESOURCE_PATTERN_TYPE_PREFIXED"],"type":"string"}},{"in":"query","name":"filter.principal","schema":{"type":"string"}},{"in":"query","name":"filter.host","schema":{"type":"string"}},{"in":"query","name":"filter.operation","schema":{"enum":["OPERATION_ANY","OPERATION_ALL","OPERATION_READ","OPERATION_WRITE","OPERATION_CREATE","OPERATION_DELETE","OPERATION_ALTER","OPERATION_DESCRIBE","OPERATION_CLUSTER_ACTION","OPERATION_DESCRIBE_CONFIGS","OPERATION_ALTER_CONFIGS","OPERATION_IDEMPOTENT_WRITE","OPERATION_CREATE_TOKENS","OPERATION_DESCRIBE_TOKENS"],"type":"string"}},{"in":"query","name":"filter.permission_type","schema":{"enum":["PERMISSION_TYPE_ANY","PERMISSION_TYPE_DENY","PERMISSION_TYPE_ALLOW"],"type":"string"}},{"description":"Limit the paginated response to a number of items.","in":"query","name":"page_size","schema":{"format":"int32","type":"integer"}},{"description":"Value of the next_page_token field returned by the previous response.\nIf not provided, the system assumes the first page is requested.","in":"query","name":"page_token","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListACLsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"List ACLs","tags":["ACLService"]},"post":{"description":"Create ACL","operationId":"ACLService_CreateACL","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateACLRequest"}}},"required":true,"x-originalParamName":"body"},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateACLResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Create ACL","tags":["ACLService"]}},"/v1alpha1/connect/clusters":{"get":{"description":"List connect clusters available for being consumed by the console's kafka-connect service.","operationId":"KafkaConnectService_ListConnectClusters","responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"List connect clusters","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}":{"get":{"description":"Get information about an available kafka connect cluster, use the cluster_name defined in console's configuration file.","operationId":"KafkaConnectService_GetConnectCluster","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Get connect cluster","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors":{"get":{"description":"List connectors managed by the kafka-connect service, use the cluster_name defined in the configuration file.","operationId":"KafkaConnectService_ListConnectors","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"description":"Value of the next_page_token field returned by the previous response. If not provided, the system assumes the first page is requested.","in":"query","name":"page_token","schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"List connectors","tags":["KafkaConnectService"]},"post":{"description":"Attempt to create a connector with the specific configuration.","operationId":"KafkaConnectService_CreateConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectorSpec"}}},"required":true,"x-originalParamName":"connector"},"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Create connector","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}":{"delete":{"description":"Delete a connector forcefully stoping all tasks and deleting its configuration.","operationId":"KafkaConnectService_DeleteConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Delete connector","tags":["KafkaConnectService"]},"get":{"description":"Get information about a connector in a specific cluster.","operationId":"KafkaConnectService_GetConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Get connector","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/config":{"get":{"description":"Get the configuration for the connector.","operationId":"KafkaConnectService_GetConnectorConfig","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Get connector configuration","tags":["KafkaConnectService"]},"put":{"description":"Create a new connector using the given configuration, or update the configuration for an existing connector. Returns information about the connector after the change has been made.","operationId":"KafkaConnectService_UpsertConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"required":["config"],"type":"object"}}},"required":true,"x-originalParamName":"config"},"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Upsert connector configuration","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/pause":{"put":{"description":"Pause the connector and its tasks, which stops message processing until the connector is resumed. This call asynchronous.","operationId":"KafkaConnectService_PauseConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Pause connector","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/restart":{"post":{"description":"Restarts a connector, triggers a connector restart, you can specify the only_failed or/and the include_tasks options.","operationId":"KafkaConnectService_RestartConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Options"}}},"required":true,"x-originalParamName":"options"},"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Restart connector","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/resume":{"put":{"description":"Resume a paused connector and its tasks, resumes message processing after the connector has been paused. It won't do nothing if the connector is not paused.","operationId":"KafkaConnectService_ResumeConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Resume connector","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/status":{"get":{"description":"Gets the current status of the connector, including, The state of all of its tasks, error information etc.","operationId":"KafkaConnectService_GetConnectorStatus","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Get connector status","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/stop":{"put":{"description":"Stops a connector, it stops the connector but does not delete the connector. All tasks for the connector are shut down completely.","operationId":"KafkaConnectService_StopConnector","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Stop connector","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/topics":{"get":{"description":"Returns a list of connector topic names, it will return an empty list if the connector is not running.","operationId":"KafkaConnectService_ListConnectorTopics","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"List connector topics","tags":["KafkaConnectService"]}},"/v1alpha1/connect/clusters/{cluster_name}/connectors/{name}/topics/reset":{"put":{"description":"Resets the set of topic names that the connector has been using.","operationId":"KafkaConnectService_ResetConnectorTopics","parameters":[{"in":"path","name":"cluster_name","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Reset connector topics","tags":["KafkaConnectService"]}},"/v1alpha1/secret/{secret.id}":{"put":{"description":"Update a Secret content.","operationId":"SecretService_UpdateSecret","parameters":[{"in":"path","name":"secret.id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"labels":{"additionalProperties":{"type":"string"},"type":"object"},"secret_data":{"format":"byte","type":"string"}},"required":["secret_data"],"type":"object"}}},"required":true,"x-originalParamName":"secret"},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Secret"}}},"description":"Ok"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Update Secret","tags":["SecretService"]}},"/v1alpha1/secrets":{"get":{"description":"List Secrets","operationId":"SecretService_ListSecrets","parameters":[{"in":"query","name":"filter.name","schema":{"type":"string"}},{"description":"This is a request variable of the map type. The query format is \"map_name[key]=value\", e.g. If the map name is Age, the key type is string, and the value type is integer, the query parameter is expressed as Age[\"bob\"]=18","in":"query","name":"filter.labels[string]","schema":{"type":"string"}},{"description":"Value of the next_page_token field returned by the previous response. If not provided, the system assumes the first page is requested.","in":"query","name":"page_token","schema":{"type":"string"}},{"description":"Limit the paginated response to a number of items.","in":"query","name":"page_size","schema":{"format":"int32","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListSecretsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"List Secrets","tags":["SecretService"]},"post":{"description":"Create a Secret.","operationId":"SecretService_CreateSecret","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecretInput"}}},"required":true,"x-originalParamName":"secret"},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Secret"}}},"description":"Secret Created."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Create Secret","tags":["SecretService"]}},"/v1alpha1/secrets/{id}":{"delete":{"description":"Delete a Secret.","operationId":"SecretService_DeleteSecret","parameters":[{"description":"The id of the secret you want to delete","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"application/json":{"schema":{}}},"description":"Secret was deleted successfully."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Delete Secret","tags":["SecretService"]}},"/v1alpha1/topics":{"get":{"description":"List Topics","operationId":"TopicService_ListTopics","parameters":[{"in":"query","name":"filter.name_contains","schema":{"type":"string"}},{"description":"Limit the paginated response to a number of items.","in":"query","name":"page_size","schema":{"format":"int32","type":"integer"}},{"description":"Value of the next_page_token field returned by the previous response. If not provided, the system assumes the first page is requested.","in":"query","name":"page_token","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListTopicsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"List Topics","tags":["TopicService"]},"post":{"description":"Create a Topic.","operationId":"TopicService_CreateTopic","parameters":[{"description":"ValidateOnly makes this request a dry-run; everything is validated but\nno topics are actually created.","in":"query","name":"validate_only","schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTopicRequest.Topic"}}},"description":"Topic is the topic to attempt to create.","required":true,"x-originalParamName":"topic"},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/v1alpha1.Topic"}}},"description":"Topic Created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Create Topic","tags":["TopicService"]}},"/v1alpha1/topics/{name}":{"delete":{"description":"Deletes the Kafka topic with the requested name.","operationId":"TopicService_DeleteTopic","parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"application/json":{"schema":{}}},"description":"Topic was deleted successfully"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"The requested topic does not exist"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Delete a Kafka topic","tags":["TopicService"]}},"/v1alpha1/topics/{topic_name}/configurations":{"get":{"description":"Get Topic Configurations.","operationId":"TopicService_GetTopicConfigurations","parameters":[{"in":"path","name":"topic_name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTopicConfigurationsResponse"}}},"description":"Ok"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Get Topic Configurations","tags":["TopicService"]},"patch":{"description":"Updates a subset of the topic configuration.","operationId":"TopicService_UpdateTopicConfigurations","parameters":[{"in":"path","name":"topic_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UpdateConfiguration"},"type":"array"}}},"required":true,"x-originalParamName":"configurations"},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTopicConfigurationsResponse"}}},"description":"Ok"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Update Topic Configuration","tags":["TopicService"]},"put":{"description":"Set the entire set of configurations for a topic. Config entries that are not provided in the request are removed and will fall-back to their default values.","operationId":"TopicService_SetTopicConfigurations","parameters":[{"in":"path","name":"topic_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SetConfiguration"},"type":"array"}}},"required":true,"x-originalParamName":"configurations"},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTopicConfigurationsResponse"}}},"description":"Ok"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Set Topic Configurations","tags":["TopicService"]}},"/v1alpha1/users":{"get":{"description":"List Users","operationId":"UserService_ListUsers","parameters":[{"in":"query","name":"name","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"users":[{"name":"payment-service"},{"name":"jane"}]},"schema":{"$ref":"#/components/schemas/ListUsersResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"List Users","tags":["UserService"]},"post":{"description":"Create a User.","operationId":"UserService_CreateUser","requestBody":{"content":{"application/json":{"example":{"mechanism":"SASL_MECHANISM_SCRAM_SHA_256","name":"payment-service","password":"secure-password"},"schema":{"$ref":"#/components/schemas/CreateUserRequest.User"}}},"required":true,"x-originalParamName":"user"},"responses":{"201":{"content":{"application/json":{"example":{"user":{"mechanism":"SASL_MECHANISM_SCRAM_SHA_256","name":"payment-service"}},"schema":{"$ref":"#/components/schemas/CreateUserRequest.User"}}},"description":"Creates a user"},"400":{"content":{"application/json":{"example":{"code":"INVALID_ARGUMENT","details":[{"@type":"type.googleapis.com/google.rpc.ErrorInfo","domain":"redpanda.com/dataplane","metadata":{},"reason":"REASON_INVALID_INPUT"},{"@type":"type.googleapis.com/google.rpc.BadRequest","field_violations":[{"description":"value length must be at least 3 characters","field":"user.password"},{"description":"value is required","field":"user.mechanism"}]}],"message":"provided parameters are invalid"},"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Bad Request. Check API documentation and update request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Create User","tags":["UserService"]}},"/v1alpha1/users/{name}":{"delete":{"description":"Delete Users","operationId":"UserService_DeleteUser","parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"204":{"content":{"application/json":{"example":{},"schema":{}}},"description":"User was deleted successfully."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"404":{"content":{"application/json":{"example":{"code":"NOT_FOUND","details":[{"@type":"type.googleapis.com/google.rpc.ErrorInfo","domain":"redpanda.com/dataplane","metadata":{},"reason":"REASON_RESOURCE_NOT_FOUND"}],"message":"user not found"},"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Delete Users","tags":["UserService"]}},"/v1alpha1/users/{user.name}":{"put":{"description":"Update a User.","operationId":"UserService_UpdateUser","parameters":[{"in":"path","name":"user.name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"user":{"mechanism":"SASL_MECHANISM_SCRAM_SHA_256","password":"new-password"}},"schema":{"properties":{"mechanism":{"$ref":"#/components/schemas/SASLMechanism"},"password":{"type":"string"}},"type":"object"}}},"required":true,"x-originalParamName":"user"},"responses":{"200":{"content":{"application/json":{"example":{"user":{"mechanism":"SASL_MECHANISM_SCRAM_SHA_256","name":"payment-service"}},"schema":{"$ref":"#/components/schemas/UpdateUserResponse.User"}}},"description":"Ok"},"400":{"content":{"application/json":{"example":{"code":"INVALID_ARGUMENT","details":[{"@type":"type.googleapis.com/google.rpc.ErrorInfo","domain":"redpanda.com/dataplane","metadata":{},"reason":"REASON_INVALID_INPUT"},{"@type":"type.googleapis.com/google.rpc.BadRequest","field_violations":[{"description":"value length must be at least 3 characters","field":"user.password"},{"description":"value is required","field":"user.mechanism"}]}],"message":"provided parameters are invalid"},"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Bad Request. Check API documentation and update request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Unauthenticated."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"Internal Server Error. Reach out to support."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}},"description":"An unexpected error response."}},"summary":"Update User","tags":["UserService"]}}},"security":[{"auth0":[]}],"servers":[{"description":"Dataplane API","url":"{dataplane_api_url}","variables":{"dataplane_api_url":{"default":"https://api-a4cb21.ck09ma3c4vs12cng3cig.fmc.prd.cloud.redpanda.com","description":"Dataplane API.\u003cbr\u003e\n\t\t\t\t\tThe Dataplane API allows management of Topics,ACLs,Service accounts. It is exposed by each individual cluster.\n\t\t\t\t\tRetrieve the Dataplane API URL of a cluster by using the dataplane_api.url field returned by the Get Cluster endpoint.\u003cbr\u003e\u003cbr\u003e\n\t\t\t\t\tExample (Dedicated): https://api-a4cb21.ck09mi9c4vs17hng9gig.fmc.prd.cloud.redpanda.com\u003cbr\u003e\n\t\t\t\t\tExample (BYOC): https://api-a4cb21.ck09mi9c4vs17hng9gig.byoc.prd.cloud.redpanda.com"}}}],"tags":[{"name":"ACLService"},{"name":"KafkaConnectService"},{"name":"SecretService"},{"name":"TopicService"},{"name":"UserService"}]} \ No newline at end of file diff --git a/proto/gen/openapi/openapi.yaml b/proto/gen/openapi/openapi.yaml index f8a5170a7..ffb50d9ce 100644 --- a/proto/gen/openapi/openapi.yaml +++ b/proto/gen/openapi/openapi.yaml @@ -832,11 +832,12 @@ components: key: type: string value: + nullable: true type: string type: object - SetTopicConfigurationResponse: + SetTopicConfigurationsResponse: properties: - configuration: + configurations: items: $ref: '#/components/schemas/Configuration' type: array @@ -2131,31 +2132,22 @@ paths: summary: Delete a Kafka topic tags: - TopicService - /v1alpha1/topics/{topic_name}/configuration: - put: - description: Set the entire configuration of a topic. Config entries not provided in the request are removed. - operationId: TopicService_SetTopicConfiguration + /v1alpha1/topics/{topic_name}/configurations: + get: + description: Get Topic Configurations. + operationId: TopicService_GetTopicConfigurations parameters: - in: path name: topic_name required: true schema: type: string - requestBody: - content: - application/json: - schema: - items: - $ref: '#/components/schemas/SetConfiguration' - type: array - required: true - x-originalParamName: configuration responses: "200": content: application/json: schema: - $ref: '#/components/schemas/SetTopicConfigurationResponse' + $ref: '#/components/schemas/GetTopicConfigurationsResponse' description: Ok "401": content: @@ -2181,25 +2173,33 @@ paths: schema: $ref: '#/components/schemas/Status' description: An unexpected error response. - summary: Set Topic Configuration + summary: Get Topic Configurations tags: - TopicService - /v1alpha1/topics/{topic_name}/configurations: - get: - description: Get Topic Configurations. - operationId: TopicService_GetTopicConfigurations + patch: + description: Updates a subset of the topic configuration. + operationId: TopicService_UpdateTopicConfigurations parameters: - in: path name: topic_name required: true schema: type: string + requestBody: + content: + application/json: + schema: + items: + $ref: '#/components/schemas/UpdateConfiguration' + type: array + required: true + x-originalParamName: configurations responses: "200": content: application/json: schema: - $ref: '#/components/schemas/GetTopicConfigurationsResponse' + $ref: '#/components/schemas/UpdateTopicConfigurationsResponse' description: Ok "401": content: @@ -2225,12 +2225,12 @@ paths: schema: $ref: '#/components/schemas/Status' description: An unexpected error response. - summary: Get Topic Configurations + summary: Update Topic Configuration tags: - TopicService - patch: - description: Updates a subset of the topic configuration. - operationId: TopicService_UpdateTopicConfigurations + put: + description: Set the entire set of configurations for a topic. Config entries that are not provided in the request are removed and will fall-back to their default values. + operationId: TopicService_SetTopicConfigurations parameters: - in: path name: topic_name @@ -2242,7 +2242,7 @@ paths: application/json: schema: items: - $ref: '#/components/schemas/UpdateConfiguration' + $ref: '#/components/schemas/SetConfiguration' type: array required: true x-originalParamName: configurations @@ -2251,7 +2251,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/UpdateTopicConfigurationsResponse' + $ref: '#/components/schemas/SetTopicConfigurationsResponse' description: Ok "401": content: @@ -2277,7 +2277,7 @@ paths: schema: $ref: '#/components/schemas/Status' description: An unexpected error response. - summary: Update Topic Configuration + summary: Set Topic Configurations tags: - TopicService /v1alpha1/users: diff --git a/proto/redpanda/api/dataplane/v1alpha1/topic.proto b/proto/redpanda/api/dataplane/v1alpha1/topic.proto index 24d47d939..0f5b2be74 100644 --- a/proto/redpanda/api/dataplane/v1alpha1/topic.proto +++ b/proto/redpanda/api/dataplane/v1alpha1/topic.proto @@ -184,17 +184,17 @@ message UpdateTopicConfigurationsResponse { repeated Topic.Configuration configurations = 1; } -message SetTopicConfigurationRequest { +message SetTopicConfigurationsRequest { message SetConfiguration { string key = 1; - string value = 2; + optional string value = 2; } string topic_name = 1; - repeated SetConfiguration configuration = 2; + repeated SetConfiguration configurations = 2; } -message SetTopicConfigurationResponse { - repeated Topic.Configuration configuration = 1; +message SetTopicConfigurationsResponse { + repeated Topic.Configuration configurations = 1; } service TopicService { @@ -313,20 +313,21 @@ service TopicService { } }; } - rpc SetTopicConfiguration(SetTopicConfigurationRequest) returns (SetTopicConfigurationResponse) { + rpc SetTopicConfigurations(SetTopicConfigurationsRequest) returns (SetTopicConfigurationsResponse) { option (google.api.http) = { - put: "/v1alpha1/topics/{topic_name}/configuration" - body: "configuration" + put: "/v1alpha1/topics/{topic_name}/configurations" + body: "configurations" + response_body: "configurations" }; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { - summary: "Set Topic Configuration" - description: "Set the entire configuration of a topic. Config entries not provided in the request are removed." + summary: "Set Topic Configurations" + description: "Set the entire set of configurations for a topic. Config entries that are not provided in the request are removed and will fall-back to their default values." responses: { key: "200" value: { description: "Ok" schema: { - json_schema: {ref: ".redpanda.api.dataplane.v1alpha1.SetTopicConfigurationResponse"} + json_schema: {ref: ".redpanda.api.dataplane.v1alpha1.SetTopicConfigurationsResponse"} } } }