From cc830bdbc0c350ea082600cbba23d12698a3ca55 Mon Sep 17 00:00:00 2001 From: "Per G. da Silva" Date: Tue, 12 May 2026 14:24:49 +0200 Subject: [PATCH] UPSTREAM: : Add ListPackageCustomSchemas gRPC endpoint to opm serve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a streaming gRPC endpoint that allows callers to retrieve raw FBC blobs for non-standard (custom) schemas, scoped to a specific package. Both schema and packageName are required parameters. The endpoint streams all matching blobs as google.protobuf.Struct, leaving it to the caller — who understands the custom schema's semantics — to handle filtering, deduplication, or validation of the results. Standard schemas (olm.package, olm.channel, olm.bundle, olm.deprecations) are excluded since they are already served by existing typed RPCs. Custom schema blobs without a package field are silently skipped during cache build, as they fall outside the scope of this package-scoped endpoint. Custom schema blobs are stored in the cache using a two-field key (schema, packageName) with sequential indices to support multiple blobs per key, backed by both pogreb and JSON cache backends. Signed-off-by: Per G. da Silva Co-Authored-By: Claude Opus 4.6 (1M context) --- staging/operator-registry/AGENTS.md | 1 + staging/operator-registry/Makefile | 4 +- staging/operator-registry/README.md | 1 + .../operator-registry/pkg/api/registry.pb.go | 1058 ++++++----------- .../operator-registry/pkg/api/registry.proto | 11 +- .../pkg/api/registry_grpc.pb.go | 65 + staging/operator-registry/pkg/cache/cache.go | 28 + .../operator-registry/pkg/cache/cache_test.go | 140 +++ staging/operator-registry/pkg/cache/json.go | 40 + .../operator-registry/pkg/cache/meta_key.go | 31 + .../operator-registry/pkg/cache/pogrebv1.go | 36 + .../pkg/client/client_test.go | 4 + .../operator-registry/pkg/server/server.go | 37 + .../pkg/server/server_test.go | 133 ++- .../scripts/ensure-protoc.sh | 2 +- .../operator-registry/pkg/api/registry.pb.go | 1058 ++++++----------- .../operator-registry/pkg/api/registry.proto | 11 +- .../pkg/api/registry_grpc.pb.go | 65 + .../operator-registry/pkg/cache/cache.go | 28 + .../operator-registry/pkg/cache/json.go | 40 + .../operator-registry/pkg/cache/meta_key.go | 31 + .../operator-registry/pkg/cache/pogrebv1.go | 36 + .../operator-registry/pkg/server/server.go | 37 + 23 files changed, 1527 insertions(+), 1370 deletions(-) create mode 100644 staging/operator-registry/pkg/cache/meta_key.go create mode 100644 vendor/github.com/operator-framework/operator-registry/pkg/cache/meta_key.go diff --git a/staging/operator-registry/AGENTS.md b/staging/operator-registry/AGENTS.md index cf2f88c9ab..dfd91f6565 100644 --- a/staging/operator-registry/AGENTS.md +++ b/staging/operator-registry/AGENTS.md @@ -166,6 +166,7 @@ The server exposes the following gRPC services: - `GetLatestChannelEntriesThatProvide(group, version, kind)` - Stream latest entries providing an API - `GetDefaultBundleThatProvides(group, version, kind)` - Get default bundle providing an API - `ListBundles()` - Stream all bundles +- `ListPackageCustomSchemas(schema, packageName)` - Stream raw FBC blobs for a non-standard schema scoped to a package **Health Service:** - Standard gRPC health check service for monitoring diff --git a/staging/operator-registry/Makefile b/staging/operator-registry/Makefile index 432f7703b8..955decec7d 100644 --- a/staging/operator-registry/Makefile +++ b/staging/operator-registry/Makefile @@ -106,8 +106,8 @@ fix-lint: $(GOLANGCI_LINT) .PHONY: codegen codegen: $(PROTOC) $(PROTOC_GEN_GO_GRPC) - $(PROTOC) --plugin=protoc-gen-go=$(PROTOC_GEN_GO_GRPC) -I pkg/api/ --go_out=pkg/api pkg/api/*.proto - $(PROTOC) --plugin=protoc-gen-go-grpc=$(PROTOC_GEN_GO_GRPC) -I pkg/api/ --go-grpc_out=pkg/api pkg/api/*.proto + $(PROTOC) --plugin=protoc-gen-go=$(PROTOC_GEN_GO_GRPC) -I pkg/api/ -I ./tools/bin/include --go_out=pkg/api pkg/api/*.proto + $(PROTOC) --plugin=protoc-gen-go-grpc=$(PROTOC_GEN_GO_GRPC) -I pkg/api/ -I ./tools/bin/include --go-grpc_out=pkg/api pkg/api/*.proto .PHONY: generate-fakes generate-fakes: diff --git a/staging/operator-registry/README.md b/staging/operator-registry/README.md index 8e1ea563c9..96bf50b87d 100644 --- a/staging/operator-registry/README.md +++ b/staging/operator-registry/README.md @@ -169,6 +169,7 @@ GetBundleForChannel GetBundleThatReplaces GetChannelEntriesThatProvide GetChannelEntriesThatReplace +ListPackageCustomSchemas GetDefaultBundleThatProvides GetLatestChannelEntriesThatProvide GetPackage diff --git a/staging/operator-registry/pkg/api/registry.pb.go b/staging/operator-registry/pkg/api/registry.pb.go index 826e4674f1..7fa58380be 100644 --- a/staging/operator-registry/pkg/api/registry.pb.go +++ b/staging/operator-registry/pkg/api/registry.pb.go @@ -1,17 +1,18 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.4 +// protoc-gen-go v1.36.11 +// protoc v5.27.0 // source: registry.proto package api import ( - reflect "reflect" - sync "sync" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + structpb "google.golang.org/protobuf/types/known/structpb" + reflect "reflect" + sync "sync" + unsafe "unsafe" ) const ( @@ -22,22 +23,19 @@ const ( ) type Channel struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + CsvName string `protobuf:"bytes,2,opt,name=csvName,proto3" json:"csvName,omitempty"` + Deprecation *Deprecation `protobuf:"bytes,3,opt,name=deprecation,proto3" json:"deprecation,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - CsvName string `protobuf:"bytes,2,opt,name=csvName,proto3" json:"csvName,omitempty"` - Deprecation *Deprecation `protobuf:"bytes,3,opt,name=deprecation,proto3" json:"deprecation,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Channel) Reset() { *x = Channel{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Channel) String() string { @@ -48,7 +46,7 @@ func (*Channel) ProtoMessage() {} func (x *Channel) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -85,20 +83,17 @@ func (x *Channel) GetDeprecation() *Deprecation { } type PackageName struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PackageName) Reset() { *x = PackageName{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PackageName) String() string { @@ -109,7 +104,7 @@ func (*PackageName) ProtoMessage() {} func (x *PackageName) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -132,23 +127,20 @@ func (x *PackageName) GetName() string { } type Package struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Channels []*Channel `protobuf:"bytes,2,rep,name=channels,proto3" json:"channels,omitempty"` - DefaultChannelName string `protobuf:"bytes,3,opt,name=defaultChannelName,proto3" json:"defaultChannelName,omitempty"` - Deprecation *Deprecation `protobuf:"bytes,4,opt,name=deprecation,proto3" json:"deprecation,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Channels []*Channel `protobuf:"bytes,2,rep,name=channels,proto3" json:"channels,omitempty"` + DefaultChannelName string `protobuf:"bytes,3,opt,name=defaultChannelName,proto3" json:"defaultChannelName,omitempty"` + Deprecation *Deprecation `protobuf:"bytes,4,opt,name=deprecation,proto3" json:"deprecation,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Package) Reset() { *x = Package{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Package) String() string { @@ -159,7 +151,7 @@ func (*Package) ProtoMessage() {} func (x *Package) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -203,23 +195,20 @@ func (x *Package) GetDeprecation() *Deprecation { } type GroupVersionKind struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` + Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` unknownFields protoimpl.UnknownFields - - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` - Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GroupVersionKind) Reset() { *x = GroupVersionKind{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GroupVersionKind) String() string { @@ -230,7 +219,7 @@ func (*GroupVersionKind) ProtoMessage() {} func (x *GroupVersionKind) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -274,21 +263,18 @@ func (x *GroupVersionKind) GetPlural() string { } type Dependency struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Dependency) Reset() { *x = Dependency{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Dependency) String() string { @@ -299,7 +285,7 @@ func (*Dependency) ProtoMessage() {} func (x *Dependency) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -329,21 +315,18 @@ func (x *Dependency) GetValue() string { } type Property struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Property) Reset() { *x = Property{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Property) String() string { @@ -354,7 +337,7 @@ func (*Property) ProtoMessage() {} func (x *Property) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -384,34 +367,31 @@ func (x *Property) GetValue() string { } type Bundle struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CsvName string `protobuf:"bytes,1,opt,name=csvName,proto3" json:"csvName,omitempty"` + PackageName string `protobuf:"bytes,2,opt,name=packageName,proto3" json:"packageName,omitempty"` + ChannelName string `protobuf:"bytes,3,opt,name=channelName,proto3" json:"channelName,omitempty"` + CsvJson string `protobuf:"bytes,4,opt,name=csvJson,proto3" json:"csvJson,omitempty"` + Object []string `protobuf:"bytes,5,rep,name=object,proto3" json:"object,omitempty"` + BundlePath string `protobuf:"bytes,6,opt,name=bundlePath,proto3" json:"bundlePath,omitempty"` + ProvidedApis []*GroupVersionKind `protobuf:"bytes,7,rep,name=providedApis,proto3" json:"providedApis,omitempty"` + RequiredApis []*GroupVersionKind `protobuf:"bytes,8,rep,name=requiredApis,proto3" json:"requiredApis,omitempty"` + Version string `protobuf:"bytes,9,opt,name=version,proto3" json:"version,omitempty"` + SkipRange string `protobuf:"bytes,10,opt,name=skipRange,proto3" json:"skipRange,omitempty"` + Dependencies []*Dependency `protobuf:"bytes,11,rep,name=dependencies,proto3" json:"dependencies,omitempty"` + Properties []*Property `protobuf:"bytes,12,rep,name=properties,proto3" json:"properties,omitempty"` + Replaces string `protobuf:"bytes,13,opt,name=replaces,proto3" json:"replaces,omitempty"` + Skips []string `protobuf:"bytes,14,rep,name=skips,proto3" json:"skips,omitempty"` + Deprecation *Deprecation `protobuf:"bytes,15,opt,name=deprecation,proto3" json:"deprecation,omitempty"` unknownFields protoimpl.UnknownFields - - CsvName string `protobuf:"bytes,1,opt,name=csvName,proto3" json:"csvName,omitempty"` - PackageName string `protobuf:"bytes,2,opt,name=packageName,proto3" json:"packageName,omitempty"` - ChannelName string `protobuf:"bytes,3,opt,name=channelName,proto3" json:"channelName,omitempty"` - CsvJson string `protobuf:"bytes,4,opt,name=csvJson,proto3" json:"csvJson,omitempty"` - Object []string `protobuf:"bytes,5,rep,name=object,proto3" json:"object,omitempty"` - BundlePath string `protobuf:"bytes,6,opt,name=bundlePath,proto3" json:"bundlePath,omitempty"` - ProvidedApis []*GroupVersionKind `protobuf:"bytes,7,rep,name=providedApis,proto3" json:"providedApis,omitempty"` - RequiredApis []*GroupVersionKind `protobuf:"bytes,8,rep,name=requiredApis,proto3" json:"requiredApis,omitempty"` - Version string `protobuf:"bytes,9,opt,name=version,proto3" json:"version,omitempty"` - SkipRange string `protobuf:"bytes,10,opt,name=skipRange,proto3" json:"skipRange,omitempty"` - Dependencies []*Dependency `protobuf:"bytes,11,rep,name=dependencies,proto3" json:"dependencies,omitempty"` - Properties []*Property `protobuf:"bytes,12,rep,name=properties,proto3" json:"properties,omitempty"` - Replaces string `protobuf:"bytes,13,opt,name=replaces,proto3" json:"replaces,omitempty"` - Skips []string `protobuf:"bytes,14,rep,name=skips,proto3" json:"skips,omitempty"` - Deprecation *Deprecation `protobuf:"bytes,15,opt,name=deprecation,proto3" json:"deprecation,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Bundle) Reset() { *x = Bundle{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Bundle) String() string { @@ -422,7 +402,7 @@ func (*Bundle) ProtoMessage() {} func (x *Bundle) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -543,23 +523,20 @@ func (x *Bundle) GetDeprecation() *Deprecation { } type ChannelEntry struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + PackageName string `protobuf:"bytes,1,opt,name=packageName,proto3" json:"packageName,omitempty"` + ChannelName string `protobuf:"bytes,2,opt,name=channelName,proto3" json:"channelName,omitempty"` + BundleName string `protobuf:"bytes,3,opt,name=bundleName,proto3" json:"bundleName,omitempty"` + Replaces string `protobuf:"bytes,4,opt,name=replaces,proto3" json:"replaces,omitempty"` unknownFields protoimpl.UnknownFields - - PackageName string `protobuf:"bytes,1,opt,name=packageName,proto3" json:"packageName,omitempty"` - ChannelName string `protobuf:"bytes,2,opt,name=channelName,proto3" json:"channelName,omitempty"` - BundleName string `protobuf:"bytes,3,opt,name=bundleName,proto3" json:"bundleName,omitempty"` - Replaces string `protobuf:"bytes,4,opt,name=replaces,proto3" json:"replaces,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ChannelEntry) Reset() { *x = ChannelEntry{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ChannelEntry) String() string { @@ -570,7 +547,7 @@ func (*ChannelEntry) ProtoMessage() {} func (x *ChannelEntry) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -614,18 +591,16 @@ func (x *ChannelEntry) GetReplaces() string { } type ListPackageRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListPackageRequest) Reset() { *x = ListPackageRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListPackageRequest) String() string { @@ -636,7 +611,7 @@ func (*ListPackageRequest) ProtoMessage() {} func (x *ListPackageRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -652,18 +627,16 @@ func (*ListPackageRequest) Descriptor() ([]byte, []int) { } type ListBundlesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListBundlesRequest) Reset() { *x = ListBundlesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListBundlesRequest) String() string { @@ -674,7 +647,7 @@ func (*ListBundlesRequest) ProtoMessage() {} func (x *ListBundlesRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -690,20 +663,17 @@ func (*ListBundlesRequest) Descriptor() ([]byte, []int) { } type GetPackageRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetPackageRequest) Reset() { *x = GetPackageRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetPackageRequest) String() string { @@ -714,7 +684,7 @@ func (*GetPackageRequest) ProtoMessage() {} func (x *GetPackageRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -737,22 +707,19 @@ func (x *GetPackageRequest) GetName() string { } type GetBundleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + PkgName string `protobuf:"bytes,1,opt,name=pkgName,proto3" json:"pkgName,omitempty"` + ChannelName string `protobuf:"bytes,2,opt,name=channelName,proto3" json:"channelName,omitempty"` + CsvName string `protobuf:"bytes,3,opt,name=csvName,proto3" json:"csvName,omitempty"` unknownFields protoimpl.UnknownFields - - PkgName string `protobuf:"bytes,1,opt,name=pkgName,proto3" json:"pkgName,omitempty"` - ChannelName string `protobuf:"bytes,2,opt,name=channelName,proto3" json:"channelName,omitempty"` - CsvName string `protobuf:"bytes,3,opt,name=csvName,proto3" json:"csvName,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetBundleRequest) Reset() { *x = GetBundleRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetBundleRequest) String() string { @@ -763,7 +730,7 @@ func (*GetBundleRequest) ProtoMessage() {} func (x *GetBundleRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -800,21 +767,18 @@ func (x *GetBundleRequest) GetCsvName() string { } type GetBundleInChannelRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + PkgName string `protobuf:"bytes,1,opt,name=pkgName,proto3" json:"pkgName,omitempty"` + ChannelName string `protobuf:"bytes,2,opt,name=channelName,proto3" json:"channelName,omitempty"` unknownFields protoimpl.UnknownFields - - PkgName string `protobuf:"bytes,1,opt,name=pkgName,proto3" json:"pkgName,omitempty"` - ChannelName string `protobuf:"bytes,2,opt,name=channelName,proto3" json:"channelName,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetBundleInChannelRequest) Reset() { *x = GetBundleInChannelRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetBundleInChannelRequest) String() string { @@ -825,7 +789,7 @@ func (*GetBundleInChannelRequest) ProtoMessage() {} func (x *GetBundleInChannelRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -855,20 +819,17 @@ func (x *GetBundleInChannelRequest) GetChannelName() string { } type GetAllReplacementsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CsvName string `protobuf:"bytes,1,opt,name=csvName,proto3" json:"csvName,omitempty"` unknownFields protoimpl.UnknownFields - - CsvName string `protobuf:"bytes,1,opt,name=csvName,proto3" json:"csvName,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAllReplacementsRequest) Reset() { *x = GetAllReplacementsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetAllReplacementsRequest) String() string { @@ -879,7 +840,7 @@ func (*GetAllReplacementsRequest) ProtoMessage() {} func (x *GetAllReplacementsRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -902,22 +863,19 @@ func (x *GetAllReplacementsRequest) GetCsvName() string { } type GetReplacementRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CsvName string `protobuf:"bytes,1,opt,name=csvName,proto3" json:"csvName,omitempty"` + PkgName string `protobuf:"bytes,2,opt,name=pkgName,proto3" json:"pkgName,omitempty"` + ChannelName string `protobuf:"bytes,3,opt,name=channelName,proto3" json:"channelName,omitempty"` unknownFields protoimpl.UnknownFields - - CsvName string `protobuf:"bytes,1,opt,name=csvName,proto3" json:"csvName,omitempty"` - PkgName string `protobuf:"bytes,2,opt,name=pkgName,proto3" json:"pkgName,omitempty"` - ChannelName string `protobuf:"bytes,3,opt,name=channelName,proto3" json:"channelName,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetReplacementRequest) Reset() { *x = GetReplacementRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetReplacementRequest) String() string { @@ -928,7 +886,7 @@ func (*GetReplacementRequest) ProtoMessage() {} func (x *GetReplacementRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -965,23 +923,20 @@ func (x *GetReplacementRequest) GetChannelName() string { } type GetAllProvidersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` + Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` unknownFields protoimpl.UnknownFields - - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` - Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAllProvidersRequest) Reset() { *x = GetAllProvidersRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetAllProvidersRequest) String() string { @@ -992,7 +947,7 @@ func (*GetAllProvidersRequest) ProtoMessage() {} func (x *GetAllProvidersRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1036,23 +991,20 @@ func (x *GetAllProvidersRequest) GetPlural() string { } type GetLatestProvidersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` + Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` unknownFields protoimpl.UnknownFields - - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` - Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetLatestProvidersRequest) Reset() { *x = GetLatestProvidersRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetLatestProvidersRequest) String() string { @@ -1063,7 +1015,7 @@ func (*GetLatestProvidersRequest) ProtoMessage() {} func (x *GetLatestProvidersRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1107,23 +1059,20 @@ func (x *GetLatestProvidersRequest) GetPlural() string { } type GetDefaultProviderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` + Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` unknownFields protoimpl.UnknownFields - - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` - Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetDefaultProviderRequest) Reset() { *x = GetDefaultProviderRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetDefaultProviderRequest) String() string { @@ -1134,7 +1083,7 @@ func (*GetDefaultProviderRequest) ProtoMessage() {} func (x *GetDefaultProviderRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1178,20 +1127,17 @@ func (x *GetDefaultProviderRequest) GetPlural() string { } type Deprecation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Deprecation) Reset() { *x = Deprecation{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Deprecation) String() string { @@ -1202,7 +1148,7 @@ func (*Deprecation) ProtoMessage() {} func (x *Deprecation) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1224,223 +1170,200 @@ func (x *Deprecation) GetMessage() string { return "" } -var File_registry_proto protoreflect.FileDescriptor +type ListPackageCustomSchemasRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Schema string `protobuf:"bytes,1,opt,name=schema,proto3" json:"schema,omitempty"` + PackageName string `protobuf:"bytes,2,opt,name=packageName,proto3" json:"packageName,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} -var file_registry_proto_rawDesc = []byte{ - 0x0a, 0x0e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x03, 0x61, 0x70, 0x69, 0x22, 0x6b, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x73, 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x73, 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, - 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x21, 0x0a, 0x0b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xab, 0x01, 0x0a, 0x07, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, - 0x2e, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x32, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x6e, 0x0a, 0x10, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6c, 0x75, - 0x72, 0x61, 0x6c, 0x22, 0x36, 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x34, 0x0a, 0x08, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0xb0, 0x04, 0x0a, 0x06, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x73, 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x73, 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x73, - 0x76, 0x4a, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x73, 0x76, - 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, - 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x39, 0x0a, 0x0c, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x41, 0x70, 0x69, 0x73, 0x18, 0x07, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x64, 0x41, 0x70, 0x69, 0x73, 0x12, 0x39, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x64, 0x41, 0x70, 0x69, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x41, 0x70, - 0x69, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, - 0x73, 0x6b, 0x69, 0x70, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x0c, 0x64, 0x65, - 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, - 0x79, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, - 0x2d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0c, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6b, - 0x69, 0x70, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x6b, 0x69, 0x70, 0x73, - 0x12, 0x32, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x70, 0x72, - 0x65, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8e, 0x01, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x14, 0x0a, 0x12, 0x4c, - 0x69, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x27, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x68, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x70, 0x6b, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x70, 0x6b, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x73, - 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x73, 0x76, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x49, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6b, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x70, 0x6b, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x35, 0x0a, - 0x19, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x73, - 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x73, 0x76, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6d, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x63, 0x73, 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x63, 0x73, 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6b, 0x67, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6b, 0x67, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0x74, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x70, 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x22, 0x77, 0x0a, 0x19, 0x47, 0x65, 0x74, - 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6c, - 0x75, 0x72, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6c, 0x75, 0x72, - 0x61, 0x6c, 0x22, 0x77, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, - 0x69, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x22, 0x27, 0x0a, 0x0b, 0x44, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x32, 0xcf, 0x05, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x12, 0x3d, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x73, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x00, 0x30, 0x01, - 0x12, 0x34, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x16, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x13, 0x47, 0x65, 0x74, - 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, - 0x49, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x03, 0x88, - 0x02, 0x01, 0x12, 0x55, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x54, 0x68, 0x61, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x52, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x00, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x15, 0x47, 0x65, 0x74, - 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x54, 0x68, 0x61, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x73, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, - 0x1c, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x54, 0x68, 0x61, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x12, 0x1b, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x00, 0x30, - 0x01, 0x12, 0x5b, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x54, 0x68, 0x61, 0x74, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, - 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4d, - 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x75, 0x6e, 0x64, - 0x6c, 0x65, 0x54, 0x68, 0x61, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x12, 0x1e, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, - 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x12, 0x17, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x6e, 0x64, - 0x6c, 0x65, 0x22, 0x00, 0x30, 0x01, 0x42, 0x07, 0x5a, 0x05, 0x2e, 0x3b, 0x61, 0x70, 0x69, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +func (x *ListPackageCustomSchemasRequest) Reset() { + *x = ListPackageCustomSchemasRequest{} + mi := &file_registry_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListPackageCustomSchemasRequest) String() string { + return protoimpl.X.MessageStringOf(x) } +func (*ListPackageCustomSchemasRequest) ProtoMessage() {} + +func (x *ListPackageCustomSchemasRequest) ProtoReflect() protoreflect.Message { + mi := &file_registry_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListPackageCustomSchemasRequest.ProtoReflect.Descriptor instead. +func (*ListPackageCustomSchemasRequest) Descriptor() ([]byte, []int) { + return file_registry_proto_rawDescGZIP(), []int{19} +} + +func (x *ListPackageCustomSchemasRequest) GetSchema() string { + if x != nil { + return x.Schema + } + return "" +} + +func (x *ListPackageCustomSchemasRequest) GetPackageName() string { + if x != nil { + return x.PackageName + } + return "" +} + +var File_registry_proto protoreflect.FileDescriptor + +const file_registry_proto_rawDesc = "" + + "\n" + + "\x0eregistry.proto\x12\x03api\x1a\x1cgoogle/protobuf/struct.proto\"k\n" + + "\aChannel\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n" + + "\acsvName\x18\x02 \x01(\tR\acsvName\x122\n" + + "\vdeprecation\x18\x03 \x01(\v2\x10.api.DeprecationR\vdeprecation\"!\n" + + "\vPackageName\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\"\xab\x01\n" + + "\aPackage\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12(\n" + + "\bchannels\x18\x02 \x03(\v2\f.api.ChannelR\bchannels\x12.\n" + + "\x12defaultChannelName\x18\x03 \x01(\tR\x12defaultChannelName\x122\n" + + "\vdeprecation\x18\x04 \x01(\v2\x10.api.DeprecationR\vdeprecation\"n\n" + + "\x10GroupVersionKind\x12\x14\n" + + "\x05group\x18\x01 \x01(\tR\x05group\x12\x18\n" + + "\aversion\x18\x02 \x01(\tR\aversion\x12\x12\n" + + "\x04kind\x18\x03 \x01(\tR\x04kind\x12\x16\n" + + "\x06plural\x18\x04 \x01(\tR\x06plural\"6\n" + + "\n" + + "Dependency\x12\x12\n" + + "\x04type\x18\x01 \x01(\tR\x04type\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\"4\n" + + "\bProperty\x12\x12\n" + + "\x04type\x18\x01 \x01(\tR\x04type\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\"\xb0\x04\n" + + "\x06Bundle\x12\x18\n" + + "\acsvName\x18\x01 \x01(\tR\acsvName\x12 \n" + + "\vpackageName\x18\x02 \x01(\tR\vpackageName\x12 \n" + + "\vchannelName\x18\x03 \x01(\tR\vchannelName\x12\x18\n" + + "\acsvJson\x18\x04 \x01(\tR\acsvJson\x12\x16\n" + + "\x06object\x18\x05 \x03(\tR\x06object\x12\x1e\n" + + "\n" + + "bundlePath\x18\x06 \x01(\tR\n" + + "bundlePath\x129\n" + + "\fprovidedApis\x18\a \x03(\v2\x15.api.GroupVersionKindR\fprovidedApis\x129\n" + + "\frequiredApis\x18\b \x03(\v2\x15.api.GroupVersionKindR\frequiredApis\x12\x18\n" + + "\aversion\x18\t \x01(\tR\aversion\x12\x1c\n" + + "\tskipRange\x18\n" + + " \x01(\tR\tskipRange\x123\n" + + "\fdependencies\x18\v \x03(\v2\x0f.api.DependencyR\fdependencies\x12-\n" + + "\n" + + "properties\x18\f \x03(\v2\r.api.PropertyR\n" + + "properties\x12\x1a\n" + + "\breplaces\x18\r \x01(\tR\breplaces\x12\x14\n" + + "\x05skips\x18\x0e \x03(\tR\x05skips\x122\n" + + "\vdeprecation\x18\x0f \x01(\v2\x10.api.DeprecationR\vdeprecation\"\x8e\x01\n" + + "\fChannelEntry\x12 \n" + + "\vpackageName\x18\x01 \x01(\tR\vpackageName\x12 \n" + + "\vchannelName\x18\x02 \x01(\tR\vchannelName\x12\x1e\n" + + "\n" + + "bundleName\x18\x03 \x01(\tR\n" + + "bundleName\x12\x1a\n" + + "\breplaces\x18\x04 \x01(\tR\breplaces\"\x14\n" + + "\x12ListPackageRequest\"\x14\n" + + "\x12ListBundlesRequest\"'\n" + + "\x11GetPackageRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\"h\n" + + "\x10GetBundleRequest\x12\x18\n" + + "\apkgName\x18\x01 \x01(\tR\apkgName\x12 \n" + + "\vchannelName\x18\x02 \x01(\tR\vchannelName\x12\x18\n" + + "\acsvName\x18\x03 \x01(\tR\acsvName\"W\n" + + "\x19GetBundleInChannelRequest\x12\x18\n" + + "\apkgName\x18\x01 \x01(\tR\apkgName\x12 \n" + + "\vchannelName\x18\x02 \x01(\tR\vchannelName\"5\n" + + "\x19GetAllReplacementsRequest\x12\x18\n" + + "\acsvName\x18\x01 \x01(\tR\acsvName\"m\n" + + "\x15GetReplacementRequest\x12\x18\n" + + "\acsvName\x18\x01 \x01(\tR\acsvName\x12\x18\n" + + "\apkgName\x18\x02 \x01(\tR\apkgName\x12 \n" + + "\vchannelName\x18\x03 \x01(\tR\vchannelName\"t\n" + + "\x16GetAllProvidersRequest\x12\x14\n" + + "\x05group\x18\x01 \x01(\tR\x05group\x12\x18\n" + + "\aversion\x18\x02 \x01(\tR\aversion\x12\x12\n" + + "\x04kind\x18\x03 \x01(\tR\x04kind\x12\x16\n" + + "\x06plural\x18\x04 \x01(\tR\x06plural\"w\n" + + "\x19GetLatestProvidersRequest\x12\x14\n" + + "\x05group\x18\x01 \x01(\tR\x05group\x12\x18\n" + + "\aversion\x18\x02 \x01(\tR\aversion\x12\x12\n" + + "\x04kind\x18\x03 \x01(\tR\x04kind\x12\x16\n" + + "\x06plural\x18\x04 \x01(\tR\x06plural\"w\n" + + "\x19GetDefaultProviderRequest\x12\x14\n" + + "\x05group\x18\x01 \x01(\tR\x05group\x12\x18\n" + + "\aversion\x18\x02 \x01(\tR\aversion\x12\x12\n" + + "\x04kind\x18\x03 \x01(\tR\x04kind\x12\x16\n" + + "\x06plural\x18\x04 \x01(\tR\x06plural\"'\n" + + "\vDeprecation\x12\x18\n" + + "\amessage\x18\x01 \x01(\tR\amessage\"[\n" + + "\x1fListPackageCustomSchemasRequest\x12\x16\n" + + "\x06schema\x18\x01 \x01(\tR\x06schema\x12 \n" + + "\vpackageName\x18\x02 \x01(\tR\vpackageName2\xae\x06\n" + + "\bRegistry\x12=\n" + + "\fListPackages\x12\x17.api.ListPackageRequest\x1a\x10.api.PackageName\"\x000\x01\x124\n" + + "\n" + + "GetPackage\x12\x16.api.GetPackageRequest\x1a\f.api.Package\"\x00\x121\n" + + "\tGetBundle\x12\x15.api.GetBundleRequest\x1a\v.api.Bundle\"\x00\x12G\n" + + "\x13GetBundleForChannel\x12\x1e.api.GetBundleInChannelRequest\x1a\v.api.Bundle\"\x03\x88\x02\x01\x12U\n" + + "\x1cGetChannelEntriesThatReplace\x12\x1e.api.GetAllReplacementsRequest\x1a\x11.api.ChannelEntry\"\x000\x01\x12B\n" + + "\x15GetBundleThatReplaces\x12\x1a.api.GetReplacementRequest\x1a\v.api.Bundle\"\x00\x12R\n" + + "\x1cGetChannelEntriesThatProvide\x12\x1b.api.GetAllProvidersRequest\x1a\x11.api.ChannelEntry\"\x000\x01\x12[\n" + + "\"GetLatestChannelEntriesThatProvide\x12\x1e.api.GetLatestProvidersRequest\x1a\x11.api.ChannelEntry\"\x000\x01\x12M\n" + + "\x1cGetDefaultBundleThatProvides\x12\x1e.api.GetDefaultProviderRequest\x1a\v.api.Bundle\"\x00\x127\n" + + "\vListBundles\x12\x17.api.ListBundlesRequest\x1a\v.api.Bundle\"\x000\x01\x12]\n" + + "\x18ListPackageCustomSchemas\x12$.api.ListPackageCustomSchemasRequest\x1a\x17.google.protobuf.Struct\"\x000\x01B\aZ\x05.;apib\x06proto3" + var ( file_registry_proto_rawDescOnce sync.Once - file_registry_proto_rawDescData = file_registry_proto_rawDesc + file_registry_proto_rawDescData []byte ) func file_registry_proto_rawDescGZIP() []byte { file_registry_proto_rawDescOnce.Do(func() { - file_registry_proto_rawDescData = protoimpl.X.CompressGZIP(file_registry_proto_rawDescData) + file_registry_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_registry_proto_rawDesc), len(file_registry_proto_rawDesc))) }) return file_registry_proto_rawDescData } -var file_registry_proto_msgTypes = make([]protoimpl.MessageInfo, 19) -var file_registry_proto_goTypes = []interface{}{ - (*Channel)(nil), // 0: api.Channel - (*PackageName)(nil), // 1: api.PackageName - (*Package)(nil), // 2: api.Package - (*GroupVersionKind)(nil), // 3: api.GroupVersionKind - (*Dependency)(nil), // 4: api.Dependency - (*Property)(nil), // 5: api.Property - (*Bundle)(nil), // 6: api.Bundle - (*ChannelEntry)(nil), // 7: api.ChannelEntry - (*ListPackageRequest)(nil), // 8: api.ListPackageRequest - (*ListBundlesRequest)(nil), // 9: api.ListBundlesRequest - (*GetPackageRequest)(nil), // 10: api.GetPackageRequest - (*GetBundleRequest)(nil), // 11: api.GetBundleRequest - (*GetBundleInChannelRequest)(nil), // 12: api.GetBundleInChannelRequest - (*GetAllReplacementsRequest)(nil), // 13: api.GetAllReplacementsRequest - (*GetReplacementRequest)(nil), // 14: api.GetReplacementRequest - (*GetAllProvidersRequest)(nil), // 15: api.GetAllProvidersRequest - (*GetLatestProvidersRequest)(nil), // 16: api.GetLatestProvidersRequest - (*GetDefaultProviderRequest)(nil), // 17: api.GetDefaultProviderRequest - (*Deprecation)(nil), // 18: api.Deprecation +var file_registry_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_registry_proto_goTypes = []any{ + (*Channel)(nil), // 0: api.Channel + (*PackageName)(nil), // 1: api.PackageName + (*Package)(nil), // 2: api.Package + (*GroupVersionKind)(nil), // 3: api.GroupVersionKind + (*Dependency)(nil), // 4: api.Dependency + (*Property)(nil), // 5: api.Property + (*Bundle)(nil), // 6: api.Bundle + (*ChannelEntry)(nil), // 7: api.ChannelEntry + (*ListPackageRequest)(nil), // 8: api.ListPackageRequest + (*ListBundlesRequest)(nil), // 9: api.ListBundlesRequest + (*GetPackageRequest)(nil), // 10: api.GetPackageRequest + (*GetBundleRequest)(nil), // 11: api.GetBundleRequest + (*GetBundleInChannelRequest)(nil), // 12: api.GetBundleInChannelRequest + (*GetAllReplacementsRequest)(nil), // 13: api.GetAllReplacementsRequest + (*GetReplacementRequest)(nil), // 14: api.GetReplacementRequest + (*GetAllProvidersRequest)(nil), // 15: api.GetAllProvidersRequest + (*GetLatestProvidersRequest)(nil), // 16: api.GetLatestProvidersRequest + (*GetDefaultProviderRequest)(nil), // 17: api.GetDefaultProviderRequest + (*Deprecation)(nil), // 18: api.Deprecation + (*ListPackageCustomSchemasRequest)(nil), // 19: api.ListPackageCustomSchemasRequest + (*structpb.Struct)(nil), // 20: google.protobuf.Struct } var file_registry_proto_depIdxs = []int32{ 18, // 0: api.Channel.deprecation:type_name -> api.Deprecation @@ -1461,18 +1384,20 @@ var file_registry_proto_depIdxs = []int32{ 16, // 15: api.Registry.GetLatestChannelEntriesThatProvide:input_type -> api.GetLatestProvidersRequest 17, // 16: api.Registry.GetDefaultBundleThatProvides:input_type -> api.GetDefaultProviderRequest 9, // 17: api.Registry.ListBundles:input_type -> api.ListBundlesRequest - 1, // 18: api.Registry.ListPackages:output_type -> api.PackageName - 2, // 19: api.Registry.GetPackage:output_type -> api.Package - 6, // 20: api.Registry.GetBundle:output_type -> api.Bundle - 6, // 21: api.Registry.GetBundleForChannel:output_type -> api.Bundle - 7, // 22: api.Registry.GetChannelEntriesThatReplace:output_type -> api.ChannelEntry - 6, // 23: api.Registry.GetBundleThatReplaces:output_type -> api.Bundle - 7, // 24: api.Registry.GetChannelEntriesThatProvide:output_type -> api.ChannelEntry - 7, // 25: api.Registry.GetLatestChannelEntriesThatProvide:output_type -> api.ChannelEntry - 6, // 26: api.Registry.GetDefaultBundleThatProvides:output_type -> api.Bundle - 6, // 27: api.Registry.ListBundles:output_type -> api.Bundle - 18, // [18:28] is the sub-list for method output_type - 8, // [8:18] is the sub-list for method input_type + 19, // 18: api.Registry.ListPackageCustomSchemas:input_type -> api.ListPackageCustomSchemasRequest + 1, // 19: api.Registry.ListPackages:output_type -> api.PackageName + 2, // 20: api.Registry.GetPackage:output_type -> api.Package + 6, // 21: api.Registry.GetBundle:output_type -> api.Bundle + 6, // 22: api.Registry.GetBundleForChannel:output_type -> api.Bundle + 7, // 23: api.Registry.GetChannelEntriesThatReplace:output_type -> api.ChannelEntry + 6, // 24: api.Registry.GetBundleThatReplaces:output_type -> api.Bundle + 7, // 25: api.Registry.GetChannelEntriesThatProvide:output_type -> api.ChannelEntry + 7, // 26: api.Registry.GetLatestChannelEntriesThatProvide:output_type -> api.ChannelEntry + 6, // 27: api.Registry.GetDefaultBundleThatProvides:output_type -> api.Bundle + 6, // 28: api.Registry.ListBundles:output_type -> api.Bundle + 20, // 29: api.Registry.ListPackageCustomSchemas:output_type -> google.protobuf.Struct + 19, // [19:30] is the sub-list for method output_type + 8, // [8:19] is the sub-list for method input_type 8, // [8:8] is the sub-list for extension type_name 8, // [8:8] is the sub-list for extension extendee 0, // [0:8] is the sub-list for field type_name @@ -1483,243 +1408,13 @@ func file_registry_proto_init() { if File_registry_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_registry_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Channel); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PackageName); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Package); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GroupVersionKind); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Dependency); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Property); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Bundle); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChannelEntry); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListPackageRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListBundlesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPackageRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBundleRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBundleInChannelRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllReplacementsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetReplacementRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllProvidersRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetLatestProvidersRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDefaultProviderRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Deprecation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_registry_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_registry_proto_rawDesc), len(file_registry_proto_rawDesc)), NumEnums: 0, - NumMessages: 19, + NumMessages: 20, NumExtensions: 0, NumServices: 1, }, @@ -1728,7 +1423,6 @@ func file_registry_proto_init() { MessageInfos: file_registry_proto_msgTypes, }.Build() File_registry_proto = out.File - file_registry_proto_rawDesc = nil file_registry_proto_goTypes = nil file_registry_proto_depIdxs = nil } diff --git a/staging/operator-registry/pkg/api/registry.proto b/staging/operator-registry/pkg/api/registry.proto index 5aa54a253b..8b8f82a6c3 100644 --- a/staging/operator-registry/pkg/api/registry.proto +++ b/staging/operator-registry/pkg/api/registry.proto @@ -2,6 +2,8 @@ syntax = "proto3"; option go_package = ".;api"; +import "google/protobuf/struct.proto"; + package api; service Registry { @@ -17,6 +19,7 @@ service Registry { rpc GetLatestChannelEntriesThatProvide(GetLatestProvidersRequest) returns (stream ChannelEntry) {} rpc GetDefaultBundleThatProvides(GetDefaultProviderRequest) returns (Bundle) {} rpc ListBundles(ListBundlesRequest) returns (stream Bundle) {} + rpc ListPackageCustomSchemas(ListPackageCustomSchemasRequest) returns (stream google.protobuf.Struct) {} } message Channel{ @@ -130,4 +133,10 @@ message GetDefaultProviderRequest{ message Deprecation{ string message = 1; -} \ No newline at end of file +} + +message ListPackageCustomSchemasRequest{ + string schema = 1; + string packageName = 2; +} + diff --git a/staging/operator-registry/pkg/api/registry_grpc.pb.go b/staging/operator-registry/pkg/api/registry_grpc.pb.go index b5a62b3dfb..336d44f124 100644 --- a/staging/operator-registry/pkg/api/registry_grpc.pb.go +++ b/staging/operator-registry/pkg/api/registry_grpc.pb.go @@ -11,6 +11,7 @@ import ( grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + structpb "google.golang.org/protobuf/types/known/structpb" ) // This is a compile-time assertion to ensure that this generated file @@ -29,6 +30,7 @@ const ( Registry_GetLatestChannelEntriesThatProvide_FullMethodName = "/api.Registry/GetLatestChannelEntriesThatProvide" Registry_GetDefaultBundleThatProvides_FullMethodName = "/api.Registry/GetDefaultBundleThatProvides" Registry_ListBundles_FullMethodName = "/api.Registry/ListBundles" + Registry_ListPackageCustomSchemas_FullMethodName = "/api.Registry/ListPackageCustomSchemas" ) // RegistryClient is the client API for Registry service. @@ -46,6 +48,7 @@ type RegistryClient interface { GetLatestChannelEntriesThatProvide(ctx context.Context, in *GetLatestProvidersRequest, opts ...grpc.CallOption) (Registry_GetLatestChannelEntriesThatProvideClient, error) GetDefaultBundleThatProvides(ctx context.Context, in *GetDefaultProviderRequest, opts ...grpc.CallOption) (*Bundle, error) ListBundles(ctx context.Context, in *ListBundlesRequest, opts ...grpc.CallOption) (Registry_ListBundlesClient, error) + ListPackageCustomSchemas(ctx context.Context, in *ListPackageCustomSchemasRequest, opts ...grpc.CallOption) (Registry_ListPackageCustomSchemasClient, error) } type registryClient struct { @@ -262,6 +265,38 @@ func (x *registryListBundlesClient) Recv() (*Bundle, error) { return m, nil } +func (c *registryClient) ListPackageCustomSchemas(ctx context.Context, in *ListPackageCustomSchemasRequest, opts ...grpc.CallOption) (Registry_ListPackageCustomSchemasClient, error) { + stream, err := c.cc.NewStream(ctx, &Registry_ServiceDesc.Streams[5], Registry_ListPackageCustomSchemas_FullMethodName, opts...) + if err != nil { + return nil, err + } + x := ®istryListPackageCustomSchemasClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Registry_ListPackageCustomSchemasClient interface { + Recv() (*structpb.Struct, error) + grpc.ClientStream +} + +type registryListPackageCustomSchemasClient struct { + grpc.ClientStream +} + +func (x *registryListPackageCustomSchemasClient) Recv() (*structpb.Struct, error) { + m := new(structpb.Struct) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // RegistryServer is the server API for Registry service. // All implementations must embed UnimplementedRegistryServer // for forward compatibility @@ -277,6 +312,7 @@ type RegistryServer interface { GetLatestChannelEntriesThatProvide(*GetLatestProvidersRequest, Registry_GetLatestChannelEntriesThatProvideServer) error GetDefaultBundleThatProvides(context.Context, *GetDefaultProviderRequest) (*Bundle, error) ListBundles(*ListBundlesRequest, Registry_ListBundlesServer) error + ListPackageCustomSchemas(*ListPackageCustomSchemasRequest, Registry_ListPackageCustomSchemasServer) error mustEmbedUnimplementedRegistryServer() } @@ -314,6 +350,9 @@ func (UnimplementedRegistryServer) GetDefaultBundleThatProvides(context.Context, func (UnimplementedRegistryServer) ListBundles(*ListBundlesRequest, Registry_ListBundlesServer) error { return status.Errorf(codes.Unimplemented, "method ListBundles not implemented") } +func (UnimplementedRegistryServer) ListPackageCustomSchemas(*ListPackageCustomSchemasRequest, Registry_ListPackageCustomSchemasServer) error { + return status.Errorf(codes.Unimplemented, "method ListPackageCustomSchemas not implemented") +} func (UnimplementedRegistryServer) mustEmbedUnimplementedRegistryServer() {} // UnsafeRegistryServer may be embedded to opt out of forward compatibility for this service. @@ -522,6 +561,27 @@ func (x *registryListBundlesServer) Send(m *Bundle) error { return x.ServerStream.SendMsg(m) } +func _Registry_ListPackageCustomSchemas_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ListPackageCustomSchemasRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(RegistryServer).ListPackageCustomSchemas(m, ®istryListPackageCustomSchemasServer{stream}) +} + +type Registry_ListPackageCustomSchemasServer interface { + Send(*structpb.Struct) error + grpc.ServerStream +} + +type registryListPackageCustomSchemasServer struct { + grpc.ServerStream +} + +func (x *registryListPackageCustomSchemasServer) Send(m *structpb.Struct) error { + return x.ServerStream.SendMsg(m) +} + // Registry_ServiceDesc is the grpc.ServiceDesc for Registry service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -576,6 +636,11 @@ var Registry_ServiceDesc = grpc.ServiceDesc{ Handler: _Registry_ListBundles_Handler, ServerStreams: true, }, + { + StreamName: "ListPackageCustomSchemas", + Handler: _Registry_ListPackageCustomSchemas_Handler, + ServerStreams: true, + }, }, Metadata: "registry.proto", } diff --git a/staging/operator-registry/pkg/cache/cache.go b/staging/operator-registry/pkg/cache/cache.go index a02297b36d..529fd7a8a8 100644 --- a/staging/operator-registry/pkg/cache/cache.go +++ b/staging/operator-registry/pkg/cache/cache.go @@ -28,6 +28,8 @@ type Cache interface { Build(ctx context.Context, fbc fs.FS) error Load(ctc context.Context) error Close() error + + ListPackageCustomSchemas(ctx context.Context, schema, packageName string, sender func([]byte) error) error } type backend interface { @@ -45,6 +47,9 @@ type backend interface { GetBundle(context.Context, bundleKey) (*api.Bundle, error) PutBundle(context.Context, bundleKey, *api.Bundle) error + PutMeta(context.Context, metaKey, []byte) error + SendMetas(context.Context, metaKey, func([]byte) error) error + GetDigest(context.Context) (string, error) ComputeDigest(context.Context, fs.FS) (string, error) PutDigest(context.Context, string) error @@ -237,6 +242,14 @@ func (c *cache) GetBundleThatProvides(ctx context.Context, group, version, kind return c.packageIndex.GetBundleThatProvides(ctx, c, group, version, kind) } +func (c *cache) ListPackageCustomSchemas(ctx context.Context, schema, packageName string, sender func([]byte) error) error { + mk, err := newValidatedMetaKey(schema, packageName) + if err != nil { + return fmt.Errorf("invalid custom schema query: %v", err) + } + return c.backend.SendMetas(ctx, mk, sender) +} + func (c *cache) CheckIntegrity(ctx context.Context, fbc fs.FS) error { existingDigest, err := c.backend.GetDigest(ctx) if err != nil { @@ -288,6 +301,21 @@ func (c *cache) Build(ctx context.Context, fbcFsys fs.FS) error { packageName = meta.Name } + switch meta.Schema { + case declcfg.SchemaPackage, declcfg.SchemaChannel, declcfg.SchemaBundle, declcfg.SchemaDeprecation: + default: + if packageName == "" { + return nil + } + mk, err := newValidatedMetaKey(meta.Schema, packageName) + if err != nil { + return fmt.Errorf("invalid custom schema meta: %v", err) + } + if err := c.backend.PutMeta(ctx, mk, meta.Blob); err != nil { + return fmt.Errorf("store custom schema meta %v: %v", mk, err) + } + } + walkMu.Lock() defer walkMu.Unlock() if _, err := tmpFile.Write(meta.Blob); err != nil { diff --git a/staging/operator-registry/pkg/cache/cache_test.go b/staging/operator-registry/pkg/cache/cache_test.go index 8c35a58f90..7b9e50343a 100644 --- a/staging/operator-registry/pkg/cache/cache_test.go +++ b/staging/operator-registry/pkg/cache/cache_test.go @@ -219,6 +219,146 @@ func TestCache_ListPackages(t *testing.T) { } } +var customSchemaFS = fstest.MapFS{ + ".": &fstest.MapFile{ + Mode: fs.ModeDir, + }, + "catalog.json": &fstest.MapFile{ + Data: []byte(`{ + "schema": "olm.package", + "name": "testpkg", + "defaultChannel": "stable" +} +{ + "schema": "olm.channel", + "package": "testpkg", + "name": "stable", + "entries": [{"name": "testpkg.v1.0.0"}] +} +{ + "schema": "olm.bundle", + "name": "testpkg.v1.0.0", + "package": "testpkg", + "image": "quay.io/test/testpkg:v1.0.0", + "properties": [{"type": "olm.package", "value": {"packageName": "testpkg", "version": "1.0.0"}}] +} +{ + "schema": "custom.operator.io", + "package": "testpkg", + "name": "my-custom-resource", + "customField": "customValue" +} +{ + "schema": "custom.operator.io", + "package": "testpkg", + "name": "another-custom-resource", + "data": {"key": "value"} +} +{ + "schema": "other.custom.schema", + "package": "testpkg", + "name": "other-custom", + "info": "test" +} +`), + }, +} + +func TestCache_ListPackageCustomSchemas(t *testing.T) { + for name, testCache := range genTestCaches(t, customSchemaFS) { + t.Run(name, func(t *testing.T) { + collect := func(schema, pkg string) []string { + t.Helper() + var blobs []string + err := testCache.ListPackageCustomSchemas(context.TODO(), schema, pkg, + func(blob []byte) error { + blobs = append(blobs, string(blob)) + return nil + }) + require.NoError(t, err) + return blobs + } + + // Multiple blobs for same (schema, package) + blobs := collect("custom.operator.io", "testpkg") + require.Len(t, blobs, 2) + + // Different schema + blobs = collect("other.custom.schema", "testpkg") + require.Len(t, blobs, 1) + require.Contains(t, blobs[0], `"info"`) + + // Nonexistent schema returns empty + blobs = collect("nonexistent.schema", "testpkg") + require.Empty(t, blobs) + + // Nonexistent package returns empty + blobs = collect("custom.operator.io", "nonexistent") + require.Empty(t, blobs) + }) + } +} + +func TestCache_ListPackageCustomSchemas_PackagelessBlobSkipped(t *testing.T) { + packagelessFS := fstest.MapFS{ + ".": &fstest.MapFile{ + Mode: fs.ModeDir, + }, + "catalog.json": &fstest.MapFile{ + Data: []byte(`{ + "schema": "olm.package", + "name": "testpkg", + "defaultChannel": "stable" +} +{ + "schema": "olm.channel", + "package": "testpkg", + "name": "stable", + "entries": [{"name": "testpkg.v1.0.0"}] +} +{ + "schema": "olm.bundle", + "name": "testpkg.v1.0.0", + "package": "testpkg", + "image": "quay.io/test/testpkg:v1.0.0", + "properties": [{"type": "olm.package", "value": {"packageName": "testpkg", "version": "1.0.0"}}] +} +{ + "schema": "custom.packageless", + "data": "no-package-blob" +} +`), + }, + } + for name, testCache := range genTestCaches(t, packagelessFS) { + t.Run(name, func(t *testing.T) { + var blobs []string + err := testCache.ListPackageCustomSchemas(context.TODO(), "custom.packageless", "testpkg", + func(blob []byte) error { + blobs = append(blobs, string(blob)) + return nil + }) + require.NoError(t, err) + require.Empty(t, blobs) + }) + } +} + +func TestCache_ListPackageCustomSchemas_NoCustomSchemas(t *testing.T) { + for name, testCache := range genTestCaches(t, validFS) { + t.Run(name, func(t *testing.T) { + var blobs []string + err := testCache.ListPackageCustomSchemas(context.TODO(), "custom.operator.io", "cockroachdb", + func(blob []byte) error { + blobs = append(blobs, string(blob)) + return nil + }) + require.NoError(t, err) + require.Empty(t, blobs) + }) + } +} + func genTestCaches(t *testing.T, fbcFS fs.FS) map[string]Cache { t.Helper() diff --git a/staging/operator-registry/pkg/cache/json.go b/staging/operator-registry/pkg/cache/json.go index 92b17f7525..cfa600046b 100644 --- a/staging/operator-registry/pkg/cache/json.go +++ b/staging/operator-registry/pkg/cache/json.go @@ -101,6 +101,8 @@ func (q *jsonBackend) GetPackageIndex(_ context.Context) (packageIndex, error) { return pi, nil } +const jsonMetasDir = jsonDir + string(filepath.Separator) + "metas" + func (q *jsonBackend) PutPackageIndex(_ context.Context, pi packageIndex) error { packageJSON, err := json.Marshal(pi) if err != nil { @@ -140,6 +142,44 @@ func (q *jsonBackend) PutBundle(_ context.Context, key bundleKey, bundle *api.Bu return nil } +func (q *jsonBackend) metaDir(in metaKey) string { + return filepath.Join(q.baseDir, jsonMetasDir, in.Schema, in.PackageName) +} + +func (q *jsonBackend) PutMeta(_ context.Context, key metaKey, blob []byte) error { + dir := q.metaDir(key) + if err := os.MkdirAll(dir, jsonCacheModeDir); err != nil { + return err + } + h := fnv.New64a() + h.Write(blob) + return os.WriteFile(filepath.Join(dir, fmt.Sprintf("%x.json", h.Sum64())), blob, jsonCacheModeFile) +} + +func (q *jsonBackend) SendMetas(_ context.Context, key metaKey, sender func([]byte) error) error { + dir := q.metaDir(key) + entries, err := os.ReadDir(dir) + if err != nil { + if errors.Is(err, os.ErrNotExist) { + return nil + } + return err + } + for _, entry := range entries { + if entry.IsDir() || filepath.Ext(entry.Name()) != ".json" { + continue + } + data, err := os.ReadFile(filepath.Join(dir, entry.Name())) + if err != nil { + return err + } + if err := sender(data); err != nil { + return err + } + } + return nil +} + func (q *jsonBackend) GetDigest(_ context.Context) (string, error) { return readDigestFile(filepath.Join(q.baseDir, jsonDigestFile)) } diff --git a/staging/operator-registry/pkg/cache/meta_key.go b/staging/operator-registry/pkg/cache/meta_key.go new file mode 100644 index 0000000000..64e7e0fe22 --- /dev/null +++ b/staging/operator-registry/pkg/cache/meta_key.go @@ -0,0 +1,31 @@ +package cache + +import ( + "fmt" + "strings" +) + +func validateMetaKeyComponent(name, value string) error { + if value == "" { + return fmt.Errorf("invalid %s: must not be empty", name) + } + if strings.ContainsAny(value, "/\\") || value == ".." || strings.HasPrefix(value, "../") || strings.HasSuffix(value, "/..") { + return fmt.Errorf("invalid %s %q: must not contain path separators or '..'", name, value) + } + return nil +} + +func newValidatedMetaKey(schema, packageName string) (metaKey, error) { + if err := validateMetaKeyComponent("schema", schema); err != nil { + return metaKey{}, err + } + if err := validateMetaKeyComponent("packageName", packageName); err != nil { + return metaKey{}, err + } + return metaKey{Schema: schema, PackageName: packageName}, nil +} + +type metaKey struct { + Schema string + PackageName string +} diff --git a/staging/operator-registry/pkg/cache/pogrebv1.go b/staging/operator-registry/pkg/cache/pogrebv1.go index a590832cbb..22eadce7f1 100644 --- a/staging/operator-registry/pkg/cache/pogrebv1.go +++ b/staging/operator-registry/pkg/cache/pogrebv1.go @@ -10,6 +10,7 @@ import ( "io/fs" "os" "path/filepath" + "bytes" "sort" "github.com/akrylysov/pogreb" @@ -127,6 +128,8 @@ func (q *pogrebV1Backend) GetPackageIndex(_ context.Context) (packageIndex, erro return pi, nil } +const metaKeyPrefix = "metas/" + func (q *pogrebV1Backend) PutPackageIndex(_ context.Context, index packageIndex) error { packageJSON, err := json.Marshal(index) if err != nil { @@ -163,6 +166,39 @@ func (q *pogrebV1Backend) PutBundle(_ context.Context, key bundleKey, bundle *ap return nil } +func (q *pogrebV1Backend) metaDBKey(in metaKey, blob []byte) []byte { + h := fnv.New64a() + h.Write(blob) + return []byte(fmt.Sprintf("%s%s/%s/%x", metaKeyPrefix, in.Schema, in.PackageName, h.Sum64())) +} + +func (q *pogrebV1Backend) metaDBKeyPrefix(in metaKey) string { + return fmt.Sprintf("%s%s/%s/", metaKeyPrefix, in.Schema, in.PackageName) +} + +func (q *pogrebV1Backend) PutMeta(_ context.Context, key metaKey, blob []byte) error { + return q.db.Put(q.metaDBKey(key, blob), blob) +} + +func (q *pogrebV1Backend) SendMetas(_ context.Context, key metaKey, sender func([]byte) error) error { + prefix := []byte(q.metaDBKeyPrefix(key)) + it := q.db.Items() + for { + k, v, err := it.Next() + if errors.Is(err, pogreb.ErrIterationDone) { + return nil + } + if err != nil { + return err + } + if bytes.HasPrefix(k, prefix) { + if err := sender(v); err != nil { + return err + } + } + } +} + func (q *pogrebV1Backend) GetDigest(_ context.Context) (string, error) { return readDigestFile(filepath.Join(q.baseDir, pogrebDigestFile)) } diff --git a/staging/operator-registry/pkg/client/client_test.go b/staging/operator-registry/pkg/client/client_test.go index e214afafa9..ab89835d0a 100644 --- a/staging/operator-registry/pkg/client/client_test.go +++ b/staging/operator-registry/pkg/client/client_test.go @@ -65,6 +65,10 @@ func (s *RegistryClientStub) ListBundles(ctx context.Context, in *api.ListBundle return s.ListBundlesClient, s.Error } +func (s *RegistryClientStub) ListPackageCustomSchemas(ctx context.Context, in *api.ListPackageCustomSchemasRequest, opts ...grpc.CallOption) (api.Registry_ListPackageCustomSchemasClient, error) { + return nil, nil +} + func (s *RegistryClientStub) Check(ctx context.Context, in *grpc_health_v1.HealthCheckRequest, opts ...grpc.CallOption) (*grpc_health_v1.HealthCheckResponse, error) { return nil, nil } diff --git a/staging/operator-registry/pkg/server/server.go b/staging/operator-registry/pkg/server/server.go index 56b09e2258..f291697565 100644 --- a/staging/operator-registry/pkg/server/server.go +++ b/staging/operator-registry/pkg/server/server.go @@ -2,6 +2,12 @@ package server import ( "context" + "encoding/json" + "strings" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/structpb" "github.com/operator-framework/operator-registry/pkg/api" "github.com/operator-framework/operator-registry/pkg/registry" @@ -98,3 +104,34 @@ func (s *RegistryServer) GetLatestChannelEntriesThatProvide(req *api.GetLatestPr func (s *RegistryServer) GetDefaultBundleThatProvides(ctx context.Context, req *api.GetDefaultProviderRequest) (*api.Bundle, error) { return s.store.GetBundleThatProvides(ctx, req.GetGroup(), req.GetVersion(), req.GetKind()) } + +func (s *RegistryServer) ListPackageCustomSchemas(req *api.ListPackageCustomSchemasRequest, stream api.Registry_ListPackageCustomSchemasServer) error { + schema, pkgName := req.GetSchema(), req.GetPackageName() + if schema == "" || pkgName == "" { + return status.Errorf(codes.InvalidArgument, "schema and packageName are required") + } + for _, v := range []string{schema, pkgName} { + if strings.ContainsAny(v, "/\\") || v == ".." { + return status.Errorf(codes.InvalidArgument, "schema and packageName must not contain path separators or '..'") + } + } + type customSchemaQuerier interface { + ListPackageCustomSchemas(ctx context.Context, schema, packageName string, sender func([]byte) error) error + } + mq, ok := s.store.(customSchemaQuerier) + if !ok { + return status.Errorf(codes.Unimplemented, "store does not support custom schema queries") + } + return mq.ListPackageCustomSchemas(stream.Context(), schema, pkgName, + func(blob []byte) error { + var m map[string]interface{} + if err := json.Unmarshal(blob, &m); err != nil { + return status.Errorf(codes.Internal, "unmarshal custom schema blob: %v", err) + } + st, err := structpb.NewStruct(m) + if err != nil { + return status.Errorf(codes.Internal, "convert custom schema blob to struct: %v", err) + } + return stream.Send(st) + }) +} diff --git a/staging/operator-registry/pkg/server/server_test.go b/staging/operator-registry/pkg/server/server_test.go index e74b941f97..9480a0949e 100644 --- a/staging/operator-registry/pkg/server/server_test.go +++ b/staging/operator-registry/pkg/server/server_test.go @@ -19,7 +19,9 @@ import ( "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" "google.golang.org/grpc" + "google.golang.org/grpc/codes" "google.golang.org/grpc/connectivity" + "google.golang.org/grpc/status" "github.com/operator-framework/operator-registry/alpha/action" "github.com/operator-framework/operator-registry/alpha/declcfg" @@ -39,6 +41,9 @@ const ( deprecationCachePort = ":50054" deprecationCacheAddress = "localhost" + deprecationCachePort + + customSchemaCachePort = ":50055" + customSchemaCacheAddress = "localhost" + customSchemaCachePort ) func createDBStore(dbPath string) *sqlite.SQLQuerier { @@ -144,8 +149,14 @@ func TestMain(m *testing.M) { } fbcServerDeprecations := server(fbcDeprecationStore) + fbcCustomSchemaStore, err := fbcCacheFromFs(customSchemaFS, filepath.Join(tmpDir, "custom-schema-cache")) + if err != nil { + logrus.Fatalf("failed to create custom schema cache: %v", err) + } + fbcServerCustomSchemas := server(fbcCustomSchemaStore) + var wg sync.WaitGroup - wg.Add(3) + wg.Add(4) go func() { lis, err := net.Listen("tcp", fmt.Sprintf("localhost%s", dbPort)) if err != nil { @@ -176,6 +187,16 @@ func TestMain(m *testing.M) { logrus.Fatalf("failed to serve fbc cache: %v", err) } }() + go func() { + lis, err := net.Listen("tcp", customSchemaCacheAddress) + if err != nil { + logrus.Fatalf("failed to listen: %v", err) + } + wg.Done() + if err := fbcServerCustomSchemas.Serve(lis); err != nil { + logrus.Fatalf("failed to serve fbc custom schema cache: %v", err) + } + }() wg.Wait() exit := m.Run() os.Exit(exit) @@ -790,6 +811,80 @@ func testListBundles(addr string, etcdAlpha *api.Bundle, etcdStable *api.Bundle) } } +func TestListPackageCustomSchemas(t *testing.T) { + t.Run("FBCCacheWithCustomSchemas", testListPackageCustomSchemas(customSchemaCacheAddress)) + t.Run("FBCCacheNoResults", testListPackageCustomSchemasEmpty(cacheAddress)) + t.Run("FBCCacheInvalidArgument", testListPackageCustomSchemasInvalidArgument(customSchemaCacheAddress)) +} + +func testListPackageCustomSchemas(addr string) func(*testing.T) { + return func(t *testing.T) { + c, conn := client(t, addr) + defer conn.Close() + + stream, err := c.ListPackageCustomSchemas(context.TODO(), &api.ListPackageCustomSchemasRequest{ + Schema: "custom.operator.io", + PackageName: "testpkg", + }) + require.NoError(t, err) + + var results []map[string]interface{} + for { + s, err := stream.Recv() + if errors.Is(err, io.EOF) { + break + } + require.NoError(t, err) + results = append(results, s.AsMap()) + } + + require.Len(t, results, 2) + for _, r := range results { + require.Equal(t, "custom.operator.io", r["schema"]) + require.Equal(t, "testpkg", r["package"]) + } + } +} + +func testListPackageCustomSchemasEmpty(addr string) func(*testing.T) { + return func(t *testing.T) { + c, conn := client(t, addr) + defer conn.Close() + + stream, err := c.ListPackageCustomSchemas(context.TODO(), &api.ListPackageCustomSchemasRequest{ + Schema: "custom.operator.io", + PackageName: "nonexistent", + }) + require.NoError(t, err) + + count := 0 + for { + _, err := stream.Recv() + if errors.Is(err, io.EOF) { + break + } + require.NoError(t, err) + count++ + } + require.Zero(t, count) + } +} + +func testListPackageCustomSchemasInvalidArgument(addr string) func(*testing.T) { + return func(t *testing.T) { + c, conn := client(t, addr) + defer conn.Close() + + stream, err := c.ListPackageCustomSchemas(context.TODO(), &api.ListPackageCustomSchemasRequest{}) + require.NoError(t, err) + _, err = stream.Recv() + require.Error(t, err) + st, ok := status.FromError(err) + require.True(t, ok) + require.Equal(t, codes.InvalidArgument, st.Code()) + } +} + func EqualBundles(t *testing.T, expected, actual api.Bundle) { t.Helper() stripPlural(actual.ProvidedApis) @@ -1067,4 +1162,40 @@ entries: "cockroachdb.json": cockroachdb, "deprecations.yaml": deprecations, } + + customSchemaFS = fstest.MapFS{ + "catalog.json": &fstest.MapFile{ + Data: []byte(`{ + "schema": "olm.package", + "name": "testpkg", + "defaultChannel": "stable" +} +{ + "schema": "olm.channel", + "package": "testpkg", + "name": "stable", + "entries": [{"name": "testpkg.v1.0.0"}] +} +{ + "schema": "olm.bundle", + "name": "testpkg.v1.0.0", + "package": "testpkg", + "image": "quay.io/test/testpkg:v1.0.0", + "properties": [{"type": "olm.package", "value": {"packageName": "testpkg", "version": "1.0.0"}}] +} +{ + "schema": "custom.operator.io", + "package": "testpkg", + "name": "my-custom-resource", + "customField": "customValue" +} +{ + "schema": "custom.operator.io", + "package": "testpkg", + "name": "another-custom-resource", + "data": {"key": "value"} +} +`), + }, + } ) diff --git a/staging/operator-registry/scripts/ensure-protoc.sh b/staging/operator-registry/scripts/ensure-protoc.sh index eb7f20c4e3..aea04b8d03 100755 --- a/staging/operator-registry/scripts/ensure-protoc.sh +++ b/staging/operator-registry/scripts/ensure-protoc.sh @@ -8,7 +8,7 @@ ver=$1; shift ver_cmd="${DEST}/protoc --version 2>/dev/null | cut -d' ' -f2" os="$(uname -s | sed 's/Darwin/osx/')" arch="$(uname -m | sed 's/arm64/aarch_64/')" -fetch_cmd="(curl -sSfLo '${DEST}/protoc-${ver}.zip' 'https://github.com/protocolbuffers/protobuf/releases/download/v${ver}/protoc-${ver}-${os}-${arch}.zip' && unzip -o -j -d '${DEST}' '${DEST}/protoc-${ver}.zip' bin/protoc && rm ${DEST}/protoc-${ver}.zip)" +fetch_cmd="(curl -sSfLo '${DEST}/protoc-${ver}.zip' 'https://github.com/protocolbuffers/protobuf/releases/download/v${ver}/protoc-${ver}-${os}-${arch}.zip' && unzip -o -j -d '${DEST}' '${DEST}/protoc-${ver}.zip' bin/protoc && unzip -o -d '${DEST}' '${DEST}/protoc-${ver}.zip' 'include/*' && rm ${DEST}/protoc-${ver}.zip)" if [[ "${ver}" != "$(eval ${ver_cmd})" ]]; then echo "protoc missing or not version '${ver}', downloading..." diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/api/registry.pb.go b/vendor/github.com/operator-framework/operator-registry/pkg/api/registry.pb.go index 826e4674f1..7fa58380be 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/api/registry.pb.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/api/registry.pb.go @@ -1,17 +1,18 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.4 +// protoc-gen-go v1.36.11 +// protoc v5.27.0 // source: registry.proto package api import ( - reflect "reflect" - sync "sync" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + structpb "google.golang.org/protobuf/types/known/structpb" + reflect "reflect" + sync "sync" + unsafe "unsafe" ) const ( @@ -22,22 +23,19 @@ const ( ) type Channel struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + CsvName string `protobuf:"bytes,2,opt,name=csvName,proto3" json:"csvName,omitempty"` + Deprecation *Deprecation `protobuf:"bytes,3,opt,name=deprecation,proto3" json:"deprecation,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - CsvName string `protobuf:"bytes,2,opt,name=csvName,proto3" json:"csvName,omitempty"` - Deprecation *Deprecation `protobuf:"bytes,3,opt,name=deprecation,proto3" json:"deprecation,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Channel) Reset() { *x = Channel{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Channel) String() string { @@ -48,7 +46,7 @@ func (*Channel) ProtoMessage() {} func (x *Channel) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -85,20 +83,17 @@ func (x *Channel) GetDeprecation() *Deprecation { } type PackageName struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PackageName) Reset() { *x = PackageName{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PackageName) String() string { @@ -109,7 +104,7 @@ func (*PackageName) ProtoMessage() {} func (x *PackageName) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -132,23 +127,20 @@ func (x *PackageName) GetName() string { } type Package struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Channels []*Channel `protobuf:"bytes,2,rep,name=channels,proto3" json:"channels,omitempty"` - DefaultChannelName string `protobuf:"bytes,3,opt,name=defaultChannelName,proto3" json:"defaultChannelName,omitempty"` - Deprecation *Deprecation `protobuf:"bytes,4,opt,name=deprecation,proto3" json:"deprecation,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Channels []*Channel `protobuf:"bytes,2,rep,name=channels,proto3" json:"channels,omitempty"` + DefaultChannelName string `protobuf:"bytes,3,opt,name=defaultChannelName,proto3" json:"defaultChannelName,omitempty"` + Deprecation *Deprecation `protobuf:"bytes,4,opt,name=deprecation,proto3" json:"deprecation,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Package) Reset() { *x = Package{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Package) String() string { @@ -159,7 +151,7 @@ func (*Package) ProtoMessage() {} func (x *Package) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -203,23 +195,20 @@ func (x *Package) GetDeprecation() *Deprecation { } type GroupVersionKind struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` + Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` unknownFields protoimpl.UnknownFields - - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` - Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GroupVersionKind) Reset() { *x = GroupVersionKind{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GroupVersionKind) String() string { @@ -230,7 +219,7 @@ func (*GroupVersionKind) ProtoMessage() {} func (x *GroupVersionKind) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -274,21 +263,18 @@ func (x *GroupVersionKind) GetPlural() string { } type Dependency struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Dependency) Reset() { *x = Dependency{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Dependency) String() string { @@ -299,7 +285,7 @@ func (*Dependency) ProtoMessage() {} func (x *Dependency) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -329,21 +315,18 @@ func (x *Dependency) GetValue() string { } type Property struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Property) Reset() { *x = Property{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Property) String() string { @@ -354,7 +337,7 @@ func (*Property) ProtoMessage() {} func (x *Property) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -384,34 +367,31 @@ func (x *Property) GetValue() string { } type Bundle struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CsvName string `protobuf:"bytes,1,opt,name=csvName,proto3" json:"csvName,omitempty"` + PackageName string `protobuf:"bytes,2,opt,name=packageName,proto3" json:"packageName,omitempty"` + ChannelName string `protobuf:"bytes,3,opt,name=channelName,proto3" json:"channelName,omitempty"` + CsvJson string `protobuf:"bytes,4,opt,name=csvJson,proto3" json:"csvJson,omitempty"` + Object []string `protobuf:"bytes,5,rep,name=object,proto3" json:"object,omitempty"` + BundlePath string `protobuf:"bytes,6,opt,name=bundlePath,proto3" json:"bundlePath,omitempty"` + ProvidedApis []*GroupVersionKind `protobuf:"bytes,7,rep,name=providedApis,proto3" json:"providedApis,omitempty"` + RequiredApis []*GroupVersionKind `protobuf:"bytes,8,rep,name=requiredApis,proto3" json:"requiredApis,omitempty"` + Version string `protobuf:"bytes,9,opt,name=version,proto3" json:"version,omitempty"` + SkipRange string `protobuf:"bytes,10,opt,name=skipRange,proto3" json:"skipRange,omitempty"` + Dependencies []*Dependency `protobuf:"bytes,11,rep,name=dependencies,proto3" json:"dependencies,omitempty"` + Properties []*Property `protobuf:"bytes,12,rep,name=properties,proto3" json:"properties,omitempty"` + Replaces string `protobuf:"bytes,13,opt,name=replaces,proto3" json:"replaces,omitempty"` + Skips []string `protobuf:"bytes,14,rep,name=skips,proto3" json:"skips,omitempty"` + Deprecation *Deprecation `protobuf:"bytes,15,opt,name=deprecation,proto3" json:"deprecation,omitempty"` unknownFields protoimpl.UnknownFields - - CsvName string `protobuf:"bytes,1,opt,name=csvName,proto3" json:"csvName,omitempty"` - PackageName string `protobuf:"bytes,2,opt,name=packageName,proto3" json:"packageName,omitempty"` - ChannelName string `protobuf:"bytes,3,opt,name=channelName,proto3" json:"channelName,omitempty"` - CsvJson string `protobuf:"bytes,4,opt,name=csvJson,proto3" json:"csvJson,omitempty"` - Object []string `protobuf:"bytes,5,rep,name=object,proto3" json:"object,omitempty"` - BundlePath string `protobuf:"bytes,6,opt,name=bundlePath,proto3" json:"bundlePath,omitempty"` - ProvidedApis []*GroupVersionKind `protobuf:"bytes,7,rep,name=providedApis,proto3" json:"providedApis,omitempty"` - RequiredApis []*GroupVersionKind `protobuf:"bytes,8,rep,name=requiredApis,proto3" json:"requiredApis,omitempty"` - Version string `protobuf:"bytes,9,opt,name=version,proto3" json:"version,omitempty"` - SkipRange string `protobuf:"bytes,10,opt,name=skipRange,proto3" json:"skipRange,omitempty"` - Dependencies []*Dependency `protobuf:"bytes,11,rep,name=dependencies,proto3" json:"dependencies,omitempty"` - Properties []*Property `protobuf:"bytes,12,rep,name=properties,proto3" json:"properties,omitempty"` - Replaces string `protobuf:"bytes,13,opt,name=replaces,proto3" json:"replaces,omitempty"` - Skips []string `protobuf:"bytes,14,rep,name=skips,proto3" json:"skips,omitempty"` - Deprecation *Deprecation `protobuf:"bytes,15,opt,name=deprecation,proto3" json:"deprecation,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Bundle) Reset() { *x = Bundle{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Bundle) String() string { @@ -422,7 +402,7 @@ func (*Bundle) ProtoMessage() {} func (x *Bundle) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -543,23 +523,20 @@ func (x *Bundle) GetDeprecation() *Deprecation { } type ChannelEntry struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + PackageName string `protobuf:"bytes,1,opt,name=packageName,proto3" json:"packageName,omitempty"` + ChannelName string `protobuf:"bytes,2,opt,name=channelName,proto3" json:"channelName,omitempty"` + BundleName string `protobuf:"bytes,3,opt,name=bundleName,proto3" json:"bundleName,omitempty"` + Replaces string `protobuf:"bytes,4,opt,name=replaces,proto3" json:"replaces,omitempty"` unknownFields protoimpl.UnknownFields - - PackageName string `protobuf:"bytes,1,opt,name=packageName,proto3" json:"packageName,omitempty"` - ChannelName string `protobuf:"bytes,2,opt,name=channelName,proto3" json:"channelName,omitempty"` - BundleName string `protobuf:"bytes,3,opt,name=bundleName,proto3" json:"bundleName,omitempty"` - Replaces string `protobuf:"bytes,4,opt,name=replaces,proto3" json:"replaces,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ChannelEntry) Reset() { *x = ChannelEntry{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ChannelEntry) String() string { @@ -570,7 +547,7 @@ func (*ChannelEntry) ProtoMessage() {} func (x *ChannelEntry) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -614,18 +591,16 @@ func (x *ChannelEntry) GetReplaces() string { } type ListPackageRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListPackageRequest) Reset() { *x = ListPackageRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListPackageRequest) String() string { @@ -636,7 +611,7 @@ func (*ListPackageRequest) ProtoMessage() {} func (x *ListPackageRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -652,18 +627,16 @@ func (*ListPackageRequest) Descriptor() ([]byte, []int) { } type ListBundlesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListBundlesRequest) Reset() { *x = ListBundlesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ListBundlesRequest) String() string { @@ -674,7 +647,7 @@ func (*ListBundlesRequest) ProtoMessage() {} func (x *ListBundlesRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -690,20 +663,17 @@ func (*ListBundlesRequest) Descriptor() ([]byte, []int) { } type GetPackageRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetPackageRequest) Reset() { *x = GetPackageRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetPackageRequest) String() string { @@ -714,7 +684,7 @@ func (*GetPackageRequest) ProtoMessage() {} func (x *GetPackageRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -737,22 +707,19 @@ func (x *GetPackageRequest) GetName() string { } type GetBundleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + PkgName string `protobuf:"bytes,1,opt,name=pkgName,proto3" json:"pkgName,omitempty"` + ChannelName string `protobuf:"bytes,2,opt,name=channelName,proto3" json:"channelName,omitempty"` + CsvName string `protobuf:"bytes,3,opt,name=csvName,proto3" json:"csvName,omitempty"` unknownFields protoimpl.UnknownFields - - PkgName string `protobuf:"bytes,1,opt,name=pkgName,proto3" json:"pkgName,omitempty"` - ChannelName string `protobuf:"bytes,2,opt,name=channelName,proto3" json:"channelName,omitempty"` - CsvName string `protobuf:"bytes,3,opt,name=csvName,proto3" json:"csvName,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetBundleRequest) Reset() { *x = GetBundleRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetBundleRequest) String() string { @@ -763,7 +730,7 @@ func (*GetBundleRequest) ProtoMessage() {} func (x *GetBundleRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -800,21 +767,18 @@ func (x *GetBundleRequest) GetCsvName() string { } type GetBundleInChannelRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + PkgName string `protobuf:"bytes,1,opt,name=pkgName,proto3" json:"pkgName,omitempty"` + ChannelName string `protobuf:"bytes,2,opt,name=channelName,proto3" json:"channelName,omitempty"` unknownFields protoimpl.UnknownFields - - PkgName string `protobuf:"bytes,1,opt,name=pkgName,proto3" json:"pkgName,omitempty"` - ChannelName string `protobuf:"bytes,2,opt,name=channelName,proto3" json:"channelName,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetBundleInChannelRequest) Reset() { *x = GetBundleInChannelRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetBundleInChannelRequest) String() string { @@ -825,7 +789,7 @@ func (*GetBundleInChannelRequest) ProtoMessage() {} func (x *GetBundleInChannelRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -855,20 +819,17 @@ func (x *GetBundleInChannelRequest) GetChannelName() string { } type GetAllReplacementsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CsvName string `protobuf:"bytes,1,opt,name=csvName,proto3" json:"csvName,omitempty"` unknownFields protoimpl.UnknownFields - - CsvName string `protobuf:"bytes,1,opt,name=csvName,proto3" json:"csvName,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAllReplacementsRequest) Reset() { *x = GetAllReplacementsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetAllReplacementsRequest) String() string { @@ -879,7 +840,7 @@ func (*GetAllReplacementsRequest) ProtoMessage() {} func (x *GetAllReplacementsRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -902,22 +863,19 @@ func (x *GetAllReplacementsRequest) GetCsvName() string { } type GetReplacementRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + CsvName string `protobuf:"bytes,1,opt,name=csvName,proto3" json:"csvName,omitempty"` + PkgName string `protobuf:"bytes,2,opt,name=pkgName,proto3" json:"pkgName,omitempty"` + ChannelName string `protobuf:"bytes,3,opt,name=channelName,proto3" json:"channelName,omitempty"` unknownFields protoimpl.UnknownFields - - CsvName string `protobuf:"bytes,1,opt,name=csvName,proto3" json:"csvName,omitempty"` - PkgName string `protobuf:"bytes,2,opt,name=pkgName,proto3" json:"pkgName,omitempty"` - ChannelName string `protobuf:"bytes,3,opt,name=channelName,proto3" json:"channelName,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetReplacementRequest) Reset() { *x = GetReplacementRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetReplacementRequest) String() string { @@ -928,7 +886,7 @@ func (*GetReplacementRequest) ProtoMessage() {} func (x *GetReplacementRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -965,23 +923,20 @@ func (x *GetReplacementRequest) GetChannelName() string { } type GetAllProvidersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` + Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` unknownFields protoimpl.UnknownFields - - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` - Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAllProvidersRequest) Reset() { *x = GetAllProvidersRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetAllProvidersRequest) String() string { @@ -992,7 +947,7 @@ func (*GetAllProvidersRequest) ProtoMessage() {} func (x *GetAllProvidersRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1036,23 +991,20 @@ func (x *GetAllProvidersRequest) GetPlural() string { } type GetLatestProvidersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` + Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` unknownFields protoimpl.UnknownFields - - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` - Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetLatestProvidersRequest) Reset() { *x = GetLatestProvidersRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetLatestProvidersRequest) String() string { @@ -1063,7 +1015,7 @@ func (*GetLatestProvidersRequest) ProtoMessage() {} func (x *GetLatestProvidersRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1107,23 +1059,20 @@ func (x *GetLatestProvidersRequest) GetPlural() string { } type GetDefaultProviderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` + Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` unknownFields protoimpl.UnknownFields - - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` - Plural string `protobuf:"bytes,4,opt,name=plural,proto3" json:"plural,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetDefaultProviderRequest) Reset() { *x = GetDefaultProviderRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetDefaultProviderRequest) String() string { @@ -1134,7 +1083,7 @@ func (*GetDefaultProviderRequest) ProtoMessage() {} func (x *GetDefaultProviderRequest) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1178,20 +1127,17 @@ func (x *GetDefaultProviderRequest) GetPlural() string { } type Deprecation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Deprecation) Reset() { *x = Deprecation{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_registry_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Deprecation) String() string { @@ -1202,7 +1148,7 @@ func (*Deprecation) ProtoMessage() {} func (x *Deprecation) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1224,223 +1170,200 @@ func (x *Deprecation) GetMessage() string { return "" } -var File_registry_proto protoreflect.FileDescriptor +type ListPackageCustomSchemasRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Schema string `protobuf:"bytes,1,opt,name=schema,proto3" json:"schema,omitempty"` + PackageName string `protobuf:"bytes,2,opt,name=packageName,proto3" json:"packageName,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} -var file_registry_proto_rawDesc = []byte{ - 0x0a, 0x0e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x03, 0x61, 0x70, 0x69, 0x22, 0x6b, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x73, 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x73, 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, - 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x21, 0x0a, 0x0b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xab, 0x01, 0x0a, 0x07, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, - 0x2e, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x32, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x6e, 0x0a, 0x10, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6c, 0x75, - 0x72, 0x61, 0x6c, 0x22, 0x36, 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x34, 0x0a, 0x08, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0xb0, 0x04, 0x0a, 0x06, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x73, 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x73, 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x73, - 0x76, 0x4a, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x73, 0x76, - 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, - 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x39, 0x0a, 0x0c, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x41, 0x70, 0x69, 0x73, 0x18, 0x07, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x64, 0x41, 0x70, 0x69, 0x73, 0x12, 0x39, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x64, 0x41, 0x70, 0x69, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x41, 0x70, - 0x69, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, - 0x73, 0x6b, 0x69, 0x70, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x6b, 0x69, 0x70, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x0c, 0x64, 0x65, - 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, - 0x79, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, - 0x2d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0c, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6b, - 0x69, 0x70, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x6b, 0x69, 0x70, 0x73, - 0x12, 0x32, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x70, 0x72, - 0x65, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8e, 0x01, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x14, 0x0a, 0x12, 0x4c, - 0x69, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x27, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x68, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x70, 0x6b, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x70, 0x6b, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x73, - 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x73, 0x76, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x49, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6b, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x70, 0x6b, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x35, 0x0a, - 0x19, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x73, - 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x73, 0x76, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6d, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x63, 0x73, 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x63, 0x73, 0x76, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6b, 0x67, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6b, 0x67, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0x74, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x70, 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x22, 0x77, 0x0a, 0x19, 0x47, 0x65, 0x74, - 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6c, - 0x75, 0x72, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6c, 0x75, 0x72, - 0x61, 0x6c, 0x22, 0x77, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, - 0x69, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x22, 0x27, 0x0a, 0x0b, 0x44, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x32, 0xcf, 0x05, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x12, 0x3d, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x73, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x00, 0x30, 0x01, - 0x12, 0x34, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x16, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x13, 0x47, 0x65, 0x74, - 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, - 0x49, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x03, 0x88, - 0x02, 0x01, 0x12, 0x55, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x54, 0x68, 0x61, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x52, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x00, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x15, 0x47, 0x65, 0x74, - 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x54, 0x68, 0x61, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x73, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, - 0x1c, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x54, 0x68, 0x61, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x12, 0x1b, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x00, 0x30, - 0x01, 0x12, 0x5b, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x54, 0x68, 0x61, 0x74, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, - 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4d, - 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x75, 0x6e, 0x64, - 0x6c, 0x65, 0x54, 0x68, 0x61, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x12, 0x1e, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, - 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x12, 0x17, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x6e, 0x64, - 0x6c, 0x65, 0x22, 0x00, 0x30, 0x01, 0x42, 0x07, 0x5a, 0x05, 0x2e, 0x3b, 0x61, 0x70, 0x69, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +func (x *ListPackageCustomSchemasRequest) Reset() { + *x = ListPackageCustomSchemasRequest{} + mi := &file_registry_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListPackageCustomSchemasRequest) String() string { + return protoimpl.X.MessageStringOf(x) } +func (*ListPackageCustomSchemasRequest) ProtoMessage() {} + +func (x *ListPackageCustomSchemasRequest) ProtoReflect() protoreflect.Message { + mi := &file_registry_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListPackageCustomSchemasRequest.ProtoReflect.Descriptor instead. +func (*ListPackageCustomSchemasRequest) Descriptor() ([]byte, []int) { + return file_registry_proto_rawDescGZIP(), []int{19} +} + +func (x *ListPackageCustomSchemasRequest) GetSchema() string { + if x != nil { + return x.Schema + } + return "" +} + +func (x *ListPackageCustomSchemasRequest) GetPackageName() string { + if x != nil { + return x.PackageName + } + return "" +} + +var File_registry_proto protoreflect.FileDescriptor + +const file_registry_proto_rawDesc = "" + + "\n" + + "\x0eregistry.proto\x12\x03api\x1a\x1cgoogle/protobuf/struct.proto\"k\n" + + "\aChannel\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n" + + "\acsvName\x18\x02 \x01(\tR\acsvName\x122\n" + + "\vdeprecation\x18\x03 \x01(\v2\x10.api.DeprecationR\vdeprecation\"!\n" + + "\vPackageName\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\"\xab\x01\n" + + "\aPackage\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12(\n" + + "\bchannels\x18\x02 \x03(\v2\f.api.ChannelR\bchannels\x12.\n" + + "\x12defaultChannelName\x18\x03 \x01(\tR\x12defaultChannelName\x122\n" + + "\vdeprecation\x18\x04 \x01(\v2\x10.api.DeprecationR\vdeprecation\"n\n" + + "\x10GroupVersionKind\x12\x14\n" + + "\x05group\x18\x01 \x01(\tR\x05group\x12\x18\n" + + "\aversion\x18\x02 \x01(\tR\aversion\x12\x12\n" + + "\x04kind\x18\x03 \x01(\tR\x04kind\x12\x16\n" + + "\x06plural\x18\x04 \x01(\tR\x06plural\"6\n" + + "\n" + + "Dependency\x12\x12\n" + + "\x04type\x18\x01 \x01(\tR\x04type\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\"4\n" + + "\bProperty\x12\x12\n" + + "\x04type\x18\x01 \x01(\tR\x04type\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\"\xb0\x04\n" + + "\x06Bundle\x12\x18\n" + + "\acsvName\x18\x01 \x01(\tR\acsvName\x12 \n" + + "\vpackageName\x18\x02 \x01(\tR\vpackageName\x12 \n" + + "\vchannelName\x18\x03 \x01(\tR\vchannelName\x12\x18\n" + + "\acsvJson\x18\x04 \x01(\tR\acsvJson\x12\x16\n" + + "\x06object\x18\x05 \x03(\tR\x06object\x12\x1e\n" + + "\n" + + "bundlePath\x18\x06 \x01(\tR\n" + + "bundlePath\x129\n" + + "\fprovidedApis\x18\a \x03(\v2\x15.api.GroupVersionKindR\fprovidedApis\x129\n" + + "\frequiredApis\x18\b \x03(\v2\x15.api.GroupVersionKindR\frequiredApis\x12\x18\n" + + "\aversion\x18\t \x01(\tR\aversion\x12\x1c\n" + + "\tskipRange\x18\n" + + " \x01(\tR\tskipRange\x123\n" + + "\fdependencies\x18\v \x03(\v2\x0f.api.DependencyR\fdependencies\x12-\n" + + "\n" + + "properties\x18\f \x03(\v2\r.api.PropertyR\n" + + "properties\x12\x1a\n" + + "\breplaces\x18\r \x01(\tR\breplaces\x12\x14\n" + + "\x05skips\x18\x0e \x03(\tR\x05skips\x122\n" + + "\vdeprecation\x18\x0f \x01(\v2\x10.api.DeprecationR\vdeprecation\"\x8e\x01\n" + + "\fChannelEntry\x12 \n" + + "\vpackageName\x18\x01 \x01(\tR\vpackageName\x12 \n" + + "\vchannelName\x18\x02 \x01(\tR\vchannelName\x12\x1e\n" + + "\n" + + "bundleName\x18\x03 \x01(\tR\n" + + "bundleName\x12\x1a\n" + + "\breplaces\x18\x04 \x01(\tR\breplaces\"\x14\n" + + "\x12ListPackageRequest\"\x14\n" + + "\x12ListBundlesRequest\"'\n" + + "\x11GetPackageRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\"h\n" + + "\x10GetBundleRequest\x12\x18\n" + + "\apkgName\x18\x01 \x01(\tR\apkgName\x12 \n" + + "\vchannelName\x18\x02 \x01(\tR\vchannelName\x12\x18\n" + + "\acsvName\x18\x03 \x01(\tR\acsvName\"W\n" + + "\x19GetBundleInChannelRequest\x12\x18\n" + + "\apkgName\x18\x01 \x01(\tR\apkgName\x12 \n" + + "\vchannelName\x18\x02 \x01(\tR\vchannelName\"5\n" + + "\x19GetAllReplacementsRequest\x12\x18\n" + + "\acsvName\x18\x01 \x01(\tR\acsvName\"m\n" + + "\x15GetReplacementRequest\x12\x18\n" + + "\acsvName\x18\x01 \x01(\tR\acsvName\x12\x18\n" + + "\apkgName\x18\x02 \x01(\tR\apkgName\x12 \n" + + "\vchannelName\x18\x03 \x01(\tR\vchannelName\"t\n" + + "\x16GetAllProvidersRequest\x12\x14\n" + + "\x05group\x18\x01 \x01(\tR\x05group\x12\x18\n" + + "\aversion\x18\x02 \x01(\tR\aversion\x12\x12\n" + + "\x04kind\x18\x03 \x01(\tR\x04kind\x12\x16\n" + + "\x06plural\x18\x04 \x01(\tR\x06plural\"w\n" + + "\x19GetLatestProvidersRequest\x12\x14\n" + + "\x05group\x18\x01 \x01(\tR\x05group\x12\x18\n" + + "\aversion\x18\x02 \x01(\tR\aversion\x12\x12\n" + + "\x04kind\x18\x03 \x01(\tR\x04kind\x12\x16\n" + + "\x06plural\x18\x04 \x01(\tR\x06plural\"w\n" + + "\x19GetDefaultProviderRequest\x12\x14\n" + + "\x05group\x18\x01 \x01(\tR\x05group\x12\x18\n" + + "\aversion\x18\x02 \x01(\tR\aversion\x12\x12\n" + + "\x04kind\x18\x03 \x01(\tR\x04kind\x12\x16\n" + + "\x06plural\x18\x04 \x01(\tR\x06plural\"'\n" + + "\vDeprecation\x12\x18\n" + + "\amessage\x18\x01 \x01(\tR\amessage\"[\n" + + "\x1fListPackageCustomSchemasRequest\x12\x16\n" + + "\x06schema\x18\x01 \x01(\tR\x06schema\x12 \n" + + "\vpackageName\x18\x02 \x01(\tR\vpackageName2\xae\x06\n" + + "\bRegistry\x12=\n" + + "\fListPackages\x12\x17.api.ListPackageRequest\x1a\x10.api.PackageName\"\x000\x01\x124\n" + + "\n" + + "GetPackage\x12\x16.api.GetPackageRequest\x1a\f.api.Package\"\x00\x121\n" + + "\tGetBundle\x12\x15.api.GetBundleRequest\x1a\v.api.Bundle\"\x00\x12G\n" + + "\x13GetBundleForChannel\x12\x1e.api.GetBundleInChannelRequest\x1a\v.api.Bundle\"\x03\x88\x02\x01\x12U\n" + + "\x1cGetChannelEntriesThatReplace\x12\x1e.api.GetAllReplacementsRequest\x1a\x11.api.ChannelEntry\"\x000\x01\x12B\n" + + "\x15GetBundleThatReplaces\x12\x1a.api.GetReplacementRequest\x1a\v.api.Bundle\"\x00\x12R\n" + + "\x1cGetChannelEntriesThatProvide\x12\x1b.api.GetAllProvidersRequest\x1a\x11.api.ChannelEntry\"\x000\x01\x12[\n" + + "\"GetLatestChannelEntriesThatProvide\x12\x1e.api.GetLatestProvidersRequest\x1a\x11.api.ChannelEntry\"\x000\x01\x12M\n" + + "\x1cGetDefaultBundleThatProvides\x12\x1e.api.GetDefaultProviderRequest\x1a\v.api.Bundle\"\x00\x127\n" + + "\vListBundles\x12\x17.api.ListBundlesRequest\x1a\v.api.Bundle\"\x000\x01\x12]\n" + + "\x18ListPackageCustomSchemas\x12$.api.ListPackageCustomSchemasRequest\x1a\x17.google.protobuf.Struct\"\x000\x01B\aZ\x05.;apib\x06proto3" + var ( file_registry_proto_rawDescOnce sync.Once - file_registry_proto_rawDescData = file_registry_proto_rawDesc + file_registry_proto_rawDescData []byte ) func file_registry_proto_rawDescGZIP() []byte { file_registry_proto_rawDescOnce.Do(func() { - file_registry_proto_rawDescData = protoimpl.X.CompressGZIP(file_registry_proto_rawDescData) + file_registry_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_registry_proto_rawDesc), len(file_registry_proto_rawDesc))) }) return file_registry_proto_rawDescData } -var file_registry_proto_msgTypes = make([]protoimpl.MessageInfo, 19) -var file_registry_proto_goTypes = []interface{}{ - (*Channel)(nil), // 0: api.Channel - (*PackageName)(nil), // 1: api.PackageName - (*Package)(nil), // 2: api.Package - (*GroupVersionKind)(nil), // 3: api.GroupVersionKind - (*Dependency)(nil), // 4: api.Dependency - (*Property)(nil), // 5: api.Property - (*Bundle)(nil), // 6: api.Bundle - (*ChannelEntry)(nil), // 7: api.ChannelEntry - (*ListPackageRequest)(nil), // 8: api.ListPackageRequest - (*ListBundlesRequest)(nil), // 9: api.ListBundlesRequest - (*GetPackageRequest)(nil), // 10: api.GetPackageRequest - (*GetBundleRequest)(nil), // 11: api.GetBundleRequest - (*GetBundleInChannelRequest)(nil), // 12: api.GetBundleInChannelRequest - (*GetAllReplacementsRequest)(nil), // 13: api.GetAllReplacementsRequest - (*GetReplacementRequest)(nil), // 14: api.GetReplacementRequest - (*GetAllProvidersRequest)(nil), // 15: api.GetAllProvidersRequest - (*GetLatestProvidersRequest)(nil), // 16: api.GetLatestProvidersRequest - (*GetDefaultProviderRequest)(nil), // 17: api.GetDefaultProviderRequest - (*Deprecation)(nil), // 18: api.Deprecation +var file_registry_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_registry_proto_goTypes = []any{ + (*Channel)(nil), // 0: api.Channel + (*PackageName)(nil), // 1: api.PackageName + (*Package)(nil), // 2: api.Package + (*GroupVersionKind)(nil), // 3: api.GroupVersionKind + (*Dependency)(nil), // 4: api.Dependency + (*Property)(nil), // 5: api.Property + (*Bundle)(nil), // 6: api.Bundle + (*ChannelEntry)(nil), // 7: api.ChannelEntry + (*ListPackageRequest)(nil), // 8: api.ListPackageRequest + (*ListBundlesRequest)(nil), // 9: api.ListBundlesRequest + (*GetPackageRequest)(nil), // 10: api.GetPackageRequest + (*GetBundleRequest)(nil), // 11: api.GetBundleRequest + (*GetBundleInChannelRequest)(nil), // 12: api.GetBundleInChannelRequest + (*GetAllReplacementsRequest)(nil), // 13: api.GetAllReplacementsRequest + (*GetReplacementRequest)(nil), // 14: api.GetReplacementRequest + (*GetAllProvidersRequest)(nil), // 15: api.GetAllProvidersRequest + (*GetLatestProvidersRequest)(nil), // 16: api.GetLatestProvidersRequest + (*GetDefaultProviderRequest)(nil), // 17: api.GetDefaultProviderRequest + (*Deprecation)(nil), // 18: api.Deprecation + (*ListPackageCustomSchemasRequest)(nil), // 19: api.ListPackageCustomSchemasRequest + (*structpb.Struct)(nil), // 20: google.protobuf.Struct } var file_registry_proto_depIdxs = []int32{ 18, // 0: api.Channel.deprecation:type_name -> api.Deprecation @@ -1461,18 +1384,20 @@ var file_registry_proto_depIdxs = []int32{ 16, // 15: api.Registry.GetLatestChannelEntriesThatProvide:input_type -> api.GetLatestProvidersRequest 17, // 16: api.Registry.GetDefaultBundleThatProvides:input_type -> api.GetDefaultProviderRequest 9, // 17: api.Registry.ListBundles:input_type -> api.ListBundlesRequest - 1, // 18: api.Registry.ListPackages:output_type -> api.PackageName - 2, // 19: api.Registry.GetPackage:output_type -> api.Package - 6, // 20: api.Registry.GetBundle:output_type -> api.Bundle - 6, // 21: api.Registry.GetBundleForChannel:output_type -> api.Bundle - 7, // 22: api.Registry.GetChannelEntriesThatReplace:output_type -> api.ChannelEntry - 6, // 23: api.Registry.GetBundleThatReplaces:output_type -> api.Bundle - 7, // 24: api.Registry.GetChannelEntriesThatProvide:output_type -> api.ChannelEntry - 7, // 25: api.Registry.GetLatestChannelEntriesThatProvide:output_type -> api.ChannelEntry - 6, // 26: api.Registry.GetDefaultBundleThatProvides:output_type -> api.Bundle - 6, // 27: api.Registry.ListBundles:output_type -> api.Bundle - 18, // [18:28] is the sub-list for method output_type - 8, // [8:18] is the sub-list for method input_type + 19, // 18: api.Registry.ListPackageCustomSchemas:input_type -> api.ListPackageCustomSchemasRequest + 1, // 19: api.Registry.ListPackages:output_type -> api.PackageName + 2, // 20: api.Registry.GetPackage:output_type -> api.Package + 6, // 21: api.Registry.GetBundle:output_type -> api.Bundle + 6, // 22: api.Registry.GetBundleForChannel:output_type -> api.Bundle + 7, // 23: api.Registry.GetChannelEntriesThatReplace:output_type -> api.ChannelEntry + 6, // 24: api.Registry.GetBundleThatReplaces:output_type -> api.Bundle + 7, // 25: api.Registry.GetChannelEntriesThatProvide:output_type -> api.ChannelEntry + 7, // 26: api.Registry.GetLatestChannelEntriesThatProvide:output_type -> api.ChannelEntry + 6, // 27: api.Registry.GetDefaultBundleThatProvides:output_type -> api.Bundle + 6, // 28: api.Registry.ListBundles:output_type -> api.Bundle + 20, // 29: api.Registry.ListPackageCustomSchemas:output_type -> google.protobuf.Struct + 19, // [19:30] is the sub-list for method output_type + 8, // [8:19] is the sub-list for method input_type 8, // [8:8] is the sub-list for extension type_name 8, // [8:8] is the sub-list for extension extendee 0, // [0:8] is the sub-list for field type_name @@ -1483,243 +1408,13 @@ func file_registry_proto_init() { if File_registry_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_registry_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Channel); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PackageName); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Package); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GroupVersionKind); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Dependency); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Property); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Bundle); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChannelEntry); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListPackageRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListBundlesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPackageRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBundleRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBundleInChannelRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllReplacementsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetReplacementRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAllProvidersRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetLatestProvidersRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDefaultProviderRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Deprecation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_registry_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_registry_proto_rawDesc), len(file_registry_proto_rawDesc)), NumEnums: 0, - NumMessages: 19, + NumMessages: 20, NumExtensions: 0, NumServices: 1, }, @@ -1728,7 +1423,6 @@ func file_registry_proto_init() { MessageInfos: file_registry_proto_msgTypes, }.Build() File_registry_proto = out.File - file_registry_proto_rawDesc = nil file_registry_proto_goTypes = nil file_registry_proto_depIdxs = nil } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/api/registry.proto b/vendor/github.com/operator-framework/operator-registry/pkg/api/registry.proto index 5aa54a253b..8b8f82a6c3 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/api/registry.proto +++ b/vendor/github.com/operator-framework/operator-registry/pkg/api/registry.proto @@ -2,6 +2,8 @@ syntax = "proto3"; option go_package = ".;api"; +import "google/protobuf/struct.proto"; + package api; service Registry { @@ -17,6 +19,7 @@ service Registry { rpc GetLatestChannelEntriesThatProvide(GetLatestProvidersRequest) returns (stream ChannelEntry) {} rpc GetDefaultBundleThatProvides(GetDefaultProviderRequest) returns (Bundle) {} rpc ListBundles(ListBundlesRequest) returns (stream Bundle) {} + rpc ListPackageCustomSchemas(ListPackageCustomSchemasRequest) returns (stream google.protobuf.Struct) {} } message Channel{ @@ -130,4 +133,10 @@ message GetDefaultProviderRequest{ message Deprecation{ string message = 1; -} \ No newline at end of file +} + +message ListPackageCustomSchemasRequest{ + string schema = 1; + string packageName = 2; +} + diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/api/registry_grpc.pb.go b/vendor/github.com/operator-framework/operator-registry/pkg/api/registry_grpc.pb.go index b5a62b3dfb..336d44f124 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/api/registry_grpc.pb.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/api/registry_grpc.pb.go @@ -11,6 +11,7 @@ import ( grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + structpb "google.golang.org/protobuf/types/known/structpb" ) // This is a compile-time assertion to ensure that this generated file @@ -29,6 +30,7 @@ const ( Registry_GetLatestChannelEntriesThatProvide_FullMethodName = "/api.Registry/GetLatestChannelEntriesThatProvide" Registry_GetDefaultBundleThatProvides_FullMethodName = "/api.Registry/GetDefaultBundleThatProvides" Registry_ListBundles_FullMethodName = "/api.Registry/ListBundles" + Registry_ListPackageCustomSchemas_FullMethodName = "/api.Registry/ListPackageCustomSchemas" ) // RegistryClient is the client API for Registry service. @@ -46,6 +48,7 @@ type RegistryClient interface { GetLatestChannelEntriesThatProvide(ctx context.Context, in *GetLatestProvidersRequest, opts ...grpc.CallOption) (Registry_GetLatestChannelEntriesThatProvideClient, error) GetDefaultBundleThatProvides(ctx context.Context, in *GetDefaultProviderRequest, opts ...grpc.CallOption) (*Bundle, error) ListBundles(ctx context.Context, in *ListBundlesRequest, opts ...grpc.CallOption) (Registry_ListBundlesClient, error) + ListPackageCustomSchemas(ctx context.Context, in *ListPackageCustomSchemasRequest, opts ...grpc.CallOption) (Registry_ListPackageCustomSchemasClient, error) } type registryClient struct { @@ -262,6 +265,38 @@ func (x *registryListBundlesClient) Recv() (*Bundle, error) { return m, nil } +func (c *registryClient) ListPackageCustomSchemas(ctx context.Context, in *ListPackageCustomSchemasRequest, opts ...grpc.CallOption) (Registry_ListPackageCustomSchemasClient, error) { + stream, err := c.cc.NewStream(ctx, &Registry_ServiceDesc.Streams[5], Registry_ListPackageCustomSchemas_FullMethodName, opts...) + if err != nil { + return nil, err + } + x := ®istryListPackageCustomSchemasClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Registry_ListPackageCustomSchemasClient interface { + Recv() (*structpb.Struct, error) + grpc.ClientStream +} + +type registryListPackageCustomSchemasClient struct { + grpc.ClientStream +} + +func (x *registryListPackageCustomSchemasClient) Recv() (*structpb.Struct, error) { + m := new(structpb.Struct) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // RegistryServer is the server API for Registry service. // All implementations must embed UnimplementedRegistryServer // for forward compatibility @@ -277,6 +312,7 @@ type RegistryServer interface { GetLatestChannelEntriesThatProvide(*GetLatestProvidersRequest, Registry_GetLatestChannelEntriesThatProvideServer) error GetDefaultBundleThatProvides(context.Context, *GetDefaultProviderRequest) (*Bundle, error) ListBundles(*ListBundlesRequest, Registry_ListBundlesServer) error + ListPackageCustomSchemas(*ListPackageCustomSchemasRequest, Registry_ListPackageCustomSchemasServer) error mustEmbedUnimplementedRegistryServer() } @@ -314,6 +350,9 @@ func (UnimplementedRegistryServer) GetDefaultBundleThatProvides(context.Context, func (UnimplementedRegistryServer) ListBundles(*ListBundlesRequest, Registry_ListBundlesServer) error { return status.Errorf(codes.Unimplemented, "method ListBundles not implemented") } +func (UnimplementedRegistryServer) ListPackageCustomSchemas(*ListPackageCustomSchemasRequest, Registry_ListPackageCustomSchemasServer) error { + return status.Errorf(codes.Unimplemented, "method ListPackageCustomSchemas not implemented") +} func (UnimplementedRegistryServer) mustEmbedUnimplementedRegistryServer() {} // UnsafeRegistryServer may be embedded to opt out of forward compatibility for this service. @@ -522,6 +561,27 @@ func (x *registryListBundlesServer) Send(m *Bundle) error { return x.ServerStream.SendMsg(m) } +func _Registry_ListPackageCustomSchemas_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ListPackageCustomSchemasRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(RegistryServer).ListPackageCustomSchemas(m, ®istryListPackageCustomSchemasServer{stream}) +} + +type Registry_ListPackageCustomSchemasServer interface { + Send(*structpb.Struct) error + grpc.ServerStream +} + +type registryListPackageCustomSchemasServer struct { + grpc.ServerStream +} + +func (x *registryListPackageCustomSchemasServer) Send(m *structpb.Struct) error { + return x.ServerStream.SendMsg(m) +} + // Registry_ServiceDesc is the grpc.ServiceDesc for Registry service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -576,6 +636,11 @@ var Registry_ServiceDesc = grpc.ServiceDesc{ Handler: _Registry_ListBundles_Handler, ServerStreams: true, }, + { + StreamName: "ListPackageCustomSchemas", + Handler: _Registry_ListPackageCustomSchemas_Handler, + ServerStreams: true, + }, }, Metadata: "registry.proto", } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/cache/cache.go b/vendor/github.com/operator-framework/operator-registry/pkg/cache/cache.go index a02297b36d..529fd7a8a8 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/cache/cache.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/cache/cache.go @@ -28,6 +28,8 @@ type Cache interface { Build(ctx context.Context, fbc fs.FS) error Load(ctc context.Context) error Close() error + + ListPackageCustomSchemas(ctx context.Context, schema, packageName string, sender func([]byte) error) error } type backend interface { @@ -45,6 +47,9 @@ type backend interface { GetBundle(context.Context, bundleKey) (*api.Bundle, error) PutBundle(context.Context, bundleKey, *api.Bundle) error + PutMeta(context.Context, metaKey, []byte) error + SendMetas(context.Context, metaKey, func([]byte) error) error + GetDigest(context.Context) (string, error) ComputeDigest(context.Context, fs.FS) (string, error) PutDigest(context.Context, string) error @@ -237,6 +242,14 @@ func (c *cache) GetBundleThatProvides(ctx context.Context, group, version, kind return c.packageIndex.GetBundleThatProvides(ctx, c, group, version, kind) } +func (c *cache) ListPackageCustomSchemas(ctx context.Context, schema, packageName string, sender func([]byte) error) error { + mk, err := newValidatedMetaKey(schema, packageName) + if err != nil { + return fmt.Errorf("invalid custom schema query: %v", err) + } + return c.backend.SendMetas(ctx, mk, sender) +} + func (c *cache) CheckIntegrity(ctx context.Context, fbc fs.FS) error { existingDigest, err := c.backend.GetDigest(ctx) if err != nil { @@ -288,6 +301,21 @@ func (c *cache) Build(ctx context.Context, fbcFsys fs.FS) error { packageName = meta.Name } + switch meta.Schema { + case declcfg.SchemaPackage, declcfg.SchemaChannel, declcfg.SchemaBundle, declcfg.SchemaDeprecation: + default: + if packageName == "" { + return nil + } + mk, err := newValidatedMetaKey(meta.Schema, packageName) + if err != nil { + return fmt.Errorf("invalid custom schema meta: %v", err) + } + if err := c.backend.PutMeta(ctx, mk, meta.Blob); err != nil { + return fmt.Errorf("store custom schema meta %v: %v", mk, err) + } + } + walkMu.Lock() defer walkMu.Unlock() if _, err := tmpFile.Write(meta.Blob); err != nil { diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/cache/json.go b/vendor/github.com/operator-framework/operator-registry/pkg/cache/json.go index 92b17f7525..cfa600046b 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/cache/json.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/cache/json.go @@ -101,6 +101,8 @@ func (q *jsonBackend) GetPackageIndex(_ context.Context) (packageIndex, error) { return pi, nil } +const jsonMetasDir = jsonDir + string(filepath.Separator) + "metas" + func (q *jsonBackend) PutPackageIndex(_ context.Context, pi packageIndex) error { packageJSON, err := json.Marshal(pi) if err != nil { @@ -140,6 +142,44 @@ func (q *jsonBackend) PutBundle(_ context.Context, key bundleKey, bundle *api.Bu return nil } +func (q *jsonBackend) metaDir(in metaKey) string { + return filepath.Join(q.baseDir, jsonMetasDir, in.Schema, in.PackageName) +} + +func (q *jsonBackend) PutMeta(_ context.Context, key metaKey, blob []byte) error { + dir := q.metaDir(key) + if err := os.MkdirAll(dir, jsonCacheModeDir); err != nil { + return err + } + h := fnv.New64a() + h.Write(blob) + return os.WriteFile(filepath.Join(dir, fmt.Sprintf("%x.json", h.Sum64())), blob, jsonCacheModeFile) +} + +func (q *jsonBackend) SendMetas(_ context.Context, key metaKey, sender func([]byte) error) error { + dir := q.metaDir(key) + entries, err := os.ReadDir(dir) + if err != nil { + if errors.Is(err, os.ErrNotExist) { + return nil + } + return err + } + for _, entry := range entries { + if entry.IsDir() || filepath.Ext(entry.Name()) != ".json" { + continue + } + data, err := os.ReadFile(filepath.Join(dir, entry.Name())) + if err != nil { + return err + } + if err := sender(data); err != nil { + return err + } + } + return nil +} + func (q *jsonBackend) GetDigest(_ context.Context) (string, error) { return readDigestFile(filepath.Join(q.baseDir, jsonDigestFile)) } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/cache/meta_key.go b/vendor/github.com/operator-framework/operator-registry/pkg/cache/meta_key.go new file mode 100644 index 0000000000..64e7e0fe22 --- /dev/null +++ b/vendor/github.com/operator-framework/operator-registry/pkg/cache/meta_key.go @@ -0,0 +1,31 @@ +package cache + +import ( + "fmt" + "strings" +) + +func validateMetaKeyComponent(name, value string) error { + if value == "" { + return fmt.Errorf("invalid %s: must not be empty", name) + } + if strings.ContainsAny(value, "/\\") || value == ".." || strings.HasPrefix(value, "../") || strings.HasSuffix(value, "/..") { + return fmt.Errorf("invalid %s %q: must not contain path separators or '..'", name, value) + } + return nil +} + +func newValidatedMetaKey(schema, packageName string) (metaKey, error) { + if err := validateMetaKeyComponent("schema", schema); err != nil { + return metaKey{}, err + } + if err := validateMetaKeyComponent("packageName", packageName); err != nil { + return metaKey{}, err + } + return metaKey{Schema: schema, PackageName: packageName}, nil +} + +type metaKey struct { + Schema string + PackageName string +} diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/cache/pogrebv1.go b/vendor/github.com/operator-framework/operator-registry/pkg/cache/pogrebv1.go index a590832cbb..22eadce7f1 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/cache/pogrebv1.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/cache/pogrebv1.go @@ -10,6 +10,7 @@ import ( "io/fs" "os" "path/filepath" + "bytes" "sort" "github.com/akrylysov/pogreb" @@ -127,6 +128,8 @@ func (q *pogrebV1Backend) GetPackageIndex(_ context.Context) (packageIndex, erro return pi, nil } +const metaKeyPrefix = "metas/" + func (q *pogrebV1Backend) PutPackageIndex(_ context.Context, index packageIndex) error { packageJSON, err := json.Marshal(index) if err != nil { @@ -163,6 +166,39 @@ func (q *pogrebV1Backend) PutBundle(_ context.Context, key bundleKey, bundle *ap return nil } +func (q *pogrebV1Backend) metaDBKey(in metaKey, blob []byte) []byte { + h := fnv.New64a() + h.Write(blob) + return []byte(fmt.Sprintf("%s%s/%s/%x", metaKeyPrefix, in.Schema, in.PackageName, h.Sum64())) +} + +func (q *pogrebV1Backend) metaDBKeyPrefix(in metaKey) string { + return fmt.Sprintf("%s%s/%s/", metaKeyPrefix, in.Schema, in.PackageName) +} + +func (q *pogrebV1Backend) PutMeta(_ context.Context, key metaKey, blob []byte) error { + return q.db.Put(q.metaDBKey(key, blob), blob) +} + +func (q *pogrebV1Backend) SendMetas(_ context.Context, key metaKey, sender func([]byte) error) error { + prefix := []byte(q.metaDBKeyPrefix(key)) + it := q.db.Items() + for { + k, v, err := it.Next() + if errors.Is(err, pogreb.ErrIterationDone) { + return nil + } + if err != nil { + return err + } + if bytes.HasPrefix(k, prefix) { + if err := sender(v); err != nil { + return err + } + } + } +} + func (q *pogrebV1Backend) GetDigest(_ context.Context) (string, error) { return readDigestFile(filepath.Join(q.baseDir, pogrebDigestFile)) } diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/server/server.go b/vendor/github.com/operator-framework/operator-registry/pkg/server/server.go index 56b09e2258..f291697565 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/server/server.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/server/server.go @@ -2,6 +2,12 @@ package server import ( "context" + "encoding/json" + "strings" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/structpb" "github.com/operator-framework/operator-registry/pkg/api" "github.com/operator-framework/operator-registry/pkg/registry" @@ -98,3 +104,34 @@ func (s *RegistryServer) GetLatestChannelEntriesThatProvide(req *api.GetLatestPr func (s *RegistryServer) GetDefaultBundleThatProvides(ctx context.Context, req *api.GetDefaultProviderRequest) (*api.Bundle, error) { return s.store.GetBundleThatProvides(ctx, req.GetGroup(), req.GetVersion(), req.GetKind()) } + +func (s *RegistryServer) ListPackageCustomSchemas(req *api.ListPackageCustomSchemasRequest, stream api.Registry_ListPackageCustomSchemasServer) error { + schema, pkgName := req.GetSchema(), req.GetPackageName() + if schema == "" || pkgName == "" { + return status.Errorf(codes.InvalidArgument, "schema and packageName are required") + } + for _, v := range []string{schema, pkgName} { + if strings.ContainsAny(v, "/\\") || v == ".." { + return status.Errorf(codes.InvalidArgument, "schema and packageName must not contain path separators or '..'") + } + } + type customSchemaQuerier interface { + ListPackageCustomSchemas(ctx context.Context, schema, packageName string, sender func([]byte) error) error + } + mq, ok := s.store.(customSchemaQuerier) + if !ok { + return status.Errorf(codes.Unimplemented, "store does not support custom schema queries") + } + return mq.ListPackageCustomSchemas(stream.Context(), schema, pkgName, + func(blob []byte) error { + var m map[string]interface{} + if err := json.Unmarshal(blob, &m); err != nil { + return status.Errorf(codes.Internal, "unmarshal custom schema blob: %v", err) + } + st, err := structpb.NewStruct(m) + if err != nil { + return status.Errorf(codes.Internal, "convert custom schema blob to struct: %v", err) + } + return stream.Send(st) + }) +}