From fba50cf9d55099c0aa6964dd66545eb4f9600db6 Mon Sep 17 00:00:00 2001 From: Safeer Jiwan Date: Tue, 4 Jun 2024 10:31:54 -0700 Subject: [PATCH] fix: AdminService, config & secret CLI refactor, `--op=VAULT` deprecated (#1565) Fixes #1473 by providing an `AdminService` and refactoring `cmd_config.go` and `cmd_secret.go` to use that service. The following CLI changes are included that may break existing clients: - `ftl config` and `ftl secret` now require a running controller - `ftl secret set --op=VAULT` is no longer supported - `ftl-controller` and `ftl dev` accept a 1Password vault using `--opvault=VAULT` - `ftl secret set --op` is supported, where `op` is a bool flag that requires the controller to have an `--opvault` --- backend/controller/admin.go | 199 ++ backend/controller/controller.go | 5 + backend/protos/xyz/block/ftl/v1/ftl.pb.go | 2553 +++++++++++++---- backend/protos/xyz/block/ftl/v1/ftl.proto | 123 + .../block/ftl/v1/ftlv1connect/ftl.connect.go | 299 ++ cmd/ftl/cmd_config.go | 115 +- cmd/ftl/cmd_secret.go | 114 +- cmd/ftl/main.go | 4 + common/configuration/1password_provider.go | 3 + common/configuration/defaults.go | 4 - common/configuration/manager.go | 14 +- .../protos/xyz/block/ftl/v1/ftl_connect.ts | 112 +- .../src/protos/xyz/block/ftl/v1/ftl_pb.ts | 809 ++++++ 13 files changed, 3705 insertions(+), 649 deletions(-) create mode 100644 backend/controller/admin.go diff --git a/backend/controller/admin.go b/backend/controller/admin.go new file mode 100644 index 0000000000..a1d88950ad --- /dev/null +++ b/backend/controller/admin.go @@ -0,0 +1,199 @@ +package controller + +import ( + "context" + "encoding/json" + "fmt" + + "connectrpc.com/connect" + + ftlv1 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1" + "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" + cf "github.com/TBD54566975/ftl/common/configuration" +) + +type AdminService struct { + cm *cf.Manager[cf.Configuration] + sm *cf.Manager[cf.Secrets] +} + +var _ ftlv1connect.AdminServiceHandler = (*AdminService)(nil) + +func NewAdminService(cm *cf.Manager[cf.Configuration], sm *cf.Manager[cf.Secrets]) *AdminService { + return &AdminService{ + cm: cm, + sm: sm, + } +} + +func (s *AdminService) Ping(ctx context.Context, req *connect.Request[ftlv1.PingRequest]) (*connect.Response[ftlv1.PingResponse], error) { + return connect.NewResponse(&ftlv1.PingResponse{}), nil +} + +// ConfigList returns the list of configuration values, optionally filtered by module. +func (s *AdminService) ConfigList(ctx context.Context, req *connect.Request[ftlv1.ListConfigRequest]) (*connect.Response[ftlv1.ListConfigResponse], error) { + listing, err := s.cm.List(ctx) + if err != nil { + return nil, err + } + + configs := []*ftlv1.ListConfigResponse_Config{} + for _, config := range listing { + module, ok := config.Module.Get() + if *req.Msg.Module != "" && module != *req.Msg.Module { + continue + } + + ref := config.Name + if ok { + ref = fmt.Sprintf("%s.%s", module, config.Name) + } + + var cv []byte + if *req.Msg.IncludeValues { + var value any + err := s.cm.Get(ctx, config.Ref, &value) + if err != nil { + return nil, err + } + cv, _ = json.Marshal(value) + } + + configs = append(configs, &ftlv1.ListConfigResponse_Config{ + RefPath: ref, + Value: cv, + }) + } + return connect.NewResponse(&ftlv1.ListConfigResponse{Configs: configs}), nil +} + +// ConfigGet returns the configuration value for a given ref string. +func (s *AdminService) ConfigGet(ctx context.Context, req *connect.Request[ftlv1.GetConfigRequest]) (*connect.Response[ftlv1.GetConfigResponse], error) { + var value any + err := s.cm.Get(ctx, cf.NewRef(*req.Msg.Ref.Module, req.Msg.Ref.Name), &value) + if err != nil { + return nil, err + } + vb, err := json.MarshalIndent(value, "", " ") + if err != nil { + return nil, err + } + return connect.NewResponse(&ftlv1.GetConfigResponse{Value: vb}), nil +} + +func configProviderKey(p *ftlv1.ConfigProvider) string { + if p == nil { + return "" + } + switch *p { + case ftlv1.ConfigProvider_CONFIG_INLINE: + return "inline" + case ftlv1.ConfigProvider_CONFIG_ENVAR: + return "envar" + } + return "" +} + +// ConfigSet sets the configuration at the given ref to the provided value. +func (s *AdminService) ConfigSet(ctx context.Context, req *connect.Request[ftlv1.SetConfigRequest]) (*connect.Response[ftlv1.SetConfigResponse], error) { + pkey := configProviderKey(req.Msg.Provider) + err := s.cm.Set(ctx, pkey, cf.NewRef(*req.Msg.Ref.Module, req.Msg.Ref.Name), string(req.Msg.Value)) + if err != nil { + return nil, err + } + return connect.NewResponse(&ftlv1.SetConfigResponse{}), nil +} + +// ConfigUnset unsets the config value at the given ref. +func (s *AdminService) ConfigUnset(ctx context.Context, req *connect.Request[ftlv1.UnsetConfigRequest]) (*connect.Response[ftlv1.UnsetConfigResponse], error) { + pkey := configProviderKey(req.Msg.Provider) + err := s.cm.Unset(ctx, pkey, cf.NewRef(*req.Msg.Ref.Module, req.Msg.Ref.Name)) + if err != nil { + return nil, err + } + return connect.NewResponse(&ftlv1.UnsetConfigResponse{}), nil +} + +// SecretsList returns the list of secrets, optionally filtered by module. +func (s *AdminService) SecretsList(ctx context.Context, req *connect.Request[ftlv1.ListSecretsRequest]) (*connect.Response[ftlv1.ListSecretsResponse], error) { + listing, err := s.sm.List(ctx) + if err != nil { + return nil, err + } + secrets := []*ftlv1.ListSecretsResponse_Secret{} + for _, secret := range listing { + module, ok := secret.Module.Get() + if *req.Msg.Module != "" && module != *req.Msg.Module { + continue + } + ref := secret.Name + if ok { + ref = fmt.Sprintf("%s.%s", module, secret.Name) + } + var sv []byte + if *req.Msg.IncludeValues { + var value any + err := s.sm.Get(ctx, secret.Ref, &value) + if err != nil { + return nil, err + } + sv, _ = json.Marshal(value) + } + secrets = append(secrets, &ftlv1.ListSecretsResponse_Secret{ + RefPath: ref, + Value: sv, + }) + } + return connect.NewResponse(&ftlv1.ListSecretsResponse{Secrets: secrets}), nil +} + +// SecretGet returns the secret value for a given ref string. +func (s *AdminService) SecretGet(ctx context.Context, req *connect.Request[ftlv1.GetSecretRequest]) (*connect.Response[ftlv1.GetSecretResponse], error) { + var value any + err := s.sm.Get(ctx, cf.NewRef(*req.Msg.Ref.Module, req.Msg.Ref.Name), &value) + if err != nil { + return nil, err + } + vb, err := json.MarshalIndent(value, "", " ") + if err != nil { + return nil, err + } + return connect.NewResponse(&ftlv1.GetSecretResponse{Value: vb}), nil +} + +func secretProviderKey(p *ftlv1.SecretProvider) string { + if p == nil { + return "" + } + switch *p { + case ftlv1.SecretProvider_SECRET_INLINE: + return "inline" + case ftlv1.SecretProvider_SECRET_ENVAR: + return "envar" + case ftlv1.SecretProvider_SECRET_KEYCHAIN: + return "keychain" + case ftlv1.SecretProvider_SECRET_OP: + return "op" + } + return "" +} + +// SecretSet sets the secret at the given ref to the provided value. +func (s *AdminService) SecretSet(ctx context.Context, req *connect.Request[ftlv1.SetSecretRequest]) (*connect.Response[ftlv1.SetSecretResponse], error) { + pkey := secretProviderKey(req.Msg.Provider) + err := s.sm.Set(ctx, pkey, cf.NewRef(*req.Msg.Ref.Module, req.Msg.Ref.Name), string(req.Msg.Value)) + if err != nil { + return nil, err + } + return connect.NewResponse(&ftlv1.SetSecretResponse{}), nil +} + +// SecretUnset unsets the secret value at the given ref. +func (s *AdminService) SecretUnset(ctx context.Context, req *connect.Request[ftlv1.UnsetSecretRequest]) (*connect.Response[ftlv1.UnsetSecretResponse], error) { + pkey := secretProviderKey(req.Msg.Provider) + err := s.sm.Unset(ctx, pkey, cf.NewRef(*req.Msg.Ref.Module, req.Msg.Ref.Name)) + if err != nil { + return nil, err + } + return connect.NewResponse(&ftlv1.UnsetSecretResponse{}), nil +} diff --git a/backend/controller/controller.go b/backend/controller/controller.go index d1b16b7d2e..ba5abdb25f 100644 --- a/backend/controller/controller.go +++ b/backend/controller/controller.go @@ -130,6 +130,10 @@ func Start(ctx context.Context, config Config, runnerScaling scaling.RunnerScali } logger.Debugf("Listening on %s", config.Bind) + cm := cf.ConfigFromContext(ctx) + sm := cf.SecretsFromContext(ctx) + + admin := NewAdminService(cm, sm) console := NewConsoleService(dal) ingressHandler := http.Handler(svc) @@ -148,6 +152,7 @@ func Start(ctx context.Context, config Config, runnerScaling scaling.RunnerScali return rpc.Serve(ctx, config.Bind, rpc.GRPC(ftlv1connect.NewVerbServiceHandler, svc), rpc.GRPC(ftlv1connect.NewControllerServiceHandler, svc), + rpc.GRPC(ftlv1connect.NewAdminServiceHandler, admin), rpc.GRPC(pbconsoleconnect.NewConsoleServiceHandler, console), rpc.HTTP("/", consoleHandler), ) diff --git a/backend/protos/xyz/block/ftl/v1/ftl.pb.go b/backend/protos/xyz/block/ftl/v1/ftl.pb.go index 4dad34963e..7ad46eb630 100644 --- a/backend/protos/xyz/block/ftl/v1/ftl.pb.go +++ b/backend/protos/xyz/block/ftl/v1/ftl.pb.go @@ -129,6 +129,110 @@ func (RunnerState) EnumDescriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{1} } +type ConfigProvider int32 + +const ( + // Write values inline in the configuration file. + ConfigProvider_CONFIG_INLINE ConfigProvider = 0 + // Print configuration as environment variables. + ConfigProvider_CONFIG_ENVAR ConfigProvider = 1 +) + +// Enum value maps for ConfigProvider. +var ( + ConfigProvider_name = map[int32]string{ + 0: "CONFIG_INLINE", + 1: "CONFIG_ENVAR", + } + ConfigProvider_value = map[string]int32{ + "CONFIG_INLINE": 0, + "CONFIG_ENVAR": 1, + } +) + +func (x ConfigProvider) Enum() *ConfigProvider { + p := new(ConfigProvider) + *p = x + return p +} + +func (x ConfigProvider) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ConfigProvider) Descriptor() protoreflect.EnumDescriptor { + return file_xyz_block_ftl_v1_ftl_proto_enumTypes[2].Descriptor() +} + +func (ConfigProvider) Type() protoreflect.EnumType { + return &file_xyz_block_ftl_v1_ftl_proto_enumTypes[2] +} + +func (x ConfigProvider) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ConfigProvider.Descriptor instead. +func (ConfigProvider) EnumDescriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{2} +} + +type SecretProvider int32 + +const ( + // Write values inline in the configuration file. + SecretProvider_SECRET_INLINE SecretProvider = 0 + // Print configuration as environment variables. + SecretProvider_SECRET_ENVAR SecretProvider = 1 + // Write to the system keychain. + SecretProvider_SECRET_KEYCHAIN SecretProvider = 2 + // Store a secret in the 1Password vault. + SecretProvider_SECRET_OP SecretProvider = 3 +) + +// Enum value maps for SecretProvider. +var ( + SecretProvider_name = map[int32]string{ + 0: "SECRET_INLINE", + 1: "SECRET_ENVAR", + 2: "SECRET_KEYCHAIN", + 3: "SECRET_OP", + } + SecretProvider_value = map[string]int32{ + "SECRET_INLINE": 0, + "SECRET_ENVAR": 1, + "SECRET_KEYCHAIN": 2, + "SECRET_OP": 3, + } +) + +func (x SecretProvider) Enum() *SecretProvider { + p := new(SecretProvider) + *p = x + return p +} + +func (x SecretProvider) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SecretProvider) Descriptor() protoreflect.EnumDescriptor { + return file_xyz_block_ftl_v1_ftl_proto_enumTypes[3].Descriptor() +} + +func (SecretProvider) Type() protoreflect.EnumType { + return &file_xyz_block_ftl_v1_ftl_proto_enumTypes[3] +} + +func (x SecretProvider) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SecretProvider.Descriptor instead. +func (SecretProvider) EnumDescriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{3} +} + type ModuleContextResponse_DBType int32 const ( @@ -156,11 +260,11 @@ func (x ModuleContextResponse_DBType) String() string { } func (ModuleContextResponse_DBType) Descriptor() protoreflect.EnumDescriptor { - return file_xyz_block_ftl_v1_ftl_proto_enumTypes[2].Descriptor() + return file_xyz_block_ftl_v1_ftl_proto_enumTypes[4].Descriptor() } func (ModuleContextResponse_DBType) Type() protoreflect.EnumType { - return &file_xyz_block_ftl_v1_ftl_proto_enumTypes[2] + return &file_xyz_block_ftl_v1_ftl_proto_enumTypes[4] } func (x ModuleContextResponse_DBType) Number() protoreflect.EnumNumber { @@ -2532,7 +2636,7 @@ func (*ReserveResponse) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{44} } -type ModuleContextResponse_Ref struct { +type ConfigRef struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -2541,8 +2645,8 @@ type ModuleContextResponse_Ref struct { Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` } -func (x *ModuleContextResponse_Ref) Reset() { - *x = ModuleContextResponse_Ref{} +func (x *ConfigRef) Reset() { + *x = ConfigRef{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2550,13 +2654,13 @@ func (x *ModuleContextResponse_Ref) Reset() { } } -func (x *ModuleContextResponse_Ref) String() string { +func (x *ConfigRef) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ModuleContextResponse_Ref) ProtoMessage() {} +func (*ConfigRef) ProtoMessage() {} -func (x *ModuleContextResponse_Ref) ProtoReflect() protoreflect.Message { +func (x *ConfigRef) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2568,37 +2672,36 @@ func (x *ModuleContextResponse_Ref) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ModuleContextResponse_Ref.ProtoReflect.Descriptor instead. -func (*ModuleContextResponse_Ref) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{3, 0} +// Deprecated: Use ConfigRef.ProtoReflect.Descriptor instead. +func (*ConfigRef) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{45} } -func (x *ModuleContextResponse_Ref) GetModule() string { +func (x *ConfigRef) GetModule() string { if x != nil && x.Module != nil { return *x.Module } return "" } -func (x *ModuleContextResponse_Ref) GetName() string { +func (x *ConfigRef) GetName() string { if x != nil { return x.Name } return "" } -type ModuleContextResponse_DSN struct { +type ListConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Type ModuleContextResponse_DBType `protobuf:"varint,2,opt,name=type,proto3,enum=xyz.block.ftl.v1.ModuleContextResponse_DBType" json:"type,omitempty"` - Dsn string `protobuf:"bytes,3,opt,name=dsn,proto3" json:"dsn,omitempty"` + Module *string `protobuf:"bytes,1,opt,name=module,proto3,oneof" json:"module,omitempty"` + IncludeValues *bool `protobuf:"varint,2,opt,name=include_values,json=includeValues,proto3,oneof" json:"include_values,omitempty"` } -func (x *ModuleContextResponse_DSN) Reset() { - *x = ModuleContextResponse_DSN{} +func (x *ListConfigRequest) Reset() { + *x = ListConfigRequest{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2606,13 +2709,13 @@ func (x *ModuleContextResponse_DSN) Reset() { } } -func (x *ModuleContextResponse_DSN) String() string { +func (x *ListConfigRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ModuleContextResponse_DSN) ProtoMessage() {} +func (*ListConfigRequest) ProtoMessage() {} -func (x *ModuleContextResponse_DSN) ProtoReflect() protoreflect.Message { +func (x *ListConfigRequest) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2624,58 +2727,50 @@ func (x *ModuleContextResponse_DSN) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ModuleContextResponse_DSN.ProtoReflect.Descriptor instead. -func (*ModuleContextResponse_DSN) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{3, 1} +// Deprecated: Use ListConfigRequest.ProtoReflect.Descriptor instead. +func (*ListConfigRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{46} } -func (x *ModuleContextResponse_DSN) GetName() string { - if x != nil { - return x.Name +func (x *ListConfigRequest) GetModule() string { + if x != nil && x.Module != nil { + return *x.Module } return "" } -func (x *ModuleContextResponse_DSN) GetType() ModuleContextResponse_DBType { - if x != nil { - return x.Type - } - return ModuleContextResponse_POSTGRES -} - -func (x *ModuleContextResponse_DSN) GetDsn() string { - if x != nil { - return x.Dsn +func (x *ListConfigRequest) GetIncludeValues() bool { + if x != nil && x.IncludeValues != nil { + return *x.IncludeValues } - return "" + return false } -type Metadata_Pair struct { +type ListConfigResponse 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"` + Configs []*ListConfigResponse_Config `protobuf:"bytes,1,rep,name=configs,proto3" json:"configs,omitempty"` } -func (x *Metadata_Pair) Reset() { - *x = Metadata_Pair{} +func (x *ListConfigResponse) Reset() { + *x = ListConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[49] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Metadata_Pair) String() string { +func (x *ListConfigResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Metadata_Pair) ProtoMessage() {} +func (*ListConfigResponse) ProtoMessage() {} -func (x *Metadata_Pair) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[49] +func (x *ListConfigResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2686,51 +2781,43 @@ func (x *Metadata_Pair) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Metadata_Pair.ProtoReflect.Descriptor instead. -func (*Metadata_Pair) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{4, 0} -} - -func (x *Metadata_Pair) GetKey() string { - if x != nil { - return x.Key - } - return "" +// Deprecated: Use ListConfigResponse.ProtoReflect.Descriptor instead. +func (*ListConfigResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{47} } -func (x *Metadata_Pair) GetValue() string { +func (x *ListConfigResponse) GetConfigs() []*ListConfigResponse_Config { if x != nil { - return x.Value + return x.Configs } - return "" + return nil } -type CallResponse_Error struct { +type GetConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - Stack *string `protobuf:"bytes,2,opt,name=stack,proto3,oneof" json:"stack,omitempty"` // TODO: Richer error type. + Ref *ConfigRef `protobuf:"bytes,1,opt,name=ref,proto3" json:"ref,omitempty"` } -func (x *CallResponse_Error) Reset() { - *x = CallResponse_Error{} +func (x *GetConfigRequest) Reset() { + *x = GetConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[50] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CallResponse_Error) String() string { +func (x *GetConfigRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CallResponse_Error) ProtoMessage() {} +func (*GetConfigRequest) ProtoMessage() {} -func (x *CallResponse_Error) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[50] +func (x *GetConfigRequest) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2741,52 +2828,43 @@ func (x *CallResponse_Error) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CallResponse_Error.ProtoReflect.Descriptor instead. -func (*CallResponse_Error) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{6, 0} +// Deprecated: Use GetConfigRequest.ProtoReflect.Descriptor instead. +func (*GetConfigRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{48} } -func (x *CallResponse_Error) GetMessage() string { +func (x *GetConfigRequest) GetRef() *ConfigRef { if x != nil { - return x.Message - } - return "" -} - -func (x *CallResponse_Error) GetStack() string { - if x != nil && x.Stack != nil { - return *x.Stack + return x.Ref } - return "" + return nil } -type StatusResponse_Controller struct { +type GetConfigResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Endpoint string `protobuf:"bytes,2,opt,name=endpoint,proto3" json:"endpoint,omitempty"` - Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` } -func (x *StatusResponse_Controller) Reset() { - *x = StatusResponse_Controller{} +func (x *GetConfigResponse) Reset() { + *x = GetConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[52] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *StatusResponse_Controller) String() string { +func (x *GetConfigResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StatusResponse_Controller) ProtoMessage() {} +func (*GetConfigResponse) ProtoMessage() {} -func (x *StatusResponse_Controller) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[52] +func (x *GetConfigResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2797,62 +2875,45 @@ func (x *StatusResponse_Controller) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StatusResponse_Controller.ProtoReflect.Descriptor instead. -func (*StatusResponse_Controller) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37, 0} -} - -func (x *StatusResponse_Controller) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *StatusResponse_Controller) GetEndpoint() string { - if x != nil { - return x.Endpoint - } - return "" +// Deprecated: Use GetConfigResponse.ProtoReflect.Descriptor instead. +func (*GetConfigResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{49} } -func (x *StatusResponse_Controller) GetVersion() string { +func (x *GetConfigResponse) GetValue() []byte { if x != nil { - return x.Version + return x.Value } - return "" + return nil } -type StatusResponse_Runner struct { +type SetConfigRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Languages []string `protobuf:"bytes,2,rep,name=languages,proto3" json:"languages,omitempty"` - Endpoint string `protobuf:"bytes,3,opt,name=endpoint,proto3" json:"endpoint,omitempty"` - State RunnerState `protobuf:"varint,4,opt,name=state,proto3,enum=xyz.block.ftl.v1.RunnerState" json:"state,omitempty"` - Deployment *string `protobuf:"bytes,5,opt,name=deployment,proto3,oneof" json:"deployment,omitempty"` - Labels *structpb.Struct `protobuf:"bytes,6,opt,name=labels,proto3" json:"labels,omitempty"` + Provider *ConfigProvider `protobuf:"varint,1,opt,name=provider,proto3,enum=xyz.block.ftl.v1.ConfigProvider,oneof" json:"provider,omitempty"` + Ref *ConfigRef `protobuf:"bytes,2,opt,name=ref,proto3" json:"ref,omitempty"` + Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` } -func (x *StatusResponse_Runner) Reset() { - *x = StatusResponse_Runner{} +func (x *SetConfigRequest) Reset() { + *x = SetConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[53] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *StatusResponse_Runner) String() string { +func (x *SetConfigRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StatusResponse_Runner) ProtoMessage() {} +func (*SetConfigRequest) ProtoMessage() {} -func (x *StatusResponse_Runner) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[53] +func (x *SetConfigRequest) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2863,84 +2924,55 @@ func (x *StatusResponse_Runner) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StatusResponse_Runner.ProtoReflect.Descriptor instead. -func (*StatusResponse_Runner) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37, 1} +// Deprecated: Use SetConfigRequest.ProtoReflect.Descriptor instead. +func (*SetConfigRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{50} } -func (x *StatusResponse_Runner) GetKey() string { - if x != nil { - return x.Key +func (x *SetConfigRequest) GetProvider() ConfigProvider { + if x != nil && x.Provider != nil { + return *x.Provider } - return "" + return ConfigProvider_CONFIG_INLINE } -func (x *StatusResponse_Runner) GetLanguages() []string { +func (x *SetConfigRequest) GetRef() *ConfigRef { if x != nil { - return x.Languages + return x.Ref } return nil } -func (x *StatusResponse_Runner) GetEndpoint() string { - if x != nil { - return x.Endpoint - } - return "" -} - -func (x *StatusResponse_Runner) GetState() RunnerState { - if x != nil { - return x.State - } - return RunnerState_RUNNER_IDLE -} - -func (x *StatusResponse_Runner) GetDeployment() string { - if x != nil && x.Deployment != nil { - return *x.Deployment - } - return "" -} - -func (x *StatusResponse_Runner) GetLabels() *structpb.Struct { +func (x *SetConfigRequest) GetValue() []byte { if x != nil { - return x.Labels + return x.Value } return nil } -type StatusResponse_Deployment struct { +type SetConfigResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Language string `protobuf:"bytes,2,opt,name=language,proto3" json:"language,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - MinReplicas int32 `protobuf:"varint,4,opt,name=min_replicas,json=minReplicas,proto3" json:"min_replicas,omitempty"` - Replicas int32 `protobuf:"varint,7,opt,name=replicas,proto3" json:"replicas,omitempty"` - Labels *structpb.Struct `protobuf:"bytes,5,opt,name=labels,proto3" json:"labels,omitempty"` - Schema *schema.Module `protobuf:"bytes,6,opt,name=schema,proto3" json:"schema,omitempty"` } -func (x *StatusResponse_Deployment) Reset() { - *x = StatusResponse_Deployment{} +func (x *SetConfigResponse) Reset() { + *x = SetConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[54] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *StatusResponse_Deployment) String() string { +func (x *SetConfigResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StatusResponse_Deployment) ProtoMessage() {} +func (*SetConfigResponse) ProtoMessage() {} -func (x *StatusResponse_Deployment) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[54] +func (x *SetConfigResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2951,16 +2983,923 @@ func (x *StatusResponse_Deployment) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StatusResponse_Deployment.ProtoReflect.Descriptor instead. -func (*StatusResponse_Deployment) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37, 2} +// Deprecated: Use SetConfigResponse.ProtoReflect.Descriptor instead. +func (*SetConfigResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{51} } -func (x *StatusResponse_Deployment) GetKey() string { - if x != nil { - return x.Key - } - return "" +type UnsetConfigRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Provider *ConfigProvider `protobuf:"varint,1,opt,name=provider,proto3,enum=xyz.block.ftl.v1.ConfigProvider,oneof" json:"provider,omitempty"` + Ref *ConfigRef `protobuf:"bytes,2,opt,name=ref,proto3" json:"ref,omitempty"` +} + +func (x *UnsetConfigRequest) Reset() { + *x = UnsetConfigRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnsetConfigRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnsetConfigRequest) ProtoMessage() {} + +func (x *UnsetConfigRequest) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[52] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnsetConfigRequest.ProtoReflect.Descriptor instead. +func (*UnsetConfigRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{52} +} + +func (x *UnsetConfigRequest) GetProvider() ConfigProvider { + if x != nil && x.Provider != nil { + return *x.Provider + } + return ConfigProvider_CONFIG_INLINE +} + +func (x *UnsetConfigRequest) GetRef() *ConfigRef { + if x != nil { + return x.Ref + } + return nil +} + +type UnsetConfigResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *UnsetConfigResponse) Reset() { + *x = UnsetConfigResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnsetConfigResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnsetConfigResponse) ProtoMessage() {} + +func (x *UnsetConfigResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[53] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnsetConfigResponse.ProtoReflect.Descriptor instead. +func (*UnsetConfigResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{53} +} + +type ListSecretsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Module *string `protobuf:"bytes,1,opt,name=module,proto3,oneof" json:"module,omitempty"` + IncludeValues *bool `protobuf:"varint,2,opt,name=include_values,json=includeValues,proto3,oneof" json:"include_values,omitempty"` +} + +func (x *ListSecretsRequest) Reset() { + *x = ListSecretsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListSecretsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListSecretsRequest) ProtoMessage() {} + +func (x *ListSecretsRequest) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[54] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListSecretsRequest.ProtoReflect.Descriptor instead. +func (*ListSecretsRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{54} +} + +func (x *ListSecretsRequest) GetModule() string { + if x != nil && x.Module != nil { + return *x.Module + } + return "" +} + +func (x *ListSecretsRequest) GetIncludeValues() bool { + if x != nil && x.IncludeValues != nil { + return *x.IncludeValues + } + return false +} + +type ListSecretsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Secrets []*ListSecretsResponse_Secret `protobuf:"bytes,1,rep,name=secrets,proto3" json:"secrets,omitempty"` +} + +func (x *ListSecretsResponse) Reset() { + *x = ListSecretsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListSecretsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListSecretsResponse) ProtoMessage() {} + +func (x *ListSecretsResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[55] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListSecretsResponse.ProtoReflect.Descriptor instead. +func (*ListSecretsResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{55} +} + +func (x *ListSecretsResponse) GetSecrets() []*ListSecretsResponse_Secret { + if x != nil { + return x.Secrets + } + return nil +} + +type GetSecretRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ref *ConfigRef `protobuf:"bytes,1,opt,name=ref,proto3" json:"ref,omitempty"` +} + +func (x *GetSecretRequest) Reset() { + *x = GetSecretRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetSecretRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetSecretRequest) ProtoMessage() {} + +func (x *GetSecretRequest) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[56] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetSecretRequest.ProtoReflect.Descriptor instead. +func (*GetSecretRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{56} +} + +func (x *GetSecretRequest) GetRef() *ConfigRef { + if x != nil { + return x.Ref + } + return nil +} + +type GetSecretResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *GetSecretResponse) Reset() { + *x = GetSecretResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetSecretResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetSecretResponse) ProtoMessage() {} + +func (x *GetSecretResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[57] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetSecretResponse.ProtoReflect.Descriptor instead. +func (*GetSecretResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{57} +} + +func (x *GetSecretResponse) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +type SetSecretRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Provider *SecretProvider `protobuf:"varint,1,opt,name=provider,proto3,enum=xyz.block.ftl.v1.SecretProvider,oneof" json:"provider,omitempty"` + Ref *ConfigRef `protobuf:"bytes,2,opt,name=ref,proto3" json:"ref,omitempty"` + Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *SetSecretRequest) Reset() { + *x = SetSecretRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetSecretRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetSecretRequest) ProtoMessage() {} + +func (x *SetSecretRequest) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[58] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetSecretRequest.ProtoReflect.Descriptor instead. +func (*SetSecretRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{58} +} + +func (x *SetSecretRequest) GetProvider() SecretProvider { + if x != nil && x.Provider != nil { + return *x.Provider + } + return SecretProvider_SECRET_INLINE +} + +func (x *SetSecretRequest) GetRef() *ConfigRef { + if x != nil { + return x.Ref + } + return nil +} + +func (x *SetSecretRequest) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +type SetSecretResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SetSecretResponse) Reset() { + *x = SetSecretResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetSecretResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetSecretResponse) ProtoMessage() {} + +func (x *SetSecretResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[59] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetSecretResponse.ProtoReflect.Descriptor instead. +func (*SetSecretResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{59} +} + +type UnsetSecretRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Provider *SecretProvider `protobuf:"varint,1,opt,name=provider,proto3,enum=xyz.block.ftl.v1.SecretProvider,oneof" json:"provider,omitempty"` + Ref *ConfigRef `protobuf:"bytes,2,opt,name=ref,proto3" json:"ref,omitempty"` +} + +func (x *UnsetSecretRequest) Reset() { + *x = UnsetSecretRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnsetSecretRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnsetSecretRequest) ProtoMessage() {} + +func (x *UnsetSecretRequest) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[60] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnsetSecretRequest.ProtoReflect.Descriptor instead. +func (*UnsetSecretRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{60} +} + +func (x *UnsetSecretRequest) GetProvider() SecretProvider { + if x != nil && x.Provider != nil { + return *x.Provider + } + return SecretProvider_SECRET_INLINE +} + +func (x *UnsetSecretRequest) GetRef() *ConfigRef { + if x != nil { + return x.Ref + } + return nil +} + +type UnsetSecretResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *UnsetSecretResponse) Reset() { + *x = UnsetSecretResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnsetSecretResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnsetSecretResponse) ProtoMessage() {} + +func (x *UnsetSecretResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[61] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnsetSecretResponse.ProtoReflect.Descriptor instead. +func (*UnsetSecretResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{61} +} + +type ModuleContextResponse_Ref struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Module *string `protobuf:"bytes,1,opt,name=module,proto3,oneof" json:"module,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *ModuleContextResponse_Ref) Reset() { + *x = ModuleContextResponse_Ref{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ModuleContextResponse_Ref) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ModuleContextResponse_Ref) ProtoMessage() {} + +func (x *ModuleContextResponse_Ref) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[62] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ModuleContextResponse_Ref.ProtoReflect.Descriptor instead. +func (*ModuleContextResponse_Ref) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{3, 0} +} + +func (x *ModuleContextResponse_Ref) GetModule() string { + if x != nil && x.Module != nil { + return *x.Module + } + return "" +} + +func (x *ModuleContextResponse_Ref) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type ModuleContextResponse_DSN struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Type ModuleContextResponse_DBType `protobuf:"varint,2,opt,name=type,proto3,enum=xyz.block.ftl.v1.ModuleContextResponse_DBType" json:"type,omitempty"` + Dsn string `protobuf:"bytes,3,opt,name=dsn,proto3" json:"dsn,omitempty"` +} + +func (x *ModuleContextResponse_DSN) Reset() { + *x = ModuleContextResponse_DSN{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ModuleContextResponse_DSN) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ModuleContextResponse_DSN) ProtoMessage() {} + +func (x *ModuleContextResponse_DSN) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[63] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ModuleContextResponse_DSN.ProtoReflect.Descriptor instead. +func (*ModuleContextResponse_DSN) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{3, 1} +} + +func (x *ModuleContextResponse_DSN) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ModuleContextResponse_DSN) GetType() ModuleContextResponse_DBType { + if x != nil { + return x.Type + } + return ModuleContextResponse_POSTGRES +} + +func (x *ModuleContextResponse_DSN) GetDsn() string { + if x != nil { + return x.Dsn + } + return "" +} + +type Metadata_Pair 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"` +} + +func (x *Metadata_Pair) Reset() { + *x = Metadata_Pair{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Metadata_Pair) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Metadata_Pair) ProtoMessage() {} + +func (x *Metadata_Pair) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[66] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Metadata_Pair.ProtoReflect.Descriptor instead. +func (*Metadata_Pair) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{4, 0} +} + +func (x *Metadata_Pair) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *Metadata_Pair) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +type CallResponse_Error struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + Stack *string `protobuf:"bytes,2,opt,name=stack,proto3,oneof" json:"stack,omitempty"` // TODO: Richer error type. +} + +func (x *CallResponse_Error) Reset() { + *x = CallResponse_Error{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CallResponse_Error) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CallResponse_Error) ProtoMessage() {} + +func (x *CallResponse_Error) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[67] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CallResponse_Error.ProtoReflect.Descriptor instead. +func (*CallResponse_Error) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{6, 0} +} + +func (x *CallResponse_Error) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *CallResponse_Error) GetStack() string { + if x != nil && x.Stack != nil { + return *x.Stack + } + return "" +} + +type StatusResponse_Controller struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Endpoint string `protobuf:"bytes,2,opt,name=endpoint,proto3" json:"endpoint,omitempty"` + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *StatusResponse_Controller) Reset() { + *x = StatusResponse_Controller{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatusResponse_Controller) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusResponse_Controller) ProtoMessage() {} + +func (x *StatusResponse_Controller) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[69] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusResponse_Controller.ProtoReflect.Descriptor instead. +func (*StatusResponse_Controller) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37, 0} +} + +func (x *StatusResponse_Controller) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *StatusResponse_Controller) GetEndpoint() string { + if x != nil { + return x.Endpoint + } + return "" +} + +func (x *StatusResponse_Controller) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +type StatusResponse_Runner struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Languages []string `protobuf:"bytes,2,rep,name=languages,proto3" json:"languages,omitempty"` + Endpoint string `protobuf:"bytes,3,opt,name=endpoint,proto3" json:"endpoint,omitempty"` + State RunnerState `protobuf:"varint,4,opt,name=state,proto3,enum=xyz.block.ftl.v1.RunnerState" json:"state,omitempty"` + Deployment *string `protobuf:"bytes,5,opt,name=deployment,proto3,oneof" json:"deployment,omitempty"` + Labels *structpb.Struct `protobuf:"bytes,6,opt,name=labels,proto3" json:"labels,omitempty"` +} + +func (x *StatusResponse_Runner) Reset() { + *x = StatusResponse_Runner{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatusResponse_Runner) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusResponse_Runner) ProtoMessage() {} + +func (x *StatusResponse_Runner) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[70] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusResponse_Runner.ProtoReflect.Descriptor instead. +func (*StatusResponse_Runner) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37, 1} +} + +func (x *StatusResponse_Runner) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *StatusResponse_Runner) GetLanguages() []string { + if x != nil { + return x.Languages + } + return nil +} + +func (x *StatusResponse_Runner) GetEndpoint() string { + if x != nil { + return x.Endpoint + } + return "" +} + +func (x *StatusResponse_Runner) GetState() RunnerState { + if x != nil { + return x.State + } + return RunnerState_RUNNER_IDLE +} + +func (x *StatusResponse_Runner) GetDeployment() string { + if x != nil && x.Deployment != nil { + return *x.Deployment + } + return "" +} + +func (x *StatusResponse_Runner) GetLabels() *structpb.Struct { + if x != nil { + return x.Labels + } + return nil +} + +type StatusResponse_Deployment struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Language string `protobuf:"bytes,2,opt,name=language,proto3" json:"language,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + MinReplicas int32 `protobuf:"varint,4,opt,name=min_replicas,json=minReplicas,proto3" json:"min_replicas,omitempty"` + Replicas int32 `protobuf:"varint,7,opt,name=replicas,proto3" json:"replicas,omitempty"` + Labels *structpb.Struct `protobuf:"bytes,5,opt,name=labels,proto3" json:"labels,omitempty"` + Schema *schema.Module `protobuf:"bytes,6,opt,name=schema,proto3" json:"schema,omitempty"` +} + +func (x *StatusResponse_Deployment) Reset() { + *x = StatusResponse_Deployment{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatusResponse_Deployment) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusResponse_Deployment) ProtoMessage() {} + +func (x *StatusResponse_Deployment) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[71] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusResponse_Deployment.ProtoReflect.Descriptor instead. +func (*StatusResponse_Deployment) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37, 2} +} + +func (x *StatusResponse_Deployment) GetKey() string { + if x != nil { + return x.Key + } + return "" } func (x *StatusResponse_Deployment) GetLanguage() string { @@ -3019,7 +3958,7 @@ type StatusResponse_IngressRoute struct { func (x *StatusResponse_IngressRoute) Reset() { *x = StatusResponse_IngressRoute{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[55] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3032,7 +3971,7 @@ func (x *StatusResponse_IngressRoute) String() string { func (*StatusResponse_IngressRoute) ProtoMessage() {} func (x *StatusResponse_IngressRoute) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[55] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3090,7 +4029,7 @@ type StatusResponse_Route struct { func (x *StatusResponse_Route) Reset() { *x = StatusResponse_Route{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[56] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3103,7 +4042,7 @@ func (x *StatusResponse_Route) String() string { func (*StatusResponse_Route) ProtoMessage() {} func (x *StatusResponse_Route) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[56] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3160,7 +4099,7 @@ type ProcessListResponse_ProcessRunner struct { func (x *ProcessListResponse_ProcessRunner) Reset() { *x = ProcessListResponse_ProcessRunner{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[57] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3173,7 +4112,7 @@ func (x *ProcessListResponse_ProcessRunner) String() string { func (*ProcessListResponse_ProcessRunner) ProtoMessage() {} func (x *ProcessListResponse_ProcessRunner) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[57] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3224,7 +4163,7 @@ type ProcessListResponse_Process struct { func (x *ProcessListResponse_Process) Reset() { *x = ProcessListResponse_Process{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[58] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3237,7 +4176,7 @@ func (x *ProcessListResponse_Process) String() string { func (*ProcessListResponse_Process) ProtoMessage() {} func (x *ProcessListResponse_Process) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[58] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3257,26 +4196,136 @@ func (x *ProcessListResponse_Process) GetDeployment() string { if x != nil { return x.Deployment } - return "" + return "" +} + +func (x *ProcessListResponse_Process) GetMinReplicas() int32 { + if x != nil { + return x.MinReplicas + } + return 0 +} + +func (x *ProcessListResponse_Process) GetLabels() *structpb.Struct { + if x != nil { + return x.Labels + } + return nil +} + +func (x *ProcessListResponse_Process) GetRunner() *ProcessListResponse_ProcessRunner { + if x != nil { + return x.Runner + } + return nil +} + +type ListConfigResponse_Config struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RefPath string `protobuf:"bytes,1,opt,name=refPath,proto3" json:"refPath,omitempty"` + Value []byte `protobuf:"bytes,2,opt,name=value,proto3,oneof" json:"value,omitempty"` +} + +func (x *ListConfigResponse_Config) Reset() { + *x = ListConfigResponse_Config{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListConfigResponse_Config) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListConfigResponse_Config) ProtoMessage() {} + +func (x *ListConfigResponse_Config) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[76] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListConfigResponse_Config.ProtoReflect.Descriptor instead. +func (*ListConfigResponse_Config) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{47, 0} +} + +func (x *ListConfigResponse_Config) GetRefPath() string { + if x != nil { + return x.RefPath + } + return "" +} + +func (x *ListConfigResponse_Config) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +type ListSecretsResponse_Secret struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RefPath string `protobuf:"bytes,1,opt,name=refPath,proto3" json:"refPath,omitempty"` + Value []byte `protobuf:"bytes,2,opt,name=value,proto3,oneof" json:"value,omitempty"` +} + +func (x *ListSecretsResponse_Secret) Reset() { + *x = ListSecretsResponse_Secret{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListSecretsResponse_Secret) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListSecretsResponse_Secret) ProtoMessage() {} + +func (x *ListSecretsResponse_Secret) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[77] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (x *ProcessListResponse_Process) GetMinReplicas() int32 { - if x != nil { - return x.MinReplicas - } - return 0 +// Deprecated: Use ListSecretsResponse_Secret.ProtoReflect.Descriptor instead. +func (*ListSecretsResponse_Secret) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{55, 0} } -func (x *ProcessListResponse_Process) GetLabels() *structpb.Struct { +func (x *ListSecretsResponse_Secret) GetRefPath() string { if x != nil { - return x.Labels + return x.RefPath } - return nil + return "" } -func (x *ProcessListResponse_Process) GetRunner() *ProcessListResponse_ProcessRunner { +func (x *ListSecretsResponse_Secret) GetValue() []byte { if x != nil { - return x.Runner + return x.Value } return nil } @@ -3682,167 +4731,327 @@ var file_xyz_block_ftl_v1_ftl_proto_rawDesc = []byte{ 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x22, 0x11, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x5c, 0x0a, 0x14, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, - 0x54, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, - 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, - 0x01, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x59, 0x0a, 0x0b, 0x52, 0x75, 0x6e, - 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x55, 0x4e, 0x4e, - 0x45, 0x52, 0x5f, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x55, 0x4e, - 0x4e, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x10, 0x01, 0x12, 0x13, - 0x0a, 0x0f, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x47, 0x4e, 0x45, - 0x44, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x44, 0x45, - 0x41, 0x44, 0x10, 0x03, 0x32, 0xa6, 0x04, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x62, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, + 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, 0x0a, 0x09, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x12, 0x1b, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x22, 0x7a, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, + 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x88, + 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x42, 0x11, 0x0a, + 0x0f, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x22, 0xa4, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x1a, 0x47, + 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x66, 0x50, + 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x66, 0x50, 0x61, + 0x74, 0x68, 0x12, 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, + 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x41, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x03, 0x72, + 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x22, 0x29, 0x0a, 0x11, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, - 0x12, 0x63, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x12, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, 0x00, + 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, + 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, + 0x13, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, + 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2d, + 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x42, 0x0b, 0x0a, + 0x09, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x15, 0x0a, 0x13, 0x55, 0x6e, + 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x7b, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0d, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x88, 0x01, 0x01, + 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xa6, + 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x47, + 0x0a, 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x66, 0x50, + 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x66, 0x50, 0x61, + 0x74, 0x68, 0x12, 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, + 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x41, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x03, 0x72, + 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x22, 0x29, 0x0a, 0x11, 0x47, 0x65, + 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x0c, 0x41, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x4c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x4c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, 0x00, + 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, + 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, + 0x13, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, + 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2d, + 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x42, 0x0b, 0x0a, + 0x09, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x15, 0x0a, 0x13, 0x55, 0x6e, + 0x73, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2a, 0x5c, 0x0a, 0x14, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x45, 0x50, + 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x45, + 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, + 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x02, 0x2a, + 0x59, 0x0a, 0x0b, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, + 0x0a, 0x0b, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x00, 0x12, + 0x13, 0x0a, 0x0f, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, + 0x45, 0x44, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x41, + 0x53, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x55, 0x4e, + 0x4e, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x41, 0x44, 0x10, 0x03, 0x2a, 0x35, 0x0a, 0x0e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, 0x0a, 0x0d, + 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, + 0x10, 0x0a, 0x0c, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x45, 0x4e, 0x56, 0x41, 0x52, 0x10, + 0x01, 0x2a, 0x59, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x45, 0x43, 0x52, 0x45, 0x54, 0x5f, 0x49, 0x4e, + 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x45, 0x43, 0x52, 0x45, 0x54, + 0x5f, 0x45, 0x4e, 0x56, 0x41, 0x52, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x45, 0x43, 0x52, + 0x45, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x0d, 0x0a, + 0x09, 0x53, 0x45, 0x43, 0x52, 0x45, 0x54, 0x5f, 0x4f, 0x50, 0x10, 0x03, 0x32, 0xa6, 0x04, 0x0a, + 0x0b, 0x56, 0x65, 0x72, 0x62, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, + 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x63, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5d, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, - 0x46, 0x53, 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, - 0x46, 0x53, 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x53, 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0c, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x1d, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, + 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, + 0x0c, 0x41, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xf6, 0x0a, - 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, - 0x5a, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x06, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x41, - 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x12, 0x29, 0x2e, 0x78, + 0x2e, 0x41, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4c, + 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, + 0x12, 0x5d, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x53, 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x53, 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x46, + 0x53, 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5d, 0x0a, 0x0c, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, + 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, + 0x0a, 0x04, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xf6, 0x0a, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, + 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x5a, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, - 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, - 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, - 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, + 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x2e, 0x78, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x69, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, + 0x69, 0x66, 0x66, 0x73, 0x12, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, + 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, + 0x66, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, 0x27, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, + 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x69, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0d, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, - 0x2f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x30, 0x01, 0x12, 0x65, 0x0a, 0x0e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x5d, 0x0a, 0x0c, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x25, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0d, 0x52, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x26, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, + 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, + 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x2f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x65, 0x0a, 0x0e, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x27, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x28, 0x01, 0x12, 0x5d, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x12, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x14, + 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x2d, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x54, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0a, 0x50, - 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x6c, - 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, + 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, + 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x54, 0x0a, + 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0a, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x12, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0xd2, + 0x02, 0x0a, 0x0d, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x4e, 0x0a, 0x07, + 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x06, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x09, 0x54, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x32, 0x9f, 0x06, 0x0a, 0x0c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, + 0x12, 0x57, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0xd2, 0x02, 0x0a, 0x0d, 0x52, 0x75, 0x6e, 0x6e, 0x65, - 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, - 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x03, 0x90, 0x02, 0x01, 0x12, 0x4e, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, - 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x06, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1f, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x47, 0x65, 0x74, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x54, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x65, 0x74, 0x12, 0x22, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, + 0x6e, 0x73, 0x65, 0x74, 0x12, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, + 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x5a, 0x0a, 0x0b, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, + 0x09, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x47, 0x65, 0x74, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x58, 0x0a, 0x09, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x12, 0x22, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x65, 0x74, + 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0b, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x12, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x65, + 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, - 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x44, 0x50, 0x01, 0x5a, - 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x42, 0x44, 0x35, - 0x34, 0x35, 0x36, 0x36, 0x39, 0x37, 0x35, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x62, 0x61, 0x63, 0x6b, - 0x65, 0x6e, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x3b, 0x66, 0x74, 0x6c, 0x76, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x44, 0x50, 0x01, 0x5a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x42, 0x44, 0x35, 0x34, 0x35, 0x36, 0x36, 0x39, 0x37, + 0x35, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, + 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x3b, 0x66, 0x74, 0x6c, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -3857,174 +5066,225 @@ func file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP() []byte { return file_xyz_block_ftl_v1_ftl_proto_rawDescData } -var file_xyz_block_ftl_v1_ftl_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_xyz_block_ftl_v1_ftl_proto_msgTypes = make([]protoimpl.MessageInfo, 59) +var file_xyz_block_ftl_v1_ftl_proto_enumTypes = make([]protoimpl.EnumInfo, 5) +var file_xyz_block_ftl_v1_ftl_proto_msgTypes = make([]protoimpl.MessageInfo, 78) var file_xyz_block_ftl_v1_ftl_proto_goTypes = []interface{}{ (DeploymentChangeType)(0), // 0: xyz.block.ftl.v1.DeploymentChangeType (RunnerState)(0), // 1: xyz.block.ftl.v1.RunnerState - (ModuleContextResponse_DBType)(0), // 2: xyz.block.ftl.v1.ModuleContextResponse.DBType - (*PingRequest)(nil), // 3: xyz.block.ftl.v1.PingRequest - (*PingResponse)(nil), // 4: xyz.block.ftl.v1.PingResponse - (*ModuleContextRequest)(nil), // 5: xyz.block.ftl.v1.ModuleContextRequest - (*ModuleContextResponse)(nil), // 6: xyz.block.ftl.v1.ModuleContextResponse - (*Metadata)(nil), // 7: xyz.block.ftl.v1.Metadata - (*CallRequest)(nil), // 8: xyz.block.ftl.v1.CallRequest - (*CallResponse)(nil), // 9: xyz.block.ftl.v1.CallResponse - (*AcquireLeaseRequest)(nil), // 10: xyz.block.ftl.v1.AcquireLeaseRequest - (*AcquireLeaseResponse)(nil), // 11: xyz.block.ftl.v1.AcquireLeaseResponse - (*SendFSMEventRequest)(nil), // 12: xyz.block.ftl.v1.SendFSMEventRequest - (*SendFSMEventResponse)(nil), // 13: xyz.block.ftl.v1.SendFSMEventResponse - (*PublishEventRequest)(nil), // 14: xyz.block.ftl.v1.PublishEventRequest - (*PublishEventResponse)(nil), // 15: xyz.block.ftl.v1.PublishEventResponse - (*GetSchemaRequest)(nil), // 16: xyz.block.ftl.v1.GetSchemaRequest - (*GetSchemaResponse)(nil), // 17: xyz.block.ftl.v1.GetSchemaResponse - (*PullSchemaRequest)(nil), // 18: xyz.block.ftl.v1.PullSchemaRequest - (*PullSchemaResponse)(nil), // 19: xyz.block.ftl.v1.PullSchemaResponse - (*GetArtefactDiffsRequest)(nil), // 20: xyz.block.ftl.v1.GetArtefactDiffsRequest - (*GetArtefactDiffsResponse)(nil), // 21: xyz.block.ftl.v1.GetArtefactDiffsResponse - (*UploadArtefactRequest)(nil), // 22: xyz.block.ftl.v1.UploadArtefactRequest - (*UploadArtefactResponse)(nil), // 23: xyz.block.ftl.v1.UploadArtefactResponse - (*DeploymentArtefact)(nil), // 24: xyz.block.ftl.v1.DeploymentArtefact - (*CreateDeploymentRequest)(nil), // 25: xyz.block.ftl.v1.CreateDeploymentRequest - (*CreateDeploymentResponse)(nil), // 26: xyz.block.ftl.v1.CreateDeploymentResponse - (*GetDeploymentArtefactsRequest)(nil), // 27: xyz.block.ftl.v1.GetDeploymentArtefactsRequest - (*GetDeploymentArtefactsResponse)(nil), // 28: xyz.block.ftl.v1.GetDeploymentArtefactsResponse - (*GetDeploymentRequest)(nil), // 29: xyz.block.ftl.v1.GetDeploymentRequest - (*GetDeploymentResponse)(nil), // 30: xyz.block.ftl.v1.GetDeploymentResponse - (*RegisterRunnerRequest)(nil), // 31: xyz.block.ftl.v1.RegisterRunnerRequest - (*RegisterRunnerResponse)(nil), // 32: xyz.block.ftl.v1.RegisterRunnerResponse - (*UpdateDeployRequest)(nil), // 33: xyz.block.ftl.v1.UpdateDeployRequest - (*UpdateDeployResponse)(nil), // 34: xyz.block.ftl.v1.UpdateDeployResponse - (*ReplaceDeployRequest)(nil), // 35: xyz.block.ftl.v1.ReplaceDeployRequest - (*ReplaceDeployResponse)(nil), // 36: xyz.block.ftl.v1.ReplaceDeployResponse - (*StreamDeploymentLogsRequest)(nil), // 37: xyz.block.ftl.v1.StreamDeploymentLogsRequest - (*StreamDeploymentLogsResponse)(nil), // 38: xyz.block.ftl.v1.StreamDeploymentLogsResponse - (*StatusRequest)(nil), // 39: xyz.block.ftl.v1.StatusRequest - (*StatusResponse)(nil), // 40: xyz.block.ftl.v1.StatusResponse - (*ProcessListRequest)(nil), // 41: xyz.block.ftl.v1.ProcessListRequest - (*ProcessListResponse)(nil), // 42: xyz.block.ftl.v1.ProcessListResponse - (*DeployRequest)(nil), // 43: xyz.block.ftl.v1.DeployRequest - (*DeployResponse)(nil), // 44: xyz.block.ftl.v1.DeployResponse - (*TerminateRequest)(nil), // 45: xyz.block.ftl.v1.TerminateRequest - (*ReserveRequest)(nil), // 46: xyz.block.ftl.v1.ReserveRequest - (*ReserveResponse)(nil), // 47: xyz.block.ftl.v1.ReserveResponse - (*ModuleContextResponse_Ref)(nil), // 48: xyz.block.ftl.v1.ModuleContextResponse.Ref - (*ModuleContextResponse_DSN)(nil), // 49: xyz.block.ftl.v1.ModuleContextResponse.DSN - nil, // 50: xyz.block.ftl.v1.ModuleContextResponse.ConfigsEntry - nil, // 51: xyz.block.ftl.v1.ModuleContextResponse.SecretsEntry - (*Metadata_Pair)(nil), // 52: xyz.block.ftl.v1.Metadata.Pair - (*CallResponse_Error)(nil), // 53: xyz.block.ftl.v1.CallResponse.Error - nil, // 54: xyz.block.ftl.v1.StreamDeploymentLogsRequest.AttributesEntry - (*StatusResponse_Controller)(nil), // 55: xyz.block.ftl.v1.StatusResponse.Controller - (*StatusResponse_Runner)(nil), // 56: xyz.block.ftl.v1.StatusResponse.Runner - (*StatusResponse_Deployment)(nil), // 57: xyz.block.ftl.v1.StatusResponse.Deployment - (*StatusResponse_IngressRoute)(nil), // 58: xyz.block.ftl.v1.StatusResponse.IngressRoute - (*StatusResponse_Route)(nil), // 59: xyz.block.ftl.v1.StatusResponse.Route - (*ProcessListResponse_ProcessRunner)(nil), // 60: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner - (*ProcessListResponse_Process)(nil), // 61: xyz.block.ftl.v1.ProcessListResponse.Process - (*schema.Ref)(nil), // 62: xyz.block.ftl.v1.schema.Ref - (*durationpb.Duration)(nil), // 63: google.protobuf.Duration - (*schema.Type)(nil), // 64: xyz.block.ftl.v1.schema.Type - (*schema.Schema)(nil), // 65: xyz.block.ftl.v1.schema.Schema - (*schema.Module)(nil), // 66: xyz.block.ftl.v1.schema.Module - (*structpb.Struct)(nil), // 67: google.protobuf.Struct - (*timestamppb.Timestamp)(nil), // 68: google.protobuf.Timestamp + (ConfigProvider)(0), // 2: xyz.block.ftl.v1.ConfigProvider + (SecretProvider)(0), // 3: xyz.block.ftl.v1.SecretProvider + (ModuleContextResponse_DBType)(0), // 4: xyz.block.ftl.v1.ModuleContextResponse.DBType + (*PingRequest)(nil), // 5: xyz.block.ftl.v1.PingRequest + (*PingResponse)(nil), // 6: xyz.block.ftl.v1.PingResponse + (*ModuleContextRequest)(nil), // 7: xyz.block.ftl.v1.ModuleContextRequest + (*ModuleContextResponse)(nil), // 8: xyz.block.ftl.v1.ModuleContextResponse + (*Metadata)(nil), // 9: xyz.block.ftl.v1.Metadata + (*CallRequest)(nil), // 10: xyz.block.ftl.v1.CallRequest + (*CallResponse)(nil), // 11: xyz.block.ftl.v1.CallResponse + (*AcquireLeaseRequest)(nil), // 12: xyz.block.ftl.v1.AcquireLeaseRequest + (*AcquireLeaseResponse)(nil), // 13: xyz.block.ftl.v1.AcquireLeaseResponse + (*SendFSMEventRequest)(nil), // 14: xyz.block.ftl.v1.SendFSMEventRequest + (*SendFSMEventResponse)(nil), // 15: xyz.block.ftl.v1.SendFSMEventResponse + (*PublishEventRequest)(nil), // 16: xyz.block.ftl.v1.PublishEventRequest + (*PublishEventResponse)(nil), // 17: xyz.block.ftl.v1.PublishEventResponse + (*GetSchemaRequest)(nil), // 18: xyz.block.ftl.v1.GetSchemaRequest + (*GetSchemaResponse)(nil), // 19: xyz.block.ftl.v1.GetSchemaResponse + (*PullSchemaRequest)(nil), // 20: xyz.block.ftl.v1.PullSchemaRequest + (*PullSchemaResponse)(nil), // 21: xyz.block.ftl.v1.PullSchemaResponse + (*GetArtefactDiffsRequest)(nil), // 22: xyz.block.ftl.v1.GetArtefactDiffsRequest + (*GetArtefactDiffsResponse)(nil), // 23: xyz.block.ftl.v1.GetArtefactDiffsResponse + (*UploadArtefactRequest)(nil), // 24: xyz.block.ftl.v1.UploadArtefactRequest + (*UploadArtefactResponse)(nil), // 25: xyz.block.ftl.v1.UploadArtefactResponse + (*DeploymentArtefact)(nil), // 26: xyz.block.ftl.v1.DeploymentArtefact + (*CreateDeploymentRequest)(nil), // 27: xyz.block.ftl.v1.CreateDeploymentRequest + (*CreateDeploymentResponse)(nil), // 28: xyz.block.ftl.v1.CreateDeploymentResponse + (*GetDeploymentArtefactsRequest)(nil), // 29: xyz.block.ftl.v1.GetDeploymentArtefactsRequest + (*GetDeploymentArtefactsResponse)(nil), // 30: xyz.block.ftl.v1.GetDeploymentArtefactsResponse + (*GetDeploymentRequest)(nil), // 31: xyz.block.ftl.v1.GetDeploymentRequest + (*GetDeploymentResponse)(nil), // 32: xyz.block.ftl.v1.GetDeploymentResponse + (*RegisterRunnerRequest)(nil), // 33: xyz.block.ftl.v1.RegisterRunnerRequest + (*RegisterRunnerResponse)(nil), // 34: xyz.block.ftl.v1.RegisterRunnerResponse + (*UpdateDeployRequest)(nil), // 35: xyz.block.ftl.v1.UpdateDeployRequest + (*UpdateDeployResponse)(nil), // 36: xyz.block.ftl.v1.UpdateDeployResponse + (*ReplaceDeployRequest)(nil), // 37: xyz.block.ftl.v1.ReplaceDeployRequest + (*ReplaceDeployResponse)(nil), // 38: xyz.block.ftl.v1.ReplaceDeployResponse + (*StreamDeploymentLogsRequest)(nil), // 39: xyz.block.ftl.v1.StreamDeploymentLogsRequest + (*StreamDeploymentLogsResponse)(nil), // 40: xyz.block.ftl.v1.StreamDeploymentLogsResponse + (*StatusRequest)(nil), // 41: xyz.block.ftl.v1.StatusRequest + (*StatusResponse)(nil), // 42: xyz.block.ftl.v1.StatusResponse + (*ProcessListRequest)(nil), // 43: xyz.block.ftl.v1.ProcessListRequest + (*ProcessListResponse)(nil), // 44: xyz.block.ftl.v1.ProcessListResponse + (*DeployRequest)(nil), // 45: xyz.block.ftl.v1.DeployRequest + (*DeployResponse)(nil), // 46: xyz.block.ftl.v1.DeployResponse + (*TerminateRequest)(nil), // 47: xyz.block.ftl.v1.TerminateRequest + (*ReserveRequest)(nil), // 48: xyz.block.ftl.v1.ReserveRequest + (*ReserveResponse)(nil), // 49: xyz.block.ftl.v1.ReserveResponse + (*ConfigRef)(nil), // 50: xyz.block.ftl.v1.ConfigRef + (*ListConfigRequest)(nil), // 51: xyz.block.ftl.v1.ListConfigRequest + (*ListConfigResponse)(nil), // 52: xyz.block.ftl.v1.ListConfigResponse + (*GetConfigRequest)(nil), // 53: xyz.block.ftl.v1.GetConfigRequest + (*GetConfigResponse)(nil), // 54: xyz.block.ftl.v1.GetConfigResponse + (*SetConfigRequest)(nil), // 55: xyz.block.ftl.v1.SetConfigRequest + (*SetConfigResponse)(nil), // 56: xyz.block.ftl.v1.SetConfigResponse + (*UnsetConfigRequest)(nil), // 57: xyz.block.ftl.v1.UnsetConfigRequest + (*UnsetConfigResponse)(nil), // 58: xyz.block.ftl.v1.UnsetConfigResponse + (*ListSecretsRequest)(nil), // 59: xyz.block.ftl.v1.ListSecretsRequest + (*ListSecretsResponse)(nil), // 60: xyz.block.ftl.v1.ListSecretsResponse + (*GetSecretRequest)(nil), // 61: xyz.block.ftl.v1.GetSecretRequest + (*GetSecretResponse)(nil), // 62: xyz.block.ftl.v1.GetSecretResponse + (*SetSecretRequest)(nil), // 63: xyz.block.ftl.v1.SetSecretRequest + (*SetSecretResponse)(nil), // 64: xyz.block.ftl.v1.SetSecretResponse + (*UnsetSecretRequest)(nil), // 65: xyz.block.ftl.v1.UnsetSecretRequest + (*UnsetSecretResponse)(nil), // 66: xyz.block.ftl.v1.UnsetSecretResponse + (*ModuleContextResponse_Ref)(nil), // 67: xyz.block.ftl.v1.ModuleContextResponse.Ref + (*ModuleContextResponse_DSN)(nil), // 68: xyz.block.ftl.v1.ModuleContextResponse.DSN + nil, // 69: xyz.block.ftl.v1.ModuleContextResponse.ConfigsEntry + nil, // 70: xyz.block.ftl.v1.ModuleContextResponse.SecretsEntry + (*Metadata_Pair)(nil), // 71: xyz.block.ftl.v1.Metadata.Pair + (*CallResponse_Error)(nil), // 72: xyz.block.ftl.v1.CallResponse.Error + nil, // 73: xyz.block.ftl.v1.StreamDeploymentLogsRequest.AttributesEntry + (*StatusResponse_Controller)(nil), // 74: xyz.block.ftl.v1.StatusResponse.Controller + (*StatusResponse_Runner)(nil), // 75: xyz.block.ftl.v1.StatusResponse.Runner + (*StatusResponse_Deployment)(nil), // 76: xyz.block.ftl.v1.StatusResponse.Deployment + (*StatusResponse_IngressRoute)(nil), // 77: xyz.block.ftl.v1.StatusResponse.IngressRoute + (*StatusResponse_Route)(nil), // 78: xyz.block.ftl.v1.StatusResponse.Route + (*ProcessListResponse_ProcessRunner)(nil), // 79: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner + (*ProcessListResponse_Process)(nil), // 80: xyz.block.ftl.v1.ProcessListResponse.Process + (*ListConfigResponse_Config)(nil), // 81: xyz.block.ftl.v1.ListConfigResponse.Config + (*ListSecretsResponse_Secret)(nil), // 82: xyz.block.ftl.v1.ListSecretsResponse.Secret + (*schema.Ref)(nil), // 83: xyz.block.ftl.v1.schema.Ref + (*durationpb.Duration)(nil), // 84: google.protobuf.Duration + (*schema.Type)(nil), // 85: xyz.block.ftl.v1.schema.Type + (*schema.Schema)(nil), // 86: xyz.block.ftl.v1.schema.Schema + (*schema.Module)(nil), // 87: xyz.block.ftl.v1.schema.Module + (*structpb.Struct)(nil), // 88: google.protobuf.Struct + (*timestamppb.Timestamp)(nil), // 89: google.protobuf.Timestamp } var file_xyz_block_ftl_v1_ftl_proto_depIdxs = []int32{ - 50, // 0: xyz.block.ftl.v1.ModuleContextResponse.configs:type_name -> xyz.block.ftl.v1.ModuleContextResponse.ConfigsEntry - 51, // 1: xyz.block.ftl.v1.ModuleContextResponse.secrets:type_name -> xyz.block.ftl.v1.ModuleContextResponse.SecretsEntry - 49, // 2: xyz.block.ftl.v1.ModuleContextResponse.databases:type_name -> xyz.block.ftl.v1.ModuleContextResponse.DSN - 52, // 3: xyz.block.ftl.v1.Metadata.values:type_name -> xyz.block.ftl.v1.Metadata.Pair - 7, // 4: xyz.block.ftl.v1.CallRequest.metadata:type_name -> xyz.block.ftl.v1.Metadata - 62, // 5: xyz.block.ftl.v1.CallRequest.verb:type_name -> xyz.block.ftl.v1.schema.Ref - 53, // 6: xyz.block.ftl.v1.CallResponse.error:type_name -> xyz.block.ftl.v1.CallResponse.Error - 63, // 7: xyz.block.ftl.v1.AcquireLeaseRequest.ttl:type_name -> google.protobuf.Duration - 62, // 8: xyz.block.ftl.v1.SendFSMEventRequest.fsm:type_name -> xyz.block.ftl.v1.schema.Ref - 64, // 9: xyz.block.ftl.v1.SendFSMEventRequest.event:type_name -> xyz.block.ftl.v1.schema.Type - 62, // 10: xyz.block.ftl.v1.PublishEventRequest.topic:type_name -> xyz.block.ftl.v1.schema.Ref - 65, // 11: xyz.block.ftl.v1.GetSchemaResponse.schema:type_name -> xyz.block.ftl.v1.schema.Schema - 66, // 12: xyz.block.ftl.v1.PullSchemaResponse.schema:type_name -> xyz.block.ftl.v1.schema.Module + 69, // 0: xyz.block.ftl.v1.ModuleContextResponse.configs:type_name -> xyz.block.ftl.v1.ModuleContextResponse.ConfigsEntry + 70, // 1: xyz.block.ftl.v1.ModuleContextResponse.secrets:type_name -> xyz.block.ftl.v1.ModuleContextResponse.SecretsEntry + 68, // 2: xyz.block.ftl.v1.ModuleContextResponse.databases:type_name -> xyz.block.ftl.v1.ModuleContextResponse.DSN + 71, // 3: xyz.block.ftl.v1.Metadata.values:type_name -> xyz.block.ftl.v1.Metadata.Pair + 9, // 4: xyz.block.ftl.v1.CallRequest.metadata:type_name -> xyz.block.ftl.v1.Metadata + 83, // 5: xyz.block.ftl.v1.CallRequest.verb:type_name -> xyz.block.ftl.v1.schema.Ref + 72, // 6: xyz.block.ftl.v1.CallResponse.error:type_name -> xyz.block.ftl.v1.CallResponse.Error + 84, // 7: xyz.block.ftl.v1.AcquireLeaseRequest.ttl:type_name -> google.protobuf.Duration + 83, // 8: xyz.block.ftl.v1.SendFSMEventRequest.fsm:type_name -> xyz.block.ftl.v1.schema.Ref + 85, // 9: xyz.block.ftl.v1.SendFSMEventRequest.event:type_name -> xyz.block.ftl.v1.schema.Type + 83, // 10: xyz.block.ftl.v1.PublishEventRequest.topic:type_name -> xyz.block.ftl.v1.schema.Ref + 86, // 11: xyz.block.ftl.v1.GetSchemaResponse.schema:type_name -> xyz.block.ftl.v1.schema.Schema + 87, // 12: xyz.block.ftl.v1.PullSchemaResponse.schema:type_name -> xyz.block.ftl.v1.schema.Module 0, // 13: xyz.block.ftl.v1.PullSchemaResponse.change_type:type_name -> xyz.block.ftl.v1.DeploymentChangeType - 24, // 14: xyz.block.ftl.v1.GetArtefactDiffsResponse.client_artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 66, // 15: xyz.block.ftl.v1.CreateDeploymentRequest.schema:type_name -> xyz.block.ftl.v1.schema.Module - 24, // 16: xyz.block.ftl.v1.CreateDeploymentRequest.artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 67, // 17: xyz.block.ftl.v1.CreateDeploymentRequest.labels:type_name -> google.protobuf.Struct - 24, // 18: xyz.block.ftl.v1.GetDeploymentArtefactsRequest.have_artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 24, // 19: xyz.block.ftl.v1.GetDeploymentArtefactsResponse.artefact:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 66, // 20: xyz.block.ftl.v1.GetDeploymentResponse.schema:type_name -> xyz.block.ftl.v1.schema.Module - 24, // 21: xyz.block.ftl.v1.GetDeploymentResponse.artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 26, // 14: xyz.block.ftl.v1.GetArtefactDiffsResponse.client_artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 87, // 15: xyz.block.ftl.v1.CreateDeploymentRequest.schema:type_name -> xyz.block.ftl.v1.schema.Module + 26, // 16: xyz.block.ftl.v1.CreateDeploymentRequest.artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 88, // 17: xyz.block.ftl.v1.CreateDeploymentRequest.labels:type_name -> google.protobuf.Struct + 26, // 18: xyz.block.ftl.v1.GetDeploymentArtefactsRequest.have_artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 26, // 19: xyz.block.ftl.v1.GetDeploymentArtefactsResponse.artefact:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 87, // 20: xyz.block.ftl.v1.GetDeploymentResponse.schema:type_name -> xyz.block.ftl.v1.schema.Module + 26, // 21: xyz.block.ftl.v1.GetDeploymentResponse.artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact 1, // 22: xyz.block.ftl.v1.RegisterRunnerRequest.state:type_name -> xyz.block.ftl.v1.RunnerState - 67, // 23: xyz.block.ftl.v1.RegisterRunnerRequest.labels:type_name -> google.protobuf.Struct - 68, // 24: xyz.block.ftl.v1.StreamDeploymentLogsRequest.time_stamp:type_name -> google.protobuf.Timestamp - 54, // 25: xyz.block.ftl.v1.StreamDeploymentLogsRequest.attributes:type_name -> xyz.block.ftl.v1.StreamDeploymentLogsRequest.AttributesEntry - 55, // 26: xyz.block.ftl.v1.StatusResponse.controllers:type_name -> xyz.block.ftl.v1.StatusResponse.Controller - 56, // 27: xyz.block.ftl.v1.StatusResponse.runners:type_name -> xyz.block.ftl.v1.StatusResponse.Runner - 57, // 28: xyz.block.ftl.v1.StatusResponse.deployments:type_name -> xyz.block.ftl.v1.StatusResponse.Deployment - 58, // 29: xyz.block.ftl.v1.StatusResponse.ingress_routes:type_name -> xyz.block.ftl.v1.StatusResponse.IngressRoute - 59, // 30: xyz.block.ftl.v1.StatusResponse.routes:type_name -> xyz.block.ftl.v1.StatusResponse.Route - 61, // 31: xyz.block.ftl.v1.ProcessListResponse.processes:type_name -> xyz.block.ftl.v1.ProcessListResponse.Process - 2, // 32: xyz.block.ftl.v1.ModuleContextResponse.DSN.type:type_name -> xyz.block.ftl.v1.ModuleContextResponse.DBType - 1, // 33: xyz.block.ftl.v1.StatusResponse.Runner.state:type_name -> xyz.block.ftl.v1.RunnerState - 67, // 34: xyz.block.ftl.v1.StatusResponse.Runner.labels:type_name -> google.protobuf.Struct - 67, // 35: xyz.block.ftl.v1.StatusResponse.Deployment.labels:type_name -> google.protobuf.Struct - 66, // 36: xyz.block.ftl.v1.StatusResponse.Deployment.schema:type_name -> xyz.block.ftl.v1.schema.Module - 62, // 37: xyz.block.ftl.v1.StatusResponse.IngressRoute.verb:type_name -> xyz.block.ftl.v1.schema.Ref - 67, // 38: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner.labels:type_name -> google.protobuf.Struct - 67, // 39: xyz.block.ftl.v1.ProcessListResponse.Process.labels:type_name -> google.protobuf.Struct - 60, // 40: xyz.block.ftl.v1.ProcessListResponse.Process.runner:type_name -> xyz.block.ftl.v1.ProcessListResponse.ProcessRunner - 3, // 41: xyz.block.ftl.v1.VerbService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 5, // 42: xyz.block.ftl.v1.VerbService.GetModuleContext:input_type -> xyz.block.ftl.v1.ModuleContextRequest - 10, // 43: xyz.block.ftl.v1.VerbService.AcquireLease:input_type -> xyz.block.ftl.v1.AcquireLeaseRequest - 12, // 44: xyz.block.ftl.v1.VerbService.SendFSMEvent:input_type -> xyz.block.ftl.v1.SendFSMEventRequest - 14, // 45: xyz.block.ftl.v1.VerbService.PublishEvent:input_type -> xyz.block.ftl.v1.PublishEventRequest - 8, // 46: xyz.block.ftl.v1.VerbService.Call:input_type -> xyz.block.ftl.v1.CallRequest - 3, // 47: xyz.block.ftl.v1.ControllerService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 41, // 48: xyz.block.ftl.v1.ControllerService.ProcessList:input_type -> xyz.block.ftl.v1.ProcessListRequest - 39, // 49: xyz.block.ftl.v1.ControllerService.Status:input_type -> xyz.block.ftl.v1.StatusRequest - 20, // 50: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:input_type -> xyz.block.ftl.v1.GetArtefactDiffsRequest - 22, // 51: xyz.block.ftl.v1.ControllerService.UploadArtefact:input_type -> xyz.block.ftl.v1.UploadArtefactRequest - 25, // 52: xyz.block.ftl.v1.ControllerService.CreateDeployment:input_type -> xyz.block.ftl.v1.CreateDeploymentRequest - 29, // 53: xyz.block.ftl.v1.ControllerService.GetDeployment:input_type -> xyz.block.ftl.v1.GetDeploymentRequest - 27, // 54: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:input_type -> xyz.block.ftl.v1.GetDeploymentArtefactsRequest - 31, // 55: xyz.block.ftl.v1.ControllerService.RegisterRunner:input_type -> xyz.block.ftl.v1.RegisterRunnerRequest - 33, // 56: xyz.block.ftl.v1.ControllerService.UpdateDeploy:input_type -> xyz.block.ftl.v1.UpdateDeployRequest - 35, // 57: xyz.block.ftl.v1.ControllerService.ReplaceDeploy:input_type -> xyz.block.ftl.v1.ReplaceDeployRequest - 37, // 58: xyz.block.ftl.v1.ControllerService.StreamDeploymentLogs:input_type -> xyz.block.ftl.v1.StreamDeploymentLogsRequest - 16, // 59: xyz.block.ftl.v1.ControllerService.GetSchema:input_type -> xyz.block.ftl.v1.GetSchemaRequest - 18, // 60: xyz.block.ftl.v1.ControllerService.PullSchema:input_type -> xyz.block.ftl.v1.PullSchemaRequest - 3, // 61: xyz.block.ftl.v1.RunnerService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 46, // 62: xyz.block.ftl.v1.RunnerService.Reserve:input_type -> xyz.block.ftl.v1.ReserveRequest - 43, // 63: xyz.block.ftl.v1.RunnerService.Deploy:input_type -> xyz.block.ftl.v1.DeployRequest - 45, // 64: xyz.block.ftl.v1.RunnerService.Terminate:input_type -> xyz.block.ftl.v1.TerminateRequest - 4, // 65: xyz.block.ftl.v1.VerbService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 6, // 66: xyz.block.ftl.v1.VerbService.GetModuleContext:output_type -> xyz.block.ftl.v1.ModuleContextResponse - 11, // 67: xyz.block.ftl.v1.VerbService.AcquireLease:output_type -> xyz.block.ftl.v1.AcquireLeaseResponse - 13, // 68: xyz.block.ftl.v1.VerbService.SendFSMEvent:output_type -> xyz.block.ftl.v1.SendFSMEventResponse - 15, // 69: xyz.block.ftl.v1.VerbService.PublishEvent:output_type -> xyz.block.ftl.v1.PublishEventResponse - 9, // 70: xyz.block.ftl.v1.VerbService.Call:output_type -> xyz.block.ftl.v1.CallResponse - 4, // 71: xyz.block.ftl.v1.ControllerService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 42, // 72: xyz.block.ftl.v1.ControllerService.ProcessList:output_type -> xyz.block.ftl.v1.ProcessListResponse - 40, // 73: xyz.block.ftl.v1.ControllerService.Status:output_type -> xyz.block.ftl.v1.StatusResponse - 21, // 74: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:output_type -> xyz.block.ftl.v1.GetArtefactDiffsResponse - 23, // 75: xyz.block.ftl.v1.ControllerService.UploadArtefact:output_type -> xyz.block.ftl.v1.UploadArtefactResponse - 26, // 76: xyz.block.ftl.v1.ControllerService.CreateDeployment:output_type -> xyz.block.ftl.v1.CreateDeploymentResponse - 30, // 77: xyz.block.ftl.v1.ControllerService.GetDeployment:output_type -> xyz.block.ftl.v1.GetDeploymentResponse - 28, // 78: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:output_type -> xyz.block.ftl.v1.GetDeploymentArtefactsResponse - 32, // 79: xyz.block.ftl.v1.ControllerService.RegisterRunner:output_type -> xyz.block.ftl.v1.RegisterRunnerResponse - 34, // 80: xyz.block.ftl.v1.ControllerService.UpdateDeploy:output_type -> xyz.block.ftl.v1.UpdateDeployResponse - 36, // 81: xyz.block.ftl.v1.ControllerService.ReplaceDeploy:output_type -> xyz.block.ftl.v1.ReplaceDeployResponse - 38, // 82: xyz.block.ftl.v1.ControllerService.StreamDeploymentLogs:output_type -> xyz.block.ftl.v1.StreamDeploymentLogsResponse - 17, // 83: xyz.block.ftl.v1.ControllerService.GetSchema:output_type -> xyz.block.ftl.v1.GetSchemaResponse - 19, // 84: xyz.block.ftl.v1.ControllerService.PullSchema:output_type -> xyz.block.ftl.v1.PullSchemaResponse - 4, // 85: xyz.block.ftl.v1.RunnerService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 47, // 86: xyz.block.ftl.v1.RunnerService.Reserve:output_type -> xyz.block.ftl.v1.ReserveResponse - 44, // 87: xyz.block.ftl.v1.RunnerService.Deploy:output_type -> xyz.block.ftl.v1.DeployResponse - 31, // 88: xyz.block.ftl.v1.RunnerService.Terminate:output_type -> xyz.block.ftl.v1.RegisterRunnerRequest - 65, // [65:89] is the sub-list for method output_type - 41, // [41:65] is the sub-list for method input_type - 41, // [41:41] is the sub-list for extension type_name - 41, // [41:41] is the sub-list for extension extendee - 0, // [0:41] is the sub-list for field type_name + 88, // 23: xyz.block.ftl.v1.RegisterRunnerRequest.labels:type_name -> google.protobuf.Struct + 89, // 24: xyz.block.ftl.v1.StreamDeploymentLogsRequest.time_stamp:type_name -> google.protobuf.Timestamp + 73, // 25: xyz.block.ftl.v1.StreamDeploymentLogsRequest.attributes:type_name -> xyz.block.ftl.v1.StreamDeploymentLogsRequest.AttributesEntry + 74, // 26: xyz.block.ftl.v1.StatusResponse.controllers:type_name -> xyz.block.ftl.v1.StatusResponse.Controller + 75, // 27: xyz.block.ftl.v1.StatusResponse.runners:type_name -> xyz.block.ftl.v1.StatusResponse.Runner + 76, // 28: xyz.block.ftl.v1.StatusResponse.deployments:type_name -> xyz.block.ftl.v1.StatusResponse.Deployment + 77, // 29: xyz.block.ftl.v1.StatusResponse.ingress_routes:type_name -> xyz.block.ftl.v1.StatusResponse.IngressRoute + 78, // 30: xyz.block.ftl.v1.StatusResponse.routes:type_name -> xyz.block.ftl.v1.StatusResponse.Route + 80, // 31: xyz.block.ftl.v1.ProcessListResponse.processes:type_name -> xyz.block.ftl.v1.ProcessListResponse.Process + 81, // 32: xyz.block.ftl.v1.ListConfigResponse.configs:type_name -> xyz.block.ftl.v1.ListConfigResponse.Config + 50, // 33: xyz.block.ftl.v1.GetConfigRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef + 2, // 34: xyz.block.ftl.v1.SetConfigRequest.provider:type_name -> xyz.block.ftl.v1.ConfigProvider + 50, // 35: xyz.block.ftl.v1.SetConfigRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef + 2, // 36: xyz.block.ftl.v1.UnsetConfigRequest.provider:type_name -> xyz.block.ftl.v1.ConfigProvider + 50, // 37: xyz.block.ftl.v1.UnsetConfigRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef + 82, // 38: xyz.block.ftl.v1.ListSecretsResponse.secrets:type_name -> xyz.block.ftl.v1.ListSecretsResponse.Secret + 50, // 39: xyz.block.ftl.v1.GetSecretRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef + 3, // 40: xyz.block.ftl.v1.SetSecretRequest.provider:type_name -> xyz.block.ftl.v1.SecretProvider + 50, // 41: xyz.block.ftl.v1.SetSecretRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef + 3, // 42: xyz.block.ftl.v1.UnsetSecretRequest.provider:type_name -> xyz.block.ftl.v1.SecretProvider + 50, // 43: xyz.block.ftl.v1.UnsetSecretRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef + 4, // 44: xyz.block.ftl.v1.ModuleContextResponse.DSN.type:type_name -> xyz.block.ftl.v1.ModuleContextResponse.DBType + 1, // 45: xyz.block.ftl.v1.StatusResponse.Runner.state:type_name -> xyz.block.ftl.v1.RunnerState + 88, // 46: xyz.block.ftl.v1.StatusResponse.Runner.labels:type_name -> google.protobuf.Struct + 88, // 47: xyz.block.ftl.v1.StatusResponse.Deployment.labels:type_name -> google.protobuf.Struct + 87, // 48: xyz.block.ftl.v1.StatusResponse.Deployment.schema:type_name -> xyz.block.ftl.v1.schema.Module + 83, // 49: xyz.block.ftl.v1.StatusResponse.IngressRoute.verb:type_name -> xyz.block.ftl.v1.schema.Ref + 88, // 50: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner.labels:type_name -> google.protobuf.Struct + 88, // 51: xyz.block.ftl.v1.ProcessListResponse.Process.labels:type_name -> google.protobuf.Struct + 79, // 52: xyz.block.ftl.v1.ProcessListResponse.Process.runner:type_name -> xyz.block.ftl.v1.ProcessListResponse.ProcessRunner + 5, // 53: xyz.block.ftl.v1.VerbService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 7, // 54: xyz.block.ftl.v1.VerbService.GetModuleContext:input_type -> xyz.block.ftl.v1.ModuleContextRequest + 12, // 55: xyz.block.ftl.v1.VerbService.AcquireLease:input_type -> xyz.block.ftl.v1.AcquireLeaseRequest + 14, // 56: xyz.block.ftl.v1.VerbService.SendFSMEvent:input_type -> xyz.block.ftl.v1.SendFSMEventRequest + 16, // 57: xyz.block.ftl.v1.VerbService.PublishEvent:input_type -> xyz.block.ftl.v1.PublishEventRequest + 10, // 58: xyz.block.ftl.v1.VerbService.Call:input_type -> xyz.block.ftl.v1.CallRequest + 5, // 59: xyz.block.ftl.v1.ControllerService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 43, // 60: xyz.block.ftl.v1.ControllerService.ProcessList:input_type -> xyz.block.ftl.v1.ProcessListRequest + 41, // 61: xyz.block.ftl.v1.ControllerService.Status:input_type -> xyz.block.ftl.v1.StatusRequest + 22, // 62: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:input_type -> xyz.block.ftl.v1.GetArtefactDiffsRequest + 24, // 63: xyz.block.ftl.v1.ControllerService.UploadArtefact:input_type -> xyz.block.ftl.v1.UploadArtefactRequest + 27, // 64: xyz.block.ftl.v1.ControllerService.CreateDeployment:input_type -> xyz.block.ftl.v1.CreateDeploymentRequest + 31, // 65: xyz.block.ftl.v1.ControllerService.GetDeployment:input_type -> xyz.block.ftl.v1.GetDeploymentRequest + 29, // 66: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:input_type -> xyz.block.ftl.v1.GetDeploymentArtefactsRequest + 33, // 67: xyz.block.ftl.v1.ControllerService.RegisterRunner:input_type -> xyz.block.ftl.v1.RegisterRunnerRequest + 35, // 68: xyz.block.ftl.v1.ControllerService.UpdateDeploy:input_type -> xyz.block.ftl.v1.UpdateDeployRequest + 37, // 69: xyz.block.ftl.v1.ControllerService.ReplaceDeploy:input_type -> xyz.block.ftl.v1.ReplaceDeployRequest + 39, // 70: xyz.block.ftl.v1.ControllerService.StreamDeploymentLogs:input_type -> xyz.block.ftl.v1.StreamDeploymentLogsRequest + 18, // 71: xyz.block.ftl.v1.ControllerService.GetSchema:input_type -> xyz.block.ftl.v1.GetSchemaRequest + 20, // 72: xyz.block.ftl.v1.ControllerService.PullSchema:input_type -> xyz.block.ftl.v1.PullSchemaRequest + 5, // 73: xyz.block.ftl.v1.RunnerService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 48, // 74: xyz.block.ftl.v1.RunnerService.Reserve:input_type -> xyz.block.ftl.v1.ReserveRequest + 45, // 75: xyz.block.ftl.v1.RunnerService.Deploy:input_type -> xyz.block.ftl.v1.DeployRequest + 47, // 76: xyz.block.ftl.v1.RunnerService.Terminate:input_type -> xyz.block.ftl.v1.TerminateRequest + 5, // 77: xyz.block.ftl.v1.AdminService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 51, // 78: xyz.block.ftl.v1.AdminService.ConfigList:input_type -> xyz.block.ftl.v1.ListConfigRequest + 53, // 79: xyz.block.ftl.v1.AdminService.ConfigGet:input_type -> xyz.block.ftl.v1.GetConfigRequest + 55, // 80: xyz.block.ftl.v1.AdminService.ConfigSet:input_type -> xyz.block.ftl.v1.SetConfigRequest + 57, // 81: xyz.block.ftl.v1.AdminService.ConfigUnset:input_type -> xyz.block.ftl.v1.UnsetConfigRequest + 59, // 82: xyz.block.ftl.v1.AdminService.SecretsList:input_type -> xyz.block.ftl.v1.ListSecretsRequest + 61, // 83: xyz.block.ftl.v1.AdminService.SecretGet:input_type -> xyz.block.ftl.v1.GetSecretRequest + 63, // 84: xyz.block.ftl.v1.AdminService.SecretSet:input_type -> xyz.block.ftl.v1.SetSecretRequest + 65, // 85: xyz.block.ftl.v1.AdminService.SecretUnset:input_type -> xyz.block.ftl.v1.UnsetSecretRequest + 6, // 86: xyz.block.ftl.v1.VerbService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 8, // 87: xyz.block.ftl.v1.VerbService.GetModuleContext:output_type -> xyz.block.ftl.v1.ModuleContextResponse + 13, // 88: xyz.block.ftl.v1.VerbService.AcquireLease:output_type -> xyz.block.ftl.v1.AcquireLeaseResponse + 15, // 89: xyz.block.ftl.v1.VerbService.SendFSMEvent:output_type -> xyz.block.ftl.v1.SendFSMEventResponse + 17, // 90: xyz.block.ftl.v1.VerbService.PublishEvent:output_type -> xyz.block.ftl.v1.PublishEventResponse + 11, // 91: xyz.block.ftl.v1.VerbService.Call:output_type -> xyz.block.ftl.v1.CallResponse + 6, // 92: xyz.block.ftl.v1.ControllerService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 44, // 93: xyz.block.ftl.v1.ControllerService.ProcessList:output_type -> xyz.block.ftl.v1.ProcessListResponse + 42, // 94: xyz.block.ftl.v1.ControllerService.Status:output_type -> xyz.block.ftl.v1.StatusResponse + 23, // 95: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:output_type -> xyz.block.ftl.v1.GetArtefactDiffsResponse + 25, // 96: xyz.block.ftl.v1.ControllerService.UploadArtefact:output_type -> xyz.block.ftl.v1.UploadArtefactResponse + 28, // 97: xyz.block.ftl.v1.ControllerService.CreateDeployment:output_type -> xyz.block.ftl.v1.CreateDeploymentResponse + 32, // 98: xyz.block.ftl.v1.ControllerService.GetDeployment:output_type -> xyz.block.ftl.v1.GetDeploymentResponse + 30, // 99: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:output_type -> xyz.block.ftl.v1.GetDeploymentArtefactsResponse + 34, // 100: xyz.block.ftl.v1.ControllerService.RegisterRunner:output_type -> xyz.block.ftl.v1.RegisterRunnerResponse + 36, // 101: xyz.block.ftl.v1.ControllerService.UpdateDeploy:output_type -> xyz.block.ftl.v1.UpdateDeployResponse + 38, // 102: xyz.block.ftl.v1.ControllerService.ReplaceDeploy:output_type -> xyz.block.ftl.v1.ReplaceDeployResponse + 40, // 103: xyz.block.ftl.v1.ControllerService.StreamDeploymentLogs:output_type -> xyz.block.ftl.v1.StreamDeploymentLogsResponse + 19, // 104: xyz.block.ftl.v1.ControllerService.GetSchema:output_type -> xyz.block.ftl.v1.GetSchemaResponse + 21, // 105: xyz.block.ftl.v1.ControllerService.PullSchema:output_type -> xyz.block.ftl.v1.PullSchemaResponse + 6, // 106: xyz.block.ftl.v1.RunnerService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 49, // 107: xyz.block.ftl.v1.RunnerService.Reserve:output_type -> xyz.block.ftl.v1.ReserveResponse + 46, // 108: xyz.block.ftl.v1.RunnerService.Deploy:output_type -> xyz.block.ftl.v1.DeployResponse + 33, // 109: xyz.block.ftl.v1.RunnerService.Terminate:output_type -> xyz.block.ftl.v1.RegisterRunnerRequest + 6, // 110: xyz.block.ftl.v1.AdminService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 52, // 111: xyz.block.ftl.v1.AdminService.ConfigList:output_type -> xyz.block.ftl.v1.ListConfigResponse + 54, // 112: xyz.block.ftl.v1.AdminService.ConfigGet:output_type -> xyz.block.ftl.v1.GetConfigResponse + 56, // 113: xyz.block.ftl.v1.AdminService.ConfigSet:output_type -> xyz.block.ftl.v1.SetConfigResponse + 58, // 114: xyz.block.ftl.v1.AdminService.ConfigUnset:output_type -> xyz.block.ftl.v1.UnsetConfigResponse + 60, // 115: xyz.block.ftl.v1.AdminService.SecretsList:output_type -> xyz.block.ftl.v1.ListSecretsResponse + 62, // 116: xyz.block.ftl.v1.AdminService.SecretGet:output_type -> xyz.block.ftl.v1.GetSecretResponse + 64, // 117: xyz.block.ftl.v1.AdminService.SecretSet:output_type -> xyz.block.ftl.v1.SetSecretResponse + 66, // 118: xyz.block.ftl.v1.AdminService.SecretUnset:output_type -> xyz.block.ftl.v1.UnsetSecretResponse + 86, // [86:119] is the sub-list for method output_type + 53, // [53:86] is the sub-list for method input_type + 53, // [53:53] is the sub-list for extension type_name + 53, // [53:53] is the sub-list for extension extendee + 0, // [0:53] is the sub-list for field type_name } func init() { file_xyz_block_ftl_v1_ftl_proto_init() } @@ -4574,7 +5834,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ModuleContextResponse_Ref); i { + switch v := v.(*ConfigRef); i { case 0: return &v.state case 1: @@ -4586,7 +5846,31 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ModuleContextResponse_DSN); i { + switch v := v.(*ListConfigRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListConfigResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetConfigRequest); i { case 0: return &v.state case 1: @@ -4598,7 +5882,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Metadata_Pair); i { + switch v := v.(*GetConfigResponse); i { case 0: return &v.state case 1: @@ -4610,7 +5894,19 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CallResponse_Error); i { + switch v := v.(*SetConfigRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetConfigResponse); i { case 0: return &v.state case 1: @@ -4622,7 +5918,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusResponse_Controller); i { + switch v := v.(*UnsetConfigRequest); i { case 0: return &v.state case 1: @@ -4634,7 +5930,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusResponse_Runner); i { + switch v := v.(*UnsetConfigResponse); i { case 0: return &v.state case 1: @@ -4646,7 +5942,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusResponse_Deployment); i { + switch v := v.(*ListSecretsRequest); i { case 0: return &v.state case 1: @@ -4658,7 +5954,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusResponse_IngressRoute); i { + switch v := v.(*ListSecretsResponse); i { case 0: return &v.state case 1: @@ -4670,7 +5966,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusResponse_Route); i { + switch v := v.(*GetSecretRequest); i { case 0: return &v.state case 1: @@ -4682,7 +5978,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProcessListResponse_ProcessRunner); i { + switch v := v.(*GetSecretResponse); i { case 0: return &v.state case 1: @@ -4694,6 +5990,174 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetSecretRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetSecretResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnsetSecretRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnsetSecretResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ModuleContextResponse_Ref); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ModuleContextResponse_DSN); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Metadata_Pair); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CallResponse_Error); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatusResponse_Controller); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatusResponse_Runner); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatusResponse_Deployment); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatusResponse_IngressRoute); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatusResponse_Route); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProcessListResponse_ProcessRunner); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProcessListResponse_Process); i { case 0: return &v.state @@ -4705,6 +6169,30 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListConfigResponse_Config); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListSecretsResponse_Secret); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[1].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_ftl_proto_msgTypes[6].OneofWrappers = []interface{}{ @@ -4717,18 +6205,27 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { file_xyz_block_ftl_v1_ftl_proto_msgTypes[28].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_ftl_proto_msgTypes[34].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_ftl_proto_msgTypes[45].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[46].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_ftl_proto_msgTypes[50].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[53].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[52].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[54].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_ftl_proto_msgTypes[58].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[60].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[62].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[67].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[70].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[75].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[76].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[77].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_xyz_block_ftl_v1_ftl_proto_rawDesc, - NumEnums: 3, - NumMessages: 59, + NumEnums: 5, + NumMessages: 78, NumExtensions: 0, - NumServices: 3, + NumServices: 4, }, GoTypes: file_xyz_block_ftl_v1_ftl_proto_goTypes, DependencyIndexes: file_xyz_block_ftl_v1_ftl_proto_depIdxs, diff --git a/backend/protos/xyz/block/ftl/v1/ftl.proto b/backend/protos/xyz/block/ftl/v1/ftl.proto index bad55fa3ed..b797bf0486 100644 --- a/backend/protos/xyz/block/ftl/v1/ftl.proto +++ b/backend/protos/xyz/block/ftl/v1/ftl.proto @@ -394,3 +394,126 @@ service RunnerService { // Terminate the deployment on this Runner. rpc Terminate(TerminateRequest) returns (RegisterRunnerRequest); } + +message ConfigRef { + optional string module = 1; + string name = 2; +} + +enum ConfigProvider { + // Write values inline in the configuration file. + CONFIG_INLINE = 0; + + // Print configuration as environment variables. + CONFIG_ENVAR = 1; +} + +message ListConfigRequest { + optional string module = 1; + optional bool include_values = 2; +} +message ListConfigResponse { + message Config { + string refPath = 1; + optional bytes value = 2; + } + repeated Config configs = 1; +} + +message GetConfigRequest { + ConfigRef ref = 1; +} +message GetConfigResponse { + bytes value = 1; +} + +message SetConfigRequest { + optional ConfigProvider provider = 1; + ConfigRef ref = 2; + bytes value = 3; +} +message SetConfigResponse {} + +message UnsetConfigRequest { + optional ConfigProvider provider = 1; + ConfigRef ref = 2; +} +message UnsetConfigResponse {} + +enum SecretProvider { + // Write values inline in the configuration file. + SECRET_INLINE = 0; + + // Print configuration as environment variables. + SECRET_ENVAR = 1; + + // Write to the system keychain. + SECRET_KEYCHAIN = 2; + + // Store a secret in the 1Password vault. + SECRET_OP = 3; +} + +message ListSecretsRequest { + optional string module = 1; + optional bool include_values = 2; +} +message ListSecretsResponse { + message Secret { + string refPath = 1; + optional bytes value = 2; + } + repeated Secret secrets = 1; +} + +message GetSecretRequest { + ConfigRef ref = 1; +} +message GetSecretResponse { + bytes value = 1; +} + +message SetSecretRequest { + optional SecretProvider provider = 1; + ConfigRef ref = 2; + bytes value = 3; +} +message SetSecretResponse {} + +message UnsetSecretRequest { + optional SecretProvider provider = 1; + ConfigRef ref = 2; +} +message UnsetSecretResponse {} + +// AdminService is the service that provides and updates admin data. For example, +// it is used to encapsulate configuration and secrets. +service AdminService { + rpc Ping(PingRequest) returns (PingResponse) { + option idempotency_level = NO_SIDE_EFFECTS; + } + + // List configuration. + rpc ConfigList(ListConfigRequest) returns (ListConfigResponse); + + // Get a config value. + rpc ConfigGet(GetConfigRequest) returns (GetConfigResponse); + + // Set a config value. + rpc ConfigSet(SetConfigRequest) returns (SetConfigResponse); + + // Unset a config value. + rpc ConfigUnset(UnsetConfigRequest) returns (UnsetConfigResponse); + + // List secrets. + rpc SecretsList(ListSecretsRequest) returns (ListSecretsResponse); + + // Get a secret. + rpc SecretGet(GetSecretRequest) returns (GetSecretResponse); + + // Set a secret. + rpc SecretSet(SetSecretRequest) returns (SetSecretResponse); + + // Unset a secret. + rpc SecretUnset(UnsetSecretRequest) returns (UnsetSecretResponse); +} diff --git a/backend/protos/xyz/block/ftl/v1/ftlv1connect/ftl.connect.go b/backend/protos/xyz/block/ftl/v1/ftlv1connect/ftl.connect.go index 1811f13e9c..f7edb15dab 100644 --- a/backend/protos/xyz/block/ftl/v1/ftlv1connect/ftl.connect.go +++ b/backend/protos/xyz/block/ftl/v1/ftlv1connect/ftl.connect.go @@ -27,6 +27,8 @@ const ( ControllerServiceName = "xyz.block.ftl.v1.ControllerService" // RunnerServiceName is the fully-qualified name of the RunnerService service. RunnerServiceName = "xyz.block.ftl.v1.RunnerService" + // AdminServiceName is the fully-qualified name of the AdminService service. + AdminServiceName = "xyz.block.ftl.v1.AdminService" ) // These constants are the fully-qualified names of the RPCs defined in this package. They're @@ -102,6 +104,27 @@ const ( RunnerServiceDeployProcedure = "/xyz.block.ftl.v1.RunnerService/Deploy" // RunnerServiceTerminateProcedure is the fully-qualified name of the RunnerService's Terminate RPC. RunnerServiceTerminateProcedure = "/xyz.block.ftl.v1.RunnerService/Terminate" + // AdminServicePingProcedure is the fully-qualified name of the AdminService's Ping RPC. + AdminServicePingProcedure = "/xyz.block.ftl.v1.AdminService/Ping" + // AdminServiceConfigListProcedure is the fully-qualified name of the AdminService's ConfigList RPC. + AdminServiceConfigListProcedure = "/xyz.block.ftl.v1.AdminService/ConfigList" + // AdminServiceConfigGetProcedure is the fully-qualified name of the AdminService's ConfigGet RPC. + AdminServiceConfigGetProcedure = "/xyz.block.ftl.v1.AdminService/ConfigGet" + // AdminServiceConfigSetProcedure is the fully-qualified name of the AdminService's ConfigSet RPC. + AdminServiceConfigSetProcedure = "/xyz.block.ftl.v1.AdminService/ConfigSet" + // AdminServiceConfigUnsetProcedure is the fully-qualified name of the AdminService's ConfigUnset + // RPC. + AdminServiceConfigUnsetProcedure = "/xyz.block.ftl.v1.AdminService/ConfigUnset" + // AdminServiceSecretsListProcedure is the fully-qualified name of the AdminService's SecretsList + // RPC. + AdminServiceSecretsListProcedure = "/xyz.block.ftl.v1.AdminService/SecretsList" + // AdminServiceSecretGetProcedure is the fully-qualified name of the AdminService's SecretGet RPC. + AdminServiceSecretGetProcedure = "/xyz.block.ftl.v1.AdminService/SecretGet" + // AdminServiceSecretSetProcedure is the fully-qualified name of the AdminService's SecretSet RPC. + AdminServiceSecretSetProcedure = "/xyz.block.ftl.v1.AdminService/SecretSet" + // AdminServiceSecretUnsetProcedure is the fully-qualified name of the AdminService's SecretUnset + // RPC. + AdminServiceSecretUnsetProcedure = "/xyz.block.ftl.v1.AdminService/SecretUnset" ) // VerbServiceClient is a client for the xyz.block.ftl.v1.VerbService service. @@ -883,3 +906,279 @@ func (UnimplementedRunnerServiceHandler) Deploy(context.Context, *connect.Reques func (UnimplementedRunnerServiceHandler) Terminate(context.Context, *connect.Request[v1.TerminateRequest]) (*connect.Response[v1.RegisterRunnerRequest], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.RunnerService.Terminate is not implemented")) } + +// AdminServiceClient is a client for the xyz.block.ftl.v1.AdminService service. +type AdminServiceClient interface { + Ping(context.Context, *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) + // List configuration. + ConfigList(context.Context, *connect.Request[v1.ListConfigRequest]) (*connect.Response[v1.ListConfigResponse], error) + // Get a config value. + ConfigGet(context.Context, *connect.Request[v1.GetConfigRequest]) (*connect.Response[v1.GetConfigResponse], error) + // Set a config value. + ConfigSet(context.Context, *connect.Request[v1.SetConfigRequest]) (*connect.Response[v1.SetConfigResponse], error) + // Unset a config value. + ConfigUnset(context.Context, *connect.Request[v1.UnsetConfigRequest]) (*connect.Response[v1.UnsetConfigResponse], error) + // List secrets. + SecretsList(context.Context, *connect.Request[v1.ListSecretsRequest]) (*connect.Response[v1.ListSecretsResponse], error) + // Get a secret. + SecretGet(context.Context, *connect.Request[v1.GetSecretRequest]) (*connect.Response[v1.GetSecretResponse], error) + // Set a secret. + SecretSet(context.Context, *connect.Request[v1.SetSecretRequest]) (*connect.Response[v1.SetSecretResponse], error) + // Unset a secret. + SecretUnset(context.Context, *connect.Request[v1.UnsetSecretRequest]) (*connect.Response[v1.UnsetSecretResponse], error) +} + +// NewAdminServiceClient constructs a client for the xyz.block.ftl.v1.AdminService service. By +// default, it uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, +// and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the +// connect.WithGRPC() or connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewAdminServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) AdminServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + return &adminServiceClient{ + ping: connect.NewClient[v1.PingRequest, v1.PingResponse]( + httpClient, + baseURL+AdminServicePingProcedure, + connect.WithIdempotency(connect.IdempotencyNoSideEffects), + connect.WithClientOptions(opts...), + ), + configList: connect.NewClient[v1.ListConfigRequest, v1.ListConfigResponse]( + httpClient, + baseURL+AdminServiceConfigListProcedure, + opts..., + ), + configGet: connect.NewClient[v1.GetConfigRequest, v1.GetConfigResponse]( + httpClient, + baseURL+AdminServiceConfigGetProcedure, + opts..., + ), + configSet: connect.NewClient[v1.SetConfigRequest, v1.SetConfigResponse]( + httpClient, + baseURL+AdminServiceConfigSetProcedure, + opts..., + ), + configUnset: connect.NewClient[v1.UnsetConfigRequest, v1.UnsetConfigResponse]( + httpClient, + baseURL+AdminServiceConfigUnsetProcedure, + opts..., + ), + secretsList: connect.NewClient[v1.ListSecretsRequest, v1.ListSecretsResponse]( + httpClient, + baseURL+AdminServiceSecretsListProcedure, + opts..., + ), + secretGet: connect.NewClient[v1.GetSecretRequest, v1.GetSecretResponse]( + httpClient, + baseURL+AdminServiceSecretGetProcedure, + opts..., + ), + secretSet: connect.NewClient[v1.SetSecretRequest, v1.SetSecretResponse]( + httpClient, + baseURL+AdminServiceSecretSetProcedure, + opts..., + ), + secretUnset: connect.NewClient[v1.UnsetSecretRequest, v1.UnsetSecretResponse]( + httpClient, + baseURL+AdminServiceSecretUnsetProcedure, + opts..., + ), + } +} + +// adminServiceClient implements AdminServiceClient. +type adminServiceClient struct { + ping *connect.Client[v1.PingRequest, v1.PingResponse] + configList *connect.Client[v1.ListConfigRequest, v1.ListConfigResponse] + configGet *connect.Client[v1.GetConfigRequest, v1.GetConfigResponse] + configSet *connect.Client[v1.SetConfigRequest, v1.SetConfigResponse] + configUnset *connect.Client[v1.UnsetConfigRequest, v1.UnsetConfigResponse] + secretsList *connect.Client[v1.ListSecretsRequest, v1.ListSecretsResponse] + secretGet *connect.Client[v1.GetSecretRequest, v1.GetSecretResponse] + secretSet *connect.Client[v1.SetSecretRequest, v1.SetSecretResponse] + secretUnset *connect.Client[v1.UnsetSecretRequest, v1.UnsetSecretResponse] +} + +// Ping calls xyz.block.ftl.v1.AdminService.Ping. +func (c *adminServiceClient) Ping(ctx context.Context, req *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) { + return c.ping.CallUnary(ctx, req) +} + +// ConfigList calls xyz.block.ftl.v1.AdminService.ConfigList. +func (c *adminServiceClient) ConfigList(ctx context.Context, req *connect.Request[v1.ListConfigRequest]) (*connect.Response[v1.ListConfigResponse], error) { + return c.configList.CallUnary(ctx, req) +} + +// ConfigGet calls xyz.block.ftl.v1.AdminService.ConfigGet. +func (c *adminServiceClient) ConfigGet(ctx context.Context, req *connect.Request[v1.GetConfigRequest]) (*connect.Response[v1.GetConfigResponse], error) { + return c.configGet.CallUnary(ctx, req) +} + +// ConfigSet calls xyz.block.ftl.v1.AdminService.ConfigSet. +func (c *adminServiceClient) ConfigSet(ctx context.Context, req *connect.Request[v1.SetConfigRequest]) (*connect.Response[v1.SetConfigResponse], error) { + return c.configSet.CallUnary(ctx, req) +} + +// ConfigUnset calls xyz.block.ftl.v1.AdminService.ConfigUnset. +func (c *adminServiceClient) ConfigUnset(ctx context.Context, req *connect.Request[v1.UnsetConfigRequest]) (*connect.Response[v1.UnsetConfigResponse], error) { + return c.configUnset.CallUnary(ctx, req) +} + +// SecretsList calls xyz.block.ftl.v1.AdminService.SecretsList. +func (c *adminServiceClient) SecretsList(ctx context.Context, req *connect.Request[v1.ListSecretsRequest]) (*connect.Response[v1.ListSecretsResponse], error) { + return c.secretsList.CallUnary(ctx, req) +} + +// SecretGet calls xyz.block.ftl.v1.AdminService.SecretGet. +func (c *adminServiceClient) SecretGet(ctx context.Context, req *connect.Request[v1.GetSecretRequest]) (*connect.Response[v1.GetSecretResponse], error) { + return c.secretGet.CallUnary(ctx, req) +} + +// SecretSet calls xyz.block.ftl.v1.AdminService.SecretSet. +func (c *adminServiceClient) SecretSet(ctx context.Context, req *connect.Request[v1.SetSecretRequest]) (*connect.Response[v1.SetSecretResponse], error) { + return c.secretSet.CallUnary(ctx, req) +} + +// SecretUnset calls xyz.block.ftl.v1.AdminService.SecretUnset. +func (c *adminServiceClient) SecretUnset(ctx context.Context, req *connect.Request[v1.UnsetSecretRequest]) (*connect.Response[v1.UnsetSecretResponse], error) { + return c.secretUnset.CallUnary(ctx, req) +} + +// AdminServiceHandler is an implementation of the xyz.block.ftl.v1.AdminService service. +type AdminServiceHandler interface { + Ping(context.Context, *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) + // List configuration. + ConfigList(context.Context, *connect.Request[v1.ListConfigRequest]) (*connect.Response[v1.ListConfigResponse], error) + // Get a config value. + ConfigGet(context.Context, *connect.Request[v1.GetConfigRequest]) (*connect.Response[v1.GetConfigResponse], error) + // Set a config value. + ConfigSet(context.Context, *connect.Request[v1.SetConfigRequest]) (*connect.Response[v1.SetConfigResponse], error) + // Unset a config value. + ConfigUnset(context.Context, *connect.Request[v1.UnsetConfigRequest]) (*connect.Response[v1.UnsetConfigResponse], error) + // List secrets. + SecretsList(context.Context, *connect.Request[v1.ListSecretsRequest]) (*connect.Response[v1.ListSecretsResponse], error) + // Get a secret. + SecretGet(context.Context, *connect.Request[v1.GetSecretRequest]) (*connect.Response[v1.GetSecretResponse], error) + // Set a secret. + SecretSet(context.Context, *connect.Request[v1.SetSecretRequest]) (*connect.Response[v1.SetSecretResponse], error) + // Unset a secret. + SecretUnset(context.Context, *connect.Request[v1.UnsetSecretRequest]) (*connect.Response[v1.UnsetSecretResponse], error) +} + +// NewAdminServiceHandler builds an HTTP handler from the service implementation. It returns the +// path on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewAdminServiceHandler(svc AdminServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + adminServicePingHandler := connect.NewUnaryHandler( + AdminServicePingProcedure, + svc.Ping, + connect.WithIdempotency(connect.IdempotencyNoSideEffects), + connect.WithHandlerOptions(opts...), + ) + adminServiceConfigListHandler := connect.NewUnaryHandler( + AdminServiceConfigListProcedure, + svc.ConfigList, + opts..., + ) + adminServiceConfigGetHandler := connect.NewUnaryHandler( + AdminServiceConfigGetProcedure, + svc.ConfigGet, + opts..., + ) + adminServiceConfigSetHandler := connect.NewUnaryHandler( + AdminServiceConfigSetProcedure, + svc.ConfigSet, + opts..., + ) + adminServiceConfigUnsetHandler := connect.NewUnaryHandler( + AdminServiceConfigUnsetProcedure, + svc.ConfigUnset, + opts..., + ) + adminServiceSecretsListHandler := connect.NewUnaryHandler( + AdminServiceSecretsListProcedure, + svc.SecretsList, + opts..., + ) + adminServiceSecretGetHandler := connect.NewUnaryHandler( + AdminServiceSecretGetProcedure, + svc.SecretGet, + opts..., + ) + adminServiceSecretSetHandler := connect.NewUnaryHandler( + AdminServiceSecretSetProcedure, + svc.SecretSet, + opts..., + ) + adminServiceSecretUnsetHandler := connect.NewUnaryHandler( + AdminServiceSecretUnsetProcedure, + svc.SecretUnset, + opts..., + ) + return "/xyz.block.ftl.v1.AdminService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case AdminServicePingProcedure: + adminServicePingHandler.ServeHTTP(w, r) + case AdminServiceConfigListProcedure: + adminServiceConfigListHandler.ServeHTTP(w, r) + case AdminServiceConfigGetProcedure: + adminServiceConfigGetHandler.ServeHTTP(w, r) + case AdminServiceConfigSetProcedure: + adminServiceConfigSetHandler.ServeHTTP(w, r) + case AdminServiceConfigUnsetProcedure: + adminServiceConfigUnsetHandler.ServeHTTP(w, r) + case AdminServiceSecretsListProcedure: + adminServiceSecretsListHandler.ServeHTTP(w, r) + case AdminServiceSecretGetProcedure: + adminServiceSecretGetHandler.ServeHTTP(w, r) + case AdminServiceSecretSetProcedure: + adminServiceSecretSetHandler.ServeHTTP(w, r) + case AdminServiceSecretUnsetProcedure: + adminServiceSecretUnsetHandler.ServeHTTP(w, r) + default: + http.NotFound(w, r) + } + }) +} + +// UnimplementedAdminServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedAdminServiceHandler struct{} + +func (UnimplementedAdminServiceHandler) Ping(context.Context, *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.AdminService.Ping is not implemented")) +} + +func (UnimplementedAdminServiceHandler) ConfigList(context.Context, *connect.Request[v1.ListConfigRequest]) (*connect.Response[v1.ListConfigResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.AdminService.ConfigList is not implemented")) +} + +func (UnimplementedAdminServiceHandler) ConfigGet(context.Context, *connect.Request[v1.GetConfigRequest]) (*connect.Response[v1.GetConfigResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.AdminService.ConfigGet is not implemented")) +} + +func (UnimplementedAdminServiceHandler) ConfigSet(context.Context, *connect.Request[v1.SetConfigRequest]) (*connect.Response[v1.SetConfigResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.AdminService.ConfigSet is not implemented")) +} + +func (UnimplementedAdminServiceHandler) ConfigUnset(context.Context, *connect.Request[v1.UnsetConfigRequest]) (*connect.Response[v1.UnsetConfigResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.AdminService.ConfigUnset is not implemented")) +} + +func (UnimplementedAdminServiceHandler) SecretsList(context.Context, *connect.Request[v1.ListSecretsRequest]) (*connect.Response[v1.ListSecretsResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.AdminService.SecretsList is not implemented")) +} + +func (UnimplementedAdminServiceHandler) SecretGet(context.Context, *connect.Request[v1.GetSecretRequest]) (*connect.Response[v1.GetSecretResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.AdminService.SecretGet is not implemented")) +} + +func (UnimplementedAdminServiceHandler) SecretSet(context.Context, *connect.Request[v1.SetSecretRequest]) (*connect.Response[v1.SetSecretResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.AdminService.SecretSet is not implemented")) +} + +func (UnimplementedAdminServiceHandler) SecretUnset(context.Context, *connect.Request[v1.UnsetSecretRequest]) (*connect.Response[v1.UnsetSecretResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.AdminService.SecretUnset is not implemented")) +} diff --git a/cmd/ftl/cmd_config.go b/cmd/ftl/cmd_config.go index c65fd550ff..4604589018 100644 --- a/cmd/ftl/cmd_config.go +++ b/cmd/ftl/cmd_config.go @@ -7,12 +7,15 @@ import ( "io" "os" + "connectrpc.com/connect" + + ftlv1 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1" + "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" cf "github.com/TBD54566975/ftl/common/configuration" + "github.com/alecthomas/types/optional" ) type configCmd struct { - cf.DefaultConfigMixin - List configListCmd `cmd:"" help:"List configuration."` Get configGetCmd `cmd:"" help:"Get a configuration value."` Set configSetCmd `cmd:"" help:"Set a configuration value."` @@ -29,13 +32,21 @@ etc. ` } -func (s *configCmd) providerKey() string { +func configRefFromRef(ref cf.Ref) *ftlv1.ConfigRef { + module := ref.Module.Default("") + return &ftlv1.ConfigRef{ + Module: &module, + Name: ref.Name, + } +} + +func (s *configCmd) provider() optional.Option[ftlv1.ConfigProvider] { if s.Envar { - return "envar" + return optional.Some(ftlv1.ConfigProvider_CONFIG_ENVAR) } else if s.Inline { - return "inline" + return optional.Some(ftlv1.ConfigProvider_CONFIG_INLINE) } - return "" + return optional.None[ftlv1.ConfigProvider]() } type configListCmd struct { @@ -43,40 +54,24 @@ type configListCmd struct { Module string `optional:"" arg:"" placeholder:"MODULE" help:"List configuration only in this module."` } -func (s *configListCmd) Run(ctx context.Context, cr cf.Resolver[cf.Configuration]) error { - sm, err := cf.NewConfigurationManager(ctx, cr) +func (s *configListCmd) Run(ctx context.Context, admin ftlv1connect.AdminServiceClient) error { + resp, err := admin.ConfigList(ctx, connect.NewRequest(&ftlv1.ListConfigRequest{ + Module: &s.Module, + IncludeValues: &s.Values, + })) if err != nil { return err } - listing, err := sm.List(ctx) - if err != nil { - return err - } - for _, config := range listing { - module, ok := config.Module.Get() - if s.Module != "" && module != s.Module { - continue - } - if ok { - fmt.Printf("%s.%s", module, config.Name) - } else { - fmt.Print(config.Name) - } - if s.Values { - var value any - err := sm.Get(ctx, config.Ref, &value) - if err != nil { - fmt.Printf(" (error: %s)\n", err) - } else { - data, _ := json.Marshal(value) - fmt.Printf(" = %s\n", data) - } + + for _, config := range resp.Msg.Configs { + fmt.Printf("%s", config.RefPath) + if config.Value != nil && len(config.Value) > 0 { + fmt.Printf(" = %s\n", config.Value) } else { fmt.Println() } } return nil - } type configGetCmd struct { @@ -89,23 +84,20 @@ Returns a JSON-encoded configuration value. ` } -func (s *configGetCmd) Run(ctx context.Context, cr cf.Resolver[cf.Configuration]) error { - sm, err := cf.NewConfigurationManager(ctx, cr) - if err != nil { - return err - } - var value any - err = sm.Get(ctx, s.Ref, &value) +func (s *configGetCmd) Run(ctx context.Context, admin ftlv1connect.AdminServiceClient) error { + resp, err := admin.ConfigGet(ctx, connect.NewRequest(&ftlv1.GetConfigRequest{ + Ref: configRefFromRef(s.Ref), + })) if err != nil { return err } - enc := json.NewEncoder(os.Stdout) - enc.SetIndent("", " ") - err = enc.Encode(value) + var value any + err = json.Unmarshal(resp.Msg.Value, &value) if err != nil { return fmt.Errorf("%s: %w", s.Ref, err) } + fmt.Println(value) return nil } @@ -115,12 +107,8 @@ type configSetCmd struct { Value *string `arg:"" placeholder:"VALUE" help:"Configuration value (read from stdin if omitted)." optional:""` } -func (s *configSetCmd) Run(ctx context.Context, scmd *configCmd, cr cf.Resolver[cf.Configuration]) error { - sm, err := cf.NewConfigurationManager(ctx, cr) - if err != nil { - return err - } - +func (s *configSetCmd) Run(ctx context.Context, scmd *configCmd, admin ftlv1connect.AdminServiceClient) error { + var err error var config []byte if s.Value != nil { config = []byte(*s.Value) @@ -131,26 +119,43 @@ func (s *configSetCmd) Run(ctx context.Context, scmd *configCmd, cr cf.Resolver[ } } - var configValue any + var configValue []byte if s.JSON { if err := json.Unmarshal(config, &configValue); err != nil { return fmt.Errorf("config is not valid JSON: %w", err) } } else { - configValue = string(config) + configValue = config + } + + req := &ftlv1.SetConfigRequest{ + Ref: configRefFromRef(s.Ref), + Value: configValue, + } + if provider, ok := scmd.provider().Get(); ok { + req.Provider = &provider } - return sm.Set(ctx, scmd.providerKey(), s.Ref, configValue) + _, err = admin.ConfigSet(ctx, connect.NewRequest(req)) + if err != nil { + return err + } + return nil } type configUnsetCmd struct { Ref cf.Ref `arg:"" help:"Configuration reference in the form [.]."` } -func (s *configUnsetCmd) Run(ctx context.Context, scmd *configCmd, cr cf.Resolver[cf.Configuration]) error { - sm, err := cf.NewConfigurationManager(ctx, cr) +func (s *configUnsetCmd) Run(ctx context.Context, scmd *configCmd, admin ftlv1connect.AdminServiceClient) error { + req := &ftlv1.UnsetConfigRequest{ + Ref: configRefFromRef(s.Ref), + } + if provider, ok := scmd.provider().Get(); ok { + req.Provider = &provider + } + _, err := admin.ConfigUnset(ctx, connect.NewRequest(req)) if err != nil { return err } - - return sm.Unset(ctx, scmd.providerKey(), s.Ref) + return nil } diff --git a/cmd/ftl/cmd_secret.go b/cmd/ftl/cmd_secret.go index 43dc0c21ae..ee4b52aab6 100644 --- a/cmd/ftl/cmd_secret.go +++ b/cmd/ftl/cmd_secret.go @@ -7,9 +7,14 @@ import ( "io" "os" + "connectrpc.com/connect" + + "github.com/alecthomas/types/optional" "github.com/mattn/go-isatty" "golang.org/x/term" + ftlv1 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1" + "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" cf "github.com/TBD54566975/ftl/common/configuration" ) @@ -22,9 +27,7 @@ type secretCmd struct { Envar bool `help:"Write configuration as environment variables." group:"Provider:" xor:"secretwriter"` Inline bool `help:"Write values inline in the configuration file." group:"Provider:" xor:"secretwriter"` Keychain bool `help:"Write to the system keychain." group:"Provider:" xor:"secretwriter"` - - //TODO: with AdminService, the controller will accept --opvault=VAULT and the following should be replaced with an --op bool flag. - Vault string `name:"op" help:"Store a secret in this 1Password vault. The name of the 1Password item will be the and the secret will be stored in the password field." group:"Provider:" xor:"secretwriter" placeholder:"VAULT"` + Op bool `help:"Write to the controller's 1Password vault. Requires that a vault be specified to the controller. The name of the item will be the and the secret will be stored in the password field." group:"Provider:" xor:"secretwriter"` } func (s *secretCmd) Help() string { @@ -37,17 +40,17 @@ variables, and so on. ` } -func (s *secretCmd) providerKey() string { +func (s *secretCmd) provider() optional.Option[ftlv1.SecretProvider] { if s.Envar { - return "envar" + return optional.Some(ftlv1.SecretProvider_SECRET_ENVAR) } else if s.Inline { - return "inline" + return optional.Some(ftlv1.SecretProvider_SECRET_INLINE) } else if s.Keychain { - return "keychain" - } else if s.Vault != "" { - return "op" + return optional.Some(ftlv1.SecretProvider_SECRET_KEYCHAIN) + } else if s.Op { + return optional.Some(ftlv1.SecretProvider_SECRET_OP) } - return "" + return optional.None[ftlv1.SecretProvider]() } type secretListCmd struct { @@ -55,40 +58,23 @@ type secretListCmd struct { Module string `optional:"" arg:"" placeholder:"MODULE" help:"List secrets only in this module."` } -func (s *secretListCmd) Run(ctx context.Context, scmd *secretCmd, sr cf.Resolver[cf.Secrets]) error { - sm, err := cf.NewSecretsManager(ctx, sr, scmd.Vault) - if err != nil { - return err - } - listing, err := sm.List(ctx) +func (s *secretListCmd) Run(ctx context.Context, admin ftlv1connect.AdminServiceClient) error { + resp, err := admin.SecretsList(ctx, connect.NewRequest(&ftlv1.ListSecretsRequest{ + Module: &s.Module, + IncludeValues: &s.Values, + })) if err != nil { return err } - for _, secret := range listing { - module, ok := secret.Module.Get() - if s.Module != "" && module != s.Module { - continue - } - if ok { - fmt.Printf("%s.%s", module, secret.Name) - } else { - fmt.Print(secret.Name) - } - if s.Values { - var value any - err := sm.Get(ctx, secret.Ref, &value) - if err != nil { - fmt.Printf(" (error: %s)\n", err) - } else { - data, _ := json.Marshal(value) - fmt.Printf(" = %s\n", data) - } + for _, secret := range resp.Msg.Secrets { + fmt.Printf("%s", secret.RefPath) + if secret.Value != nil && len(secret.Value) > 0 { + fmt.Printf(" = %s\n", secret.Value) } else { fmt.Println() } } return nil - } type secretGetCmd struct { @@ -101,23 +87,19 @@ Returns a JSON-encoded secret value. ` } -func (s *secretGetCmd) Run(ctx context.Context, scmd *secretCmd, sr cf.Resolver[cf.Secrets]) error { - sm, err := cf.NewSecretsManager(ctx, sr, scmd.Vault) - if err != nil { - return err - } - var value any - err = sm.Get(ctx, s.Ref, &value) +func (s *secretGetCmd) Run(ctx context.Context, admin ftlv1connect.AdminServiceClient) error { + resp, err := admin.SecretGet(ctx, connect.NewRequest(&ftlv1.GetSecretRequest{ + Ref: configRefFromRef(s.Ref), + })) if err != nil { return err } - enc := json.NewEncoder(os.Stdout) - enc.SetIndent("", " ") - err = enc.Encode(value) - if err != nil { + var value any + if err := json.Unmarshal(resp.Msg.Value, &value); err != nil { return fmt.Errorf("%s: %w", s.Ref, err) } + fmt.Println(value) return nil } @@ -126,13 +108,9 @@ type secretSetCmd struct { Ref cf.Ref `arg:"" help:"Secret reference in the form [.]."` } -func (s *secretSetCmd) Run(ctx context.Context, scmd *secretCmd, sr cf.Resolver[cf.Secrets]) error { - sm, err := cf.NewSecretsManager(ctx, sr, scmd.Vault) - if err != nil { - return err - } - +func (s *secretSetCmd) Run(ctx context.Context, scmd *secretCmd, admin ftlv1connect.AdminServiceClient) error { // Prompt for a secret if stdin is a terminal, otherwise read from stdin. + var err error var secret []byte if isatty.IsTerminal(0) { fmt.Print("Secret: ") @@ -148,25 +126,43 @@ func (s *secretSetCmd) Run(ctx context.Context, scmd *secretCmd, sr cf.Resolver[ } } - var secretValue any + var secretValue []byte if s.JSON { if err := json.Unmarshal(secret, &secretValue); err != nil { return fmt.Errorf("secret is not valid JSON: %w", err) } } else { - secretValue = string(secret) + secretValue = secret + } + + req := &ftlv1.SetSecretRequest{ + Ref: configRefFromRef(s.Ref), + Value: secretValue, + } + if provider, ok := scmd.provider().Get(); ok { + req.Provider = &provider } - return sm.Set(ctx, scmd.providerKey(), s.Ref, secretValue) + _, err = admin.SecretSet(ctx, connect.NewRequest(req)) + if err != nil { + return err + } + return nil } type secretUnsetCmd struct { Ref cf.Ref `arg:"" help:"Secret reference in the form [.]."` } -func (s *secretUnsetCmd) Run(ctx context.Context, scmd *secretCmd, sr cf.Resolver[cf.Secrets]) error { - sm, err := cf.NewSecretsManager(ctx, sr, scmd.Vault) +func (s *secretUnsetCmd) Run(ctx context.Context, scmd *secretCmd, admin ftlv1connect.AdminServiceClient) error { + req := &ftlv1.UnsetSecretRequest{ + Ref: configRefFromRef(s.Ref), + } + if provider, ok := scmd.provider().Get(); ok { + req.Provider = &provider + } + _, err := admin.SecretUnset(ctx, connect.NewRequest(req)) if err != nil { return err } - return sm.Unset(ctx, scmd.providerKey(), s.Ref) + return nil } diff --git a/cmd/ftl/main.go b/cmd/ftl/main.go index 671d17629c..879b089e08 100644 --- a/cmd/ftl/main.go +++ b/cmd/ftl/main.go @@ -119,6 +119,10 @@ func main() { os.Exit(0) }() + adminServiceClient := rpc.Dial(ftlv1connect.NewAdminServiceClient, cli.Endpoint.String(), log.Error) + ctx = rpc.ContextWithClient(ctx, adminServiceClient) + kctx.BindTo(adminServiceClient, (*ftlv1connect.AdminServiceClient)(nil)) + controllerServiceClient := rpc.Dial(ftlv1connect.NewControllerServiceClient, cli.Endpoint.String(), log.Error) ctx = rpc.ContextWithClient(ctx, controllerServiceClient) kctx.BindTo(controllerServiceClient, (*ftlv1connect.ControllerServiceClient)(nil)) diff --git a/common/configuration/1password_provider.go b/common/configuration/1password_provider.go index fe20db68c0..09226ad574 100644 --- a/common/configuration/1password_provider.go +++ b/common/configuration/1password_provider.go @@ -65,6 +65,9 @@ func (o OnePasswordProvider) Store(ctx context.Context, ref Ref, value []byte) ( if err := checkOpBinary(); err != nil { return nil, err } + if o.Vault == "" { + return nil, fmt.Errorf("vault missing, specify vault as a flag to the controller") + } if !vaultRegex.MatchString(o.Vault) { return nil, fmt.Errorf("vault name %q contains invalid characters. a-z A-Z 0-9 _ . - are valid", o.Vault) } diff --git a/common/configuration/defaults.go b/common/configuration/defaults.go index 2605561a14..c1261f4dd4 100644 --- a/common/configuration/defaults.go +++ b/common/configuration/defaults.go @@ -4,10 +4,6 @@ import ( "context" ) -// DefaultConfigMixin is a Kong mixin that provides the default configuration manager. -type DefaultConfigMixin struct { -} - // NewConfigurationManager creates a new configuration manager with the default configuration providers. func NewConfigurationManager(ctx context.Context, resolver Resolver[Configuration]) (*Manager[Configuration], error) { return New(ctx, resolver, []Provider[Configuration]{ diff --git a/common/configuration/manager.go b/common/configuration/manager.go index de44cb5d89..95963282b9 100644 --- a/common/configuration/manager.go +++ b/common/configuration/manager.go @@ -100,11 +100,20 @@ func (m *Manager[R]) Get(ctx context.Context, ref Ref, value any) error { return json.Unmarshal(data, value) } +func (m *Manager[R]) availableProviderKeys() []string { + keys := make([]string, 0, len(m.providers)) + for k := range m.providers { + keys = append(keys, "--"+k) + } + return keys +} + // Set a configuration value. func (m *Manager[R]) Set(ctx context.Context, pkey string, ref Ref, value any) error { provider, ok := m.providers[pkey] if !ok { - return fmt.Errorf("no provider for key %q", pkey) + pkeys := strings.Join(m.availableProviderKeys(), ", ") + return fmt.Errorf("no provider for key %q, specify one of: %s", pkey, pkeys) } data, err := json.Marshal(value) if err != nil { @@ -152,7 +161,8 @@ func (m *Manager[R]) MapForModule(ctx context.Context, module string) (map[strin func (m *Manager[R]) Unset(ctx context.Context, pkey string, ref Ref) error { provider, ok := m.providers[pkey] if !ok { - return fmt.Errorf("no provider for key %q", pkey) + pkeys := strings.Join(m.availableProviderKeys(), ", ") + return fmt.Errorf("no provider for key %q, specify one of %s", pkey, pkeys) } if err := provider.Delete(ctx, ref); err != nil && !errors.Is(err, ErrNotFound) { return err diff --git a/frontend/src/protos/xyz/block/ftl/v1/ftl_connect.ts b/frontend/src/protos/xyz/block/ftl/v1/ftl_connect.ts index be391d31c1..30ce200483 100644 --- a/frontend/src/protos/xyz/block/ftl/v1/ftl_connect.ts +++ b/frontend/src/protos/xyz/block/ftl/v1/ftl_connect.ts @@ -3,7 +3,7 @@ /* eslint-disable */ // @ts-nocheck -import { AcquireLeaseRequest, AcquireLeaseResponse, CallRequest, CallResponse, CreateDeploymentRequest, CreateDeploymentResponse, DeployRequest, DeployResponse, GetArtefactDiffsRequest, GetArtefactDiffsResponse, GetDeploymentArtefactsRequest, GetDeploymentArtefactsResponse, GetDeploymentRequest, GetDeploymentResponse, GetSchemaRequest, GetSchemaResponse, ModuleContextRequest, ModuleContextResponse, PingRequest, PingResponse, ProcessListRequest, ProcessListResponse, PublishEventRequest, PublishEventResponse, PullSchemaRequest, PullSchemaResponse, RegisterRunnerRequest, RegisterRunnerResponse, ReplaceDeployRequest, ReplaceDeployResponse, ReserveRequest, ReserveResponse, SendFSMEventRequest, SendFSMEventResponse, StatusRequest, StatusResponse, StreamDeploymentLogsRequest, StreamDeploymentLogsResponse, TerminateRequest, UpdateDeployRequest, UpdateDeployResponse, UploadArtefactRequest, UploadArtefactResponse } from "./ftl_pb.js"; +import { AcquireLeaseRequest, AcquireLeaseResponse, CallRequest, CallResponse, CreateDeploymentRequest, CreateDeploymentResponse, DeployRequest, DeployResponse, GetArtefactDiffsRequest, GetArtefactDiffsResponse, GetConfigRequest, GetConfigResponse, GetDeploymentArtefactsRequest, GetDeploymentArtefactsResponse, GetDeploymentRequest, GetDeploymentResponse, GetSchemaRequest, GetSchemaResponse, GetSecretRequest, GetSecretResponse, ListConfigRequest, ListConfigResponse, ListSecretsRequest, ListSecretsResponse, ModuleContextRequest, ModuleContextResponse, PingRequest, PingResponse, ProcessListRequest, ProcessListResponse, PublishEventRequest, PublishEventResponse, PullSchemaRequest, PullSchemaResponse, RegisterRunnerRequest, RegisterRunnerResponse, ReplaceDeployRequest, ReplaceDeployResponse, ReserveRequest, ReserveResponse, SendFSMEventRequest, SendFSMEventResponse, SetConfigRequest, SetConfigResponse, SetSecretRequest, SetSecretResponse, StatusRequest, StatusResponse, StreamDeploymentLogsRequest, StreamDeploymentLogsResponse, TerminateRequest, UnsetConfigRequest, UnsetConfigResponse, UnsetSecretRequest, UnsetSecretResponse, UpdateDeployRequest, UpdateDeployResponse, UploadArtefactRequest, UploadArtefactResponse } from "./ftl_pb.js"; import { MethodIdempotency, MethodKind } from "@bufbuild/protobuf"; /** @@ -318,3 +318,113 @@ export const RunnerService = { } } as const; +/** + * AdminService is the service that provides and updates admin data. For example, + * it is used to encapsulate configuration and secrets. + * + * @generated from service xyz.block.ftl.v1.AdminService + */ +export const AdminService = { + typeName: "xyz.block.ftl.v1.AdminService", + methods: { + /** + * @generated from rpc xyz.block.ftl.v1.AdminService.Ping + */ + ping: { + name: "Ping", + I: PingRequest, + O: PingResponse, + kind: MethodKind.Unary, + idempotency: MethodIdempotency.NoSideEffects, + }, + /** + * List configuration. + * + * @generated from rpc xyz.block.ftl.v1.AdminService.ConfigList + */ + configList: { + name: "ConfigList", + I: ListConfigRequest, + O: ListConfigResponse, + kind: MethodKind.Unary, + }, + /** + * Get a config value. + * + * @generated from rpc xyz.block.ftl.v1.AdminService.ConfigGet + */ + configGet: { + name: "ConfigGet", + I: GetConfigRequest, + O: GetConfigResponse, + kind: MethodKind.Unary, + }, + /** + * Set a config value. + * + * @generated from rpc xyz.block.ftl.v1.AdminService.ConfigSet + */ + configSet: { + name: "ConfigSet", + I: SetConfigRequest, + O: SetConfigResponse, + kind: MethodKind.Unary, + }, + /** + * Unset a config value. + * + * @generated from rpc xyz.block.ftl.v1.AdminService.ConfigUnset + */ + configUnset: { + name: "ConfigUnset", + I: UnsetConfigRequest, + O: UnsetConfigResponse, + kind: MethodKind.Unary, + }, + /** + * List secrets. + * + * @generated from rpc xyz.block.ftl.v1.AdminService.SecretsList + */ + secretsList: { + name: "SecretsList", + I: ListSecretsRequest, + O: ListSecretsResponse, + kind: MethodKind.Unary, + }, + /** + * Get a secret. + * + * @generated from rpc xyz.block.ftl.v1.AdminService.SecretGet + */ + secretGet: { + name: "SecretGet", + I: GetSecretRequest, + O: GetSecretResponse, + kind: MethodKind.Unary, + }, + /** + * Set a secret. + * + * @generated from rpc xyz.block.ftl.v1.AdminService.SecretSet + */ + secretSet: { + name: "SecretSet", + I: SetSecretRequest, + O: SetSecretResponse, + kind: MethodKind.Unary, + }, + /** + * Unset a secret. + * + * @generated from rpc xyz.block.ftl.v1.AdminService.SecretUnset + */ + secretUnset: { + name: "SecretUnset", + I: UnsetSecretRequest, + O: UnsetSecretResponse, + kind: MethodKind.Unary, + }, + } +} as const; + diff --git a/frontend/src/protos/xyz/block/ftl/v1/ftl_pb.ts b/frontend/src/protos/xyz/block/ftl/v1/ftl_pb.ts index e974f36233..d768e04acf 100644 --- a/frontend/src/protos/xyz/block/ftl/v1/ftl_pb.ts +++ b/frontend/src/protos/xyz/block/ftl/v1/ftl_pb.ts @@ -73,6 +73,70 @@ proto3.util.setEnumType(RunnerState, "xyz.block.ftl.v1.RunnerState", [ { no: 3, name: "RUNNER_DEAD" }, ]); +/** + * @generated from enum xyz.block.ftl.v1.ConfigProvider + */ +export enum ConfigProvider { + /** + * Write values inline in the configuration file. + * + * @generated from enum value: CONFIG_INLINE = 0; + */ + CONFIG_INLINE = 0, + + /** + * Print configuration as environment variables. + * + * @generated from enum value: CONFIG_ENVAR = 1; + */ + CONFIG_ENVAR = 1, +} +// Retrieve enum metadata with: proto3.getEnumType(ConfigProvider) +proto3.util.setEnumType(ConfigProvider, "xyz.block.ftl.v1.ConfigProvider", [ + { no: 0, name: "CONFIG_INLINE" }, + { no: 1, name: "CONFIG_ENVAR" }, +]); + +/** + * @generated from enum xyz.block.ftl.v1.SecretProvider + */ +export enum SecretProvider { + /** + * Write values inline in the configuration file. + * + * @generated from enum value: SECRET_INLINE = 0; + */ + SECRET_INLINE = 0, + + /** + * Print configuration as environment variables. + * + * @generated from enum value: SECRET_ENVAR = 1; + */ + SECRET_ENVAR = 1, + + /** + * Write to the system keychain. + * + * @generated from enum value: SECRET_KEYCHAIN = 2; + */ + SECRET_KEYCHAIN = 2, + + /** + * Store a secret in the 1Password vault. + * + * @generated from enum value: SECRET_OP = 3; + */ + SECRET_OP = 3, +} +// Retrieve enum metadata with: proto3.getEnumType(SecretProvider) +proto3.util.setEnumType(SecretProvider, "xyz.block.ftl.v1.SecretProvider", [ + { no: 0, name: "SECRET_INLINE" }, + { no: 1, name: "SECRET_ENVAR" }, + { no: 2, name: "SECRET_KEYCHAIN" }, + { no: 3, name: "SECRET_OP" }, +]); + /** * @generated from message xyz.block.ftl.v1.PingRequest */ @@ -2526,3 +2590,748 @@ export class ReserveResponse extends Message { } } +/** + * @generated from message xyz.block.ftl.v1.ConfigRef + */ +export class ConfigRef extends Message { + /** + * @generated from field: optional string module = 1; + */ + module?: string; + + /** + * @generated from field: string name = 2; + */ + name = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.ConfigRef"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "module", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ConfigRef { + return new ConfigRef().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ConfigRef { + return new ConfigRef().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ConfigRef { + return new ConfigRef().fromJsonString(jsonString, options); + } + + static equals(a: ConfigRef | PlainMessage | undefined, b: ConfigRef | PlainMessage | undefined): boolean { + return proto3.util.equals(ConfigRef, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.ListConfigRequest + */ +export class ListConfigRequest extends Message { + /** + * @generated from field: optional string module = 1; + */ + module?: string; + + /** + * @generated from field: optional bool include_values = 2; + */ + includeValues?: boolean; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.ListConfigRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "module", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 2, name: "include_values", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ListConfigRequest { + return new ListConfigRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ListConfigRequest { + return new ListConfigRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ListConfigRequest { + return new ListConfigRequest().fromJsonString(jsonString, options); + } + + static equals(a: ListConfigRequest | PlainMessage | undefined, b: ListConfigRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(ListConfigRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.ListConfigResponse + */ +export class ListConfigResponse extends Message { + /** + * @generated from field: repeated xyz.block.ftl.v1.ListConfigResponse.Config configs = 1; + */ + configs: ListConfigResponse_Config[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.ListConfigResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "configs", kind: "message", T: ListConfigResponse_Config, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ListConfigResponse { + return new ListConfigResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ListConfigResponse { + return new ListConfigResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ListConfigResponse { + return new ListConfigResponse().fromJsonString(jsonString, options); + } + + static equals(a: ListConfigResponse | PlainMessage | undefined, b: ListConfigResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(ListConfigResponse, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.ListConfigResponse.Config + */ +export class ListConfigResponse_Config extends Message { + /** + * @generated from field: string refPath = 1; + */ + refPath = ""; + + /** + * @generated from field: optional bytes value = 2; + */ + value?: Uint8Array; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.ListConfigResponse.Config"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "refPath", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "value", kind: "scalar", T: 12 /* ScalarType.BYTES */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ListConfigResponse_Config { + return new ListConfigResponse_Config().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ListConfigResponse_Config { + return new ListConfigResponse_Config().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ListConfigResponse_Config { + return new ListConfigResponse_Config().fromJsonString(jsonString, options); + } + + static equals(a: ListConfigResponse_Config | PlainMessage | undefined, b: ListConfigResponse_Config | PlainMessage | undefined): boolean { + return proto3.util.equals(ListConfigResponse_Config, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.GetConfigRequest + */ +export class GetConfigRequest extends Message { + /** + * @generated from field: xyz.block.ftl.v1.ConfigRef ref = 1; + */ + ref?: ConfigRef; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.GetConfigRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "ref", kind: "message", T: ConfigRef }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetConfigRequest { + return new GetConfigRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetConfigRequest { + return new GetConfigRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetConfigRequest { + return new GetConfigRequest().fromJsonString(jsonString, options); + } + + static equals(a: GetConfigRequest | PlainMessage | undefined, b: GetConfigRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(GetConfigRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.GetConfigResponse + */ +export class GetConfigResponse extends Message { + /** + * @generated from field: bytes value = 1; + */ + value = new Uint8Array(0); + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.GetConfigResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "value", kind: "scalar", T: 12 /* ScalarType.BYTES */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetConfigResponse { + return new GetConfigResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetConfigResponse { + return new GetConfigResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetConfigResponse { + return new GetConfigResponse().fromJsonString(jsonString, options); + } + + static equals(a: GetConfigResponse | PlainMessage | undefined, b: GetConfigResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(GetConfigResponse, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.SetConfigRequest + */ +export class SetConfigRequest extends Message { + /** + * @generated from field: optional xyz.block.ftl.v1.ConfigProvider provider = 1; + */ + provider?: ConfigProvider; + + /** + * @generated from field: xyz.block.ftl.v1.ConfigRef ref = 2; + */ + ref?: ConfigRef; + + /** + * @generated from field: bytes value = 3; + */ + value = new Uint8Array(0); + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.SetConfigRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "provider", kind: "enum", T: proto3.getEnumType(ConfigProvider), opt: true }, + { no: 2, name: "ref", kind: "message", T: ConfigRef }, + { no: 3, name: "value", kind: "scalar", T: 12 /* ScalarType.BYTES */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetConfigRequest { + return new SetConfigRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetConfigRequest { + return new SetConfigRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetConfigRequest { + return new SetConfigRequest().fromJsonString(jsonString, options); + } + + static equals(a: SetConfigRequest | PlainMessage | undefined, b: SetConfigRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(SetConfigRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.SetConfigResponse + */ +export class SetConfigResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.SetConfigResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetConfigResponse { + return new SetConfigResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetConfigResponse { + return new SetConfigResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetConfigResponse { + return new SetConfigResponse().fromJsonString(jsonString, options); + } + + static equals(a: SetConfigResponse | PlainMessage | undefined, b: SetConfigResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(SetConfigResponse, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.UnsetConfigRequest + */ +export class UnsetConfigRequest extends Message { + /** + * @generated from field: optional xyz.block.ftl.v1.ConfigProvider provider = 1; + */ + provider?: ConfigProvider; + + /** + * @generated from field: xyz.block.ftl.v1.ConfigRef ref = 2; + */ + ref?: ConfigRef; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.UnsetConfigRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "provider", kind: "enum", T: proto3.getEnumType(ConfigProvider), opt: true }, + { no: 2, name: "ref", kind: "message", T: ConfigRef }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UnsetConfigRequest { + return new UnsetConfigRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UnsetConfigRequest { + return new UnsetConfigRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UnsetConfigRequest { + return new UnsetConfigRequest().fromJsonString(jsonString, options); + } + + static equals(a: UnsetConfigRequest | PlainMessage | undefined, b: UnsetConfigRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(UnsetConfigRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.UnsetConfigResponse + */ +export class UnsetConfigResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.UnsetConfigResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UnsetConfigResponse { + return new UnsetConfigResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UnsetConfigResponse { + return new UnsetConfigResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UnsetConfigResponse { + return new UnsetConfigResponse().fromJsonString(jsonString, options); + } + + static equals(a: UnsetConfigResponse | PlainMessage | undefined, b: UnsetConfigResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(UnsetConfigResponse, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.ListSecretsRequest + */ +export class ListSecretsRequest extends Message { + /** + * @generated from field: optional string module = 1; + */ + module?: string; + + /** + * @generated from field: optional bool include_values = 2; + */ + includeValues?: boolean; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.ListSecretsRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "module", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 2, name: "include_values", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ListSecretsRequest { + return new ListSecretsRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ListSecretsRequest { + return new ListSecretsRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ListSecretsRequest { + return new ListSecretsRequest().fromJsonString(jsonString, options); + } + + static equals(a: ListSecretsRequest | PlainMessage | undefined, b: ListSecretsRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(ListSecretsRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.ListSecretsResponse + */ +export class ListSecretsResponse extends Message { + /** + * @generated from field: repeated xyz.block.ftl.v1.ListSecretsResponse.Secret secrets = 1; + */ + secrets: ListSecretsResponse_Secret[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.ListSecretsResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "secrets", kind: "message", T: ListSecretsResponse_Secret, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ListSecretsResponse { + return new ListSecretsResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ListSecretsResponse { + return new ListSecretsResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ListSecretsResponse { + return new ListSecretsResponse().fromJsonString(jsonString, options); + } + + static equals(a: ListSecretsResponse | PlainMessage | undefined, b: ListSecretsResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(ListSecretsResponse, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.ListSecretsResponse.Secret + */ +export class ListSecretsResponse_Secret extends Message { + /** + * @generated from field: string refPath = 1; + */ + refPath = ""; + + /** + * @generated from field: optional bytes value = 2; + */ + value?: Uint8Array; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.ListSecretsResponse.Secret"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "refPath", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "value", kind: "scalar", T: 12 /* ScalarType.BYTES */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ListSecretsResponse_Secret { + return new ListSecretsResponse_Secret().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ListSecretsResponse_Secret { + return new ListSecretsResponse_Secret().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ListSecretsResponse_Secret { + return new ListSecretsResponse_Secret().fromJsonString(jsonString, options); + } + + static equals(a: ListSecretsResponse_Secret | PlainMessage | undefined, b: ListSecretsResponse_Secret | PlainMessage | undefined): boolean { + return proto3.util.equals(ListSecretsResponse_Secret, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.GetSecretRequest + */ +export class GetSecretRequest extends Message { + /** + * @generated from field: xyz.block.ftl.v1.ConfigRef ref = 1; + */ + ref?: ConfigRef; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.GetSecretRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "ref", kind: "message", T: ConfigRef }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetSecretRequest { + return new GetSecretRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetSecretRequest { + return new GetSecretRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetSecretRequest { + return new GetSecretRequest().fromJsonString(jsonString, options); + } + + static equals(a: GetSecretRequest | PlainMessage | undefined, b: GetSecretRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(GetSecretRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.GetSecretResponse + */ +export class GetSecretResponse extends Message { + /** + * @generated from field: bytes value = 1; + */ + value = new Uint8Array(0); + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.GetSecretResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "value", kind: "scalar", T: 12 /* ScalarType.BYTES */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetSecretResponse { + return new GetSecretResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetSecretResponse { + return new GetSecretResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetSecretResponse { + return new GetSecretResponse().fromJsonString(jsonString, options); + } + + static equals(a: GetSecretResponse | PlainMessage | undefined, b: GetSecretResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(GetSecretResponse, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.SetSecretRequest + */ +export class SetSecretRequest extends Message { + /** + * @generated from field: optional xyz.block.ftl.v1.SecretProvider provider = 1; + */ + provider?: SecretProvider; + + /** + * @generated from field: xyz.block.ftl.v1.ConfigRef ref = 2; + */ + ref?: ConfigRef; + + /** + * @generated from field: bytes value = 3; + */ + value = new Uint8Array(0); + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.SetSecretRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "provider", kind: "enum", T: proto3.getEnumType(SecretProvider), opt: true }, + { no: 2, name: "ref", kind: "message", T: ConfigRef }, + { no: 3, name: "value", kind: "scalar", T: 12 /* ScalarType.BYTES */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetSecretRequest { + return new SetSecretRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetSecretRequest { + return new SetSecretRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetSecretRequest { + return new SetSecretRequest().fromJsonString(jsonString, options); + } + + static equals(a: SetSecretRequest | PlainMessage | undefined, b: SetSecretRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(SetSecretRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.SetSecretResponse + */ +export class SetSecretResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.SetSecretResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetSecretResponse { + return new SetSecretResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetSecretResponse { + return new SetSecretResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetSecretResponse { + return new SetSecretResponse().fromJsonString(jsonString, options); + } + + static equals(a: SetSecretResponse | PlainMessage | undefined, b: SetSecretResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(SetSecretResponse, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.UnsetSecretRequest + */ +export class UnsetSecretRequest extends Message { + /** + * @generated from field: optional xyz.block.ftl.v1.SecretProvider provider = 1; + */ + provider?: SecretProvider; + + /** + * @generated from field: xyz.block.ftl.v1.ConfigRef ref = 2; + */ + ref?: ConfigRef; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.UnsetSecretRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "provider", kind: "enum", T: proto3.getEnumType(SecretProvider), opt: true }, + { no: 2, name: "ref", kind: "message", T: ConfigRef }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UnsetSecretRequest { + return new UnsetSecretRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UnsetSecretRequest { + return new UnsetSecretRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UnsetSecretRequest { + return new UnsetSecretRequest().fromJsonString(jsonString, options); + } + + static equals(a: UnsetSecretRequest | PlainMessage | undefined, b: UnsetSecretRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(UnsetSecretRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.UnsetSecretResponse + */ +export class UnsetSecretResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.UnsetSecretResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UnsetSecretResponse { + return new UnsetSecretResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UnsetSecretResponse { + return new UnsetSecretResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UnsetSecretResponse { + return new UnsetSecretResponse().fromJsonString(jsonString, options); + } + + static equals(a: UnsetSecretResponse | PlainMessage | undefined, b: UnsetSecretResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(UnsetSecretResponse, a, b); + } +} +