diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..d92173089e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +# Collapse the diff of generated files in github by default +**/*.swagger.json linguist-generated=true +**/*.pb.* linguist-generated=true + diff --git a/.protolint.yaml b/.protolint.yaml index ae93b7882f..db528ebb25 100644 --- a/.protolint.yaml +++ b/.protolint.yaml @@ -10,7 +10,7 @@ lint: # The specific linters to add. add: - MESSAGE_NAMES_UPPER_CAMEL_CASE - - MAX_LINE_LENGTH + - MAX_LINE_LENGTH 120 - INDENT 4 - SERVICE_NAMES_END_WITH - FILE_NAMES_LOWER_SNAKE_CASE diff --git a/Makefile b/Makefile index 088e436834..923ac80dd7 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,7 @@ GIT_COMMIT?=$(shell which git > /dev/null && git log -n1 --pretty='%h') VERSION?=$(shell which git > /dev/null && git describe --always --match "v*") FLUX_VERSION=2.0.1 CHART_VERSION=$(shell which yq > /dev/null && yq e '.version' charts/gitops-server/Chart.yaml) +CURRENT_DIR := $(shell pwd) TIER=oss # Go build args @@ -135,6 +136,7 @@ proto: ## Generate protobuf files @go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0 @go install github.com/bufbuild/buf/cmd/buf@v1.1.0 buf generate + cp api/core/core.swagger.json website/static/swagger/core.swagger.json # This job is complaining about a missing plugin and error-ing out # oapi-codegen -config oapi-codegen.config.yaml api/applications/applications.swagger.json @@ -246,3 +248,8 @@ ifeq ($(OS),Windows_NT) else @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_-]+:.*?##/ { printf " \033[36m%-40s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) endif + +.PHONY: swagger-docs +swagger-docs: + @echo "Swagger docs available at http://localhost:6001" + docker run -p 6001:8080 -e SWAGGER_JSON=/api/core/core.swagger.json -v $(CURRENT_DIR)/api:/api swaggerapi/swagger-ui diff --git a/api/core/core.proto b/api/core/core.proto index c69a90f195..972ea4d81a 100644 --- a/api/core/core.proto +++ b/api/core/core.proto @@ -7,9 +7,11 @@ syntax = "proto3"; package gitops_core.v1; import "google/api/annotations.proto"; +import "google/api/visibility.proto"; import "google/protobuf/any.proto"; import "protoc-gen-openapiv2/options/annotations.proto"; + import "api/core/types.proto"; option go_package = "github.com/weaveworks/weave-gitops/core/api"; @@ -17,11 +19,27 @@ option go_package = "github.com/weaveworks/weave-gitops/core/api"; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { info: { title: "Weave GitOps Core API", - version: "0.1"; + version: "0.1", description: "The API handles operations for Weave GitOps Core"; }; - consumes: "application/json"; - produces: "application/json"; + consumes: "application/json", + produces: "application/json", + tags: { + name: "default", + description: "system endpoints" + }; + tags: { + name: "objects", + description: "Query and trigger kubernetes resources" + }; + tags: { + name: "policy", + description: "Query policy config and validations" + }; + tags: { + name: "internal", + description: "Internal APIs which should not be used" + }; }; /** @@ -29,49 +47,63 @@ option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { */ service Core { /* - * GetObject gets data about a single primary object from a cluster. + * Get details of an object + * + * {{ import "api/core/doc/object-kind.md" }} */ rpc GetObject(GetObjectRequest) returns (GetObjectResponse) { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { tags: ["objects"]; }; option (google.api.http) = { - get: "/v1/object/{name}" + get: "/v1/namespaces/{namespace}/objects/{kind}/{name}" }; } /* - * ListObjects gets data about primary objects. + * List objects of kind across all clusters + * + * {{ import "api/core/doc/object-kind.md" }} */ rpc ListObjects(ListObjectsRequest) returns (ListObjectsResponse) { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { tags: ["objects"]; }; option (google.api.http) = { - post: "/v1/objects" - body: "*" + get: "/v1/objects/{kind}" }; } - // Misc /* - * ListFluxRuntimeObjects lists the flux runtime deployments from a cluster. + * Lists the Flux runtime deployments across all clusters + * + * Determine which controllers are installed, their image versions, status, etc. */ rpc ListFluxRuntimeObjects(ListFluxRuntimeObjectsRequest) returns (ListFluxRuntimeObjectsResponse) { option (google.api.http) = { - get: "/v1/flux_runtime_objects" + get: "/v1/flux/deployments" }; } + /* + * Lists the Flux CRDs across all clusters + * + * Determine which flux CRDs are installed on which clusters and at what version. + */ rpc ListFluxCrds(ListFluxCrdsRequest) returns (ListFluxCrdsResponse) { option (google.api.http) = { - get: "/v1/flux_crds" + get: "/v1/flux/crds" }; } /* - * GetReconciledObjects returns a list of objects that were created - * as a result of reconciling a Flux automation. - * This list is derived by looking at the Kustomization or HelmRelease - * specified in the request body. + * Get the list of objects that were created as a result of reconciling a Flux automation. + * + * Use /inventory instead */ rpc GetReconciledObjects(GetReconciledObjectsRequest) returns (GetReconciledObjectsResponse) { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags: ["internal"]; + deprecated: true; + }; option (google.api.http) = { post: "/v1/reconciled_objects" body: "*" @@ -79,13 +111,16 @@ service Core { }; /* - * GetChildObjects returns the children of a given object, - * specified by a GroupVersionKind. - * Not all Kubernets objects have children. For example, a Deployment - * has a child ReplicaSet, but a Service has no child objects. + * Returns the children of a given object + * + * Use /inventory instead */ rpc GetChildObjects(GetChildObjectsRequest) returns (GetChildObjectsResponse) { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags: ["internal"]; + deprecated: true; + }; option (google.api.http) = { post: "/v1/child_objects" body: "*" @@ -93,45 +128,43 @@ service Core { }; /* - * GetFluxNamespace returns with a namespace with a specific label. - */ - rpc GetFluxNamespace(GetFluxNamespaceRequest) - returns (GetFluxNamespaceResponse) { - option (google.api.http) = { - post: "/v1/namespace/flux" - body: "*" - }; - } - - /* - * ListNamespaces returns with the list of available namespaces. - */ - rpc ListNamespaces(ListNamespacesRequest) returns (ListNamespacesResponse) { - option (google.api.http) = { - get: "/v1/namespaces" - }; - } - /* - * ListEvents returns with a list of events + * List events for an object + * + * {{ import "api/core/doc/object-kind.md" }} */ rpc ListEvents(ListEventsRequest) returns (ListEventsResponse) { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { tags: ["objects"]; }; option (google.api.http) = { - get: "/v1/events" + get: "/v1/namespaces/{namespace}/objects/{kind}/{name}/events" }; } /* - * SyncResource forces a reconciliation of a Flux resource + * Trigger reconciliation of multiple Flux objects + * + * Provide a list of objects to be reconciled. Objects are identified by their kind, name, namespace and cluster. + * + * Supported kinds are: + * + * - all Flux custom resources (e.g. `GitRepository` or `HelmRelease`) + * - Enterprise objects that also support this pattern: `GitOpsSet` and `AutomatedClusterDiscovery` + * + * if `withSource` is true the dependent Source resource will be synced too. + * Syncing a Kustomization `withSource` will sync an attached GitRepository. */ rpc SyncFluxObject(SyncFluxObjectRequest) returns (SyncFluxObjectResponse) { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { tags: ["objects"]; }; option (google.api.http) = { - post: "/v1/sync" + patch: "/v1/sync" body: "*" }; } /* - * GetVersion returns version information about the server + * Get version information about the server + * + * Version information about weave-gitops including when the runninng server was built, the git commit and the git tag. + * Also return the kubernetes version of the cluster running weave-gitops. */ rpc GetVersion(GetVersionRequest) returns (GetVersionResponse){ option (google.api.http) = { @@ -140,94 +173,137 @@ service Core { } /* - * GetFeatureFlags returns configuration information about the server - */ - rpc GetFeatureFlags(GetFeatureFlagsRequest) - returns (GetFeatureFlagsResponse) { + * Get feature flags + * + * Return infomation about what features and configuration options are enabled on the server. + * + * New features are sometimes hidden behind feature flags. Other features (e.g. OIDC) can be enabled/disabled. + */ + rpc GetFeatureFlags(GetFeatureFlagsRequest) returns (GetFeatureFlagsResponse) { option (google.api.http) = { - get: "/v1/featureflags" + get: "/v1/feature-flags" }; } /* - * ToggleSuspendResource suspends or resumes a flux object. + * Suspend or resume reconciling multiple Flux objects + * + * Provide a list of objects to be suspended or resumed. Objects are identified by their kind, name, namespace and cluster. + * + * Supported kinds are: + * + * - any Flux custom resource (e.g. `GitRepository` or `HelmRelease`) + * - Enterprise objects that also support this pattern: `GitOpsSet` and `AutomatedClusterDiscovery` */ rpc ToggleSuspendResource(ToggleSuspendResourceRequest) returns (ToggleSuspendResourceResponse) { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { tags: ["objects"]; }; option (google.api.http) = { - post: "/v1/suspend" + patch: "/v1/suspend" body: "*" }; } /* - * GetSessionLogs returns the logs for a given session + * Get the logs for a GitOpsRun session + * + * The GitOpsRun feature has been removed */ rpc GetSessionLogs(GetSessionLogsRequest) returns (GetSessionLogsResponse) { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags: ["internal"]; + deprecated: true; + }; option (google.api.http) = { - post: "/v1/session_logs" - body: "*" + get: "/v1/session-logs" }; } /* - * IsCRDAvailable returns with a hashmap where the keys are the names of - * the clusters, and the value is a boolean indicating whether given CRD is - * installed or not on that cluster. + * Check which clusters have a given CRD installed + * + * Returns a map where the keys are cluster names, and the value is a boolean indicating + * whether the given `CustomResourceDefinition` resource is available on that cluster. */ rpc IsCRDAvailable(IsCRDAvailableRequest) returns (IsCRDAvailableResponse) { option (google.api.http) = { - get : "/v1/crd/is_available", + get : "/v1/crds/{name}/is-available", }; } + /* + * Get the inventory of an object + * + * Look up the inventory of a given object. The inventory is a list of + * objects that were created as a result of reconciling the given object. + * + * The response includes the full kubernetes resource for each inventory item. + */ rpc GetInventory(GetInventoryRequest) returns (GetInventoryResponse) { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { tags: ["objects"]; }; option (google.api.http) = { - get : "/v1/inventory", + get: "/v1/namespaces/{namespace}/objects/{kind}/{name}/inventory" }; } - // ListPolicies list policies available on the cluster + /* + * List policies available across all clusters + * + * This will return all the `Policy` custom resources that are available across all clusters. + */ rpc ListPolicies(ListPoliciesRequest) returns (ListPoliciesResponse) { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { tags: ["policy"]; }; option (google.api.http) = { get : "/v1/policies" }; } - // GetPolicy gets a policy by name + /* + * Gets a policy + * + * Get a `Policy` custom resource by name and cluster. + */ rpc GetPolicy(GetPolicyRequest) returns (GetPolicyResponse) { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { tags: ["policy"]; }; option (google.api.http) = { - get : "/v1/policies/{policyName}" + get : "/v1/policies/{name}" }; } + /* - * ListPolicyValidations lists policy validations + * Lists policy validations across all clusters + * + * Can be filtered by a few different properties of the `involvedObject` */ - rpc ListPolicyValidations(ListPolicyValidationsRequest) - returns (ListPolicyValidationsResponse) { + rpc ListPolicyValidations(ListPolicyValidationsRequest) returns (ListPolicyValidationsResponse) { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { tags: ["policy"]; }; option (google.api.http) = { - post : "/v1/policyvalidations" - body : "*" + get : "/v1/policy-validations" }; } /* - * GetPolicyValidation gets a policy validation by id + * Gets a policy validation + * + * Given a specific validation id, returns the validation details. */ - rpc GetPolicyValidation(GetPolicyValidationRequest) - returns (GetPolicyValidationResponse) { + rpc GetPolicyValidation(GetPolicyValidationRequest) returns (GetPolicyValidationResponse) { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { tags: ["policy"]; }; option (google.api.http) = { - get : "/v1/policyvalidations/{validationId}" + get : "/v1/policy-validations/{validation_id}" }; } } message GetInventoryRequest { + // Supported kinds are `Kustomization` and `HelmRelease` + // If using Enterprise, `GitOpsSet` and `AutomatedClusterDiscovery` are also supported string kind = 1; string name = 2; string namespace = 3; - string clusterName = 4; - bool withChildren = 5; + string cluster_name = 4; + // If true, the children of certain resources like Deployments and Replicasets will be included in the response + bool with_children = 5; } message GetInventoryResponse { @@ -237,44 +313,54 @@ message GetInventoryResponse { message PolicyValidation { string id = 1; string message = 2; - string clusterId = 3; + string cluster_id = 3; string category = 4; string severity = 5; - string createdAt = 6; + string created_at = 6; string entity = 7; - string entityKind = 8; + string entity_kind = 8; string namespace = 9; - string violatingEntity = 10; + string violating_entity = 10; string description = 11; - string howToSolve = 12; + string how_to_solve = 12; string name = 13; - string clusterName = 14; + string cluster_name = 14; repeated PolicyValidationOccurrence occurrences = 15; - string policyId = 16; + string policy_id = 16; repeated PolicyValidationParam parameters = 17; } message ListPolicyValidationsRequest { - string clusterName = 1; + // filter for validations on a particular cluster + string cluster_name = 1; Pagination pagination = 2; + // filter by `involvedObject.name` string application = 3; + // filter by `involvedObject.namespace` string namespace = 4; + // filter by `involvedObject.kind` string kind = 5; - string policyId = 6; - string validationType = 7; + // filter by id of the policy that triggered the validation + string policy_id = 6; + // filter for validation types of `Admission` or `Audit` + string validation_type = 7; } message ListPolicyValidationsResponse { repeated PolicyValidation violations = 1; int32 total = 2; - string nextPageToken = 3; + string next_page_token = 3; repeated ListError errors = 4; } message GetPolicyValidationRequest { - string validationId = 1; - string clusterName = 2; - string validationType = 3; + // The id of the validation. + // This is often obtained from: + // - from the list policy validations endpoint. + // - from `Event` objects raised by the policy-agent + string validation_id = 1; + string cluster_name = 2; + string validation_type = 3; } message GetPolicyValidationResponse { @@ -286,11 +372,11 @@ message PolicyValidationOccurrence { } message PolicyValidationParam { - string name = 1; - string type = 2; - google.protobuf.Any value = 3; - bool required = 4; - string configRef = 5; + string name = 1; + string type = 2; + google.protobuf.Any value = 3; + bool required = 4; + string config_ref = 5; } message PolicyParamRepeatedString { @@ -298,29 +384,30 @@ message PolicyParamRepeatedString { } message Pagination { - int32 pageSize = 1; - string pageToken = 2; + // controls the number of results per page from each cluster + int32 page_size = 1; + // a composite token used to retrieve the next page of results across all clusters + // this is availble in the response as `nextPageToken` + string page_token = 2; } +// Queries are made to each cluster. If its a namespaced query then a query +// is made per namespace too. If an error occurs for any specific query the error +// message is included here alongside the results for the queries that succeeded. message ListError { - string clusterName = 1; - string namespace = 2; - string message = 3; + string cluster_name = 1; + string namespace = 2; + string message = 3; } -message ListFluxRuntimeObjectsRequest { - string namespace = 1; - string clusterName = 2; -} +message ListFluxRuntimeObjectsRequest {} message ListFluxRuntimeObjectsResponse { repeated Deployment deployments = 1; repeated ListError errors = 2; } -message ListFluxCrdsRequest { - string clusterName = 1; -} +message ListFluxCrdsRequest {} message ListFluxCrdsResponse { repeated Crd crds = 1; @@ -328,10 +415,10 @@ message ListFluxCrdsResponse { } message GetObjectRequest { - string name = 1; - string namespace = 2; - string kind = 3; - string clusterName = 4; + string name = 1; + string namespace = 2; + string kind = 3; + string cluster_name = 4; } message GetObjectResponse { @@ -339,21 +426,21 @@ message GetObjectResponse { } message ListObjectsRequest { - string namespace = 1; - string kind = 2; - string clusterName = 3; - map labels = 4; + string namespace = 1; + string kind = 2; + string cluster_name = 3; + string label_selector = 4; } message ClusterNamespaceList { - string clusterName = 1; + string cluster_name = 1; repeated string namespaces = 2; } message ListObjectsResponse { repeated Object objects = 1; repeated ListError errors = 2; - repeated ClusterNamespaceList searchedNamespaces = 3; + repeated ClusterNamespaceList searched_namespaces = 3; } message GetReconciledObjectsRequest { @@ -369,10 +456,10 @@ message GetReconciledObjectsResponse { } message GetChildObjectsRequest { - GroupVersionKind groupVersionKind = 1; - string namespace = 2; - string parentUid = 3; - string clusterName = 4; + GroupVersionKind group_version_kind = 1; + string namespace = 2; + string parent_uid = 3; + string cluster_name = 4; } message GetChildObjectsResponse { @@ -392,7 +479,10 @@ message ListNamespacesResponse { } message ListEventsRequest { - ObjectRef involvedObject = 1; + string kind = 1; + string name = 2; + string namespace = 3; + string cluster_name = 4; } message ListEventsResponse { @@ -400,8 +490,9 @@ message ListEventsResponse { } message SyncFluxObjectRequest { - repeated ObjectRef objects = 1; - bool withSource = 2; + // The list of objects to sync. + repeated ObjectRef objects = 1; + bool with_source = 2; } message SyncFluxObjectResponse { @@ -410,22 +501,28 @@ message SyncFluxObjectResponse { message GetVersionRequest {} message GetVersionResponse { - string semver = 1; - string commit = 2; - string branch = 3; - string buildTime = 4; - string kubeVersion = 5; + string semver = 1; + string commit = 2; + string branch = 3; + string build_time = 4; + string kube_version = 5; } message GetFeatureFlagsRequest {} message GetFeatureFlagsResponse { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + example: "{\"flags\": { \"WEAVE_GITOPS_FEATURE_TENANCY\": \"true\", \"OIDC_AUTH\": \"true\" } }", + }; map flags = 1; } message ToggleSuspendResourceRequest { + // The list of objects to suspend or resume. repeated ObjectRef objects = 1; + // Suspend or resume the resources. bool suspend = 2; + // Include a comment about why the resources are being suspended. string comment = 3; } @@ -433,56 +530,63 @@ message ToggleSuspendResourceResponse { } message GetSessionLogsRequest { - string sessionNamespace = 1; - string sessionId = 2; - string token = 3; - string logSourceFilter = 4; - string logLevelFilter = 5; + string session_namespace = 1; + string session_id = 2; + string token = 3; + string log_source_filter = 4; + string log_level_filter = 5; } message LogEntry { - string timestamp = 1; - string source = 2; - string level = 3; - string message = 4; - string sortingKey = 5; + string timestamp = 1; + string source = 2; + string level = 3; + string message = 4; + string sorting_key = 5; } message GetSessionLogsResponse { - repeated LogEntry logs = 1; - string nextToken = 2; - string error = 3; - repeated string logSources = 4; + repeated LogEntry logs = 1; + string next_token = 2; + string error = 3; + repeated string log_sources = 4; } message IsCRDAvailableRequest { + // The name of the CustomResourceDefinition to check availability for across clusters. e.g. + // - `imageupdateautomations.image.toolkit.fluxcd.io` + // - `gitopssets.templates.weave.works` string name = 1; } message IsCRDAvailableResponse { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + example: "{\"clusters\": { \"clusters-1\": true } }" + }; map clusters = 1; } message ListPoliciesRequest { - string clusterName = 1; - Pagination pagination = 2; + Pagination pagination = 1; } message ListPoliciesResponse { repeated PolicyObj policies = 1; int32 total = 2; - string nextPageToken = 3; + string next_page_token = 3; repeated ListError errors = 4; } message GetPolicyRequest { - string policyName = 1; - string clusterName = 2; + // The name of the `Policy` resource to retrieve. + string name = 1; + // The name of the cluster to retrieve the policy from. Default is the cluster running the API server. + string cluster_name = 2; } message GetPolicyResponse { PolicyObj policy = 1; - string clusterName = 2; + string cluster_name = 2; } message PolicyObj { @@ -490,16 +594,16 @@ message PolicyObj { string id = 2; string code = 3; string description = 4; - string howToSolve = 5; + string how_to_solve = 5; string category = 6; repeated string tags = 7; string severity = 8; repeated PolicyStandard standards = 9; - string gitCommit = 10; + string git_commit = 10; repeated PolicyParam parameters = 11; PolicyTargets targets = 12; - string createdAt = 13; - string clusterName = 14; + string created_at = 13; + string cluster_name = 14; string tenant = 15; repeated string modes = 16; } diff --git a/api/core/core.swagger.json b/api/core/core.swagger.json index 671a957b47..97d8f58cdd 100644 --- a/api/core/core.swagger.json +++ b/api/core/core.swagger.json @@ -7,7 +7,20 @@ }, "tags": [ { - "name": "Core" + "name": "default", + "description": "system endpoints" + }, + { + "name": "objects", + "description": "Query and trigger kubernetes resources" + }, + { + "name": "policy", + "description": "Query policy config and validations" + }, + { + "name": "internal", + "description": "Internal APIs which should not be used" } ], "consumes": [ @@ -19,7 +32,8 @@ "paths": { "/v1/child_objects": { "post": { - "summary": "GetChildObjects returns the children of a given object,\nspecified by a GroupVersionKind.\nNot all Kubernets objects have children. For example, a Deployment\nhas a child ReplicaSet, but a Service has no child objects.", + "summary": "Returns the children of a given object", + "description": "Use /inventory instead", "operationId": "Core_GetChildObjects", "responses": { "200": { @@ -46,13 +60,15 @@ } ], "tags": [ - "Core" - ] + "internal" + ], + "deprecated": true } }, - "/v1/crd/is_available": { + "/v1/crds/{name}/is-available": { "get": { - "summary": "IsCRDAvailable returns with a hashmap where the keys are the names of\nthe clusters, and the value is a boolean indicating whether given CRD is\ninstalled or not on that cluster.", + "summary": "Check which clusters have a given CRD installed", + "description": "Returns a map where the keys are cluster names, and the value is a boolean indicating\nwhether the given `CustomResourceDefinition` resource is available on that cluster.", "operationId": "Core_IsCRDAvailable", "responses": { "200": { @@ -71,25 +87,24 @@ "parameters": [ { "name": "name", - "in": "query", - "required": false, + "description": "The name of the CustomResourceDefinition to check availability for across clusters. e.g.\n- `imageupdateautomations.image.toolkit.fluxcd.io`\n- `gitopssets.templates.weave.works`", + "in": "path", + "required": true, "type": "string" } - ], - "tags": [ - "Core" ] } }, - "/v1/events": { + "/v1/feature-flags": { "get": { - "summary": "ListEvents returns with a list of events", - "operationId": "Core_ListEvents", + "summary": "Get feature flags", + "description": "Return infomation about what features and configuration options are enabled on the server.\n\nNew features are sometimes hidden behind feature flags. Other features (e.g. OIDC) can be enabled/disabled.", + "operationId": "Core_GetFeatureFlags", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1ListEventsResponse" + "$ref": "#/definitions/v1GetFeatureFlagsResponse" } }, "default": { @@ -98,47 +113,19 @@ "$ref": "#/definitions/rpcStatus" } } - }, - "parameters": [ - { - "name": "involvedObject.kind", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "involvedObject.name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "involvedObject.namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "involvedObject.clusterName", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] + } } }, - "/v1/featureflags": { + "/v1/flux/crds": { "get": { - "summary": "GetFeatureFlags returns configuration information about the server", - "operationId": "Core_GetFeatureFlags", + "summary": "Lists the Flux CRDs across all clusters", + "description": "Determine which flux CRDs are installed on which clusters and at what version.", + "operationId": "Core_ListFluxCrds", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1GetFeatureFlagsResponse" + "$ref": "#/definitions/v1ListFluxCrdsResponse" } }, "default": { @@ -147,20 +134,19 @@ "$ref": "#/definitions/rpcStatus" } } - }, - "tags": [ - "Core" - ] + } } }, - "/v1/flux_crds": { + "/v1/flux/deployments": { "get": { - "operationId": "Core_ListFluxCrds", + "summary": "Lists the Flux runtime deployments across all clusters", + "description": "Determine which controllers are installed, their image versions, status, etc.", + "operationId": "Core_ListFluxRuntimeObjects", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1ListFluxCrdsResponse" + "$ref": "#/definitions/v1ListFluxRuntimeObjectsResponse" } }, "default": { @@ -169,29 +155,19 @@ "$ref": "#/definitions/rpcStatus" } } - }, - "parameters": [ - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] + } } }, - "/v1/flux_runtime_objects": { + "/v1/namespaces/{namespace}/objects/{kind}/{name}": { "get": { - "summary": "ListFluxRuntimeObjects lists the flux runtime deployments from a cluster.", - "operationId": "Core_ListFluxRuntimeObjects", + "summary": "Get details of an object", + "description": "Kind is used as the primary identifier rather than GroupVersionKind\n\nSupported kinds are:\n\n - some of the base Kubernetes groups including core (e.g. `ConfigMap`) and apps (e.g. `Deployment`)\n - All the of the Flux Custom Resource kinds e.g. (`GitRepository`, `HelmRelease`, `Kustomization`, `ImageAutomation`)\n - If using enterprise, `GitOpsSet` and `AutomatedClusterDiscovery` are also available", + "operationId": "Core_GetObject", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1ListFluxRuntimeObjectsResponse" + "$ref": "#/definitions/v1GetObjectResponse" } }, "default": { @@ -204,8 +180,20 @@ "parameters": [ { "name": "namespace", - "in": "query", - "required": false, + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, "type": "string" }, { @@ -216,18 +204,20 @@ } ], "tags": [ - "Core" + "objects" ] } }, - "/v1/inventory": { + "/v1/namespaces/{namespace}/objects/{kind}/{name}/events": { "get": { - "operationId": "Core_GetInventory", + "summary": "List events for an object", + "description": "Kind is used as the primary identifier rather than GroupVersionKind\n\nSupported kinds are:\n\n - some of the base Kubernetes groups including core (e.g. `ConfigMap`) and apps (e.g. `Deployment`)\n - All the of the Flux Custom Resource kinds e.g. (`GitRepository`, `HelmRelease`, `Kustomization`, `ImageAutomation`)\n - If using enterprise, `GitOpsSet` and `AutomatedClusterDiscovery` are also available", + "operationId": "Core_ListEvents", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1GetInventoryResponse" + "$ref": "#/definitions/v1ListEventsResponse" } }, "default": { @@ -239,21 +229,21 @@ }, "parameters": [ { - "name": "kind", - "in": "query", - "required": false, + "name": "namespace", + "in": "path", + "required": true, "type": "string" }, { - "name": "name", - "in": "query", - "required": false, + "name": "kind", + "in": "path", + "required": true, "type": "string" }, { - "name": "namespace", - "in": "query", - "required": false, + "name": "name", + "in": "path", + "required": true, "type": "string" }, { @@ -261,28 +251,23 @@ "in": "query", "required": false, "type": "string" - }, - { - "name": "withChildren", - "in": "query", - "required": false, - "type": "boolean" } ], "tags": [ - "Core" + "objects" ] } }, - "/v1/namespace/flux": { - "post": { - "summary": "GetFluxNamespace returns with a namespace with a specific label.", - "operationId": "Core_GetFluxNamespace", + "/v1/namespaces/{namespace}/objects/{kind}/{name}/inventory": { + "get": { + "summary": "Get the inventory of an object", + "description": "Look up the inventory of a given object. The inventory is a list of\nobjects that were created as a result of reconciling the given object.\n\nThe response includes the full kubernetes resource for each inventory item.", + "operationId": "Core_GetInventory", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1GetFluxNamespaceResponse" + "$ref": "#/definitions/v1GetInventoryResponse" } }, "default": { @@ -294,94 +279,47 @@ }, "parameters": [ { - "name": "body", - "in": "body", + "name": "namespace", + "in": "path", "required": true, - "schema": { - "$ref": "#/definitions/v1GetFluxNamespaceRequest" - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/v1/namespaces": { - "get": { - "summary": "ListNamespaces returns with the list of available namespaces.", - "operationId": "Core_ListNamespaces", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1ListNamespacesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "tags": [ - "Core" - ] - } - }, - "/v1/object/{name}": { - "get": { - "summary": "GetObject gets data about a single primary object from a cluster.", - "operationId": "Core_GetObject", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1GetObjectResponse" - } + "type": "string" }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "parameters": [ { - "name": "name", + "name": "kind", + "description": "Supported kinds are `Kustomization` and `HelmRelease`\nIf using Enterprise, `GitOpsSet` and `AutomatedClusterDiscovery` are also supported", "in": "path", "required": true, "type": "string" }, { - "name": "namespace", - "in": "query", - "required": false, + "name": "name", + "in": "path", + "required": true, "type": "string" }, { - "name": "kind", + "name": "clusterName", "in": "query", "required": false, "type": "string" }, { - "name": "clusterName", + "name": "withChildren", + "description": "If true, the children of certain resources like Deployments and Replicasets will be included in the response", "in": "query", "required": false, - "type": "string" + "type": "boolean" } ], "tags": [ - "Core" + "objects" ] } }, - "/v1/objects": { - "post": { - "summary": "ListObjects gets data about primary objects.", + "/v1/objects/{kind}": { + "get": { + "summary": "List objects of kind across all clusters", + "description": "Kind is used as the primary identifier rather than GroupVersionKind\n\nSupported kinds are:\n\n - some of the base Kubernetes groups including core (e.g. `ConfigMap`) and apps (e.g. `Deployment`)\n - All the of the Flux Custom Resource kinds e.g. (`GitRepository`, `HelmRelease`, `Kustomization`, `ImageAutomation`)\n - If using enterprise, `GitOpsSet` and `AutomatedClusterDiscovery` are also available", "operationId": "Core_ListObjects", "responses": { "200": { @@ -399,22 +337,39 @@ }, "parameters": [ { - "name": "body", - "in": "body", + "name": "kind", + "in": "path", "required": true, - "schema": { - "$ref": "#/definitions/v1ListObjectsRequest" - } + "type": "string" + }, + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "labelSelector", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ - "Core" + "objects" ] } }, "/v1/policies": { "get": { - "summary": "ListPolicies list policies available on the cluster", + "summary": "List policies available across all clusters", + "description": "This will return all the `Policy` custom resources that are available across all clusters.", "operationId": "Core_ListPolicies", "responses": { "200": { @@ -431,14 +386,9 @@ } }, "parameters": [ - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, { "name": "pagination.pageSize", + "description": "controls the number of results per page from each cluster", "in": "query", "required": false, "type": "integer", @@ -446,19 +396,21 @@ }, { "name": "pagination.pageToken", + "description": "a composite token used to retrieve the next page of results across all clusters\nthis is availble in the response as `nextPageToken`", "in": "query", "required": false, "type": "string" } ], "tags": [ - "Core" + "policy" ] } }, - "/v1/policies/{policyName}": { + "/v1/policies/{name}": { "get": { - "summary": "GetPolicy gets a policy by name", + "summary": "Gets a policy", + "description": "Get a `Policy` custom resource by name and cluster.", "operationId": "Core_GetPolicy", "responses": { "200": { @@ -476,26 +428,29 @@ }, "parameters": [ { - "name": "policyName", + "name": "name", + "description": "The name of the `Policy` resource to retrieve.", "in": "path", "required": true, "type": "string" }, { "name": "clusterName", + "description": "The name of the cluster to retrieve the policy from. Default is the cluster running the API server.", "in": "query", "required": false, "type": "string" } ], "tags": [ - "Core" + "policy" ] } }, - "/v1/policyvalidations": { - "post": { - "summary": "ListPolicyValidations lists policy validations", + "/v1/policy-validations": { + "get": { + "summary": "Lists policy validations across all clusters", + "description": "Can be filtered by a few different properties of the `involvedObject`", "operationId": "Core_ListPolicyValidations", "responses": { "200": { @@ -513,22 +468,72 @@ }, "parameters": [ { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1ListPolicyValidationsRequest" - } + "name": "clusterName", + "description": "filter for validations on a particular cluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "pagination.pageSize", + "description": "controls the number of results per page from each cluster", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pagination.pageToken", + "description": "a composite token used to retrieve the next page of results across all clusters\nthis is availble in the response as `nextPageToken`", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "application", + "description": "filter by `involvedObject.name`", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "description": "filter by `involvedObject.namespace`", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "kind", + "description": "filter by `involvedObject.kind`", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "policyId", + "description": "filter by id of the policy that triggered the validation", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "validationType", + "description": "filter for validation types of `Admission` or `Audit`", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ - "Core" + "policy" ] } }, - "/v1/policyvalidations/{validationId}": { + "/v1/policy-validations/{validationId}": { "get": { - "summary": "GetPolicyValidation gets a policy validation by id", + "summary": "Gets a policy validation", + "description": "Given a specific validation id, returns the validation details.", "operationId": "Core_GetPolicyValidation", "responses": { "200": { @@ -547,6 +552,7 @@ "parameters": [ { "name": "validationId", + "description": "The id of the validation.\nThis is often obtained from:\n- from the list policy validations endpoint.\n- from `Event` objects raised by the policy-agent", "in": "path", "required": true, "type": "string" @@ -565,13 +571,14 @@ } ], "tags": [ - "Core" + "policy" ] } }, "/v1/reconciled_objects": { "post": { - "summary": "GetReconciledObjects returns a list of objects that were created\nas a result of reconciling a Flux automation.\nThis list is derived by looking at the Kustomization or HelmRelease\nspecified in the request body.", + "summary": "Get the list of objects that were created as a result of reconciling a Flux automation.", + "description": "Use /inventory instead", "operationId": "Core_GetReconciledObjects", "responses": { "200": { @@ -598,13 +605,15 @@ } ], "tags": [ - "Core" - ] + "internal" + ], + "deprecated": true } }, - "/v1/session_logs": { - "post": { - "summary": "GetSessionLogs returns the logs for a given session", + "/v1/session-logs": { + "get": { + "summary": "Get the logs for a GitOpsRun session", + "description": "The GitOpsRun feature has been removed", "operationId": "Core_GetSessionLogs", "responses": { "200": { @@ -622,22 +631,46 @@ }, "parameters": [ { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1GetSessionLogsRequest" - } + "name": "sessionNamespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sessionId", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "token", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "logSourceFilter", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "logLevelFilter", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ - "Core" - ] + "internal" + ], + "deprecated": true } }, "/v1/suspend": { - "post": { - "summary": "ToggleSuspendResource suspends or resumes a flux object.", + "patch": { + "summary": "Suspend or resume reconciling multiple Flux objects", + "description": "Provide a list of objects to be suspended or resumed. Objects are identified by their kind, name, namespace and cluster.\n\nSupported kinds are:\n\n- any Flux custom resource (e.g. `GitRepository` or `HelmRelease`)\n- Enterprise objects that also support this pattern: `GitOpsSet` and `AutomatedClusterDiscovery`", "operationId": "Core_ToggleSuspendResource", "responses": { "200": { @@ -664,13 +697,14 @@ } ], "tags": [ - "Core" + "objects" ] } }, "/v1/sync": { - "post": { - "summary": "SyncResource forces a reconciliation of a Flux resource", + "patch": { + "summary": "Trigger reconciliation of multiple Flux objects", + "description": "Provide a list of objects to be reconciled. Objects are identified by their kind, name, namespace and cluster.\n\nSupported kinds are:\n\n- all Flux custom resources (e.g. `GitRepository` or `HelmRelease`)\n- Enterprise objects that also support this pattern: `GitOpsSet` and `AutomatedClusterDiscovery`\n\nif `withSource` is true the dependent Source resource will be synced too.\nSyncing a Kustomization `withSource` will sync an attached GitRepository.", "operationId": "Core_SyncFluxObject", "responses": { "200": { @@ -697,13 +731,14 @@ } ], "tags": [ - "Core" + "objects" ] } }, "/v1/version": { "get": { - "summary": "GetVersion returns version information about the server", + "summary": "Get version information about the server", + "description": "Version information about weave-gitops including when the runninng server was built, the git commit and the git tag.\nAlso return the kubernetes version of the cluster running weave-gitops.", "operationId": "Core_GetVersion", "responses": { "200": { @@ -718,10 +753,7 @@ "$ref": "#/definitions/rpcStatus" } } - }, - "tags": [ - "Core" - ] + } } } }, @@ -746,7 +778,7 @@ } }, "additionalProperties": {}, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\nExample 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\nExample 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", @@ -761,6 +793,7 @@ "details": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/protobufAny" } } @@ -832,6 +865,7 @@ "conditions": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1Condition" } }, @@ -871,13 +905,16 @@ "type": "string" }, "timestamp": { - "type": "string" + "type": "string", + "description": "The LastTimestamp of the event." }, "component": { - "type": "string" + "type": "string", + "description": "The Source Component." }, "host": { - "type": "string" + "type": "string", + "description": "The Source Host." }, "name": { "type": "string" @@ -910,6 +947,7 @@ "objects": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1Object" } } @@ -917,6 +955,12 @@ }, "v1GetFeatureFlagsResponse": { "type": "object", + "example": { + "flags": { + "WEAVE_GITOPS_FEATURE_TENANCY": "true", + "OIDC_AUTH": "true" + } + }, "properties": { "flags": { "type": "object", @@ -926,23 +970,13 @@ } } }, - "v1GetFluxNamespaceRequest": { - "type": "object" - }, - "v1GetFluxNamespaceResponse": { - "type": "object", - "properties": { - "name": { - "type": "string" - } - } - }, "v1GetInventoryResponse": { "type": "object", "properties": { "entries": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1InventoryEntry" } } @@ -990,6 +1024,7 @@ "kinds": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1GroupVersionKind" } }, @@ -1004,37 +1039,19 @@ "objects": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1Object" } } } }, - "v1GetSessionLogsRequest": { - "type": "object", - "properties": { - "sessionNamespace": { - "type": "string" - }, - "sessionId": { - "type": "string" - }, - "token": { - "type": "string" - }, - "logSourceFilter": { - "type": "string" - }, - "logLevelFilter": { - "type": "string" - } - } - }, "v1GetSessionLogsResponse": { "type": "object", "properties": { "logs": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1LogEntry" } }, @@ -1102,13 +1119,16 @@ "type": "object", "properties": { "payload": { - "type": "string" + "type": "string", + "description": "A JSON string containing the complete Kubernetes object." }, "tenant": { - "type": "string" + "type": "string", + "description": "The tenant the object belongs to if any." }, "clusterName": { - "type": "string" + "type": "string", + "description": "The cluster the object is deployed to." }, "health": { "$ref": "#/definitions/v1HealthStatus" @@ -1116,13 +1136,20 @@ "children": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1InventoryEntry" - } + }, + "description": "If the object is a parent e.g. `ReplicaSet` -\u003e `Pod`\nThen the children are included here with their payload, clusterName etc\nThis a recursive structure." } } }, "v1IsCRDAvailableResponse": { "type": "object", + "example": { + "clusters": { + "clusters-1": true + } + }, "properties": { "clusters": { "type": "object", @@ -1144,7 +1171,8 @@ "message": { "type": "string" } - } + }, + "description": "Queries are made to each cluster. If its a namespaced query then a query\nis made per namespace too. If an error occurs for any specific query the error\nmessage is included here alongside the results for the queries that succeeded." }, "v1ListEventsResponse": { "type": "object", @@ -1152,6 +1180,7 @@ "events": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1Event" } } @@ -1163,12 +1192,14 @@ "crds": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1Crd" } }, "errors": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1ListError" } } @@ -1180,66 +1211,40 @@ "deployments": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1Deployment" } }, "errors": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1ListError" } } } }, - "v1ListNamespacesResponse": { - "type": "object", - "properties": { - "namespaces": { - "type": "array", - "items": { - "$ref": "#/definitions/v1Namespace" - } - } - } - }, - "v1ListObjectsRequest": { - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "kind": { - "type": "string" - }, - "clusterName": { - "type": "string" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, "v1ListObjectsResponse": { "type": "object", "properties": { "objects": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1Object" } }, "errors": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1ListError" } }, "searchedNamespaces": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1ClusterNamespaceList" } } @@ -1251,6 +1256,7 @@ "policies": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1PolicyObj" } }, @@ -1264,43 +1270,19 @@ "errors": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1ListError" } } } }, - "v1ListPolicyValidationsRequest": { - "type": "object", - "properties": { - "clusterName": { - "type": "string" - }, - "pagination": { - "$ref": "#/definitions/v1Pagination" - }, - "application": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "kind": { - "type": "string" - }, - "policyId": { - "type": "string" - }, - "validationType": { - "type": "string" - } - } - }, "v1ListPolicyValidationsResponse": { "type": "object", "properties": { "violations": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1PolicyValidation" } }, @@ -1314,6 +1296,7 @@ "errors": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1ListError" } } @@ -1339,55 +1322,36 @@ } } }, - "v1Namespace": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "status": { - "type": "string" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "clusterName": { - "type": "string" - } - } - }, "v1Object": { "type": "object", "properties": { "payload": { - "type": "string" + "type": "string", + "description": "A JSON string containing the complete Kubernetes object." }, "clusterName": { - "type": "string" + "type": "string", + "description": "The cluster the object is deployed to." }, "tenant": { - "type": "string" + "type": "string", + "description": "The tenant the object belongs to if any." }, "uid": { - "type": "string" + "type": "string", + "description": "The Kubernetes UID of the object." }, "inventory": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1GroupVersionKind" - } + }, + "description": "DEPRECATED, use /inventory endpoint." }, "info": { - "type": "string" + "type": "string", + "description": "DEPRECATED, GitOpsRun field." }, "health": { "$ref": "#/definitions/v1HealthStatus" @@ -1416,10 +1380,12 @@ "properties": { "pageSize": { "type": "integer", - "format": "int32" + "format": "int32", + "title": "controls the number of results per page from each cluster" }, "pageToken": { - "type": "string" + "type": "string", + "title": "a composite token used to retrieve the next page of results across all clusters\nthis is availble in the response as `nextPageToken`" } } }, @@ -1456,6 +1422,7 @@ "standards": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1PolicyStandard" } }, @@ -1465,6 +1432,7 @@ "parameters": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1PolicyParam" } }, @@ -1543,6 +1511,7 @@ "labels": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1PolicyTargetLabel" } }, @@ -1602,6 +1571,7 @@ "occurrences": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1PolicyValidationOccurrence" } }, @@ -1611,6 +1581,7 @@ "parameters": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1PolicyValidationParam" } } @@ -1650,8 +1621,10 @@ "objects": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1ObjectRef" - } + }, + "description": "The list of objects to sync." }, "withSource": { "type": "boolean" @@ -1667,14 +1640,18 @@ "objects": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/v1ObjectRef" - } + }, + "description": "The list of objects to suspend or resume." }, "suspend": { - "type": "boolean" + "type": "boolean", + "description": "Suspend or resume the resources." }, "comment": { - "type": "string" + "type": "string", + "description": "Include a comment about why the resources are being suspended." } } }, diff --git a/api/core/core.swagger.md b/api/core/core.swagger.md new file mode 100644 index 0000000000..444cf29794 --- /dev/null +++ b/api/core/core.swagger.md @@ -0,0 +1,942 @@ +# Weave GitOps Core API +The API handles operations for Weave GitOps Core + +## Version: 0.1 + +--- +## Core + +### /v1/child_objects + +#### POST +##### Summary + +GetChildObjects returns the children of a given object, +specified by a GroupVersionKind. +Not all Kubernets objects have children. For example, a Deployment +has a child ReplicaSet, but a Service has no child objects. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| body | body | | Yes | [v1GetChildObjectsRequest](#v1getchildobjectsrequest) | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1GetChildObjectsResponse](#v1getchildobjectsresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/crd/is_available + +#### GET +##### Summary + +IsCRDAvailable returns with a hashmap where the keys are the names of +the clusters, and the value is a boolean indicating whether given CRD is +installed or not on that cluster. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| name | query | | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1IsCRDAvailableResponse](#v1iscrdavailableresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/events + +#### GET +##### Summary + +ListEvents returns with a list of events + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| involvedObject.kind | query | | No | string | +| involvedObject.name | query | | No | string | +| involvedObject.namespace | query | | No | string | +| involvedObject.clusterName | query | | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1ListEventsResponse](#v1listeventsresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/featureflags + +#### GET +##### Summary + +GetFeatureFlags returns configuration information about the server + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1GetFeatureFlagsResponse](#v1getfeatureflagsresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/flux_crds + +#### GET +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| clusterName | query | | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1ListFluxCrdsResponse](#v1listfluxcrdsresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/flux_runtime_objects + +#### GET +##### Summary + +ListFluxRuntimeObjects lists the flux runtime deployments from a cluster. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| namespace | query | | No | string | +| clusterName | query | | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1ListFluxRuntimeObjectsResponse](#v1listfluxruntimeobjectsresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/inventory + +#### GET +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| kind | query | | No | string | +| name | query | | No | string | +| namespace | query | | No | string | +| clusterName | query | | No | string | +| withChildren | query | | No | boolean | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1GetInventoryResponse](#v1getinventoryresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/namespace/flux + +#### POST +##### Summary + +GetFluxNamespace returns with a namespace with a specific label. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| body | body | | Yes | [v1GetFluxNamespaceRequest](#v1getfluxnamespacerequest) | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1GetFluxNamespaceResponse](#v1getfluxnamespaceresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/namespaces + +#### GET +##### Summary + +ListNamespaces returns with the list of available namespaces. + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1ListNamespacesResponse](#v1listnamespacesresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/object/{name} + +#### GET +##### Summary + +GetObject gets data about a single primary object from a cluster. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| name | path | | Yes | string | +| namespace | query | | No | string | +| kind | query | | No | string | +| clusterName | query | | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1GetObjectResponse](#v1getobjectresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/objects + +#### POST +##### Summary + +ListObjects gets data about primary objects. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| body | body | | Yes | [v1ListObjectsRequest](#v1listobjectsrequest) | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1ListObjectsResponse](#v1listobjectsresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/policies + +#### GET +##### Summary + +ListPolicies list policies available on the cluster + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| clusterName | query | | No | string | +| pagination.pageSize | query | | No | integer | +| pagination.pageToken | query | | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1ListPoliciesResponse](#v1listpoliciesresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/policies/{policyName} + +#### GET +##### Summary + +GetPolicy gets a policy by name + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| policyName | path | | Yes | string | +| clusterName | query | | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1GetPolicyResponse](#v1getpolicyresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/policyvalidations + +#### POST +##### Summary + +ListPolicyValidations lists policy validations + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| body | body | | Yes | [v1ListPolicyValidationsRequest](#v1listpolicyvalidationsrequest) | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1ListPolicyValidationsResponse](#v1listpolicyvalidationsresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/policyvalidations/{validationId} + +#### GET +##### Summary + +GetPolicyValidation gets a policy validation by id + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| validationId | path | | Yes | string | +| clusterName | query | | No | string | +| validationType | query | | No | string | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1GetPolicyValidationResponse](#v1getpolicyvalidationresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/reconciled_objects + +#### POST +##### Summary + +GetReconciledObjects returns a list of objects that were created +as a result of reconciling a Flux automation. +This list is derived by looking at the Kustomization or HelmRelease +specified in the request body. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| body | body | | Yes | [v1GetReconciledObjectsRequest](#v1getreconciledobjectsrequest) | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1GetReconciledObjectsResponse](#v1getreconciledobjectsresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/session_logs + +#### POST +##### Summary + +GetSessionLogs returns the logs for a given session + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| body | body | | Yes | [v1GetSessionLogsRequest](#v1getsessionlogsrequest) | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1GetSessionLogsResponse](#v1getsessionlogsresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/suspend + +#### POST +##### Summary + +ToggleSuspendResource suspends or resumes a flux object. + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| body | body | | Yes | [v1ToggleSuspendResourceRequest](#v1togglesuspendresourcerequest) | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1ToggleSuspendResourceResponse](#v1togglesuspendresourceresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/sync + +#### POST +##### Summary + +SyncResource forces a reconciliation of a Flux resource + +##### Parameters + +| Name | Located in | Description | Required | Schema | +| ---- | ---------- | ----------- | -------- | ------ | +| body | body | | Yes | [v1SyncFluxObjectRequest](#v1syncfluxobjectrequest) | + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1SyncFluxObjectResponse](#v1syncfluxobjectresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +### /v1/version + +#### GET +##### Summary + +GetVersion returns version information about the server + +##### Responses + +| Code | Description | Schema | +| ---- | ----------- | ------ | +| 200 | A successful response. | [v1GetVersionResponse](#v1getversionresponse) | +| default | An unexpected error response. | [rpcStatus](#rpcstatus) | + +--- +### Models + +#### CrdName + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| plural | string | | No | +| group | string | | No | + +#### protobufAny + +`Any` contains an arbitrary serialized protocol buffer message along with a +URL that describes the type of the serialized message. + +Protobuf library provides support to pack/unpack Any values in the form +of utility functions or additional generated methods of the Any type. + +Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + +Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := anypb.New(foo) + if err != nil { + ... + } + ... + foo := &pb.Foo{} + if err := any.UnmarshalTo(foo); err != nil { + ... + } + +The pack methods provided by protobuf library will by default use +'type.googleapis.com/full.type.name' as the type URL and the unpack +methods only use the fully qualified type name after the last '/' +in the type URL, for example "foo.bar.com/x/y.z" will yield type +name "y.z". + +JSON +==== +The JSON representation of an `Any` value uses the regular +representation of the deserialized, embedded message, with an +additional field `@type` which contains the type URL. Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + +If the embedded message type is well-known and has a custom JSON +representation, that representation will be embedded adding a field +`value` which holds the custom JSON in addition to the `@type` +field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| @type | string | A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one "/" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading "." is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: *If no scheme is provided, `https` is assumed.* An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. | No | + +#### rpcStatus + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| code | integer | | No | +| message | string | | No | +| details | [ [protobufAny](#protobufany) ] | | No | + +#### v1ClusterNamespaceList + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| clusterName | string | | No | +| namespaces | [ string ] | | No | + +#### v1Condition + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| type | string | | No | +| status | string | | No | +| reason | string | | No | +| message | string | | No | +| timestamp | string | | No | + +#### v1Crd + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| name | [CrdName](#crdname) | | No | +| version | string | | No | +| kind | string | | No | +| clusterName | string | | No | +| uid | string | | No | + +#### v1Deployment + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| name | string | | No | +| namespace | string | | No | +| conditions | [ [v1Condition](#v1condition) ] | | No | +| images | [ string ] | | No | +| suspended | boolean | | No | +| clusterName | string | | No | +| uid | string | | No | +| labels | object | | No | + +#### v1Event + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| type | string | | No | +| reason | string | | No | +| message | string | | No | +| timestamp | string | | No | +| component | string | | No | +| host | string | | No | +| name | string | | No | +| uid | string | | No | + +#### v1GetChildObjectsRequest + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| groupVersionKind | [v1GroupVersionKind](#v1groupversionkind) | | No | +| namespace | string | | No | +| parentUid | string | | No | +| clusterName | string | | No | + +#### v1GetChildObjectsResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| objects | [ [v1Object](#v1object) ] | | No | + +#### v1GetFeatureFlagsResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| flags | object | | No | + +#### v1GetFluxNamespaceRequest + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| v1GetFluxNamespaceRequest | object | | | + +#### v1GetFluxNamespaceResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| name | string | | No | + +#### v1GetInventoryResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| entries | [ [v1InventoryEntry](#v1inventoryentry) ] | | No | + +#### v1GetObjectResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| object | [v1Object](#v1object) | | No | + +#### v1GetPolicyResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| policy | [v1PolicyObj](#v1policyobj) | | No | +| clusterName | string | | No | + +#### v1GetPolicyValidationResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| validation | [v1PolicyValidation](#v1policyvalidation) | | No | + +#### v1GetReconciledObjectsRequest + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| automationName | string | | No | +| namespace | string | | No | +| automationKind | string | | No | +| kinds | [ [v1GroupVersionKind](#v1groupversionkind) ] | | No | +| clusterName | string | | No | + +#### v1GetReconciledObjectsResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| objects | [ [v1Object](#v1object) ] | | No | + +#### v1GetSessionLogsRequest + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| sessionNamespace | string | | No | +| sessionId | string | | No | +| token | string | | No | +| logSourceFilter | string | | No | +| logLevelFilter | string | | No | + +#### v1GetSessionLogsResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| logs | [ [v1LogEntry](#v1logentry) ] | | No | +| nextToken | string | | No | +| error | string | | No | +| logSources | [ string ] | | No | + +#### v1GetVersionResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| semver | string | | No | +| commit | string | | No | +| branch | string | | No | +| buildTime | string | | No | +| kubeVersion | string | | No | + +#### v1GroupVersionKind + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| group | string | | No | +| kind | string | | No | +| version | string | | No | + +#### v1HealthStatus + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| status | string | | No | +| message | string | | No | + +#### v1InventoryEntry + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| payload | string | | No | +| tenant | string | | No | +| clusterName | string | | No | +| health | [v1HealthStatus](#v1healthstatus) | | No | +| children | [ [v1InventoryEntry](#v1inventoryentry) ] | | No | + +#### v1IsCRDAvailableResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| clusters | object | | No | + +#### v1ListError + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| clusterName | string | | No | +| namespace | string | | No | +| message | string | | No | + +#### v1ListEventsResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| events | [ [v1Event](#v1event) ] | | No | + +#### v1ListFluxCrdsResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| crds | [ [v1Crd](#v1crd) ] | | No | +| errors | [ [v1ListError](#v1listerror) ] | | No | + +#### v1ListFluxRuntimeObjectsResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| deployments | [ [v1Deployment](#v1deployment) ] | | No | +| errors | [ [v1ListError](#v1listerror) ] | | No | + +#### v1ListNamespacesResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| namespaces | [ [v1Namespace](#v1namespace) ] | | No | + +#### v1ListObjectsRequest + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| namespace | string | | No | +| kind | string | | No | +| clusterName | string | | No | +| labels | object | | No | + +#### v1ListObjectsResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| objects | [ [v1Object](#v1object) ] | | No | +| errors | [ [v1ListError](#v1listerror) ] | | No | +| searchedNamespaces | [ [v1ClusterNamespaceList](#v1clusternamespacelist) ] | | No | + +#### v1ListPoliciesResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| policies | [ [v1PolicyObj](#v1policyobj) ] | | No | +| total | integer | | No | +| nextPageToken | string | | No | +| errors | [ [v1ListError](#v1listerror) ] | | No | + +#### v1ListPolicyValidationsRequest + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| clusterName | string | | No | +| pagination | [v1Pagination](#v1pagination) | | No | +| application | string | | No | +| namespace | string | | No | +| kind | string | | No | +| policyId | string | | No | +| validationType | string | | No | + +#### v1ListPolicyValidationsResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| violations | [ [v1PolicyValidation](#v1policyvalidation) ] | | No | +| total | integer | | No | +| nextPageToken | string | | No | +| errors | [ [v1ListError](#v1listerror) ] | | No | + +#### v1LogEntry + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| timestamp | string | | No | +| source | string | | No | +| level | string | | No | +| message | string | | No | +| sortingKey | string | | No | + +#### v1Namespace + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| name | string | | No | +| status | string | | No | +| annotations | object | | No | +| labels | object | | No | +| clusterName | string | | No | + +#### v1Object + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| payload | string | | No | +| clusterName | string | | No | +| tenant | string | | No | +| uid | string | | No | +| inventory | [ [v1GroupVersionKind](#v1groupversionkind) ] | | No | +| info | string | | No | +| health | [v1HealthStatus](#v1healthstatus) | | No | + +#### v1ObjectRef + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| kind | string | | No | +| name | string | | No | +| namespace | string | | No | +| clusterName | string | | No | + +#### v1Pagination + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| pageSize | integer | | No | +| pageToken | string | | No | + +#### v1PolicyObj + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| name | string | | No | +| id | string | | No | +| code | string | | No | +| description | string | | No | +| howToSolve | string | | No | +| category | string | | No | +| tags | [ string ] | | No | +| severity | string | | No | +| standards | [ [v1PolicyStandard](#v1policystandard) ] | | No | +| gitCommit | string | | No | +| parameters | [ [v1PolicyParam](#v1policyparam) ] | | No | +| targets | [v1PolicyTargets](#v1policytargets) | | No | +| createdAt | string | | No | +| clusterName | string | | No | +| tenant | string | | No | +| modes | [ string ] | | No | + +#### v1PolicyParam + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| name | string | | No | +| type | string | | No | +| value | [protobufAny](#protobufany) | | No | +| required | boolean | | No | + +#### v1PolicyStandard + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| id | string | | No | +| controls | [ string ] | | No | + +#### v1PolicyTargetLabel + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| values | object | | No | + +#### v1PolicyTargets + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| kinds | [ string ] | | No | +| labels | [ [v1PolicyTargetLabel](#v1policytargetlabel) ] | | No | +| namespaces | [ string ] | | No | + +#### v1PolicyValidation + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| id | string | | No | +| message | string | | No | +| clusterId | string | | No | +| category | string | | No | +| severity | string | | No | +| createdAt | string | | No | +| entity | string | | No | +| entityKind | string | | No | +| namespace | string | | No | +| violatingEntity | string | | No | +| description | string | | No | +| howToSolve | string | | No | +| name | string | | No | +| clusterName | string | | No | +| occurrences | [ [v1PolicyValidationOccurrence](#v1policyvalidationoccurrence) ] | | No | +| policyId | string | | No | +| parameters | [ [v1PolicyValidationParam](#v1policyvalidationparam) ] | | No | + +#### v1PolicyValidationOccurrence + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| message | string | | No | + +#### v1PolicyValidationParam + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| name | string | | No | +| type | string | | No | +| value | [protobufAny](#protobufany) | | No | +| required | boolean | | No | +| configRef | string | | No | + +#### v1SyncFluxObjectRequest + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| objects | [ [v1ObjectRef](#v1objectref) ] | | No | +| withSource | boolean | | No | + +#### v1SyncFluxObjectResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| v1SyncFluxObjectResponse | object | | | + +#### v1ToggleSuspendResourceRequest + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| objects | [ [v1ObjectRef](#v1objectref) ] | | No | +| suspend | boolean | | No | + +#### v1ToggleSuspendResourceResponse + +| Name | Type | Description | Required | +| ---- | ---- | ----------- | -------- | +| v1ToggleSuspendResourceResponse | object | | | diff --git a/api/core/doc/object-kind.md b/api/core/doc/object-kind.md new file mode 100644 index 0000000000..ac428b8ea5 --- /dev/null +++ b/api/core/doc/object-kind.md @@ -0,0 +1,7 @@ +Kind is used as the primary identifier rather than GroupVersionKind + +Supported kinds are: + + - some of the base Kubernetes groups including core (e.g. `ConfigMap`) and apps (e.g. `Deployment`) + - All the of the Flux Custom Resource kinds e.g. (`GitRepository`, `HelmRelease`, `Kustomization`, `ImageAutomation`) + - If using enterprise, `GitOpsSet` and `AutomatedClusterDiscovery` are also available diff --git a/api/core/types.proto b/api/core/types.proto index c9abf8396c..21de38e766 100644 --- a/api/core/types.proto +++ b/api/core/types.proto @@ -47,7 +47,7 @@ message ObjectRef { string kind = 1; string name = 2; string namespace = 3; - string clusterName = 4; + string cluster_name = 4; } message Condition { @@ -83,32 +83,44 @@ message HealthStatus { } message InventoryEntry { + // A JSON string containing the complete Kubernetes object. string payload = 1; + // The tenant the object belongs to if any. string tenant = 2; - string clusterName = 3; + // The cluster the object is deployed to. + string cluster_name = 3; HealthStatus health = 4; + // If the object is a parent e.g. `ReplicaSet` -> `Pod` + // Then the children are included here with their payload, clusterName etc + // This a recursive structure. repeated InventoryEntry children = 5; } message Object { - string payload = 1; - string clusterName = 2; - string tenant = 3; - string uid = 4; - repeated GroupVersionKind inventory = 5; - string info = 6; - HealthStatus health = 7; + // A JSON string containing the complete Kubernetes object. + string payload = 1; + // The cluster the object is deployed to. + string cluster_name = 2; + // The tenant the object belongs to if any. + string tenant = 3; + // The Kubernetes UID of the object. + string uid = 4; + // DEPRECATED, use /inventory endpoint. + repeated GroupVersionKind inventory = 5; + // DEPRECATED, GitOpsRun field. + string info = 6; + HealthStatus health = 7; } message Deployment { - string name = 1; - string namespace = 2; - repeated Condition conditions = 3; - repeated string images = 4; - bool suspended = 5; - string clusterName = 6; - string uid = 7; - map labels = 8; + string name = 1; + string namespace = 2; + repeated Condition conditions = 3; + repeated string images = 4; + bool suspended = 5; + string cluster_name = 6; + string uid = 7; + map labels = 8; } message Crd { @@ -116,11 +128,11 @@ message Crd { string plural = 1; string group = 2; } - Name name = 1; - string version = 2; - string kind = 3; - string clusterName = 4; - string uid = 5; + Name name = 1; + string version = 2; + string kind = 3; + string cluster_name = 4; + string uid = 5; } message Namespace { @@ -128,15 +140,18 @@ message Namespace { string status = 2; map annotations = 3; map labels = 4; - string clusterName = 5; + string cluster_name = 5; } message Event { string type = 1; string reason = 2; string message = 3; + // The LastTimestamp of the event. string timestamp = 4; + // The Source Component. string component = 5; + // The Source Host. string host = 6; string name = 7; string uid = 8; diff --git a/api/core/types.swagger.json b/api/core/types.swagger.json index 3bea52f4d3..8248c200b2 100644 --- a/api/core/types.swagger.json +++ b/api/core/types.swagger.json @@ -21,7 +21,7 @@ } }, "additionalProperties": {}, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\nExample 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\nExample 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", @@ -36,6 +36,7 @@ "details": { "type": "array", "items": { + "type": "object", "$ref": "#/definitions/protobufAny" } } diff --git a/api/internal/api/core/core.swagger.json b/api/internal/api/core/core.swagger.json new file mode 100644 index 0000000000..25b8afa5b3 --- /dev/null +++ b/api/internal/api/core/core.swagger.json @@ -0,0 +1,1622 @@ +{ + "swagger": "2.0", + "info": { + "title": "Weave GitOps Core API", + "description": "The API handles operations for Weave GitOps Core", + "version": "0.1" + }, + "tags": [ + { + "name": "Core" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/child_objects": { + "post": { + "summary": "GetChildObjects returns the children of a given object,\nspecified by a GroupVersionKind.\nNot all Kubernets objects have children. For example, a Deployment\nhas a child ReplicaSet, but a Service has no child objects.", + "operationId": "Core_GetChildObjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetChildObjectsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1GetChildObjectsRequest" + } + } + ], + "tags": [ + "Core" + ] + } + }, + "/v1/crds/{name}/is-available": { + "get": { + "summary": "Check which clusters have a given CRD installed", + "description": "Returns a hashmap where the keys are the names of\nthe clusters, and the value is a boolean indicating whether given CRD is\ninstalled or not on that cluster.", + "operationId": "Core_IsCRDAvailable", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1IsCRDAvailableResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Core" + ] + } + }, + "/v1/feature-flags": { + "get": { + "summary": "Get feature flags", + "description": "New features are sometimes hidden behind feature flags. This endpoint\nreturns a list of feature flags and their values.", + "operationId": "Core_GetFeatureFlags", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetFeatureFlagsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Core" + ] + } + }, + "/v1/flux/crds": { + "get": { + "summary": "Lists the Flux CRDs across all clusters", + "description": "Determine which flux CRDs are installed and their versions", + "operationId": "Core_ListFluxCrds", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListFluxCrdsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Core" + ] + } + }, + "/v1/flux/deployments": { + "get": { + "summary": "Lists the Flux runtime deployments across all clusters", + "description": "Determine which controllers are installed, their image versions, status, etc.", + "operationId": "Core_ListFluxRuntimeObjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListFluxRuntimeObjectsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Core" + ] + } + }, + "/v1/namespaces/{namespace}/objects/{kind}/{name}": { + "get": { + "summary": "Get details of an object", + "operationId": "Core_GetObject", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetObjectResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "objects" + ] + } + }, + "/v1/namespaces/{namespace}/objects/{kind}/{name}/events": { + "get": { + "summary": "List events for an object", + "operationId": "Core_ListEvents", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListEventsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "objects" + ] + } + }, + "/v1/namespaces/{namespace}/objects/{kind}/{name}/inventory": { + "get": { + "summary": "Get the inventory of an object", + "description": "Only works for resources that have an inventory e.g. Kustomization,\nHelmRelease, GitOpsSet.", + "operationId": "Core_GetInventory", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetInventoryResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "withChildren", + "in": "query", + "required": false, + "type": "boolean" + } + ], + "tags": [ + "objects" + ] + } + }, + "/v1/objects/{kind}": { + "get": { + "summary": "List objects of kind across all clusters", + "operationId": "Core_ListObjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListObjectsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "kind", + "description": "A flux object kind e.g. `Kustomization` or `GitRepository` etc", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "labelSelector", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "objects" + ] + } + }, + "/v1/policies": { + "get": { + "summary": "List policies available on a cluster", + "operationId": "Core_ListPolicies", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListPoliciesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "pagination.pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pagination.pageToken", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Core" + ] + } + }, + "/v1/policies/{name}": { + "get": { + "summary": "Gets a policy", + "operationId": "Core_GetPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetPolicyResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Core" + ] + } + }, + "/v1/policy-validations": { + "get": { + "summary": "Lists policy validations", + "operationId": "Core_ListPolicyValidations", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListPolicyValidationsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "pagination.pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pagination.pageToken", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "application", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "kind", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "policyId", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "validationType", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Core" + ] + } + }, + "/v1/policy-validations/{validationId}": { + "get": { + "summary": "Gets a policy validation", + "operationId": "Core_GetPolicyValidation", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetPolicyValidationResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "validationId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "validationType", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Core" + ] + } + }, + "/v1/reconciled_objects": { + "post": { + "summary": "GetReconciledObjects returns a list of objects that were created\nas a result of reconciling a Flux automation.\nThis list is derived by looking at the Kustomization or HelmRelease\nspecified in the request body.", + "operationId": "Core_GetReconciledObjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetReconciledObjectsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1GetReconciledObjectsRequest" + } + } + ], + "tags": [ + "Core" + ] + } + }, + "/v1/session-logs": { + "get": { + "summary": "Get the logs for a GitOpsRun session", + "operationId": "Core_GetSessionLogs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetSessionLogsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "sessionNamespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sessionId", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "token", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "logSourceFilter", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "logLevelFilter", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Core" + ] + } + }, + "/v1/suspend": { + "patch": { + "summary": "Suspend or resume reconciling mulitple Flux objects", + "operationId": "Core_ToggleSuspendResource", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ToggleSuspendResourceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1ToggleSuspendResourceRequest" + } + } + ], + "tags": [ + "objects" + ] + } + }, + "/v1/sync": { + "patch": { + "summary": "Trigger reconciliation of multiple Flux objects", + "operationId": "Core_SyncFluxObject", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1SyncFluxObjectResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1SyncFluxObjectRequest" + } + } + ], + "tags": [ + "objects" + ] + } + }, + "/v1/version": { + "get": { + "summary": "Get version information about the server", + "operationId": "Core_GetVersion", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetVersionResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Core" + ] + } + } + }, + "definitions": { + "CrdName": { + "type": "object", + "properties": { + "plural": { + "type": "string" + }, + "group": { + "type": "string" + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\nExample 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\nExample 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "v1ClusterNamespaceList": { + "type": "object", + "properties": { + "clusterName": { + "type": "string" + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1Condition": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "status": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "message": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + } + }, + "v1Crd": { + "type": "object", + "properties": { + "name": { + "$ref": "#/definitions/CrdName" + }, + "version": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1Deployment": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Condition" + } + }, + "images": { + "type": "array", + "items": { + "type": "string" + } + }, + "suspended": { + "type": "boolean" + }, + "clusterName": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1Event": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "message": { + "type": "string" + }, + "timestamp": { + "type": "string" + }, + "component": { + "type": "string" + }, + "host": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1GetChildObjectsRequest": { + "type": "object", + "properties": { + "groupVersionKind": { + "$ref": "#/definitions/v1GroupVersionKind" + }, + "namespace": { + "type": "string" + }, + "parentUid": { + "type": "string" + }, + "clusterName": { + "type": "string" + } + } + }, + "v1GetChildObjectsResponse": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Object" + } + } + } + }, + "v1GetFeatureFlagsResponse": { + "type": "object", + "properties": { + "flags": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1GetInventoryResponse": { + "type": "object", + "properties": { + "entries": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1InventoryEntry" + } + } + } + }, + "v1GetObjectResponse": { + "type": "object", + "properties": { + "object": { + "$ref": "#/definitions/v1Object" + } + } + }, + "v1GetPolicyResponse": { + "type": "object", + "properties": { + "policy": { + "$ref": "#/definitions/v1PolicyObj" + }, + "clusterName": { + "type": "string" + } + } + }, + "v1GetPolicyValidationResponse": { + "type": "object", + "properties": { + "validation": { + "$ref": "#/definitions/v1PolicyValidation" + } + } + }, + "v1GetReconciledObjectsRequest": { + "type": "object", + "properties": { + "automationName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "automationKind": { + "type": "string" + }, + "kinds": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1GroupVersionKind" + } + }, + "clusterName": { + "type": "string" + } + } + }, + "v1GetReconciledObjectsResponse": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Object" + } + } + } + }, + "v1GetSessionLogsResponse": { + "type": "object", + "properties": { + "logs": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1LogEntry" + } + }, + "nextToken": { + "type": "string" + }, + "error": { + "type": "string" + }, + "logSources": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1GetVersionResponse": { + "type": "object", + "properties": { + "semver": { + "type": "string" + }, + "commit": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "buildTime": { + "type": "string" + }, + "kubeVersion": { + "type": "string" + } + } + }, + "v1GroupVersionKind": { + "type": "object", + "properties": { + "group": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "title": "GroupVersionKind represents an objects Kubernetes API type data" + }, + "v1HealthStatus": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "v1InventoryEntry": { + "type": "object", + "properties": { + "payload": { + "type": "string" + }, + "tenant": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "health": { + "$ref": "#/definitions/v1HealthStatus" + }, + "children": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1InventoryEntry" + } + } + } + }, + "v1IsCRDAvailableResponse": { + "type": "object", + "properties": { + "clusters": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + } + } + }, + "v1ListError": { + "type": "object", + "properties": { + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "v1ListEventsResponse": { + "type": "object", + "properties": { + "events": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Event" + } + } + } + }, + "v1ListFluxCrdsResponse": { + "type": "object", + "properties": { + "crds": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Crd" + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + } + } + }, + "v1ListFluxRuntimeObjectsResponse": { + "type": "object", + "properties": { + "deployments": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Deployment" + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + } + } + }, + "v1ListObjectsResponse": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Object" + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + }, + "searchedNamespaces": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ClusterNamespaceList" + } + } + } + }, + "v1ListPoliciesResponse": { + "type": "object", + "properties": { + "policies": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyObj" + } + }, + "total": { + "type": "integer", + "format": "int32" + }, + "nextPageToken": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + } + } + }, + "v1ListPolicyValidationsResponse": { + "type": "object", + "properties": { + "violations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyValidation" + } + }, + "total": { + "type": "integer", + "format": "int32" + }, + "nextPageToken": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + } + } + }, + "v1LogEntry": { + "type": "object", + "properties": { + "timestamp": { + "type": "string" + }, + "source": { + "type": "string" + }, + "level": { + "type": "string" + }, + "message": { + "type": "string" + }, + "sortingKey": { + "type": "string" + } + } + }, + "v1Object": { + "type": "object", + "properties": { + "payload": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "tenant": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "inventory": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1GroupVersionKind" + } + }, + "info": { + "type": "string" + }, + "health": { + "$ref": "#/definitions/v1HealthStatus" + } + } + }, + "v1ObjectRef": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "clusterName": { + "type": "string" + } + } + }, + "v1Pagination": { + "type": "object", + "properties": { + "pageSize": { + "type": "integer", + "format": "int32" + }, + "pageToken": { + "type": "string" + } + } + }, + "v1PolicyObj": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "code": { + "type": "string" + }, + "description": { + "type": "string" + }, + "howToSolve": { + "type": "string" + }, + "category": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "severity": { + "type": "string" + }, + "standards": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyStandard" + } + }, + "gitCommit": { + "type": "string" + }, + "parameters": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyParam" + } + }, + "targets": { + "$ref": "#/definitions/v1PolicyTargets" + }, + "createdAt": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "tenant": { + "type": "string" + }, + "modes": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1PolicyParam": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "value": { + "$ref": "#/definitions/protobufAny", + "title": "value is a generic value that can be a string, int, bool and array of\nstrings" + }, + "required": { + "type": "boolean" + } + } + }, + "v1PolicyStandard": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "controls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1PolicyTargetLabel": { + "type": "object", + "properties": { + "values": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1PolicyTargets": { + "type": "object", + "properties": { + "kinds": { + "type": "array", + "items": { + "type": "string" + } + }, + "labels": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyTargetLabel" + } + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1PolicyValidation": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "clusterId": { + "type": "string" + }, + "category": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "entity": { + "type": "string" + }, + "entityKind": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "violatingEntity": { + "type": "string" + }, + "description": { + "type": "string" + }, + "howToSolve": { + "type": "string" + }, + "name": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "occurrences": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyValidationOccurrence" + } + }, + "policyId": { + "type": "string" + }, + "parameters": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyValidationParam" + } + } + } + }, + "v1PolicyValidationOccurrence": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "v1PolicyValidationParam": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "value": { + "$ref": "#/definitions/protobufAny" + }, + "required": { + "type": "boolean" + }, + "configRef": { + "type": "string" + } + } + }, + "v1SyncFluxObjectRequest": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ObjectRef" + } + }, + "withSource": { + "type": "boolean", + "description": "If with_source is true, the dependent Source resource will be synced too, e.g. syncing a Kustomization with_source will sync an attached GitRepository" + } + } + }, + "v1SyncFluxObjectResponse": { + "type": "object" + }, + "v1ToggleSuspendResourceRequest": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ObjectRef" + } + }, + "suspend": { + "type": "boolean" + } + } + }, + "v1ToggleSuspendResourceResponse": { + "type": "object" + } + } +} diff --git a/api/internal/api/core/types.swagger.json b/api/internal/api/core/types.swagger.json new file mode 100644 index 0000000000..1c0c34dc1b --- /dev/null +++ b/api/internal/api/core/types.swagger.json @@ -0,0 +1,46 @@ +{ + "swagger": "2.0", + "info": { + "title": "api/core/types.proto", + "version": "version not set" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\nExample 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\nExample 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/buf.gen.yaml b/buf.gen.yaml index 91ef1c084b..aa5827971a 100644 --- a/buf.gen.yaml +++ b/buf.gen.yaml @@ -15,6 +15,8 @@ plugins: out: ./ opt: - allow_delete_body=true + - disable_service_tags=true + - use_go_templates=true - name: grpc-gateway-ts out: ./ui/lib opt: [] diff --git a/core/server/events.go b/core/server/events.go index d033ba8ce3..2744df0551 100644 --- a/core/server/events.go +++ b/core/server/events.go @@ -16,16 +16,12 @@ import ( ) func (cs *coreServer) ListEvents(ctx context.Context, msg *pb.ListEventsRequest) (*pb.ListEventsResponse, error) { - if msg.InvolvedObject == nil { - return nil, status.Errorf(codes.InvalidArgument, "bad request: no object was specified") - } - var clustersClient clustersmngr.Client var err error - if msg.InvolvedObject.ClusterName != "" { - clustersClient, err = cs.clustersManager.GetImpersonatedClientForCluster(ctx, auth.Principal(ctx), msg.InvolvedObject.ClusterName) + if msg.ClusterName != "" { + clustersClient, err = cs.clustersManager.GetImpersonatedClientForCluster(ctx, auth.Principal(ctx), msg.ClusterName) } else { clustersClient, err = cs.clustersManager.GetImpersonatedClient(ctx, auth.Principal(ctx)) } @@ -38,7 +34,7 @@ func (cs *coreServer) ListEvents(ctx context.Context, msg *pb.ListEventsRequest) return &corev1.EventList{} }) - kind := msg.InvolvedObject.Kind + kind := msg.Kind gvk, err := cs.primaryKinds.Lookup(kind) if err != nil { @@ -47,11 +43,11 @@ func (cs *coreServer) ListEvents(ctx context.Context, msg *pb.ListEventsRequest) fields := client.MatchingFields{ "involvedObject.kind": gvk.Kind, - "involvedObject.name": msg.InvolvedObject.Name, - "involvedObject.namespace": msg.InvolvedObject.Namespace, + "involvedObject.name": msg.Name, + "involvedObject.namespace": msg.Namespace, } - if err := list(ctx, clustersClient, temporarilyEmptyAppName, msg.InvolvedObject.Namespace, clist, fields); err != nil { + if err := list(ctx, clustersClient, temporarilyEmptyAppName, msg.Namespace, clist, fields); err != nil { return nil, fmt.Errorf("could not get events: %w", err) } diff --git a/core/server/events_test.go b/core/server/events_test.go index 9355bb0788..04c0f578de 100644 --- a/core/server/events_test.go +++ b/core/server/events_test.go @@ -94,11 +94,9 @@ func TestListEvents(t *testing.T) { // Get kustomization events res, err := c.ListEvents(outgoingCtx, &pb.ListEventsRequest{ - InvolvedObject: &pb.ObjectRef{ - Name: kustomizationObjectName, - Namespace: ns.Name, - Kind: kustomizev1.KustomizationKind, - }, + Name: kustomizationObjectName, + Namespace: ns.Name, + Kind: kustomizev1.KustomizationKind, }) g.Expect(err).NotTo(HaveOccurred()) @@ -108,12 +106,10 @@ func TestListEvents(t *testing.T) { // Get kustomization events, explicit cluster res, err = c.ListEvents(outgoingCtx, &pb.ListEventsRequest{ - InvolvedObject: &pb.ObjectRef{ - Name: kustomizationObjectName, - Namespace: ns.Name, - Kind: kustomizev1.KustomizationKind, - ClusterName: "Default", - }, + Name: kustomizationObjectName, + Namespace: ns.Name, + Kind: kustomizev1.KustomizationKind, + ClusterName: "Default", }) g.Expect(err).NotTo(HaveOccurred()) @@ -123,11 +119,9 @@ func TestListEvents(t *testing.T) { // Get helmrelease events res, err = c.ListEvents(outgoingCtx, &pb.ListEventsRequest{ - InvolvedObject: &pb.ObjectRef{ - Name: helmObjectName, - Namespace: ns.Name, - Kind: helmv2.HelmReleaseKind, - }, + Name: helmObjectName, + Namespace: ns.Name, + Kind: helmv2.HelmReleaseKind, }) g.Expect(err).NotTo(HaveOccurred()) diff --git a/core/server/objects.go b/core/server/objects.go index fa05c3c877..d70bc875cb 100644 --- a/core/server/objects.go +++ b/core/server/objects.go @@ -16,6 +16,7 @@ import ( "github.com/weaveworks/weave-gitops/pkg/server/auth" v1 "k8s.io/api/apps/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -75,8 +76,13 @@ func (cs *coreServer) ListObjects(ctx context.Context, msg *pb.ListObjectsReques listOptions := []client.ListOption{ client.InNamespace(msg.Namespace), } - if len(msg.Labels) > 0 { - listOptions = append(listOptions, client.MatchingLabels(msg.Labels)) + + if len(msg.LabelSelector) > 0 { + selector, err := labels.Parse(msg.LabelSelector) + if err != nil { + return nil, fmt.Errorf("error parsing label selector: %w", err) + } + listOptions = append(listOptions, client.MatchingLabelsSelector{Selector: selector}) } if err := clustersClient.ClusteredList(ctx, clist, true, listOptions...); err != nil { diff --git a/core/server/objects_test.go b/core/server/objects_test.go index 29e2bcdba3..1dc18194d0 100644 --- a/core/server/objects_test.go +++ b/core/server/objects_test.go @@ -6,9 +6,10 @@ import ( "context" "encoding/base64" "encoding/json" - sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" "testing" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" sourcev1 "github.com/fluxcd/source-controller/api/v1" @@ -748,11 +749,9 @@ func TestListObjectsLabels(t *testing.T) { c := makeServer(cfg, t) res, err := c.ListObjects(ctx, &pb.ListObjectsRequest{ - Kind: "Deployment", - ClusterName: "Default", - Labels: map[string]string{ - "key": "the-value", - }, + Kind: "Deployment", + ClusterName: "Default", + LabelSelector: "key=the-value", }) g.Expect(err).NotTo(HaveOccurred()) g.Expect(res.Objects).To(HaveLen(1)) diff --git a/core/server/policies.go b/core/server/policies.go index bb18aa8ee2..539cd23ea9 100644 --- a/core/server/policies.go +++ b/core/server/policies.go @@ -225,8 +225,8 @@ func (cs *coreServer) GetPolicy(ctx context.Context, m *pb.GetPolicyRequest) (*p policyCR := pacv2beta2.Policy{} - if err := clustersClient.Get(ctx, m.ClusterName, types.NamespacedName{Name: m.PolicyName}, &policyCR); err != nil { - return nil, fmt.Errorf("error while getting policy %s from cluster %s: %w", m.PolicyName, m.ClusterName, err) + if err := clustersClient.Get(ctx, m.ClusterName, types.NamespacedName{Name: m.Name}, &policyCR); err != nil { + return nil, fmt.Errorf("error while getting policy %s from cluster %s: %w", m.Name, m.ClusterName, err) } var policy *pb.PolicyObj diff --git a/core/server/policies_test.go b/core/server/policies_test.go index f0ecd7b132..06e1f25c6e 100644 --- a/core/server/policies_test.go +++ b/core/server/policies_test.go @@ -96,7 +96,7 @@ func TestGetPolicy(t *testing.T) { c := makeServer(cfg, t) res, err := c.GetPolicy(ctx, &pb.GetPolicyRequest{ - PolicyName: policy.Spec.ID, + Name: policy.Spec.ID, }) g.Expect(err).NotTo(HaveOccurred()) g.Expect(res.Policy).NotTo(BeNil()) @@ -110,7 +110,7 @@ func TestGetPolicy(t *testing.T) { // Test non existing policy _, err = c.GetPolicy(ctx, &pb.GetPolicyRequest{ - PolicyName: "foo", + Name: "foo", }) g.Expect(err).To(HaveOccurred()) } diff --git a/go.mod b/go.mod index 05b5cd2b74..8933bc3fca 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/go-resty/resty/v2 v2.7.0 github.com/golang-jwt/jwt/v4 v4.4.3 github.com/google/go-cmp v0.5.9 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.1 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2 github.com/grpc-ecosystem/protoc-gen-grpc-gateway-ts v1.1.1 github.com/hashicorp/go-multierror v1.1.1 github.com/johannesboyne/gofakes3 v0.0.0-20220627085814-c3ac35da23b2 diff --git a/go.sum b/go.sum index 9575fda113..826537d8d9 100644 --- a/go.sum +++ b/go.sum @@ -302,8 +302,8 @@ github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJr github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/grpc-gateway v1.15.2/go.mod h1:vO11I9oWA+KsxmfFQPhLnnIb1VDE24M+pdxZFiuZcA8= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.1 h1:p5m7GOEGXyoq6QWl4/RRMsQ6tWbTpbQmAnkxXgWSprY= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.1/go.mod h1:8ZeZajTed/blCOHBbj8Fss8bPHiFKcmJJzuIbUtFCAo= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2 h1:gDLXvp5S9izjldquuoAhDzccbskOL6tDC5jMSyx3zxE= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2/go.mod h1:7pdNwVWBBHGiCxa9lAszqCJMbfTISJ7oMftp8+UGV08= github.com/grpc-ecosystem/protoc-gen-grpc-gateway-ts v1.1.1 h1:arwcA21RFb6T+jDlx8webgjG5mxVOVUk/L4/sxRLisY= github.com/grpc-ecosystem/protoc-gen-grpc-gateway-ts v1.1.1/go.mod h1:eirF820XKj2zKB4hFfdsOqlAVq45EpWH2WzR2WxBua4= github.com/hako/durafmt v0.0.0-20210608085754-5c1018a4e16b h1:wDUNC2eKiL35DbLvsDhiblTUXHxcOPwQSCzi7xpQUN4= diff --git a/pkg/api/core/core.pb.go b/pkg/api/core/core.pb.go index 4c61679058..91e97d1658 100644 --- a/pkg/api/core/core.pb.go +++ b/pkg/api/core/core.pb.go @@ -1,4 +1,4 @@ -// +//* // This file holds the protobuf definitions for the Weave GitOps gRPC API. // Messages and enums are defined in types.proto. @@ -13,6 +13,7 @@ package api import ( _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" _ "google.golang.org/genproto/googleapis/api/annotations" + _ "google.golang.org/genproto/googleapis/api/visibility" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" anypb "google.golang.org/protobuf/types/known/anypb" @@ -32,11 +33,14 @@ type GetInventoryRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"` - ClusterName string `protobuf:"bytes,4,opt,name=clusterName,proto3" json:"clusterName,omitempty"` - WithChildren bool `protobuf:"varint,5,opt,name=withChildren,proto3" json:"withChildren,omitempty"` + // Supported kinds are `Kustomization` and `HelmRelease` + // If using Enterprise, `GitOpsSet` and `AutomatedClusterDiscovery` are also supported + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"` + ClusterName string `protobuf:"bytes,4,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` + // If true, the children of certain resources like Deployments and Replicasets will be included in the response + WithChildren bool `protobuf:"varint,5,opt,name=with_children,json=withChildren,proto3" json:"with_children,omitempty"` } func (x *GetInventoryRequest) Reset() { @@ -160,20 +164,20 @@ type PolicyValidation struct { Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` - ClusterId string `protobuf:"bytes,3,opt,name=clusterId,proto3" json:"clusterId,omitempty"` + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` Category string `protobuf:"bytes,4,opt,name=category,proto3" json:"category,omitempty"` Severity string `protobuf:"bytes,5,opt,name=severity,proto3" json:"severity,omitempty"` - CreatedAt string `protobuf:"bytes,6,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + CreatedAt string `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` Entity string `protobuf:"bytes,7,opt,name=entity,proto3" json:"entity,omitempty"` - EntityKind string `protobuf:"bytes,8,opt,name=entityKind,proto3" json:"entityKind,omitempty"` + EntityKind string `protobuf:"bytes,8,opt,name=entity_kind,json=entityKind,proto3" json:"entity_kind,omitempty"` Namespace string `protobuf:"bytes,9,opt,name=namespace,proto3" json:"namespace,omitempty"` - ViolatingEntity string `protobuf:"bytes,10,opt,name=violatingEntity,proto3" json:"violatingEntity,omitempty"` + ViolatingEntity string `protobuf:"bytes,10,opt,name=violating_entity,json=violatingEntity,proto3" json:"violating_entity,omitempty"` Description string `protobuf:"bytes,11,opt,name=description,proto3" json:"description,omitempty"` - HowToSolve string `protobuf:"bytes,12,opt,name=howToSolve,proto3" json:"howToSolve,omitempty"` + HowToSolve string `protobuf:"bytes,12,opt,name=how_to_solve,json=howToSolve,proto3" json:"how_to_solve,omitempty"` Name string `protobuf:"bytes,13,opt,name=name,proto3" json:"name,omitempty"` - ClusterName string `protobuf:"bytes,14,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + ClusterName string `protobuf:"bytes,14,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` Occurrences []*PolicyValidationOccurrence `protobuf:"bytes,15,rep,name=occurrences,proto3" json:"occurrences,omitempty"` - PolicyId string `protobuf:"bytes,16,opt,name=policyId,proto3" json:"policyId,omitempty"` + PolicyId string `protobuf:"bytes,16,opt,name=policy_id,json=policyId,proto3" json:"policy_id,omitempty"` Parameters []*PolicyValidationParam `protobuf:"bytes,17,rep,name=parameters,proto3" json:"parameters,omitempty"` } @@ -333,13 +337,19 @@ type ListPolicyValidationsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ClusterName string `protobuf:"bytes,1,opt,name=clusterName,proto3" json:"clusterName,omitempty"` - Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` - Application string `protobuf:"bytes,3,opt,name=application,proto3" json:"application,omitempty"` - Namespace string `protobuf:"bytes,4,opt,name=namespace,proto3" json:"namespace,omitempty"` - Kind string `protobuf:"bytes,5,opt,name=kind,proto3" json:"kind,omitempty"` - PolicyId string `protobuf:"bytes,6,opt,name=policyId,proto3" json:"policyId,omitempty"` - ValidationType string `protobuf:"bytes,7,opt,name=validationType,proto3" json:"validationType,omitempty"` + // filter for validations on a particular cluster + ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` + Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + // filter by `involvedObject.name` + Application string `protobuf:"bytes,3,opt,name=application,proto3" json:"application,omitempty"` + // filter by `involvedObject.namespace` + Namespace string `protobuf:"bytes,4,opt,name=namespace,proto3" json:"namespace,omitempty"` + // filter by `involvedObject.kind` + Kind string `protobuf:"bytes,5,opt,name=kind,proto3" json:"kind,omitempty"` + // filter by id of the policy that triggered the validation + PolicyId string `protobuf:"bytes,6,opt,name=policy_id,json=policyId,proto3" json:"policy_id,omitempty"` + // filter for validation types of `Admission` or `Audit` + ValidationType string `protobuf:"bytes,7,opt,name=validation_type,json=validationType,proto3" json:"validation_type,omitempty"` } func (x *ListPolicyValidationsRequest) Reset() { @@ -430,7 +440,7 @@ type ListPolicyValidationsResponse struct { Violations []*PolicyValidation `protobuf:"bytes,1,rep,name=violations,proto3" json:"violations,omitempty"` Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` - NextPageToken string `protobuf:"bytes,3,opt,name=nextPageToken,proto3" json:"nextPageToken,omitempty"` + NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` Errors []*ListError `protobuf:"bytes,4,rep,name=errors,proto3" json:"errors,omitempty"` } @@ -499,9 +509,13 @@ type GetPolicyValidationRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ValidationId string `protobuf:"bytes,1,opt,name=validationId,proto3" json:"validationId,omitempty"` - ClusterName string `protobuf:"bytes,2,opt,name=clusterName,proto3" json:"clusterName,omitempty"` - ValidationType string `protobuf:"bytes,3,opt,name=validationType,proto3" json:"validationType,omitempty"` + // The id of the validation. + // This is often obtained from: + // - from the list policy validations endpoint. + // - from `Event` objects raised by the policy-agent + ValidationId string `protobuf:"bytes,1,opt,name=validation_id,json=validationId,proto3" json:"validation_id,omitempty"` + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` + ValidationType string `protobuf:"bytes,3,opt,name=validation_type,json=validationType,proto3" json:"validation_type,omitempty"` } func (x *GetPolicyValidationRequest) Reset() { @@ -660,7 +674,7 @@ type PolicyValidationParam struct { Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` Value *anypb.Any `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` Required bool `protobuf:"varint,4,opt,name=required,proto3" json:"required,omitempty"` - ConfigRef string `protobuf:"bytes,5,opt,name=configRef,proto3" json:"configRef,omitempty"` + ConfigRef string `protobuf:"bytes,5,opt,name=config_ref,json=configRef,proto3" json:"config_ref,omitempty"` } func (x *PolicyValidationParam) Reset() { @@ -782,8 +796,11 @@ type Pagination struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - PageSize int32 `protobuf:"varint,1,opt,name=pageSize,proto3" json:"pageSize,omitempty"` - PageToken string `protobuf:"bytes,2,opt,name=pageToken,proto3" json:"pageToken,omitempty"` + // controls the number of results per page from each cluster + PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // a composite token used to retrieve the next page of results across all clusters + // this is availble in the response as `nextPageToken` + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` } func (x *Pagination) Reset() { @@ -832,12 +849,15 @@ func (x *Pagination) GetPageToken() string { return "" } +// Queries are made to each cluster. If its a namespaced query then a query +// is made per namespace too. If an error occurs for any specific query the error +// message is included here alongside the results for the queries that succeeded. type ListError struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ClusterName string `protobuf:"bytes,1,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` } @@ -899,9 +919,6 @@ type ListFluxRuntimeObjectsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` - ClusterName string `protobuf:"bytes,2,opt,name=clusterName,proto3" json:"clusterName,omitempty"` } func (x *ListFluxRuntimeObjectsRequest) Reset() { @@ -936,20 +953,6 @@ func (*ListFluxRuntimeObjectsRequest) Descriptor() ([]byte, []int) { return file_api_core_core_proto_rawDescGZIP(), []int{12} } -func (x *ListFluxRuntimeObjectsRequest) GetNamespace() string { - if x != nil { - return x.Namespace - } - return "" -} - -func (x *ListFluxRuntimeObjectsRequest) GetClusterName() string { - if x != nil { - return x.ClusterName - } - return "" -} - type ListFluxRuntimeObjectsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1009,8 +1012,6 @@ type ListFluxCrdsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - ClusterName string `protobuf:"bytes,1,opt,name=clusterName,proto3" json:"clusterName,omitempty"` } func (x *ListFluxCrdsRequest) Reset() { @@ -1045,13 +1046,6 @@ func (*ListFluxCrdsRequest) Descriptor() ([]byte, []int) { return file_api_core_core_proto_rawDescGZIP(), []int{14} } -func (x *ListFluxCrdsRequest) GetClusterName() string { - if x != nil { - return x.ClusterName - } - return "" -} - type ListFluxCrdsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1115,7 +1109,7 @@ type GetObjectRequest struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` - ClusterName string `protobuf:"bytes,4,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + ClusterName string `protobuf:"bytes,4,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` } func (x *GetObjectRequest) Reset() { @@ -1230,10 +1224,10 @@ type ListObjectsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` - Kind string `protobuf:"bytes,2,opt,name=kind,proto3" json:"kind,omitempty"` - ClusterName string `protobuf:"bytes,3,opt,name=clusterName,proto3" json:"clusterName,omitempty"` - Labels map[string]string `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` + Kind string `protobuf:"bytes,2,opt,name=kind,proto3" json:"kind,omitempty"` + ClusterName string `protobuf:"bytes,3,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` + LabelSelector string `protobuf:"bytes,4,opt,name=label_selector,json=labelSelector,proto3" json:"label_selector,omitempty"` } func (x *ListObjectsRequest) Reset() { @@ -1289,11 +1283,11 @@ func (x *ListObjectsRequest) GetClusterName() string { return "" } -func (x *ListObjectsRequest) GetLabels() map[string]string { +func (x *ListObjectsRequest) GetLabelSelector() string { if x != nil { - return x.Labels + return x.LabelSelector } - return nil + return "" } type ClusterNamespaceList struct { @@ -1301,7 +1295,7 @@ type ClusterNamespaceList struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ClusterName string `protobuf:"bytes,1,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` Namespaces []string `protobuf:"bytes,2,rep,name=namespaces,proto3" json:"namespaces,omitempty"` } @@ -1358,7 +1352,7 @@ type ListObjectsResponse struct { Objects []*Object `protobuf:"bytes,1,rep,name=objects,proto3" json:"objects,omitempty"` Errors []*ListError `protobuf:"bytes,2,rep,name=errors,proto3" json:"errors,omitempty"` - SearchedNamespaces []*ClusterNamespaceList `protobuf:"bytes,3,rep,name=searchedNamespaces,proto3" json:"searchedNamespaces,omitempty"` + SearchedNamespaces []*ClusterNamespaceList `protobuf:"bytes,3,rep,name=searched_namespaces,json=searchedNamespaces,proto3" json:"searched_namespaces,omitempty"` } func (x *ListObjectsResponse) Reset() { @@ -1545,10 +1539,10 @@ type GetChildObjectsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - GroupVersionKind *GroupVersionKind `protobuf:"bytes,1,opt,name=groupVersionKind,proto3" json:"groupVersionKind,omitempty"` + GroupVersionKind *GroupVersionKind `protobuf:"bytes,1,opt,name=group_version_kind,json=groupVersionKind,proto3" json:"group_version_kind,omitempty"` Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` - ParentUid string `protobuf:"bytes,3,opt,name=parentUid,proto3" json:"parentUid,omitempty"` - ClusterName string `protobuf:"bytes,4,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + ParentUid string `protobuf:"bytes,3,opt,name=parent_uid,json=parentUid,proto3" json:"parent_uid,omitempty"` + ClusterName string `protobuf:"bytes,4,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` } func (x *GetChildObjectsRequest) Reset() { @@ -1833,7 +1827,10 @@ type ListEventsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - InvolvedObject *ObjectRef `protobuf:"bytes,1,opt,name=involvedObject,proto3" json:"involvedObject,omitempty"` + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"` + ClusterName string `protobuf:"bytes,4,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` } func (x *ListEventsRequest) Reset() { @@ -1868,11 +1865,32 @@ func (*ListEventsRequest) Descriptor() ([]byte, []int) { return file_api_core_core_proto_rawDescGZIP(), []int{29} } -func (x *ListEventsRequest) GetInvolvedObject() *ObjectRef { +func (x *ListEventsRequest) GetKind() string { if x != nil { - return x.InvolvedObject + return x.Kind } - return nil + return "" +} + +func (x *ListEventsRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ListEventsRequest) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *ListEventsRequest) GetClusterName() string { + if x != nil { + return x.ClusterName + } + return "" } type ListEventsResponse struct { @@ -1927,8 +1945,9 @@ type SyncFluxObjectRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // The list of objects to sync. Objects []*ObjectRef `protobuf:"bytes,1,rep,name=objects,proto3" json:"objects,omitempty"` - WithSource bool `protobuf:"varint,2,opt,name=withSource,proto3" json:"withSource,omitempty"` + WithSource bool `protobuf:"varint,2,opt,name=with_source,json=withSource,proto3" json:"with_source,omitempty"` } func (x *SyncFluxObjectRequest) Reset() { @@ -2061,8 +2080,8 @@ type GetVersionResponse struct { Semver string `protobuf:"bytes,1,opt,name=semver,proto3" json:"semver,omitempty"` Commit string `protobuf:"bytes,2,opt,name=commit,proto3" json:"commit,omitempty"` Branch string `protobuf:"bytes,3,opt,name=branch,proto3" json:"branch,omitempty"` - BuildTime string `protobuf:"bytes,4,opt,name=buildTime,proto3" json:"buildTime,omitempty"` - KubeVersion string `protobuf:"bytes,5,opt,name=kubeVersion,proto3" json:"kubeVersion,omitempty"` + BuildTime string `protobuf:"bytes,4,opt,name=build_time,json=buildTime,proto3" json:"build_time,omitempty"` + KubeVersion string `protobuf:"bytes,5,opt,name=kube_version,json=kubeVersion,proto3" json:"kube_version,omitempty"` } func (x *GetVersionResponse) Reset() { @@ -2222,9 +2241,12 @@ type ToggleSuspendResourceRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // The list of objects to suspend or resume. Objects []*ObjectRef `protobuf:"bytes,1,rep,name=objects,proto3" json:"objects,omitempty"` - Suspend bool `protobuf:"varint,2,opt,name=suspend,proto3" json:"suspend,omitempty"` - Comment string `protobuf:"bytes,3,opt,name=comment,proto3" json:"comment,omitempty"` + // Suspend or resume the resources. + Suspend bool `protobuf:"varint,2,opt,name=suspend,proto3" json:"suspend,omitempty"` + // Include a comment about why the resources are being suspended. + Comment string `protobuf:"bytes,3,opt,name=comment,proto3" json:"comment,omitempty"` } func (x *ToggleSuspendResourceRequest) Reset() { @@ -2323,11 +2345,11 @@ type GetSessionLogsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SessionNamespace string `protobuf:"bytes,1,opt,name=sessionNamespace,proto3" json:"sessionNamespace,omitempty"` - SessionId string `protobuf:"bytes,2,opt,name=sessionId,proto3" json:"sessionId,omitempty"` + SessionNamespace string `protobuf:"bytes,1,opt,name=session_namespace,json=sessionNamespace,proto3" json:"session_namespace,omitempty"` + SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` - LogSourceFilter string `protobuf:"bytes,4,opt,name=logSourceFilter,proto3" json:"logSourceFilter,omitempty"` - LogLevelFilter string `protobuf:"bytes,5,opt,name=logLevelFilter,proto3" json:"logLevelFilter,omitempty"` + LogSourceFilter string `protobuf:"bytes,4,opt,name=log_source_filter,json=logSourceFilter,proto3" json:"log_source_filter,omitempty"` + LogLevelFilter string `protobuf:"bytes,5,opt,name=log_level_filter,json=logLevelFilter,proto3" json:"log_level_filter,omitempty"` } func (x *GetSessionLogsRequest) Reset() { @@ -2406,7 +2428,7 @@ type LogEntry struct { Source string `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` Level string `protobuf:"bytes,3,opt,name=level,proto3" json:"level,omitempty"` Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` - SortingKey string `protobuf:"bytes,5,opt,name=sortingKey,proto3" json:"sortingKey,omitempty"` + SortingKey string `protobuf:"bytes,5,opt,name=sorting_key,json=sortingKey,proto3" json:"sorting_key,omitempty"` } func (x *LogEntry) Reset() { @@ -2482,9 +2504,9 @@ type GetSessionLogsResponse struct { unknownFields protoimpl.UnknownFields Logs []*LogEntry `protobuf:"bytes,1,rep,name=logs,proto3" json:"logs,omitempty"` - NextToken string `protobuf:"bytes,2,opt,name=nextToken,proto3" json:"nextToken,omitempty"` + NextToken string `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"` Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` - LogSources []string `protobuf:"bytes,4,rep,name=logSources,proto3" json:"logSources,omitempty"` + LogSources []string `protobuf:"bytes,4,rep,name=log_sources,json=logSources,proto3" json:"log_sources,omitempty"` } func (x *GetSessionLogsResponse) Reset() { @@ -2552,6 +2574,9 @@ type IsCRDAvailableRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // The name of the CustomResourceDefinition to check availability for across clusters. e.g. + // - `imageupdateautomations.image.toolkit.fluxcd.io` + // - `gitopssets.templates.weave.works` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } @@ -2646,8 +2671,7 @@ type ListPoliciesRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ClusterName string `protobuf:"bytes,1,opt,name=clusterName,proto3" json:"clusterName,omitempty"` - Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + Pagination *Pagination `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` } func (x *ListPoliciesRequest) Reset() { @@ -2682,13 +2706,6 @@ func (*ListPoliciesRequest) Descriptor() ([]byte, []int) { return file_api_core_core_proto_rawDescGZIP(), []int{44} } -func (x *ListPoliciesRequest) GetClusterName() string { - if x != nil { - return x.ClusterName - } - return "" -} - func (x *ListPoliciesRequest) GetPagination() *Pagination { if x != nil { return x.Pagination @@ -2703,7 +2720,7 @@ type ListPoliciesResponse struct { Policies []*PolicyObj `protobuf:"bytes,1,rep,name=policies,proto3" json:"policies,omitempty"` Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` - NextPageToken string `protobuf:"bytes,3,opt,name=nextPageToken,proto3" json:"nextPageToken,omitempty"` + NextPageToken string `protobuf:"bytes,3,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` Errors []*ListError `protobuf:"bytes,4,rep,name=errors,proto3" json:"errors,omitempty"` } @@ -2772,8 +2789,10 @@ type GetPolicyRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - PolicyName string `protobuf:"bytes,1,opt,name=policyName,proto3" json:"policyName,omitempty"` - ClusterName string `protobuf:"bytes,2,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + // The name of the `Policy` resource to retrieve. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // The name of the cluster to retrieve the policy from. Default is the cluster running the API server. + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` } func (x *GetPolicyRequest) Reset() { @@ -2808,9 +2827,9 @@ func (*GetPolicyRequest) Descriptor() ([]byte, []int) { return file_api_core_core_proto_rawDescGZIP(), []int{46} } -func (x *GetPolicyRequest) GetPolicyName() string { +func (x *GetPolicyRequest) GetName() string { if x != nil { - return x.PolicyName + return x.Name } return "" } @@ -2828,7 +2847,7 @@ type GetPolicyResponse struct { unknownFields protoimpl.UnknownFields Policy *PolicyObj `protobuf:"bytes,1,opt,name=policy,proto3" json:"policy,omitempty"` - ClusterName string `protobuf:"bytes,2,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` } func (x *GetPolicyResponse) Reset() { @@ -2886,16 +2905,16 @@ type PolicyObj struct { Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` Code string `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"` Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` - HowToSolve string `protobuf:"bytes,5,opt,name=howToSolve,proto3" json:"howToSolve,omitempty"` + HowToSolve string `protobuf:"bytes,5,opt,name=how_to_solve,json=howToSolve,proto3" json:"how_to_solve,omitempty"` Category string `protobuf:"bytes,6,opt,name=category,proto3" json:"category,omitempty"` Tags []string `protobuf:"bytes,7,rep,name=tags,proto3" json:"tags,omitempty"` Severity string `protobuf:"bytes,8,opt,name=severity,proto3" json:"severity,omitempty"` Standards []*PolicyStandard `protobuf:"bytes,9,rep,name=standards,proto3" json:"standards,omitempty"` - GitCommit string `protobuf:"bytes,10,opt,name=gitCommit,proto3" json:"gitCommit,omitempty"` + GitCommit string `protobuf:"bytes,10,opt,name=git_commit,json=gitCommit,proto3" json:"git_commit,omitempty"` Parameters []*PolicyParam `protobuf:"bytes,11,rep,name=parameters,proto3" json:"parameters,omitempty"` Targets *PolicyTargets `protobuf:"bytes,12,opt,name=targets,proto3" json:"targets,omitempty"` - CreatedAt string `protobuf:"bytes,13,opt,name=createdAt,proto3" json:"createdAt,omitempty"` - ClusterName string `protobuf:"bytes,14,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + CreatedAt string `protobuf:"bytes,13,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + ClusterName string `protobuf:"bytes,14,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` Tenant string `protobuf:"bytes,15,opt,name=tenant,proto3" json:"tenant,omitempty"` Modes []string `protobuf:"bytes,16,rep,name=modes,proto3" json:"modes,omitempty"` } @@ -3289,621 +3308,635 @@ var file_api_core_core_proto_rawDesc = []byte{ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, - 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa1, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, - 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x69, 0x74, 0x68, 0x43, 0x68, 0x69, 0x6c, - 0x64, 0x72, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x77, 0x69, 0x74, 0x68, - 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x50, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x49, - 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x38, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0xd9, 0x04, 0x0a, 0x10, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, + 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, + 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x61, 0x70, 0x69, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0xa3, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, + 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x68, 0x69, 0x6c, 0x64, + 0x72, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x77, 0x69, 0x74, 0x68, 0x43, + 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x50, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x49, 0x6e, + 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x38, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x22, 0xe1, 0x04, 0x0a, 0x10, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, - 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, - 0x69, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x69, - 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x20, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1e, 0x0a, 0x0a, 0x68, 0x6f, 0x77, 0x54, 0x6f, 0x53, 0x6f, 0x6c, 0x76, 0x65, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x6f, 0x77, 0x54, 0x6f, 0x53, 0x6f, 0x6c, 0x76, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x69, 0x74, + 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, + 0x6e, 0x67, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x68, 0x6f, 0x77, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x6f, 0x77, 0x54, 0x6f, 0x53, + 0x6f, 0x6c, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6f, + 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0b, 0x6f, 0x63, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x63, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0b, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, - 0x45, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x11, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x94, 0x02, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x97, 0x02, + 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, + 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x27, + 0x0a, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0xd2, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0a, 0x76, 0x69, 0x6f, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0xd0, 0x01, - 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x40, 0x0a, 0x0a, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, - 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x31, 0x0a, - 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, - 0x22, 0x8a, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x22, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x5f, 0x0a, - 0x1b, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0a, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x36, - 0x0a, 0x1a, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 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, 0x22, 0xa5, 0x01, 0x0a, 0x15, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x18, 0x05, 0x20, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0a, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, + 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x31, 0x0a, 0x06, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x6f, + 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x22, 0x8d, 0x01, 0x0a, + 0x1a, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x5f, 0x0a, 0x1b, + 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0a, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x36, 0x0a, + 0x1a, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 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, 0x22, 0xa6, 0x01, 0x0a, 0x15, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x22, 0x31, 0x0a, 0x19, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x46, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, - 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x65, 0x0a, 0x09, 0x4c, 0x69, 0x73, - 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x5f, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x75, 0x78, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x91, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x75, 0x78, 0x52, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x6f, - 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x31, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x06, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x73, 0x22, 0x37, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x75, - 0x78, 0x43, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x72, - 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x75, 0x78, 0x43, 0x72, 0x64, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x63, 0x72, 0x64, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x64, 0x52, 0x04, 0x63, 0x72, 0x64, 0x73, 0x12, - 0x31, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x73, 0x22, 0x7a, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 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, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x43, - 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x06, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x22, 0xeb, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x46, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, - 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x58, 0x0a, 0x14, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x13, - 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x31, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, + 0x65, 0x22, 0x48, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x66, 0x0a, 0x09, 0x4c, + 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x1f, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x75, 0x78, 0x52, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x91, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x75, + 0x78, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x31, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x54, 0x0a, 0x12, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x12, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0xe5, - 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x64, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, - 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x75, - 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x36, 0x0a, 0x05, - 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x69, - 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x05, 0x6b, - 0x69, 0x6e, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x50, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, - 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, - 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, - 0x43, 0x68, 0x69, 0x6c, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x10, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x52, - 0x10, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, - 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x69, 0x64, 0x12, 0x20, 0x0a, - 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, + 0x46, 0x6c, 0x75, 0x78, 0x43, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x72, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x75, 0x78, 0x43, 0x72, 0x64, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x63, 0x72, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x64, 0x52, 0x04, 0x63, 0x72, 0x64, 0x73, + 0x12, 0x31, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x06, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x73, 0x22, 0x7b, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 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, 0x12, 0x1c, 0x0a, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x21, 0x0a, + 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x22, 0x43, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x06, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x90, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, + 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x21, + 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x59, 0x0a, 0x14, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x22, 0xd1, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x31, 0x0a, + 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, + 0x12, 0x55, 0x0a, 0x13, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x12, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x64, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0xe5, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x0a, + 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x05, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x12, 0x20, 0x0a, + 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x4b, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x69, - 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0x19, 0x0a, 0x17, - 0x47, 0x65, 0x74, 0x46, 0x6c, 0x75, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2e, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x46, 0x6c, - 0x75, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x53, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0x56, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x0e, 0x69, 0x6e, - 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x50, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x30, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x22, 0xc8, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x12, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x69, + 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, + 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x10, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4b, 0x0a, 0x17, + 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, + 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x47, 0x65, 0x74, + 0x46, 0x6c, 0x75, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x2e, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x75, 0x78, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x53, 0x0a, + 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, + 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x22, 0x7c, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x22, 0x43, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x15, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x6c, 0x75, + 0x78, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, + 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x66, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x6c, 0x75, 0x78, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, + 0x0a, 0x11, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x9e, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, + 0x6d, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6d, 0x76, + 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x72, + 0x61, 0x6e, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, + 0x63, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6b, 0x75, 0x62, 0x65, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x18, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xef, + 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x05, 0x66, 0x6c, + 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x69, 0x74, 0x6f, + 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x66, + 0x6c, 0x61, 0x67, 0x73, 0x1a, 0x38, 0x0a, 0x0a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x50, + 0x92, 0x41, 0x4d, 0x32, 0x4b, 0x7b, 0x22, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x22, 0x3a, 0x20, 0x7b, + 0x20, 0x22, 0x57, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x47, 0x49, 0x54, 0x4f, 0x50, 0x53, 0x5f, 0x46, + 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x59, 0x22, 0x3a, + 0x20, 0x22, 0x74, 0x72, 0x75, 0x65, 0x22, 0x2c, 0x20, 0x22, 0x4f, 0x49, 0x44, 0x43, 0x5f, 0x41, + 0x55, 0x54, 0x48, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x72, 0x75, 0x65, 0x22, 0x20, 0x7d, 0x20, 0x7d, + 0x22, 0x87, 0x01, 0x0a, 0x1c, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x53, 0x75, 0x73, 0x70, 0x65, + 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x66, 0x52, 0x0e, 0x69, - 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x43, 0x0a, - 0x12, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0x6c, 0x0a, 0x15, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x6c, 0x75, 0x78, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x66, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x12, 0x1e, 0x0a, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x22, 0x18, 0x0a, 0x16, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x6c, 0x75, 0x78, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x47, 0x65, - 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x9c, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x12, 0x16, - 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x1c, - 0x0a, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, - 0x6b, 0x75, 0x62, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x6b, 0x75, 0x62, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x18, - 0x0a, 0x16, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x9d, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x6c, 0x61, - 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x1a, 0x38, - 0x0a, 0x0a, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x87, 0x01, 0x0a, 0x1c, 0x54, 0x6f, 0x67, - 0x67, 0x6c, 0x65, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, - 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x66, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x18, - 0x0a, 0x07, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x74, 0x22, 0x1f, 0x0a, 0x1d, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x53, 0x75, 0x73, 0x70, - 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0xc9, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, - 0x10, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x28, 0x0a, - 0x0f, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, - 0x90, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x4b, - 0x65, 0x79, 0x22, 0x9a, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, - 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x69, - 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, - 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x66, 0x52, 0x07, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x1f, 0x0a, 0x1d, 0x54, 0x6f, + 0x67, 0x67, 0x6c, 0x65, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xcf, 0x01, 0x0a, 0x15, + 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x6f, 0x67, 0x5f, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, + 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x91, 0x01, + 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x4b, 0x65, + 0x79, 0x22, 0x9c, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, + 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x69, 0x74, + 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, + 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, - 0x1e, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, - 0x2b, 0x0a, 0x15, 0x49, 0x73, 0x43, 0x52, 0x44, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 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, 0xa7, 0x01, 0x0a, - 0x16, 0x49, 0x73, 0x43, 0x52, 0x44, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x69, 0x74, 0x6f, - 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x43, 0x52, 0x44, - 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x73, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, - 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x3a, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbc, 0x01, 0x0a, 0x14, - 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x62, - 0x6a, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, - 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x31, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, - 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x22, 0x54, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, - 0x0a, 0x0a, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, - 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0x68, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x62, 0x6a, - 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x91, 0x04, 0x0a, 0x09, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x62, 0x6a, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x6f, 0x77, 0x54, 0x6f, 0x53, 0x6f, 0x6c, 0x76, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x6f, 0x77, 0x54, 0x6f, 0x53, 0x6f, 0x6c, - 0x76, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, - 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x3c, - 0x0a, 0x09, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, - 0x64, 0x52, 0x09, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, - 0x67, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x67, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x3b, 0x0a, 0x0a, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, + 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x67, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x22, 0x2b, 0x0a, 0x15, 0x49, 0x73, 0x43, 0x52, 0x44, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 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, 0xd3, 0x01, + 0x0a, 0x16, 0x49, 0x73, 0x43, 0x52, 0x44, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x08, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x69, 0x74, + 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x43, 0x52, + 0x44, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x2a, 0x92, 0x41, 0x27, 0x32, 0x25, 0x7b, 0x22, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x22, 0x3a, 0x20, 0x7b, 0x20, 0x22, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2d, 0x31, 0x22, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x20, + 0x7d, 0x20, 0x7d, 0x22, 0x51, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x0a, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, - 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, - 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x20, - 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, - 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3c, - 0x0a, 0x0e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x22, 0x7d, 0x0a, 0x0b, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbe, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x35, 0x0a, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x62, 0x6a, 0x52, 0x08, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x26, 0x0a, 0x0f, + 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x31, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x22, 0x49, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 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, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x0d, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x69, - 0x6e, 0x64, 0x73, 0x12, 0x39, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1e, - 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0x95, - 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x12, 0x45, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x32, 0xee, 0x13, 0x0a, 0x04, 0x43, 0x6f, 0x72, 0x65, 0x12, - 0x6b, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x20, 0x2e, 0x67, - 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, + 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0x69, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, + 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, + 0x62, 0x6a, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x96, 0x04, + 0x0a, 0x09, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x62, 0x6a, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x68, 0x6f, 0x77, 0x5f, 0x74, 0x6f, 0x5f, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x6f, 0x77, + 0x54, 0x6f, 0x53, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, + 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, + 0x69, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x73, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x74, + 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x52, 0x09, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, + 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x12, 0x3b, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x0b, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x37, 0x0a, + 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x6e, 0x0a, 0x0b, - 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x22, 0x2e, 0x67, 0x69, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x52, 0x07, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x3c, 0x0a, 0x0e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x73, 0x22, 0x7d, 0x0a, 0x0b, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x12, 0x39, 0x0a, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x69, + 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x45, 0x0a, 0x06, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, + 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x2e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x32, 0x8e, + 0x14, 0x0a, 0x04, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, + 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x92, 0x41, 0x09, 0x0a, + 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, + 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x6b, 0x69, 0x6e, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x12, 0x7e, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, + 0x22, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x92, 0x41, 0x09, 0x0a, 0x07, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, + 0x31, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x6b, 0x69, 0x6e, 0x64, 0x7d, + 0x12, 0x95, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x75, 0x78, 0x52, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x23, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x22, - 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x99, 0x01, 0x0a, - 0x16, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x75, 0x78, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, - 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x75, - 0x78, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x75, 0x78, - 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, - 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x70, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, + 0x74, 0x46, 0x6c, 0x75, 0x78, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x69, 0x74, + 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x46, 0x6c, 0x75, 0x78, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x2f, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x70, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x75, 0x78, 0x43, 0x72, 0x64, 0x73, 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x75, 0x78, 0x43, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x75, 0x78, 0x43, 0x72, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x76, 0x31, - 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x5f, 0x63, 0x72, 0x64, 0x73, 0x12, 0x94, 0x01, 0x0a, 0x14, 0x47, + 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x12, 0xa3, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x64, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x72, - 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x12, 0x80, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, + 0x92, 0x41, 0x0c, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x58, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x63, 0x6f, 0x6e, 0x63, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x12, 0x8f, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, + 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x92, 0x41, 0x0c, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x58, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, + 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x12, 0xa0, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x09, 0x0a, 0x07, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x76, + 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x7b, 0x6b, 0x69, 0x6e, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x80, 0x01, 0x0a, 0x0e, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x6c, + 0x75, 0x78, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, + 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x6c, + 0x75, 0x78, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x26, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x6c, 0x75, 0x78, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x92, 0x41, 0x09, 0x0a, 0x07, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x3a, 0x01, 0x2a, 0x32, 0x08, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x68, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x6f, + 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x7d, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, - 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x75, 0x78, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x6f, - 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, - 0x75, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x75, 0x78, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x12, 0x77, 0x0a, 0x0e, 0x4c, - 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x25, 0x2e, - 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x12, 0x67, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x74, 0x0a, - 0x0e, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x6c, 0x75, 0x78, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, + 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2d, 0x66, 0x6c, 0x61, 0x67, + 0x73, 0x12, 0x98, 0x01, 0x0a, 0x15, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x53, 0x75, 0x73, 0x70, + 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2c, 0x2e, 0x67, 0x69, + 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x67, + 0x67, 0x6c, 0x65, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x6f, + 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, + 0x65, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x92, 0x41, 0x09, 0x0a, 0x07, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x32, + 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x88, 0x01, 0x0a, + 0x0e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x6c, 0x75, 0x78, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x6c, 0x75, 0x78, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x3a, 0x01, 0x2a, 0x22, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x73, - 0x79, 0x6e, 0x63, 0x12, 0x68, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, - 0x12, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x7c, 0x0a, - 0x0f, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, - 0x12, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, - 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x15, - 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x53, 0x75, 0x73, - 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x53, 0x75, 0x73, 0x70, 0x65, - 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x7c, 0x0a, 0x0e, 0x47, 0x65, - 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x25, 0x2e, 0x67, - 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, - 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x7d, 0x0a, 0x0e, 0x49, 0x73, 0x43, 0x52, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, + 0x92, 0x41, 0x0c, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x58, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x2d, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x0e, 0x49, 0x73, 0x43, 0x52, 0x44, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x43, 0x52, 0x44, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x43, 0x52, 0x44, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x64, 0x2f, 0x69, 0x73, 0x5f, 0x61, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x70, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x49, 0x6e, - 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, - 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, - 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, - 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x76, 0x31, 0x2f, - 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x6f, 0x0a, 0x0c, 0x4c, 0x69, 0x73, - 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x6f, - 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, - 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x73, 0x0a, 0x09, 0x47, 0x65, - 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, - 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x6f, - 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, - 0x65, 0x73, 0x2f, 0x7b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x12, - 0x96, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x6f, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x69, 0x73, 0x2d, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, + 0xa9, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, + 0x12, 0x23, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, + 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x92, 0x41, 0x09, + 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, + 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x6b, 0x69, 0x6e, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x7a, 0x0a, 0x0c, 0x4c, + 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x67, 0x69, + 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x78, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x12, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x92, 0x41, 0x08, 0x0a, 0x06, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x12, 0x9f, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x2e, 0x67, 0x69, + 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, - 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, - 0x2a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x9c, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0xa9, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x69, + 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, - 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x26, 0x12, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x7d, 0x42, 0xa4, 0x01, 0x92, 0x41, 0x74, 0x12, 0x4e, 0x0a, - 0x15, 0x57, 0x65, 0x61, 0x76, 0x65, 0x20, 0x47, 0x69, 0x74, 0x4f, 0x70, 0x73, 0x20, 0x43, 0x6f, - 0x72, 0x65, 0x20, 0x41, 0x50, 0x49, 0x12, 0x30, 0x54, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, - 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x57, 0x65, 0x61, 0x76, 0x65, 0x20, 0x47, 0x69, 0x74, - 0x4f, 0x70, 0x73, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x32, 0x03, 0x30, 0x2e, 0x31, 0x32, 0x10, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, - 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, - 0x6e, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x77, 0x65, - 0x61, 0x76, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x77, 0x65, 0x61, 0x76, 0x65, 0x2d, 0x67, - 0x69, 0x74, 0x6f, 0x70, 0x73, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, + 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x08, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x42, + 0xd8, 0x02, 0x92, 0x41, 0xa7, 0x02, 0x12, 0x4e, 0x0a, 0x15, 0x57, 0x65, 0x61, 0x76, 0x65, 0x20, + 0x47, 0x69, 0x74, 0x4f, 0x70, 0x73, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x41, 0x50, 0x49, 0x12, + 0x30, 0x54, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x73, + 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x57, 0x65, 0x61, 0x76, 0x65, 0x20, 0x47, 0x69, 0x74, 0x4f, 0x70, 0x73, 0x20, 0x43, 0x6f, 0x72, + 0x65, 0x32, 0x03, 0x30, 0x2e, 0x31, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x6a, 0x1b, 0x0a, 0x07, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x10, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x65, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x6a, 0x31, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x12, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x72, + 0x69, 0x67, 0x67, 0x65, 0x72, 0x20, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, + 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x6a, 0x2d, 0x0a, 0x06, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x12, 0x23, 0x51, 0x75, 0x65, 0x72, 0x79, 0x20, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6a, 0x32, 0x0a, 0x08, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x26, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, + 0x41, 0x50, 0x49, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, + 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x5a, 0x2b, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x77, 0x65, 0x61, 0x76, 0x65, 0x77, + 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x77, 0x65, 0x61, 0x76, 0x65, 0x2d, 0x67, 0x69, 0x74, 0x6f, 0x70, + 0x73, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -3918,7 +3951,7 @@ func file_api_core_core_proto_rawDescGZIP() []byte { return file_api_core_core_proto_rawDescData } -var file_api_core_core_proto_msgTypes = make([]protoimpl.MessageInfo, 57) +var file_api_core_core_proto_msgTypes = make([]protoimpl.MessageInfo, 56) var file_api_core_core_proto_goTypes = []interface{}{ (*GetInventoryRequest)(nil), // 0: gitops_core.v1.GetInventoryRequest (*GetInventoryResponse)(nil), // 1: gitops_core.v1.GetInventoryResponse @@ -3973,105 +4006,98 @@ var file_api_core_core_proto_goTypes = []interface{}{ (*PolicyParam)(nil), // 50: gitops_core.v1.PolicyParam (*PolicyTargets)(nil), // 51: gitops_core.v1.PolicyTargets (*PolicyTargetLabel)(nil), // 52: gitops_core.v1.PolicyTargetLabel - nil, // 53: gitops_core.v1.ListObjectsRequest.LabelsEntry - nil, // 54: gitops_core.v1.GetFeatureFlagsResponse.FlagsEntry - nil, // 55: gitops_core.v1.IsCRDAvailableResponse.ClustersEntry - nil, // 56: gitops_core.v1.PolicyTargetLabel.ValuesEntry - (*InventoryEntry)(nil), // 57: gitops_core.v1.InventoryEntry - (*anypb.Any)(nil), // 58: google.protobuf.Any - (*Deployment)(nil), // 59: gitops_core.v1.Deployment - (*Crd)(nil), // 60: gitops_core.v1.Crd - (*Object)(nil), // 61: gitops_core.v1.Object - (*GroupVersionKind)(nil), // 62: gitops_core.v1.GroupVersionKind - (*Namespace)(nil), // 63: gitops_core.v1.Namespace + nil, // 53: gitops_core.v1.GetFeatureFlagsResponse.FlagsEntry + nil, // 54: gitops_core.v1.IsCRDAvailableResponse.ClustersEntry + nil, // 55: gitops_core.v1.PolicyTargetLabel.ValuesEntry + (*InventoryEntry)(nil), // 56: gitops_core.v1.InventoryEntry + (*anypb.Any)(nil), // 57: google.protobuf.Any + (*Deployment)(nil), // 58: gitops_core.v1.Deployment + (*Crd)(nil), // 59: gitops_core.v1.Crd + (*Object)(nil), // 60: gitops_core.v1.Object + (*GroupVersionKind)(nil), // 61: gitops_core.v1.GroupVersionKind + (*Namespace)(nil), // 62: gitops_core.v1.Namespace + (*Event)(nil), // 63: gitops_core.v1.Event (*ObjectRef)(nil), // 64: gitops_core.v1.ObjectRef - (*Event)(nil), // 65: gitops_core.v1.Event } var file_api_core_core_proto_depIdxs = []int32{ - 57, // 0: gitops_core.v1.GetInventoryResponse.entries:type_name -> gitops_core.v1.InventoryEntry + 56, // 0: gitops_core.v1.GetInventoryResponse.entries:type_name -> gitops_core.v1.InventoryEntry 7, // 1: gitops_core.v1.PolicyValidation.occurrences:type_name -> gitops_core.v1.PolicyValidationOccurrence 8, // 2: gitops_core.v1.PolicyValidation.parameters:type_name -> gitops_core.v1.PolicyValidationParam 10, // 3: gitops_core.v1.ListPolicyValidationsRequest.pagination:type_name -> gitops_core.v1.Pagination 2, // 4: gitops_core.v1.ListPolicyValidationsResponse.violations:type_name -> gitops_core.v1.PolicyValidation 11, // 5: gitops_core.v1.ListPolicyValidationsResponse.errors:type_name -> gitops_core.v1.ListError 2, // 6: gitops_core.v1.GetPolicyValidationResponse.validation:type_name -> gitops_core.v1.PolicyValidation - 58, // 7: gitops_core.v1.PolicyValidationParam.value:type_name -> google.protobuf.Any - 59, // 8: gitops_core.v1.ListFluxRuntimeObjectsResponse.deployments:type_name -> gitops_core.v1.Deployment + 57, // 7: gitops_core.v1.PolicyValidationParam.value:type_name -> google.protobuf.Any + 58, // 8: gitops_core.v1.ListFluxRuntimeObjectsResponse.deployments:type_name -> gitops_core.v1.Deployment 11, // 9: gitops_core.v1.ListFluxRuntimeObjectsResponse.errors:type_name -> gitops_core.v1.ListError - 60, // 10: gitops_core.v1.ListFluxCrdsResponse.crds:type_name -> gitops_core.v1.Crd + 59, // 10: gitops_core.v1.ListFluxCrdsResponse.crds:type_name -> gitops_core.v1.Crd 11, // 11: gitops_core.v1.ListFluxCrdsResponse.errors:type_name -> gitops_core.v1.ListError - 61, // 12: gitops_core.v1.GetObjectResponse.object:type_name -> gitops_core.v1.Object - 53, // 13: gitops_core.v1.ListObjectsRequest.labels:type_name -> gitops_core.v1.ListObjectsRequest.LabelsEntry - 61, // 14: gitops_core.v1.ListObjectsResponse.objects:type_name -> gitops_core.v1.Object - 11, // 15: gitops_core.v1.ListObjectsResponse.errors:type_name -> gitops_core.v1.ListError - 19, // 16: gitops_core.v1.ListObjectsResponse.searchedNamespaces:type_name -> gitops_core.v1.ClusterNamespaceList - 62, // 17: gitops_core.v1.GetReconciledObjectsRequest.kinds:type_name -> gitops_core.v1.GroupVersionKind - 61, // 18: gitops_core.v1.GetReconciledObjectsResponse.objects:type_name -> gitops_core.v1.Object - 62, // 19: gitops_core.v1.GetChildObjectsRequest.groupVersionKind:type_name -> gitops_core.v1.GroupVersionKind - 61, // 20: gitops_core.v1.GetChildObjectsResponse.objects:type_name -> gitops_core.v1.Object - 63, // 21: gitops_core.v1.ListNamespacesResponse.namespaces:type_name -> gitops_core.v1.Namespace - 64, // 22: gitops_core.v1.ListEventsRequest.involvedObject:type_name -> gitops_core.v1.ObjectRef - 65, // 23: gitops_core.v1.ListEventsResponse.events:type_name -> gitops_core.v1.Event - 64, // 24: gitops_core.v1.SyncFluxObjectRequest.objects:type_name -> gitops_core.v1.ObjectRef - 54, // 25: gitops_core.v1.GetFeatureFlagsResponse.flags:type_name -> gitops_core.v1.GetFeatureFlagsResponse.FlagsEntry - 64, // 26: gitops_core.v1.ToggleSuspendResourceRequest.objects:type_name -> gitops_core.v1.ObjectRef - 40, // 27: gitops_core.v1.GetSessionLogsResponse.logs:type_name -> gitops_core.v1.LogEntry - 55, // 28: gitops_core.v1.IsCRDAvailableResponse.clusters:type_name -> gitops_core.v1.IsCRDAvailableResponse.ClustersEntry - 10, // 29: gitops_core.v1.ListPoliciesRequest.pagination:type_name -> gitops_core.v1.Pagination - 48, // 30: gitops_core.v1.ListPoliciesResponse.policies:type_name -> gitops_core.v1.PolicyObj - 11, // 31: gitops_core.v1.ListPoliciesResponse.errors:type_name -> gitops_core.v1.ListError - 48, // 32: gitops_core.v1.GetPolicyResponse.policy:type_name -> gitops_core.v1.PolicyObj - 49, // 33: gitops_core.v1.PolicyObj.standards:type_name -> gitops_core.v1.PolicyStandard - 50, // 34: gitops_core.v1.PolicyObj.parameters:type_name -> gitops_core.v1.PolicyParam - 51, // 35: gitops_core.v1.PolicyObj.targets:type_name -> gitops_core.v1.PolicyTargets - 58, // 36: gitops_core.v1.PolicyParam.value:type_name -> google.protobuf.Any - 52, // 37: gitops_core.v1.PolicyTargets.labels:type_name -> gitops_core.v1.PolicyTargetLabel - 56, // 38: gitops_core.v1.PolicyTargetLabel.values:type_name -> gitops_core.v1.PolicyTargetLabel.ValuesEntry - 16, // 39: gitops_core.v1.Core.GetObject:input_type -> gitops_core.v1.GetObjectRequest - 18, // 40: gitops_core.v1.Core.ListObjects:input_type -> gitops_core.v1.ListObjectsRequest - 12, // 41: gitops_core.v1.Core.ListFluxRuntimeObjects:input_type -> gitops_core.v1.ListFluxRuntimeObjectsRequest - 14, // 42: gitops_core.v1.Core.ListFluxCrds:input_type -> gitops_core.v1.ListFluxCrdsRequest - 21, // 43: gitops_core.v1.Core.GetReconciledObjects:input_type -> gitops_core.v1.GetReconciledObjectsRequest - 23, // 44: gitops_core.v1.Core.GetChildObjects:input_type -> gitops_core.v1.GetChildObjectsRequest - 25, // 45: gitops_core.v1.Core.GetFluxNamespace:input_type -> gitops_core.v1.GetFluxNamespaceRequest - 27, // 46: gitops_core.v1.Core.ListNamespaces:input_type -> gitops_core.v1.ListNamespacesRequest - 29, // 47: gitops_core.v1.Core.ListEvents:input_type -> gitops_core.v1.ListEventsRequest - 31, // 48: gitops_core.v1.Core.SyncFluxObject:input_type -> gitops_core.v1.SyncFluxObjectRequest - 33, // 49: gitops_core.v1.Core.GetVersion:input_type -> gitops_core.v1.GetVersionRequest - 35, // 50: gitops_core.v1.Core.GetFeatureFlags:input_type -> gitops_core.v1.GetFeatureFlagsRequest - 37, // 51: gitops_core.v1.Core.ToggleSuspendResource:input_type -> gitops_core.v1.ToggleSuspendResourceRequest - 39, // 52: gitops_core.v1.Core.GetSessionLogs:input_type -> gitops_core.v1.GetSessionLogsRequest - 42, // 53: gitops_core.v1.Core.IsCRDAvailable:input_type -> gitops_core.v1.IsCRDAvailableRequest - 0, // 54: gitops_core.v1.Core.GetInventory:input_type -> gitops_core.v1.GetInventoryRequest - 44, // 55: gitops_core.v1.Core.ListPolicies:input_type -> gitops_core.v1.ListPoliciesRequest - 46, // 56: gitops_core.v1.Core.GetPolicy:input_type -> gitops_core.v1.GetPolicyRequest - 3, // 57: gitops_core.v1.Core.ListPolicyValidations:input_type -> gitops_core.v1.ListPolicyValidationsRequest - 5, // 58: gitops_core.v1.Core.GetPolicyValidation:input_type -> gitops_core.v1.GetPolicyValidationRequest - 17, // 59: gitops_core.v1.Core.GetObject:output_type -> gitops_core.v1.GetObjectResponse - 20, // 60: gitops_core.v1.Core.ListObjects:output_type -> gitops_core.v1.ListObjectsResponse - 13, // 61: gitops_core.v1.Core.ListFluxRuntimeObjects:output_type -> gitops_core.v1.ListFluxRuntimeObjectsResponse - 15, // 62: gitops_core.v1.Core.ListFluxCrds:output_type -> gitops_core.v1.ListFluxCrdsResponse - 22, // 63: gitops_core.v1.Core.GetReconciledObjects:output_type -> gitops_core.v1.GetReconciledObjectsResponse - 24, // 64: gitops_core.v1.Core.GetChildObjects:output_type -> gitops_core.v1.GetChildObjectsResponse - 26, // 65: gitops_core.v1.Core.GetFluxNamespace:output_type -> gitops_core.v1.GetFluxNamespaceResponse - 28, // 66: gitops_core.v1.Core.ListNamespaces:output_type -> gitops_core.v1.ListNamespacesResponse - 30, // 67: gitops_core.v1.Core.ListEvents:output_type -> gitops_core.v1.ListEventsResponse - 32, // 68: gitops_core.v1.Core.SyncFluxObject:output_type -> gitops_core.v1.SyncFluxObjectResponse - 34, // 69: gitops_core.v1.Core.GetVersion:output_type -> gitops_core.v1.GetVersionResponse - 36, // 70: gitops_core.v1.Core.GetFeatureFlags:output_type -> gitops_core.v1.GetFeatureFlagsResponse - 38, // 71: gitops_core.v1.Core.ToggleSuspendResource:output_type -> gitops_core.v1.ToggleSuspendResourceResponse - 41, // 72: gitops_core.v1.Core.GetSessionLogs:output_type -> gitops_core.v1.GetSessionLogsResponse - 43, // 73: gitops_core.v1.Core.IsCRDAvailable:output_type -> gitops_core.v1.IsCRDAvailableResponse - 1, // 74: gitops_core.v1.Core.GetInventory:output_type -> gitops_core.v1.GetInventoryResponse - 45, // 75: gitops_core.v1.Core.ListPolicies:output_type -> gitops_core.v1.ListPoliciesResponse - 47, // 76: gitops_core.v1.Core.GetPolicy:output_type -> gitops_core.v1.GetPolicyResponse - 4, // 77: gitops_core.v1.Core.ListPolicyValidations:output_type -> gitops_core.v1.ListPolicyValidationsResponse - 6, // 78: gitops_core.v1.Core.GetPolicyValidation:output_type -> gitops_core.v1.GetPolicyValidationResponse - 59, // [59:79] is the sub-list for method output_type - 39, // [39:59] is the sub-list for method input_type - 39, // [39:39] is the sub-list for extension type_name - 39, // [39:39] is the sub-list for extension extendee - 0, // [0:39] is the sub-list for field type_name + 60, // 12: gitops_core.v1.GetObjectResponse.object:type_name -> gitops_core.v1.Object + 60, // 13: gitops_core.v1.ListObjectsResponse.objects:type_name -> gitops_core.v1.Object + 11, // 14: gitops_core.v1.ListObjectsResponse.errors:type_name -> gitops_core.v1.ListError + 19, // 15: gitops_core.v1.ListObjectsResponse.searched_namespaces:type_name -> gitops_core.v1.ClusterNamespaceList + 61, // 16: gitops_core.v1.GetReconciledObjectsRequest.kinds:type_name -> gitops_core.v1.GroupVersionKind + 60, // 17: gitops_core.v1.GetReconciledObjectsResponse.objects:type_name -> gitops_core.v1.Object + 61, // 18: gitops_core.v1.GetChildObjectsRequest.group_version_kind:type_name -> gitops_core.v1.GroupVersionKind + 60, // 19: gitops_core.v1.GetChildObjectsResponse.objects:type_name -> gitops_core.v1.Object + 62, // 20: gitops_core.v1.ListNamespacesResponse.namespaces:type_name -> gitops_core.v1.Namespace + 63, // 21: gitops_core.v1.ListEventsResponse.events:type_name -> gitops_core.v1.Event + 64, // 22: gitops_core.v1.SyncFluxObjectRequest.objects:type_name -> gitops_core.v1.ObjectRef + 53, // 23: gitops_core.v1.GetFeatureFlagsResponse.flags:type_name -> gitops_core.v1.GetFeatureFlagsResponse.FlagsEntry + 64, // 24: gitops_core.v1.ToggleSuspendResourceRequest.objects:type_name -> gitops_core.v1.ObjectRef + 40, // 25: gitops_core.v1.GetSessionLogsResponse.logs:type_name -> gitops_core.v1.LogEntry + 54, // 26: gitops_core.v1.IsCRDAvailableResponse.clusters:type_name -> gitops_core.v1.IsCRDAvailableResponse.ClustersEntry + 10, // 27: gitops_core.v1.ListPoliciesRequest.pagination:type_name -> gitops_core.v1.Pagination + 48, // 28: gitops_core.v1.ListPoliciesResponse.policies:type_name -> gitops_core.v1.PolicyObj + 11, // 29: gitops_core.v1.ListPoliciesResponse.errors:type_name -> gitops_core.v1.ListError + 48, // 30: gitops_core.v1.GetPolicyResponse.policy:type_name -> gitops_core.v1.PolicyObj + 49, // 31: gitops_core.v1.PolicyObj.standards:type_name -> gitops_core.v1.PolicyStandard + 50, // 32: gitops_core.v1.PolicyObj.parameters:type_name -> gitops_core.v1.PolicyParam + 51, // 33: gitops_core.v1.PolicyObj.targets:type_name -> gitops_core.v1.PolicyTargets + 57, // 34: gitops_core.v1.PolicyParam.value:type_name -> google.protobuf.Any + 52, // 35: gitops_core.v1.PolicyTargets.labels:type_name -> gitops_core.v1.PolicyTargetLabel + 55, // 36: gitops_core.v1.PolicyTargetLabel.values:type_name -> gitops_core.v1.PolicyTargetLabel.ValuesEntry + 16, // 37: gitops_core.v1.Core.GetObject:input_type -> gitops_core.v1.GetObjectRequest + 18, // 38: gitops_core.v1.Core.ListObjects:input_type -> gitops_core.v1.ListObjectsRequest + 12, // 39: gitops_core.v1.Core.ListFluxRuntimeObjects:input_type -> gitops_core.v1.ListFluxRuntimeObjectsRequest + 14, // 40: gitops_core.v1.Core.ListFluxCrds:input_type -> gitops_core.v1.ListFluxCrdsRequest + 21, // 41: gitops_core.v1.Core.GetReconciledObjects:input_type -> gitops_core.v1.GetReconciledObjectsRequest + 23, // 42: gitops_core.v1.Core.GetChildObjects:input_type -> gitops_core.v1.GetChildObjectsRequest + 29, // 43: gitops_core.v1.Core.ListEvents:input_type -> gitops_core.v1.ListEventsRequest + 31, // 44: gitops_core.v1.Core.SyncFluxObject:input_type -> gitops_core.v1.SyncFluxObjectRequest + 33, // 45: gitops_core.v1.Core.GetVersion:input_type -> gitops_core.v1.GetVersionRequest + 35, // 46: gitops_core.v1.Core.GetFeatureFlags:input_type -> gitops_core.v1.GetFeatureFlagsRequest + 37, // 47: gitops_core.v1.Core.ToggleSuspendResource:input_type -> gitops_core.v1.ToggleSuspendResourceRequest + 39, // 48: gitops_core.v1.Core.GetSessionLogs:input_type -> gitops_core.v1.GetSessionLogsRequest + 42, // 49: gitops_core.v1.Core.IsCRDAvailable:input_type -> gitops_core.v1.IsCRDAvailableRequest + 0, // 50: gitops_core.v1.Core.GetInventory:input_type -> gitops_core.v1.GetInventoryRequest + 44, // 51: gitops_core.v1.Core.ListPolicies:input_type -> gitops_core.v1.ListPoliciesRequest + 46, // 52: gitops_core.v1.Core.GetPolicy:input_type -> gitops_core.v1.GetPolicyRequest + 3, // 53: gitops_core.v1.Core.ListPolicyValidations:input_type -> gitops_core.v1.ListPolicyValidationsRequest + 5, // 54: gitops_core.v1.Core.GetPolicyValidation:input_type -> gitops_core.v1.GetPolicyValidationRequest + 17, // 55: gitops_core.v1.Core.GetObject:output_type -> gitops_core.v1.GetObjectResponse + 20, // 56: gitops_core.v1.Core.ListObjects:output_type -> gitops_core.v1.ListObjectsResponse + 13, // 57: gitops_core.v1.Core.ListFluxRuntimeObjects:output_type -> gitops_core.v1.ListFluxRuntimeObjectsResponse + 15, // 58: gitops_core.v1.Core.ListFluxCrds:output_type -> gitops_core.v1.ListFluxCrdsResponse + 22, // 59: gitops_core.v1.Core.GetReconciledObjects:output_type -> gitops_core.v1.GetReconciledObjectsResponse + 24, // 60: gitops_core.v1.Core.GetChildObjects:output_type -> gitops_core.v1.GetChildObjectsResponse + 30, // 61: gitops_core.v1.Core.ListEvents:output_type -> gitops_core.v1.ListEventsResponse + 32, // 62: gitops_core.v1.Core.SyncFluxObject:output_type -> gitops_core.v1.SyncFluxObjectResponse + 34, // 63: gitops_core.v1.Core.GetVersion:output_type -> gitops_core.v1.GetVersionResponse + 36, // 64: gitops_core.v1.Core.GetFeatureFlags:output_type -> gitops_core.v1.GetFeatureFlagsResponse + 38, // 65: gitops_core.v1.Core.ToggleSuspendResource:output_type -> gitops_core.v1.ToggleSuspendResourceResponse + 41, // 66: gitops_core.v1.Core.GetSessionLogs:output_type -> gitops_core.v1.GetSessionLogsResponse + 43, // 67: gitops_core.v1.Core.IsCRDAvailable:output_type -> gitops_core.v1.IsCRDAvailableResponse + 1, // 68: gitops_core.v1.Core.GetInventory:output_type -> gitops_core.v1.GetInventoryResponse + 45, // 69: gitops_core.v1.Core.ListPolicies:output_type -> gitops_core.v1.ListPoliciesResponse + 47, // 70: gitops_core.v1.Core.GetPolicy:output_type -> gitops_core.v1.GetPolicyResponse + 4, // 71: gitops_core.v1.Core.ListPolicyValidations:output_type -> gitops_core.v1.ListPolicyValidationsResponse + 6, // 72: gitops_core.v1.Core.GetPolicyValidation:output_type -> gitops_core.v1.GetPolicyValidationResponse + 55, // [55:73] is the sub-list for method output_type + 37, // [37:55] is the sub-list for method input_type + 37, // [37:37] is the sub-list for extension type_name + 37, // [37:37] is the sub-list for extension extendee + 0, // [0:37] is the sub-list for field type_name } func init() { file_api_core_core_proto_init() } @@ -4724,7 +4750,7 @@ func file_api_core_core_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_core_core_proto_rawDesc, NumEnums: 0, - NumMessages: 57, + NumMessages: 56, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/api/core/core.pb.gw.go b/pkg/api/core/core.pb.gw.go index c9dfdb2961..0407bf4ee1 100644 --- a/pkg/api/core/core.pb.gw.go +++ b/pkg/api/core/core.pb.gw.go @@ -32,7 +32,7 @@ var _ = utilities.NewDoubleArray var _ = metadata.Join var ( - filter_Core_GetObject_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_Core_GetObject_0 = &utilities.DoubleArray{Encoding: map[string]int{"namespace": 0, "kind": 1, "name": 2}, Base: []int{1, 2, 4, 6, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 2, 3, 3, 4, 4}} ) func request_Core_GetObject_0(ctx context.Context, marshaler runtime.Marshaler, client CoreClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -46,6 +46,26 @@ func request_Core_GetObject_0(ctx context.Context, marshaler runtime.Marshaler, _ = err ) + val, ok = pathParams["namespace"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace") + } + + protoReq.Namespace, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err) + } + + val, ok = pathParams["kind"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "kind") + } + + protoReq.Kind, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "kind", err) + } + val, ok = pathParams["name"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") @@ -79,6 +99,26 @@ func local_request_Core_GetObject_0(ctx context.Context, marshaler runtime.Marsh _ = err ) + val, ok = pathParams["namespace"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace") + } + + protoReq.Namespace, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err) + } + + val, ok = pathParams["kind"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "kind") + } + + protoReq.Kind, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "kind", err) + } + val, ok = pathParams["name"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") @@ -101,15 +141,35 @@ func local_request_Core_GetObject_0(ctx context.Context, marshaler runtime.Marsh } +var ( + filter_Core_ListObjects_0 = &utilities.DoubleArray{Encoding: map[string]int{"kind": 0}, Base: []int{1, 2, 0, 0}, Check: []int{0, 1, 2, 2}} +) + func request_Core_ListObjects_0(ctx context.Context, marshaler runtime.Marshaler, client CoreClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ListObjectsRequest var metadata runtime.ServerMetadata - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["kind"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "kind") } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + + protoReq.Kind, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "kind", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Core_ListObjects_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -122,11 +182,27 @@ func local_request_Core_ListObjects_0(ctx context.Context, marshaler runtime.Mar var protoReq ListObjectsRequest var metadata runtime.ServerMetadata - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["kind"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "kind") } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + + protoReq.Kind, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "kind", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Core_ListObjects_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -135,21 +211,10 @@ func local_request_Core_ListObjects_0(ctx context.Context, marshaler runtime.Mar } -var ( - filter_Core_ListFluxRuntimeObjects_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - func request_Core_ListFluxRuntimeObjects_0(ctx context.Context, marshaler runtime.Marshaler, client CoreClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ListFluxRuntimeObjectsRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Core_ListFluxRuntimeObjects_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - msg, err := client.ListFluxRuntimeObjects(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err @@ -159,33 +224,15 @@ func local_request_Core_ListFluxRuntimeObjects_0(ctx context.Context, marshaler var protoReq ListFluxRuntimeObjectsRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Core_ListFluxRuntimeObjects_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - msg, err := server.ListFluxRuntimeObjects(ctx, &protoReq) return msg, metadata, err } -var ( - filter_Core_ListFluxCrds_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - func request_Core_ListFluxCrds_0(ctx context.Context, marshaler runtime.Marshaler, client CoreClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ListFluxCrdsRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Core_ListFluxCrds_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - msg, err := client.ListFluxCrds(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err @@ -195,13 +242,6 @@ func local_request_Core_ListFluxCrds_0(ctx context.Context, marshaler runtime.Ma var protoReq ListFluxCrdsRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Core_ListFluxCrds_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - msg, err := server.ListFluxCrds(ctx, &protoReq) return msg, metadata, err @@ -275,65 +315,50 @@ func local_request_Core_GetChildObjects_0(ctx context.Context, marshaler runtime } -func request_Core_GetFluxNamespace_0(ctx context.Context, marshaler runtime.Marshaler, client CoreClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetFluxNamespaceRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GetFluxNamespace(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Core_GetFluxNamespace_0(ctx context.Context, marshaler runtime.Marshaler, server CoreServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetFluxNamespaceRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.GetFluxNamespace(ctx, &protoReq) - return msg, metadata, err - -} +var ( + filter_Core_ListEvents_0 = &utilities.DoubleArray{Encoding: map[string]int{"namespace": 0, "kind": 1, "name": 2}, Base: []int{1, 2, 4, 6, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 2, 3, 3, 4, 4}} +) -func request_Core_ListNamespaces_0(ctx context.Context, marshaler runtime.Marshaler, client CoreClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListNamespacesRequest +func request_Core_ListEvents_0(ctx context.Context, marshaler runtime.Marshaler, client CoreClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListEventsRequest var metadata runtime.ServerMetadata - msg, err := client.ListNamespaces(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err + var ( + val string + ok bool + err error + _ = err + ) -} + val, ok = pathParams["namespace"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace") + } -func local_request_Core_ListNamespaces_0(ctx context.Context, marshaler runtime.Marshaler, server CoreServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListNamespacesRequest - var metadata runtime.ServerMetadata + protoReq.Namespace, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err) + } - msg, err := server.ListNamespaces(ctx, &protoReq) - return msg, metadata, err + val, ok = pathParams["kind"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "kind") + } -} + protoReq.Kind, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "kind", err) + } -var ( - filter_Core_ListEvents_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } -func request_Core_ListEvents_0(ctx context.Context, marshaler runtime.Marshaler, client CoreClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListEventsRequest - var metadata runtime.ServerMetadata + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) @@ -351,6 +376,43 @@ func local_request_Core_ListEvents_0(ctx context.Context, marshaler runtime.Mars var protoReq ListEventsRequest var metadata runtime.ServerMetadata + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["namespace"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace") + } + + protoReq.Namespace, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err) + } + + val, ok = pathParams["kind"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "kind") + } + + protoReq.Kind, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "kind", err) + } + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -467,15 +529,18 @@ func local_request_Core_ToggleSuspendResource_0(ctx context.Context, marshaler r } +var ( + filter_Core_GetSessionLogs_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + func request_Core_GetSessionLogs_0(ctx context.Context, marshaler runtime.Marshaler, client CoreClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq GetSessionLogsRequest var metadata runtime.ServerMetadata - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Core_GetSessionLogs_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -488,11 +553,10 @@ func local_request_Core_GetSessionLogs_0(ctx context.Context, marshaler runtime. var protoReq GetSessionLogsRequest var metadata runtime.ServerMetadata - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Core_GetSessionLogs_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -501,19 +565,25 @@ func local_request_Core_GetSessionLogs_0(ctx context.Context, marshaler runtime. } -var ( - filter_Core_IsCRDAvailable_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - func request_Core_IsCRDAvailable_0(ctx context.Context, marshaler runtime.Marshaler, client CoreClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq IsCRDAvailableRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Core_IsCRDAvailable_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) } msg, err := client.IsCRDAvailable(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -525,11 +595,21 @@ func local_request_Core_IsCRDAvailable_0(ctx context.Context, marshaler runtime. var protoReq IsCRDAvailableRequest var metadata runtime.ServerMetadata - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Core_IsCRDAvailable_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) } msg, err := server.IsCRDAvailable(ctx, &protoReq) @@ -538,13 +618,50 @@ func local_request_Core_IsCRDAvailable_0(ctx context.Context, marshaler runtime. } var ( - filter_Core_GetInventory_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_Core_GetInventory_0 = &utilities.DoubleArray{Encoding: map[string]int{"namespace": 0, "kind": 1, "name": 2}, Base: []int{1, 2, 4, 6, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 2, 3, 3, 4, 4}} ) func request_Core_GetInventory_0(ctx context.Context, marshaler runtime.Marshaler, client CoreClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq GetInventoryRequest var metadata runtime.ServerMetadata + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["namespace"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace") + } + + protoReq.Namespace, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err) + } + + val, ok = pathParams["kind"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "kind") + } + + protoReq.Kind, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "kind", err) + } + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -561,6 +678,43 @@ func local_request_Core_GetInventory_0(ctx context.Context, marshaler runtime.Ma var protoReq GetInventoryRequest var metadata runtime.ServerMetadata + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["namespace"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace") + } + + protoReq.Namespace, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err) + } + + val, ok = pathParams["kind"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "kind") + } + + protoReq.Kind, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "kind", err) + } + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -610,7 +764,7 @@ func local_request_Core_ListPolicies_0(ctx context.Context, marshaler runtime.Ma } var ( - filter_Core_GetPolicy_0 = &utilities.DoubleArray{Encoding: map[string]int{"policyName": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_Core_GetPolicy_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 2, 0, 0}, Check: []int{0, 1, 2, 2}} ) func request_Core_GetPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client CoreClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -624,14 +778,14 @@ func request_Core_GetPolicy_0(ctx context.Context, marshaler runtime.Marshaler, _ = err ) - val, ok = pathParams["policyName"] + val, ok = pathParams["name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "policyName") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") } - protoReq.PolicyName, err = runtime.String(val) + protoReq.Name, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "policyName", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) } if err := req.ParseForm(); err != nil { @@ -657,14 +811,14 @@ func local_request_Core_GetPolicy_0(ctx context.Context, marshaler runtime.Marsh _ = err ) - val, ok = pathParams["policyName"] + val, ok = pathParams["name"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "policyName") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") } - protoReq.PolicyName, err = runtime.String(val) + protoReq.Name, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "policyName", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) } if err := req.ParseForm(); err != nil { @@ -679,15 +833,18 @@ func local_request_Core_GetPolicy_0(ctx context.Context, marshaler runtime.Marsh } +var ( + filter_Core_ListPolicyValidations_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + func request_Core_ListPolicyValidations_0(ctx context.Context, marshaler runtime.Marshaler, client CoreClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ListPolicyValidationsRequest var metadata runtime.ServerMetadata - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Core_ListPolicyValidations_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -700,11 +857,10 @@ func local_request_Core_ListPolicyValidations_0(ctx context.Context, marshaler r var protoReq ListPolicyValidationsRequest var metadata runtime.ServerMetadata - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Core_ListPolicyValidations_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -714,7 +870,7 @@ func local_request_Core_ListPolicyValidations_0(ctx context.Context, marshaler r } var ( - filter_Core_GetPolicyValidation_0 = &utilities.DoubleArray{Encoding: map[string]int{"validationId": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_Core_GetPolicyValidation_0 = &utilities.DoubleArray{Encoding: map[string]int{"validation_id": 0, "validationId": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} ) func request_Core_GetPolicyValidation_0(ctx context.Context, marshaler runtime.Marshaler, client CoreClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -728,14 +884,14 @@ func request_Core_GetPolicyValidation_0(ctx context.Context, marshaler runtime.M _ = err ) - val, ok = pathParams["validationId"] + val, ok = pathParams["validation_id"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "validationId") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "validation_id") } protoReq.ValidationId, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "validationId", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "validation_id", err) } if err := req.ParseForm(); err != nil { @@ -761,14 +917,14 @@ func local_request_Core_GetPolicyValidation_0(ctx context.Context, marshaler run _ = err ) - val, ok = pathParams["validationId"] + val, ok = pathParams["validation_id"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "validationId") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "validation_id") } protoReq.ValidationId, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "validationId", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "validation_id", err) } if err := req.ParseForm(); err != nil { @@ -795,43 +951,47 @@ func RegisterCoreHandlerServer(ctx context.Context, mux *runtime.ServeMux, serve var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetObject", runtime.WithHTTPPathPattern("/v1/object/{name}")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetObject", runtime.WithHTTPPathPattern("/v1/namespaces/{namespace}/objects/{kind}/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_GetObject_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_GetObject_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetObject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetObject_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_Core_ListObjects_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Core_ListObjects_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ListObjects", runtime.WithHTTPPathPattern("/v1/objects")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ListObjects", runtime.WithHTTPPathPattern("/v1/objects/{kind}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_ListObjects_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_ListObjects_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_ListObjects_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_ListObjects_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -841,20 +1001,22 @@ func RegisterCoreHandlerServer(ctx context.Context, mux *runtime.ServeMux, serve var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ListFluxRuntimeObjects", runtime.WithHTTPPathPattern("/v1/flux_runtime_objects")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ListFluxRuntimeObjects", runtime.WithHTTPPathPattern("/v1/flux/deployments")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_ListFluxRuntimeObjects_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_ListFluxRuntimeObjects_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_ListFluxRuntimeObjects_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_ListFluxRuntimeObjects_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -864,20 +1026,22 @@ func RegisterCoreHandlerServer(ctx context.Context, mux *runtime.ServeMux, serve var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ListFluxCrds", runtime.WithHTTPPathPattern("/v1/flux_crds")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ListFluxCrds", runtime.WithHTTPPathPattern("/v1/flux/crds")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_ListFluxCrds_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_ListFluxCrds_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_ListFluxCrds_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_ListFluxCrds_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -887,20 +1051,22 @@ func RegisterCoreHandlerServer(ctx context.Context, mux *runtime.ServeMux, serve var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetReconciledObjects", runtime.WithHTTPPathPattern("/v1/reconciled_objects")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetReconciledObjects", runtime.WithHTTPPathPattern("/v1/reconciled_objects")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_GetReconciledObjects_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_GetReconciledObjects_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetReconciledObjects_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetReconciledObjects_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -910,66 +1076,22 @@ func RegisterCoreHandlerServer(ctx context.Context, mux *runtime.ServeMux, serve var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetChildObjects", runtime.WithHTTPPathPattern("/v1/child_objects")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetChildObjects", runtime.WithHTTPPathPattern("/v1/child_objects")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_GetChildObjects_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_GetChildObjects_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetChildObjects_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Core_GetFluxNamespace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetFluxNamespace", runtime.WithHTTPPathPattern("/v1/namespace/flux")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Core_GetFluxNamespace_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Core_GetFluxNamespace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Core_ListNamespaces_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ListNamespaces", runtime.WithHTTPPathPattern("/v1/namespaces")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Core_ListNamespaces_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Core_ListNamespaces_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetChildObjects_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -979,43 +1101,47 @@ func RegisterCoreHandlerServer(ctx context.Context, mux *runtime.ServeMux, serve var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ListEvents", runtime.WithHTTPPathPattern("/v1/events")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ListEvents", runtime.WithHTTPPathPattern("/v1/namespaces/{namespace}/objects/{kind}/{name}/events")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_ListEvents_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_ListEvents_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_ListEvents_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_ListEvents_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_Core_SyncFluxObject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PATCH", pattern_Core_SyncFluxObject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/SyncFluxObject", runtime.WithHTTPPathPattern("/v1/sync")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/SyncFluxObject", runtime.WithHTTPPathPattern("/v1/sync")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_SyncFluxObject_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_SyncFluxObject_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_SyncFluxObject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_SyncFluxObject_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1025,20 +1151,22 @@ func RegisterCoreHandlerServer(ctx context.Context, mux *runtime.ServeMux, serve var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetVersion", runtime.WithHTTPPathPattern("/v1/version")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetVersion", runtime.WithHTTPPathPattern("/v1/version")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_GetVersion_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_GetVersion_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetVersion_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1048,66 +1176,72 @@ func RegisterCoreHandlerServer(ctx context.Context, mux *runtime.ServeMux, serve var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetFeatureFlags", runtime.WithHTTPPathPattern("/v1/featureflags")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetFeatureFlags", runtime.WithHTTPPathPattern("/v1/feature-flags")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_GetFeatureFlags_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_GetFeatureFlags_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetFeatureFlags_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetFeatureFlags_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_Core_ToggleSuspendResource_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PATCH", pattern_Core_ToggleSuspendResource_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ToggleSuspendResource", runtime.WithHTTPPathPattern("/v1/suspend")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ToggleSuspendResource", runtime.WithHTTPPathPattern("/v1/suspend")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_ToggleSuspendResource_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_ToggleSuspendResource_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_ToggleSuspendResource_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_ToggleSuspendResource_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_Core_GetSessionLogs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Core_GetSessionLogs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetSessionLogs", runtime.WithHTTPPathPattern("/v1/session_logs")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetSessionLogs", runtime.WithHTTPPathPattern("/v1/session-logs")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_GetSessionLogs_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_GetSessionLogs_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetSessionLogs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetSessionLogs_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1117,20 +1251,22 @@ func RegisterCoreHandlerServer(ctx context.Context, mux *runtime.ServeMux, serve var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/IsCRDAvailable", runtime.WithHTTPPathPattern("/v1/crd/is_available")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/IsCRDAvailable", runtime.WithHTTPPathPattern("/v1/crds/{name}/is-available")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_IsCRDAvailable_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_IsCRDAvailable_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_IsCRDAvailable_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_IsCRDAvailable_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1140,20 +1276,22 @@ func RegisterCoreHandlerServer(ctx context.Context, mux *runtime.ServeMux, serve var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetInventory", runtime.WithHTTPPathPattern("/v1/inventory")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetInventory", runtime.WithHTTPPathPattern("/v1/namespaces/{namespace}/objects/{kind}/{name}/inventory")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_GetInventory_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_GetInventory_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetInventory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetInventory_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1163,20 +1301,22 @@ func RegisterCoreHandlerServer(ctx context.Context, mux *runtime.ServeMux, serve var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ListPolicies", runtime.WithHTTPPathPattern("/v1/policies")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ListPolicies", runtime.WithHTTPPathPattern("/v1/policies")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_ListPolicies_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_ListPolicies_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_ListPolicies_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_ListPolicies_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1186,43 +1326,47 @@ func RegisterCoreHandlerServer(ctx context.Context, mux *runtime.ServeMux, serve var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetPolicy", runtime.WithHTTPPathPattern("/v1/policies/{policyName}")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetPolicy", runtime.WithHTTPPathPattern("/v1/policies/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_GetPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_GetPolicy_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetPolicy_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_Core_ListPolicyValidations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Core_ListPolicyValidations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ListPolicyValidations", runtime.WithHTTPPathPattern("/v1/policyvalidations")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/ListPolicyValidations", runtime.WithHTTPPathPattern("/v1/policy-validations")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_ListPolicyValidations_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_ListPolicyValidations_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_ListPolicyValidations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_ListPolicyValidations_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1232,20 +1376,22 @@ func RegisterCoreHandlerServer(ctx context.Context, mux *runtime.ServeMux, serve var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetPolicyValidation", runtime.WithHTTPPathPattern("/v1/policyvalidations/{validationId}")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gitops_core.v1.Core/GetPolicyValidation", runtime.WithHTTPPathPattern("/v1/policy-validations/{validation_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Core_GetPolicyValidation_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Core_GetPolicyValidation_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetPolicyValidation_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetPolicyValidation_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1255,7 +1401,7 @@ func RegisterCoreHandlerServer(ctx context.Context, mux *runtime.ServeMux, serve // RegisterCoreHandlerFromEndpoint is same as RegisterCoreHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterCoreHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) + conn, err := grpc.DialContext(ctx, endpoint, opts...) if err != nil { return err } @@ -1294,39 +1440,43 @@ func RegisterCoreHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetObject", runtime.WithHTTPPathPattern("/v1/object/{name}")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetObject", runtime.WithHTTPPathPattern("/v1/namespaces/{namespace}/objects/{kind}/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_GetObject_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_GetObject_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetObject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetObject_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_Core_ListObjects_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Core_ListObjects_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ListObjects", runtime.WithHTTPPathPattern("/v1/objects")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ListObjects", runtime.WithHTTPPathPattern("/v1/objects/{kind}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_ListObjects_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_ListObjects_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_ListObjects_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_ListObjects_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1334,19 +1484,21 @@ func RegisterCoreHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ListFluxRuntimeObjects", runtime.WithHTTPPathPattern("/v1/flux_runtime_objects")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ListFluxRuntimeObjects", runtime.WithHTTPPathPattern("/v1/flux/deployments")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_ListFluxRuntimeObjects_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_ListFluxRuntimeObjects_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_ListFluxRuntimeObjects_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_ListFluxRuntimeObjects_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1354,19 +1506,21 @@ func RegisterCoreHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ListFluxCrds", runtime.WithHTTPPathPattern("/v1/flux_crds")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ListFluxCrds", runtime.WithHTTPPathPattern("/v1/flux/crds")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_ListFluxCrds_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_ListFluxCrds_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_ListFluxCrds_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_ListFluxCrds_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1374,19 +1528,21 @@ func RegisterCoreHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetReconciledObjects", runtime.WithHTTPPathPattern("/v1/reconciled_objects")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetReconciledObjects", runtime.WithHTTPPathPattern("/v1/reconciled_objects")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_GetReconciledObjects_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_GetReconciledObjects_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetReconciledObjects_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetReconciledObjects_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1394,59 +1550,21 @@ func RegisterCoreHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetChildObjects", runtime.WithHTTPPathPattern("/v1/child_objects")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetChildObjects", runtime.WithHTTPPathPattern("/v1/child_objects")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_GetChildObjects_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_GetChildObjects_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetChildObjects_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Core_GetFluxNamespace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetFluxNamespace", runtime.WithHTTPPathPattern("/v1/namespace/flux")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Core_GetFluxNamespace_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Core_GetFluxNamespace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Core_ListNamespaces_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ListNamespaces", runtime.WithHTTPPathPattern("/v1/namespaces")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Core_ListNamespaces_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Core_ListNamespaces_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetChildObjects_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1454,39 +1572,43 @@ func RegisterCoreHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ListEvents", runtime.WithHTTPPathPattern("/v1/events")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ListEvents", runtime.WithHTTPPathPattern("/v1/namespaces/{namespace}/objects/{kind}/{name}/events")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_ListEvents_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_ListEvents_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_ListEvents_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_ListEvents_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_Core_SyncFluxObject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PATCH", pattern_Core_SyncFluxObject_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/SyncFluxObject", runtime.WithHTTPPathPattern("/v1/sync")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/SyncFluxObject", runtime.WithHTTPPathPattern("/v1/sync")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_SyncFluxObject_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_SyncFluxObject_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_SyncFluxObject_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_SyncFluxObject_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1494,19 +1616,21 @@ func RegisterCoreHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetVersion", runtime.WithHTTPPathPattern("/v1/version")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetVersion", runtime.WithHTTPPathPattern("/v1/version")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_GetVersion_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_GetVersion_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetVersion_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1514,59 +1638,65 @@ func RegisterCoreHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetFeatureFlags", runtime.WithHTTPPathPattern("/v1/featureflags")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetFeatureFlags", runtime.WithHTTPPathPattern("/v1/feature-flags")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_GetFeatureFlags_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_GetFeatureFlags_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetFeatureFlags_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetFeatureFlags_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_Core_ToggleSuspendResource_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PATCH", pattern_Core_ToggleSuspendResource_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ToggleSuspendResource", runtime.WithHTTPPathPattern("/v1/suspend")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ToggleSuspendResource", runtime.WithHTTPPathPattern("/v1/suspend")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_ToggleSuspendResource_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_ToggleSuspendResource_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_ToggleSuspendResource_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_ToggleSuspendResource_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_Core_GetSessionLogs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Core_GetSessionLogs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetSessionLogs", runtime.WithHTTPPathPattern("/v1/session_logs")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetSessionLogs", runtime.WithHTTPPathPattern("/v1/session-logs")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_GetSessionLogs_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_GetSessionLogs_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetSessionLogs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetSessionLogs_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1574,19 +1704,21 @@ func RegisterCoreHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/IsCRDAvailable", runtime.WithHTTPPathPattern("/v1/crd/is_available")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/IsCRDAvailable", runtime.WithHTTPPathPattern("/v1/crds/{name}/is-available")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_IsCRDAvailable_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_IsCRDAvailable_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_IsCRDAvailable_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_IsCRDAvailable_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1594,19 +1726,21 @@ func RegisterCoreHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetInventory", runtime.WithHTTPPathPattern("/v1/inventory")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetInventory", runtime.WithHTTPPathPattern("/v1/namespaces/{namespace}/objects/{kind}/{name}/inventory")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_GetInventory_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_GetInventory_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetInventory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetInventory_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1614,19 +1748,21 @@ func RegisterCoreHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ListPolicies", runtime.WithHTTPPathPattern("/v1/policies")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ListPolicies", runtime.WithHTTPPathPattern("/v1/policies")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_ListPolicies_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_ListPolicies_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_ListPolicies_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_ListPolicies_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1634,39 +1770,43 @@ func RegisterCoreHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetPolicy", runtime.WithHTTPPathPattern("/v1/policies/{policyName}")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetPolicy", runtime.WithHTTPPathPattern("/v1/policies/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_GetPolicy_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_GetPolicy_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetPolicy_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("POST", pattern_Core_ListPolicyValidations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Core_ListPolicyValidations_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ListPolicyValidations", runtime.WithHTTPPathPattern("/v1/policyvalidations")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/ListPolicyValidations", runtime.WithHTTPPathPattern("/v1/policy-validations")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_ListPolicyValidations_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_ListPolicyValidations_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_ListPolicyValidations_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_ListPolicyValidations_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1674,19 +1814,21 @@ func RegisterCoreHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetPolicyValidation", runtime.WithHTTPPathPattern("/v1/policyvalidations/{validationId}")) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gitops_core.v1.Core/GetPolicyValidation", runtime.WithHTTPPathPattern("/v1/policy-validations/{validation_id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Core_GetPolicyValidation_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Core_GetPolicyValidation_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Core_GetPolicyValidation_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Core_GetPolicyValidation_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1694,45 +1836,41 @@ func RegisterCoreHandlerClient(ctx context.Context, mux *runtime.ServeMux, clien } var ( - pattern_Core_GetObject_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "object", "name"}, "")) + pattern_Core_GetObject_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "namespaces", "namespace", "objects", "kind", "name"}, "")) - pattern_Core_ListObjects_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "objects"}, "")) + pattern_Core_ListObjects_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "objects", "kind"}, "")) - pattern_Core_ListFluxRuntimeObjects_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "flux_runtime_objects"}, "")) + pattern_Core_ListFluxRuntimeObjects_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "flux", "deployments"}, "")) - pattern_Core_ListFluxCrds_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "flux_crds"}, "")) + pattern_Core_ListFluxCrds_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "flux", "crds"}, "")) pattern_Core_GetReconciledObjects_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "reconciled_objects"}, "")) pattern_Core_GetChildObjects_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "child_objects"}, "")) - pattern_Core_GetFluxNamespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "namespace", "flux"}, "")) - - pattern_Core_ListNamespaces_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "namespaces"}, "")) - - pattern_Core_ListEvents_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "events"}, "")) + pattern_Core_ListEvents_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"v1", "namespaces", "namespace", "objects", "kind", "name", "events"}, "")) pattern_Core_SyncFluxObject_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "sync"}, "")) pattern_Core_GetVersion_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "version"}, "")) - pattern_Core_GetFeatureFlags_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "featureflags"}, "")) + pattern_Core_GetFeatureFlags_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "feature-flags"}, "")) pattern_Core_ToggleSuspendResource_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "suspend"}, "")) - pattern_Core_GetSessionLogs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "session_logs"}, "")) + pattern_Core_GetSessionLogs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "session-logs"}, "")) - pattern_Core_IsCRDAvailable_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "crd", "is_available"}, "")) + pattern_Core_IsCRDAvailable_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1", "crds", "name", "is-available"}, "")) - pattern_Core_GetInventory_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "inventory"}, "")) + pattern_Core_GetInventory_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"v1", "namespaces", "namespace", "objects", "kind", "name", "inventory"}, "")) pattern_Core_ListPolicies_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "policies"}, "")) - pattern_Core_GetPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "policies", "policyName"}, "")) + pattern_Core_GetPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "policies", "name"}, "")) - pattern_Core_ListPolicyValidations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "policyvalidations"}, "")) + pattern_Core_ListPolicyValidations_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "policy-validations"}, "")) - pattern_Core_GetPolicyValidation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "policyvalidations", "validationId"}, "")) + pattern_Core_GetPolicyValidation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "policy-validations", "validation_id"}, "")) ) var ( @@ -1748,10 +1886,6 @@ var ( forward_Core_GetChildObjects_0 = runtime.ForwardResponseMessage - forward_Core_GetFluxNamespace_0 = runtime.ForwardResponseMessage - - forward_Core_ListNamespaces_0 = runtime.ForwardResponseMessage - forward_Core_ListEvents_0 = runtime.ForwardResponseMessage forward_Core_SyncFluxObject_0 = runtime.ForwardResponseMessage diff --git a/pkg/api/core/core_grpc.pb.go b/pkg/api/core/core_grpc.pb.go index d96c1bde8f..81448ca0d5 100644 --- a/pkg/api/core/core_grpc.pb.go +++ b/pkg/api/core/core_grpc.pb.go @@ -18,51 +18,97 @@ const _ = grpc.SupportPackageIsVersion7 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type CoreClient interface { - // GetObject gets data about a single primary object from a cluster. + // Get details of an object + // + // {{ import "api/core/doc/object-kind.md" }} GetObject(ctx context.Context, in *GetObjectRequest, opts ...grpc.CallOption) (*GetObjectResponse, error) - // ListObjects gets data about primary objects. + // List objects of kind across all clusters + // + // {{ import "api/core/doc/object-kind.md" }} ListObjects(ctx context.Context, in *ListObjectsRequest, opts ...grpc.CallOption) (*ListObjectsResponse, error) - // ListFluxRuntimeObjects lists the flux runtime deployments from a cluster. + // Lists the Flux runtime deployments across all clusters + // + // Determine which controllers are installed, their image versions, status, etc. ListFluxRuntimeObjects(ctx context.Context, in *ListFluxRuntimeObjectsRequest, opts ...grpc.CallOption) (*ListFluxRuntimeObjectsResponse, error) + // Lists the Flux CRDs across all clusters + // + // Determine which flux CRDs are installed on which clusters and at what version. ListFluxCrds(ctx context.Context, in *ListFluxCrdsRequest, opts ...grpc.CallOption) (*ListFluxCrdsResponse, error) - // GetReconciledObjects returns a list of objects that were created - // as a result of reconciling a Flux automation. - // This list is derived by looking at the Kustomization or HelmRelease - // specified in the request body. + // Get the list of objects that were created as a result of reconciling a Flux automation. + // + // Use /inventory instead GetReconciledObjects(ctx context.Context, in *GetReconciledObjectsRequest, opts ...grpc.CallOption) (*GetReconciledObjectsResponse, error) - // GetChildObjects returns the children of a given object, - // specified by a GroupVersionKind. - // Not all Kubernets objects have children. For example, a Deployment - // has a child ReplicaSet, but a Service has no child objects. + // Returns the children of a given object + // + // Use /inventory instead GetChildObjects(ctx context.Context, in *GetChildObjectsRequest, opts ...grpc.CallOption) (*GetChildObjectsResponse, error) - // GetFluxNamespace returns with a namespace with a specific label. - GetFluxNamespace(ctx context.Context, in *GetFluxNamespaceRequest, opts ...grpc.CallOption) (*GetFluxNamespaceResponse, error) - // ListNamespaces returns with the list of available namespaces. - ListNamespaces(ctx context.Context, in *ListNamespacesRequest, opts ...grpc.CallOption) (*ListNamespacesResponse, error) - // ListEvents returns with a list of events + // List events for an object + // + // {{ import "api/core/doc/object-kind.md" }} ListEvents(ctx context.Context, in *ListEventsRequest, opts ...grpc.CallOption) (*ListEventsResponse, error) - // SyncResource forces a reconciliation of a Flux resource + // Trigger reconciliation of multiple Flux objects + // + // Provide a list of objects to be reconciled. Objects are identified by their kind, name, namespace and cluster. + // + // Supported kinds are: + // + // - all Flux custom resources (e.g. `GitRepository` or `HelmRelease`) + // - Enterprise objects that also support this pattern: `GitOpsSet` and `AutomatedClusterDiscovery` + // + // if `withSource` is true the dependent Source resource will be synced too. + // Syncing a Kustomization `withSource` will sync an attached GitRepository. SyncFluxObject(ctx context.Context, in *SyncFluxObjectRequest, opts ...grpc.CallOption) (*SyncFluxObjectResponse, error) - // GetVersion returns version information about the server + // Get version information about the server + // + // Version information about weave-gitops including when the runninng server was built, the git commit and the git tag. + // Also return the kubernetes version of the cluster running weave-gitops. GetVersion(ctx context.Context, in *GetVersionRequest, opts ...grpc.CallOption) (*GetVersionResponse, error) - // GetFeatureFlags returns configuration information about the server + // Get feature flags + // + // Return infomation about what features and configuration options are enabled on the server. + // + // New features are sometimes hidden behind feature flags. Other features (e.g. OIDC) can be enabled/disabled. GetFeatureFlags(ctx context.Context, in *GetFeatureFlagsRequest, opts ...grpc.CallOption) (*GetFeatureFlagsResponse, error) - // ToggleSuspendResource suspends or resumes a flux object. + // Suspend or resume reconciling multiple Flux objects + // + // Provide a list of objects to be suspended or resumed. Objects are identified by their kind, name, namespace and cluster. + // + // Supported kinds are: + // + // - any Flux custom resource (e.g. `GitRepository` or `HelmRelease`) + // - Enterprise objects that also support this pattern: `GitOpsSet` and `AutomatedClusterDiscovery` ToggleSuspendResource(ctx context.Context, in *ToggleSuspendResourceRequest, opts ...grpc.CallOption) (*ToggleSuspendResourceResponse, error) - // GetSessionLogs returns the logs for a given session + // Get the logs for a GitOpsRun session + // + // The GitOpsRun feature has been removed GetSessionLogs(ctx context.Context, in *GetSessionLogsRequest, opts ...grpc.CallOption) (*GetSessionLogsResponse, error) - // IsCRDAvailable returns with a hashmap where the keys are the names of - // the clusters, and the value is a boolean indicating whether given CRD is - // installed or not on that cluster. + // Check which clusters have a given CRD installed + // + // Returns a map where the keys are cluster names, and the value is a boolean indicating + // whether the given `CustomResourceDefinition` resource is available on that cluster. IsCRDAvailable(ctx context.Context, in *IsCRDAvailableRequest, opts ...grpc.CallOption) (*IsCRDAvailableResponse, error) + // Get the inventory of an object + // + // Look up the inventory of a given object. The inventory is a list of + // objects that were created as a result of reconciling the given object. + // + // The response includes the full kubernetes resource for each inventory item. GetInventory(ctx context.Context, in *GetInventoryRequest, opts ...grpc.CallOption) (*GetInventoryResponse, error) - // ListPolicies list policies available on the cluster + // List policies available across all clusters + // + // This will return all the `Policy` custom resources that are available across all clusters. ListPolicies(ctx context.Context, in *ListPoliciesRequest, opts ...grpc.CallOption) (*ListPoliciesResponse, error) - // GetPolicy gets a policy by name + // Gets a policy + // + // Get a `Policy` custom resource by name and cluster. GetPolicy(ctx context.Context, in *GetPolicyRequest, opts ...grpc.CallOption) (*GetPolicyResponse, error) - // ListPolicyValidations lists policy validations + // Lists policy validations across all clusters + // + // Can be filtered by a few different properties of the `involvedObject` ListPolicyValidations(ctx context.Context, in *ListPolicyValidationsRequest, opts ...grpc.CallOption) (*ListPolicyValidationsResponse, error) - // GetPolicyValidation gets a policy validation by id + // Gets a policy validation + // + // Given a specific validation id, returns the validation details. GetPolicyValidation(ctx context.Context, in *GetPolicyValidationRequest, opts ...grpc.CallOption) (*GetPolicyValidationResponse, error) } @@ -128,24 +174,6 @@ func (c *coreClient) GetChildObjects(ctx context.Context, in *GetChildObjectsReq return out, nil } -func (c *coreClient) GetFluxNamespace(ctx context.Context, in *GetFluxNamespaceRequest, opts ...grpc.CallOption) (*GetFluxNamespaceResponse, error) { - out := new(GetFluxNamespaceResponse) - err := c.cc.Invoke(ctx, "/gitops_core.v1.Core/GetFluxNamespace", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *coreClient) ListNamespaces(ctx context.Context, in *ListNamespacesRequest, opts ...grpc.CallOption) (*ListNamespacesResponse, error) { - out := new(ListNamespacesResponse) - err := c.cc.Invoke(ctx, "/gitops_core.v1.Core/ListNamespaces", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *coreClient) ListEvents(ctx context.Context, in *ListEventsRequest, opts ...grpc.CallOption) (*ListEventsResponse, error) { out := new(ListEventsResponse) err := c.cc.Invoke(ctx, "/gitops_core.v1.Core/ListEvents", in, out, opts...) @@ -258,51 +286,97 @@ func (c *coreClient) GetPolicyValidation(ctx context.Context, in *GetPolicyValid // All implementations must embed UnimplementedCoreServer // for forward compatibility type CoreServer interface { - // GetObject gets data about a single primary object from a cluster. + // Get details of an object + // + // {{ import "api/core/doc/object-kind.md" }} GetObject(context.Context, *GetObjectRequest) (*GetObjectResponse, error) - // ListObjects gets data about primary objects. + // List objects of kind across all clusters + // + // {{ import "api/core/doc/object-kind.md" }} ListObjects(context.Context, *ListObjectsRequest) (*ListObjectsResponse, error) - // ListFluxRuntimeObjects lists the flux runtime deployments from a cluster. + // Lists the Flux runtime deployments across all clusters + // + // Determine which controllers are installed, their image versions, status, etc. ListFluxRuntimeObjects(context.Context, *ListFluxRuntimeObjectsRequest) (*ListFluxRuntimeObjectsResponse, error) + // Lists the Flux CRDs across all clusters + // + // Determine which flux CRDs are installed on which clusters and at what version. ListFluxCrds(context.Context, *ListFluxCrdsRequest) (*ListFluxCrdsResponse, error) - // GetReconciledObjects returns a list of objects that were created - // as a result of reconciling a Flux automation. - // This list is derived by looking at the Kustomization or HelmRelease - // specified in the request body. + // Get the list of objects that were created as a result of reconciling a Flux automation. + // + // Use /inventory instead GetReconciledObjects(context.Context, *GetReconciledObjectsRequest) (*GetReconciledObjectsResponse, error) - // GetChildObjects returns the children of a given object, - // specified by a GroupVersionKind. - // Not all Kubernets objects have children. For example, a Deployment - // has a child ReplicaSet, but a Service has no child objects. + // Returns the children of a given object + // + // Use /inventory instead GetChildObjects(context.Context, *GetChildObjectsRequest) (*GetChildObjectsResponse, error) - // GetFluxNamespace returns with a namespace with a specific label. - GetFluxNamespace(context.Context, *GetFluxNamespaceRequest) (*GetFluxNamespaceResponse, error) - // ListNamespaces returns with the list of available namespaces. - ListNamespaces(context.Context, *ListNamespacesRequest) (*ListNamespacesResponse, error) - // ListEvents returns with a list of events + // List events for an object + // + // {{ import "api/core/doc/object-kind.md" }} ListEvents(context.Context, *ListEventsRequest) (*ListEventsResponse, error) - // SyncResource forces a reconciliation of a Flux resource + // Trigger reconciliation of multiple Flux objects + // + // Provide a list of objects to be reconciled. Objects are identified by their kind, name, namespace and cluster. + // + // Supported kinds are: + // + // - all Flux custom resources (e.g. `GitRepository` or `HelmRelease`) + // - Enterprise objects that also support this pattern: `GitOpsSet` and `AutomatedClusterDiscovery` + // + // if `withSource` is true the dependent Source resource will be synced too. + // Syncing a Kustomization `withSource` will sync an attached GitRepository. SyncFluxObject(context.Context, *SyncFluxObjectRequest) (*SyncFluxObjectResponse, error) - // GetVersion returns version information about the server + // Get version information about the server + // + // Version information about weave-gitops including when the runninng server was built, the git commit and the git tag. + // Also return the kubernetes version of the cluster running weave-gitops. GetVersion(context.Context, *GetVersionRequest) (*GetVersionResponse, error) - // GetFeatureFlags returns configuration information about the server + // Get feature flags + // + // Return infomation about what features and configuration options are enabled on the server. + // + // New features are sometimes hidden behind feature flags. Other features (e.g. OIDC) can be enabled/disabled. GetFeatureFlags(context.Context, *GetFeatureFlagsRequest) (*GetFeatureFlagsResponse, error) - // ToggleSuspendResource suspends or resumes a flux object. + // Suspend or resume reconciling multiple Flux objects + // + // Provide a list of objects to be suspended or resumed. Objects are identified by their kind, name, namespace and cluster. + // + // Supported kinds are: + // + // - any Flux custom resource (e.g. `GitRepository` or `HelmRelease`) + // - Enterprise objects that also support this pattern: `GitOpsSet` and `AutomatedClusterDiscovery` ToggleSuspendResource(context.Context, *ToggleSuspendResourceRequest) (*ToggleSuspendResourceResponse, error) - // GetSessionLogs returns the logs for a given session + // Get the logs for a GitOpsRun session + // + // The GitOpsRun feature has been removed GetSessionLogs(context.Context, *GetSessionLogsRequest) (*GetSessionLogsResponse, error) - // IsCRDAvailable returns with a hashmap where the keys are the names of - // the clusters, and the value is a boolean indicating whether given CRD is - // installed or not on that cluster. + // Check which clusters have a given CRD installed + // + // Returns a map where the keys are cluster names, and the value is a boolean indicating + // whether the given `CustomResourceDefinition` resource is available on that cluster. IsCRDAvailable(context.Context, *IsCRDAvailableRequest) (*IsCRDAvailableResponse, error) + // Get the inventory of an object + // + // Look up the inventory of a given object. The inventory is a list of + // objects that were created as a result of reconciling the given object. + // + // The response includes the full kubernetes resource for each inventory item. GetInventory(context.Context, *GetInventoryRequest) (*GetInventoryResponse, error) - // ListPolicies list policies available on the cluster + // List policies available across all clusters + // + // This will return all the `Policy` custom resources that are available across all clusters. ListPolicies(context.Context, *ListPoliciesRequest) (*ListPoliciesResponse, error) - // GetPolicy gets a policy by name + // Gets a policy + // + // Get a `Policy` custom resource by name and cluster. GetPolicy(context.Context, *GetPolicyRequest) (*GetPolicyResponse, error) - // ListPolicyValidations lists policy validations + // Lists policy validations across all clusters + // + // Can be filtered by a few different properties of the `involvedObject` ListPolicyValidations(context.Context, *ListPolicyValidationsRequest) (*ListPolicyValidationsResponse, error) - // GetPolicyValidation gets a policy validation by id + // Gets a policy validation + // + // Given a specific validation id, returns the validation details. GetPolicyValidation(context.Context, *GetPolicyValidationRequest) (*GetPolicyValidationResponse, error) mustEmbedUnimplementedCoreServer() } @@ -329,12 +403,6 @@ func (UnimplementedCoreServer) GetReconciledObjects(context.Context, *GetReconci func (UnimplementedCoreServer) GetChildObjects(context.Context, *GetChildObjectsRequest) (*GetChildObjectsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetChildObjects not implemented") } -func (UnimplementedCoreServer) GetFluxNamespace(context.Context, *GetFluxNamespaceRequest) (*GetFluxNamespaceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetFluxNamespace not implemented") -} -func (UnimplementedCoreServer) ListNamespaces(context.Context, *ListNamespacesRequest) (*ListNamespacesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListNamespaces not implemented") -} func (UnimplementedCoreServer) ListEvents(context.Context, *ListEventsRequest) (*ListEventsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListEvents not implemented") } @@ -492,42 +560,6 @@ func _Core_GetChildObjects_Handler(srv interface{}, ctx context.Context, dec fun return interceptor(ctx, in, info, handler) } -func _Core_GetFluxNamespace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetFluxNamespaceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(CoreServer).GetFluxNamespace(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gitops_core.v1.Core/GetFluxNamespace", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CoreServer).GetFluxNamespace(ctx, req.(*GetFluxNamespaceRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Core_ListNamespaces_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListNamespacesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(CoreServer).ListNamespaces(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gitops_core.v1.Core/ListNamespaces", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CoreServer).ListNamespaces(ctx, req.(*ListNamespacesRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _Core_ListEvents_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListEventsRequest) if err := dec(in); err != nil { @@ -775,14 +807,6 @@ var Core_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetChildObjects", Handler: _Core_GetChildObjects_Handler, }, - { - MethodName: "GetFluxNamespace", - Handler: _Core_GetFluxNamespace_Handler, - }, - { - MethodName: "ListNamespaces", - Handler: _Core_ListNamespaces_Handler, - }, { MethodName: "ListEvents", Handler: _Core_ListEvents_Handler, diff --git a/pkg/api/core/types.pb.go b/pkg/api/core/types.pb.go index 26738ce441..676c7f6636 100644 --- a/pkg/api/core/types.pb.go +++ b/pkg/api/core/types.pb.go @@ -1,4 +1,4 @@ -// +//* // This file holds the protobuf definitions for messages and enums // used in the Weave GitOps gRPC API. @@ -24,6 +24,7 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// * // Kind enum defines the Kubernetes resource types used in the Core API. type Kind int32 @@ -110,6 +111,7 @@ func (Kind) EnumDescriptor() ([]byte, []int) { return file_api_core_types_proto_rawDescGZIP(), []int{0} } +// * // HelmRepositoryType enum defines the type of HelmRepository used. type HelmRepositoryType int32 @@ -228,7 +230,7 @@ type ObjectRef struct { Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"` - ClusterName string `protobuf:"bytes,4,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + ClusterName string `protobuf:"bytes,4,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` } func (x *ObjectRef) Reset() { @@ -620,11 +622,17 @@ type InventoryEntry struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Payload string `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` - Tenant string `protobuf:"bytes,2,opt,name=tenant,proto3" json:"tenant,omitempty"` - ClusterName string `protobuf:"bytes,3,opt,name=clusterName,proto3" json:"clusterName,omitempty"` - Health *HealthStatus `protobuf:"bytes,4,opt,name=health,proto3" json:"health,omitempty"` - Children []*InventoryEntry `protobuf:"bytes,5,rep,name=children,proto3" json:"children,omitempty"` + // A JSON string containing the complete Kubernetes object. + Payload string `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` + // The tenant the object belongs to if any. + Tenant string `protobuf:"bytes,2,opt,name=tenant,proto3" json:"tenant,omitempty"` + // The cluster the object is deployed to. + ClusterName string `protobuf:"bytes,3,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` + Health *HealthStatus `protobuf:"bytes,4,opt,name=health,proto3" json:"health,omitempty"` + // If the object is a parent e.g. `ReplicaSet` -> `Pod` + // Then the children are included here with their payload, clusterName etc + // This a recursive structure. + Children []*InventoryEntry `protobuf:"bytes,5,rep,name=children,proto3" json:"children,omitempty"` } func (x *InventoryEntry) Reset() { @@ -699,13 +707,19 @@ type Object struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Payload string `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` - ClusterName string `protobuf:"bytes,2,opt,name=clusterName,proto3" json:"clusterName,omitempty"` - Tenant string `protobuf:"bytes,3,opt,name=tenant,proto3" json:"tenant,omitempty"` - Uid string `protobuf:"bytes,4,opt,name=uid,proto3" json:"uid,omitempty"` - Inventory []*GroupVersionKind `protobuf:"bytes,5,rep,name=inventory,proto3" json:"inventory,omitempty"` - Info string `protobuf:"bytes,6,opt,name=info,proto3" json:"info,omitempty"` - Health *HealthStatus `protobuf:"bytes,7,opt,name=health,proto3" json:"health,omitempty"` + // A JSON string containing the complete Kubernetes object. + Payload string `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` + // The cluster the object is deployed to. + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` + // The tenant the object belongs to if any. + Tenant string `protobuf:"bytes,3,opt,name=tenant,proto3" json:"tenant,omitempty"` + // The Kubernetes UID of the object. + Uid string `protobuf:"bytes,4,opt,name=uid,proto3" json:"uid,omitempty"` + // DEPRECATED, use /inventory endpoint. + Inventory []*GroupVersionKind `protobuf:"bytes,5,rep,name=inventory,proto3" json:"inventory,omitempty"` + // DEPRECATED, GitOpsRun field. + Info string `protobuf:"bytes,6,opt,name=info,proto3" json:"info,omitempty"` + Health *HealthStatus `protobuf:"bytes,7,opt,name=health,proto3" json:"health,omitempty"` } func (x *Object) Reset() { @@ -799,7 +813,7 @@ type Deployment struct { Conditions []*Condition `protobuf:"bytes,3,rep,name=conditions,proto3" json:"conditions,omitempty"` Images []string `protobuf:"bytes,4,rep,name=images,proto3" json:"images,omitempty"` Suspended bool `protobuf:"varint,5,opt,name=suspended,proto3" json:"suspended,omitempty"` - ClusterName string `protobuf:"bytes,6,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + ClusterName string `protobuf:"bytes,6,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` Uid string `protobuf:"bytes,7,opt,name=uid,proto3" json:"uid,omitempty"` Labels map[string]string `protobuf:"bytes,8,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } @@ -900,7 +914,7 @@ type Crd struct { Name *Crd_Name `protobuf:"bytes,1,opt,name=name,proto3" json:"name,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"` - ClusterName string `protobuf:"bytes,4,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + ClusterName string `protobuf:"bytes,4,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` Uid string `protobuf:"bytes,5,opt,name=uid,proto3" json:"uid,omitempty"` } @@ -980,7 +994,7 @@ type Namespace struct { Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` Annotations map[string]string `protobuf:"bytes,3,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Labels map[string]string `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - ClusterName string `protobuf:"bytes,5,opt,name=clusterName,proto3" json:"clusterName,omitempty"` + ClusterName string `protobuf:"bytes,5,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` } func (x *Namespace) Reset() { @@ -1055,14 +1069,17 @@ type Event struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` - Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + // The LastTimestamp of the event. Timestamp string `protobuf:"bytes,4,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // The Source Component. Component string `protobuf:"bytes,5,opt,name=component,proto3" json:"component,omitempty"` - Host string `protobuf:"bytes,6,opt,name=host,proto3" json:"host,omitempty"` - Name string `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"` - Uid string `protobuf:"bytes,8,opt,name=uid,proto3" json:"uid,omitempty"` + // The Source Host. + Host string `protobuf:"bytes,6,opt,name=host,proto3" json:"host,omitempty"` + Name string `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"` + Uid string `protobuf:"bytes,8,opt,name=uid,proto3" json:"uid,omitempty"` } func (x *Event) Reset() { @@ -1218,165 +1235,166 @@ var file_api_core_types_proto_rawDesc = []byte{ 0x03, 0x52, 0x05, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x73, 0x0a, 0x09, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x74, 0x0a, 0x09, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x87, 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x6c, 0x0a, 0x10, 0x47, - 0x69, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x66, 0x12, - 0x16, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6d, - 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6d, 0x76, 0x65, - 0x72, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0x56, 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, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x4d, 0x0a, 0x19, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x64, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x22, 0x40, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0xd6, 0x01, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x68, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x6f, - 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, - 0x3a, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0xf8, 0x01, 0x0a, 0x06, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0x87, 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x6c, 0x0a, 0x10, + 0x47, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x66, + 0x12, 0x16, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, + 0x6d, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6d, 0x76, + 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0x56, 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, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x4d, 0x0a, 0x19, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x22, 0x40, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, + 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x09, - 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, - 0x64, 0x52, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, - 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, - 0x12, 0x34, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, - 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x22, 0xde, 0x02, 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x69, - 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, - 0x73, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, - 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, - 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, - 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xcb, 0x01, 0x0a, 0x03, 0x43, 0x72, 0x64, 0x12, - 0x2c, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x72, 0x64, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 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, 0x20, 0x0a, 0x0b, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, - 0x03, 0x75, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x1a, - 0x34, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6c, 0x75, 0x72, 0x61, - 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x12, - 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xe1, 0x02, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x4c, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, - 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x0a, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x20, 0x0a, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x3e, - 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, - 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc3, 0x01, 0x0a, 0x05, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, - 0x03, 0x75, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x2a, - 0xfb, 0x01, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x69, 0x74, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x42, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x48, 0x65, 0x6c, 0x6d, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x48, - 0x65, 0x6c, 0x6d, 0x43, 0x68, 0x61, 0x72, 0x74, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x4b, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x04, 0x12, 0x0f, 0x0a, - 0x0b, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x10, 0x05, 0x12, 0x0b, - 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x4f, - 0x43, 0x49, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x10, 0x07, 0x12, 0x0c, - 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x10, 0x08, 0x12, 0x09, 0x0a, 0x05, - 0x41, 0x6c, 0x65, 0x72, 0x74, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x10, 0x0a, 0x12, 0x19, 0x0a, 0x15, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x0b, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x10, 0x0c, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x6f, 0x64, 0x10, - 0x0d, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x10, 0x0e, 0x2a, 0x2a, 0x0a, - 0x12, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, - 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x43, 0x49, 0x10, 0x01, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x77, 0x65, 0x61, 0x76, 0x65, 0x77, 0x6f, 0x72, - 0x6b, 0x73, 0x2f, 0x77, 0x65, 0x61, 0x76, 0x65, 0x2d, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x2f, - 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x68, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, + 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x12, 0x3a, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0xf9, 0x01, + 0x0a, 0x06, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, + 0x3e, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, + 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, + 0x6e, 0x66, 0x6f, 0x12, 0x34, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x22, 0xdf, 0x02, 0x0a, 0x0a, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1c, 0x0a, + 0x09, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x73, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, + 0x12, 0x3e, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x03, + 0x43, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x64, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 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, + 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x69, 0x64, 0x1a, 0x34, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x70, 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6c, + 0x75, 0x72, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xe2, 0x02, 0x0a, 0x09, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x4c, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x6f, + 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x6f, 0x70, 0x73, 0x5f, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xc3, 0x01, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1c, 0x0a, + 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, + 0x6f, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x75, 0x69, 0x64, 0x2a, 0xfb, 0x01, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x11, + 0x0a, 0x0d, 0x47, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x10, + 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x10, 0x01, 0x12, 0x12, 0x0a, + 0x0e, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x10, + 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x65, 0x6c, 0x6d, 0x43, 0x68, 0x61, 0x72, 0x74, 0x10, 0x03, + 0x12, 0x11, 0x0a, 0x0d, 0x4b, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x10, + 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x4f, 0x43, 0x49, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x10, 0x08, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x10, 0x09, 0x12, 0x13, 0x0a, + 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, + 0x10, 0x0a, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x41, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x0b, 0x12, 0x0f, 0x0a, + 0x0b, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x10, 0x0c, 0x12, 0x07, + 0x0a, 0x03, 0x50, 0x6f, 0x64, 0x10, 0x0d, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x10, 0x0e, 0x2a, 0x2a, 0x0a, 0x12, 0x48, 0x65, 0x6c, 0x6d, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x43, 0x49, 0x10, 0x01, 0x42, + 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x77, 0x65, + 0x61, 0x76, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x77, 0x65, 0x61, 0x76, 0x65, 0x2d, 0x67, + 0x69, 0x74, 0x6f, 0x70, 0x73, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/server/auth/auth_test.go b/pkg/server/auth/auth_test.go index 6f364e1293..3d53a3c569 100644 --- a/pkg/server/auth/auth_test.go +++ b/pkg/server/auth/auth_test.go @@ -79,8 +79,8 @@ func TestWithAPIAuthReturns401ForUnauthenticatedRequests(t *testing.T) { // Test out the publicRoutes res = httptest.NewRecorder() - req = httptest.NewRequest(http.MethodGet, s.URL+"/v1/featureflags", nil) - auth.WithAPIAuth(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {}), srv, []string{"/v1/featureflags"}, sm).ServeHTTP(res, req) + req = httptest.NewRequest(http.MethodGet, s.URL+"/v1/feature-flags", nil) + auth.WithAPIAuth(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {}), srv, []string{"/v1/feature-flags"}, sm).ServeHTTP(res, req) g.Expect(res).To(HaveHTTPStatus(http.StatusOK)) } @@ -177,8 +177,8 @@ func TestWithAPIAuthOnlyUsesValidMethods(t *testing.T) { // Test out the publicRoutes res = httptest.NewRecorder() - req = httptest.NewRequest(http.MethodGet, s.URL+"/v1/featureflags", nil) - auth.WithAPIAuth(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {}), srv, []string{"/v1/featureflags"}, scs.New()).ServeHTTP(res, req) + req = httptest.NewRequest(http.MethodGet, s.URL+"/v1/feature-flags", nil) + auth.WithAPIAuth(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {}), srv, []string{"/v1/feature-flags"}, scs.New()).ServeHTTP(res, req) g.Expect(res).To(HaveHTTPStatus(http.StatusOK)) } diff --git a/pkg/server/handler.go b/pkg/server/handler.go index 631f4b5353..23ba8fde5b 100644 --- a/pkg/server/handler.go +++ b/pkg/server/handler.go @@ -14,7 +14,7 @@ import ( var ( PublicRoutes = []string{ - "/v1/featureflags", + "/v1/feature-flags", } ) diff --git a/ui/hooks/events.ts b/ui/hooks/events.ts index f23b949db6..35486fc159 100644 --- a/ui/hooks/events.ts +++ b/ui/hooks/events.ts @@ -17,10 +17,7 @@ export function useListEvents( return useQuery( ["events", obj], - () => - api.ListEvents({ - involvedObject: obj, - }), + () => api.ListEvents(obj), opts ); } diff --git a/ui/hooks/objects.ts b/ui/hooks/objects.ts index 8ab0a9ea48..ff2a425bdf 100644 --- a/ui/hooks/objects.ts +++ b/ui/hooks/objects.ts @@ -101,6 +101,10 @@ export function useListObjects( ) { const { api } = useContext(CoreClientContext); + const labelSelector = Object.entries(labels) + .map(([key, value]) => `${key}=${value}`) + .join(","); + return useQuery( ["objects", clusterName, kind, namespace], async () => { @@ -108,7 +112,7 @@ export function useListObjects( namespace, kind, clusterName, - labels, + labelSelector, }); let objects: FluxObject[]; if (res.objects) diff --git a/ui/lib/api/core/core.pb.ts b/ui/lib/api/core/core.pb.ts index 0c969efcc0..c90bb061bc 100644 --- a/ui/lib/api/core/core.pb.ts +++ b/ui/lib/api/core/core.pb.ts @@ -94,8 +94,6 @@ export type ListError = { } export type ListFluxRuntimeObjectsRequest = { - namespace?: string - clusterName?: string } export type ListFluxRuntimeObjectsResponse = { @@ -104,7 +102,6 @@ export type ListFluxRuntimeObjectsResponse = { } export type ListFluxCrdsRequest = { - clusterName?: string } export type ListFluxCrdsResponse = { @@ -127,7 +124,7 @@ export type ListObjectsRequest = { namespace?: string kind?: string clusterName?: string - labels?: {[key: string]: string} + labelSelector?: string } export type ClusterNamespaceList = { @@ -179,7 +176,10 @@ export type ListNamespacesResponse = { } export type ListEventsRequest = { - involvedObject?: Gitops_coreV1Types.ObjectRef + kind?: string + name?: string + namespace?: string + clusterName?: string } export type ListEventsResponse = { @@ -253,7 +253,6 @@ export type IsCRDAvailableResponse = { } export type ListPoliciesRequest = { - clusterName?: string pagination?: Pagination } @@ -265,7 +264,7 @@ export type ListPoliciesResponse = { } export type GetPolicyRequest = { - policyName?: string + name?: string clusterName?: string } @@ -317,16 +316,16 @@ export type PolicyTargetLabel = { export class Core { static GetObject(req: GetObjectRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/object/${req["name"]}?${fm.renderURLSearchParams(req, ["name"])}`, {...initReq, method: "GET"}) + return fm.fetchReq(`/v1/namespaces/${req["namespace"]}/objects/${req["kind"]}/${req["name"]}?${fm.renderURLSearchParams(req, ["namespace", "kind", "name"])}`, {...initReq, method: "GET"}) } static ListObjects(req: ListObjectsRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/objects`, {...initReq, method: "POST", body: JSON.stringify(req)}) + return fm.fetchReq(`/v1/objects/${req["kind"]}?${fm.renderURLSearchParams(req, ["kind"])}`, {...initReq, method: "GET"}) } static ListFluxRuntimeObjects(req: ListFluxRuntimeObjectsRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/flux_runtime_objects?${fm.renderURLSearchParams(req, [])}`, {...initReq, method: "GET"}) + return fm.fetchReq(`/v1/flux/deployments?${fm.renderURLSearchParams(req, [])}`, {...initReq, method: "GET"}) } static ListFluxCrds(req: ListFluxCrdsRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/flux_crds?${fm.renderURLSearchParams(req, [])}`, {...initReq, method: "GET"}) + return fm.fetchReq(`/v1/flux/crds?${fm.renderURLSearchParams(req, [])}`, {...initReq, method: "GET"}) } static GetReconciledObjects(req: GetReconciledObjectsRequest, initReq?: fm.InitReq): Promise { return fm.fetchReq(`/v1/reconciled_objects`, {...initReq, method: "POST", body: JSON.stringify(req)}) @@ -334,46 +333,40 @@ export class Core { static GetChildObjects(req: GetChildObjectsRequest, initReq?: fm.InitReq): Promise { return fm.fetchReq(`/v1/child_objects`, {...initReq, method: "POST", body: JSON.stringify(req)}) } - static GetFluxNamespace(req: GetFluxNamespaceRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/namespace/flux`, {...initReq, method: "POST", body: JSON.stringify(req)}) - } - static ListNamespaces(req: ListNamespacesRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/namespaces?${fm.renderURLSearchParams(req, [])}`, {...initReq, method: "GET"}) - } static ListEvents(req: ListEventsRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/events?${fm.renderURLSearchParams(req, [])}`, {...initReq, method: "GET"}) + return fm.fetchReq(`/v1/namespaces/${req["namespace"]}/objects/${req["kind"]}/${req["name"]}/events?${fm.renderURLSearchParams(req, ["namespace", "kind", "name"])}`, {...initReq, method: "GET"}) } static SyncFluxObject(req: SyncFluxObjectRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/sync`, {...initReq, method: "POST", body: JSON.stringify(req)}) + return fm.fetchReq(`/v1/sync`, {...initReq, method: "PATCH", body: JSON.stringify(req)}) } static GetVersion(req: GetVersionRequest, initReq?: fm.InitReq): Promise { return fm.fetchReq(`/v1/version?${fm.renderURLSearchParams(req, [])}`, {...initReq, method: "GET"}) } static GetFeatureFlags(req: GetFeatureFlagsRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/featureflags?${fm.renderURLSearchParams(req, [])}`, {...initReq, method: "GET"}) + return fm.fetchReq(`/v1/feature-flags?${fm.renderURLSearchParams(req, [])}`, {...initReq, method: "GET"}) } static ToggleSuspendResource(req: ToggleSuspendResourceRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/suspend`, {...initReq, method: "POST", body: JSON.stringify(req)}) + return fm.fetchReq(`/v1/suspend`, {...initReq, method: "PATCH", body: JSON.stringify(req)}) } static GetSessionLogs(req: GetSessionLogsRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/session_logs`, {...initReq, method: "POST", body: JSON.stringify(req)}) + return fm.fetchReq(`/v1/session-logs?${fm.renderURLSearchParams(req, [])}`, {...initReq, method: "GET"}) } static IsCRDAvailable(req: IsCRDAvailableRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/crd/is_available?${fm.renderURLSearchParams(req, [])}`, {...initReq, method: "GET"}) + return fm.fetchReq(`/v1/crds/${req["name"]}/is-available?${fm.renderURLSearchParams(req, ["name"])}`, {...initReq, method: "GET"}) } static GetInventory(req: GetInventoryRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/inventory?${fm.renderURLSearchParams(req, [])}`, {...initReq, method: "GET"}) + return fm.fetchReq(`/v1/namespaces/${req["namespace"]}/objects/${req["kind"]}/${req["name"]}/inventory?${fm.renderURLSearchParams(req, ["namespace", "kind", "name"])}`, {...initReq, method: "GET"}) } static ListPolicies(req: ListPoliciesRequest, initReq?: fm.InitReq): Promise { return fm.fetchReq(`/v1/policies?${fm.renderURLSearchParams(req, [])}`, {...initReq, method: "GET"}) } static GetPolicy(req: GetPolicyRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/policies/${req["policyName"]}?${fm.renderURLSearchParams(req, ["policyName"])}`, {...initReq, method: "GET"}) + return fm.fetchReq(`/v1/policies/${req["name"]}?${fm.renderURLSearchParams(req, ["name"])}`, {...initReq, method: "GET"}) } static ListPolicyValidations(req: ListPolicyValidationsRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/policyvalidations`, {...initReq, method: "POST", body: JSON.stringify(req)}) + return fm.fetchReq(`/v1/policy-validations?${fm.renderURLSearchParams(req, [])}`, {...initReq, method: "GET"}) } static GetPolicyValidation(req: GetPolicyValidationRequest, initReq?: fm.InitReq): Promise { - return fm.fetchReq(`/v1/policyvalidations/${req["validationId"]}?${fm.renderURLSearchParams(req, ["validationId"])}`, {...initReq, method: "GET"}) + return fm.fetchReq(`/v1/policy-validations/${req["validationId"]}?${fm.renderURLSearchParams(req, ["validationId"])}`, {...initReq, method: "GET"}) } } \ No newline at end of file diff --git a/ui/pages/v2/PolicyDetailsPage.tsx b/ui/pages/v2/PolicyDetailsPage.tsx index cae7f6052f..03fa057fcf 100644 --- a/ui/pages/v2/PolicyDetailsPage.tsx +++ b/ui/pages/v2/PolicyDetailsPage.tsx @@ -14,7 +14,7 @@ type Props = { const PolicyDetailsPage = ({ className, clusterName, id }: Props) => { const { data, isLoading, error } = useGetPolicyDetails({ clusterName, - policyName: id, + name: id, }); return ( diff --git a/website/docs/api-server/examples.mdx b/website/docs/api-server/examples.mdx new file mode 100644 index 0000000000..a22d3c15bc --- /dev/null +++ b/website/docs/api-server/examples.mdx @@ -0,0 +1,65 @@ +--- +title: Examples +--- + +import CodeBlock from "@theme/CodeBlock"; + +## Templates + +### Render a template + +This example demonstrates rendering a template to a local directory via the API + +It shows off: + +- Logging into the WGE API and storing a session cookie +- Rendering a template and writing the result to the terminal + +import TemplatesRender from "!!raw-loader!./examples/templates/render.py"; + + + {TemplatesRender} + + +### Create Pull Request + +We build of the previous example and instead of writing the result to the terminal, we create a Pull Request. + +It shows off: +- Exchanging a local `GITHUB_TOKEN` for a JWT token we can then use to do git operations via the API +- Rendering a template and writing the result to a Pull Request + +import TemplatesCreatePullRequest from "!!raw-loader!./examples/templates/create_pull_request.py"; + + + {TemplatesCreatePullRequest} + + + +## Automations + +Weave Gitops Enterprise allows you to easily add Automations like `Kustomization`s and `HelmRelease`s to your GitOps repository. + +### Render and Create Pull Request + +Here we first create a `Kustomization` and then a `HelmRelease` and then render the result to stdout. + +We then create a Pull Request with the rendered result to demonstrate this flow too + +import AutomationsRender from "!!raw-loader!./examples/automations/render_and_create_pull_request.py"; + + + {AutomationsRender} + diff --git a/website/docs/api-server/examples/automations/render_and_create_pull_request.py b/website/docs/api-server/examples/automations/render_and_create_pull_request.py new file mode 100644 index 0000000000..07f3ef4f08 --- /dev/null +++ b/website/docs/api-server/examples/automations/render_and_create_pull_request.py @@ -0,0 +1,132 @@ +import random +import string +import requests +import json +import os + +# Modify this to change the API server URL +BASE_URL = os.environ.get("BASE_URL", "http://localhost:8000") + + +def generate_random_string(length=8): + return ''.join(random.choices(string.ascii_lowercase + string.digits, k=length)) + + +def sign_in(s): + return s.post(f"{BASE_URL}/oauth2/sign_in", json={ + "username": "wego-admin", + "password": os.environ["WEGO_PASSWORD"] + }) + + +def create_kustomization(): + return { + "metadata": { + "name": "my-app", + }, + "spec": { + "path": "./apps/my-app", + "sourceRef": { + "name": "flux-system", + "namespace": "flux-system" + }, + "targetNamespace": "default", + "createNamespace": False + } + } + + +def create_helm_release(): + return { + "metadata": {"name": "podinfo"}, + "spec": { + "chart": { + "spec": { + "chart": "podinfo", + "sourceRef": {"name": "podinfo", "namespace": "prod-gitlab"}, + "version": "6.5.3" + } + }, + "values": "" + } + } + + +def render(s): + data = { + "clusterAutomations": [{ + "cluster": { + "name": "management", + }, + "kustomization": create_kustomization(), + }, { + "cluster": { + "name": "management", + }, + "helmRelease": create_helm_release(), + }] + } + + response = s.post(f"{BASE_URL}/v1/automations/render", + json=data) + + return response.json() + + +def create_pull_request(s): + data = { + "providerName": "github", + "accessToken": os.environ["GITHUB_TOKEN"] + } + response = s.post(f"{BASE_URL}/v1/authenticate/github", json=data) + token = response.json()["token"] + + headers = { + "Git-Provider-Token": f"token {token}" + } + + # Modify this for your repository + org = os.environ.get("GITHUB_USER", "my-org") + repo = os.environ.get("GITHUB_REPO", "my-repo") + repository_url = f"https://github.com/{org}/{repo}" + head_branch = f"branch-{generate_random_string()}" + base_branch = "main" + + data = { + "headBranch": head_branch, + "clusterAutomations": [{ + "cluster": { + "name": "management", + }, + "kustomization": create_kustomization(), + }, { + "cluster": { + "name": "management", + }, + "helmRelease": create_helm_release(), + }], + "repositoryUrl": repository_url, + "baseBranch": base_branch + } + + response = s.post(f"{BASE_URL}/v1/automations/pull-request", + json=data, headers=headers) + + return response.json() + + +if __name__ == "__main__": + s = requests.Session() + + sign_in(s) + + response = render(s) + + for responseTypes in ("kustomizationFiles", "helmReleaseFiles"): + print(f"# {responseTypes}") + for item in response[responseTypes]: + print(f"# {item['path']}") + print(item["content"]) + + response = create_pull_request(s) + print(response) diff --git a/website/docs/api-server/examples/templates/create_pull_request.py b/website/docs/api-server/examples/templates/create_pull_request.py new file mode 100644 index 0000000000..9b05a6b9e8 --- /dev/null +++ b/website/docs/api-server/examples/templates/create_pull_request.py @@ -0,0 +1,71 @@ +import requests +import json +import os +import random +import string + +# Modify this to change the API server URL +BASE_URL = os.environ.get("BASE_URL", "http://localhost:8000") + + +def sign_in(s): + return s.post(f"{BASE_URL}/oauth2/sign_in", json={ + "username": "wego-admin", + "password": os.environ["WEGO_PASSWORD"] + }) + + +def generate_random_string(length=8): + return ''.join(random.choices(string.ascii_lowercase + string.digits, k=length)) + + +def create_pull_request(s): + data = { + "providerName": "github", + "accessToken": os.environ["GITHUB_TOKEN"] + } + response = s.post(f"{BASE_URL}/v1/authenticate/github", json=data) + token = response.json()["token"] + + # Modify this for your repository + org = os.environ.get("GITHUB_USER", "my-org") + repo = os.environ.get("GITHUB_REPO", "my-repo") + repository_url = f"https://github.com/{org}/{repo}" + head_branch = f"branch-{generate_random_string()}" + base_branch = "main" + + # Modify this for the desired template + namespace = "default" + name = "vcluster-template-development" + + # Modify or add more parameters as needed + parameter_values = { + "CLUSTER_NAME": "foo", + } + + data = { + "headBranch": head_branch, + "parameterValues": parameter_values, + "templateKind": "GitOpsTemplate", + "repositoryUrl": repository_url, + "baseBranch": base_branch + } + + headers = { + "Git-Provider-Token": f"token {token}" + } + + response = s.post(f"{BASE_URL}/v1/namespaces/{namespace}/templates/{name}/pull-request", + json=data, headers=headers) + + return response.json() + + +if __name__ == "__main__": + s = requests.Session() + + sign_in(s) + + response = create_pull_request(s) + + print(response["webUrl"]) diff --git a/website/docs/api-server/examples/templates/render.py b/website/docs/api-server/examples/templates/render.py new file mode 100644 index 0000000000..8eb6d45878 --- /dev/null +++ b/website/docs/api-server/examples/templates/render.py @@ -0,0 +1,46 @@ +import requests +import json +import os + +# Modify this to change the API server URL +BASE_URL = os.environ.get("BASE_URL", "http://localhost:8000") + + +def sign_in(s): + return s.post(f"{BASE_URL}/oauth2/sign_in", json={ + "username": "wego-admin", + "password": os.environ["WEGO_PASSWORD"] + }) + + +def render(s): + # Modify this for the desired template + namespace = "default" + name = "vcluster-template-development" + + # Modify or add more parameters as needed + parameter_values = { + "CLUSTER_NAME": "foo", + } + + data = { + "parameterValues": parameter_values, + "templateKind": "GitOpsTemplate", + } + + response = s.post(f"{BASE_URL}/v1/namespaces/{namespace}/templates/{name}/render", + json=data) + + return response.json() + + +if __name__ == "__main__": + s = requests.Session() + + sign_in(s) + + response = render(s) + + for item in response["renderedTemplates"]: + print(f"# {item['path']}") + print(item["content"]) diff --git a/website/docs/api-server/intro.md b/website/docs/api-server/intro.md new file mode 100644 index 0000000000..525da90f1d --- /dev/null +++ b/website/docs/api-server/intro.md @@ -0,0 +1,115 @@ +--- +title: Introduction +--- + +Some use cases require programmatic access to Weave GitOps. For example integrating Weave GitOps with other systems or automating GitOps workflows. The Weave GitOps API server provides a REST API for this. The UI is built on top of this API. + +## Accessing the Weave GitOps API server + +The Weave GitOps API server can be accessed similarly to how the UI accesses it - by making HTTP requests to the API server's URL. +If you've exposed the UI via an Ingress endpoint that is accessible from other systems, the API will also be available at that same URL path. +If you've not exposed the UI via an Ingress, port-forwarding can be used to access it locally. + +## Quickstart + +Lets go through a few simple examples of how to use the API server by listing `HelmRelease` objects visible to the user. + +### Using curl + +The session system uses cookies, so we'll need to login first to get a session cookie: + +Login with JSON payload and save the session cookies to `cookies.txt`. + +```bash +curl \ + --fail \ + --cookie-jar cookies.txt \ + --data '{"username":"your_username","password":"your_password"}' \ + http://localhost:8000/oauth2/sign_in || "Login failed" +``` + +:::tip + +Add curl's `-v` flag to the command see the HTTP request and response headers to debug login and other issues. + +::: + + +Use the saved session cookie to list `HelmRelease` objects visible to the user: + +```bash +curl \ + --cookie cookies.txt \ + --data '{ "kind": "HelmRelease" }' http://localhost:8000/v1/objects +``` + +### Using Node.js + +Here's an example using node.js to login and list `HelmRelease` objects visible to the user: + +:::note + +This example uses `fetch` which is available from node v18.0.0. If you're using an older version of node, you can use a library like [node-fetch](https://www.npmjs.com/package/node-fetch) instead. + +::: + +```js title="list-helmreleases.mjs" +const response = await fetch("http://localhost:8000/oauth2/sign_in", { + method: "POST", + body: JSON.stringify({ + username: "your_username", + password: "your_password", + }), +}); + +if (!response.ok) { + const error = await response.text(); + throw new Error(`Request failed with status ${response.status}: ${error}`); +} + +const cookie = (await response).headers.get("set-cookie"); + +// Get objects +const objectsResponse = await fetch("http://localhost:8000/v1/objects", { + method: "POST", + headers: { Cookie: cookie }, + body: JSON.stringify({ + kind: "HelmRelease", + }), +}); + +const data = await objectsResponse.json(); + +console.log(data); +``` + +### Using Python + +Here's an example using Python to login and list `HelmRelease` objects visible to the user: + +```python title="list-helmreleases.py" +import requests + +# Login +response = requests.post( + "http://localhost:8000/oauth2/sign_in", + json={"username": "your_username", "password": "your_password"}, +) + +if not response.ok: + raise Exception( + f"Request failed with status {response.status_code}: {response.text}" + ) + +cookie = response.headers["set-cookie"] + +# Get objects +objects_response = requests.post( + "http://localhost:8000/v1/objects", + json={"kind": "HelmRelease"}, + headers={"Cookie": cookie}, +) + +print(objects_response.json()) + +``` diff --git a/website/docs/api-server/reference.mdx b/website/docs/api-server/reference.mdx new file mode 100644 index 0000000000..8f4be3f3b8 --- /dev/null +++ b/website/docs/api-server/reference.mdx @@ -0,0 +1,114 @@ +--- +title: Reference +--- + +import BrowserOnly from "@docusaurus/BrowserOnly"; +import useBaseUrl from "@docusaurus/useBaseUrl"; +import "swagger-ui-react/swagger-ui.css"; +// DIY toc. +// FIXME, generate with a build stuff +export const toc = [ + { "level": 2, "value": "Authentication", "id": "authentication" }, + { "level": 2, "value": "OSS Core", "id": "oss-core" }, + { "level": 3, "value": "Objects", "id": "operations-tag-objects" }, + { "level": 3, "value": "Policy", "id": "operations-tag-policy" }, + { "level": 2, "value": "Enterprise Core", "id": "enterprise-core" }, + { "level": 3, "value": "Automations", "id": "operations-tag-automations" }, + { "level": 3, "value": "Charts", "id": "operations-tag-charts" }, + { "level": 3, "value": "Clusters", "id": "operations-tag-clusters" }, + { "level": 3, "value": "Secrets", "id": "operations-tag-secrets" }, + { "level": 3, "value": "Templates", "id": "operations-tag-templates" }, + { "level": 3, "value": "Policies", "id": "operations-tag-policies" }, + { "level": 3, "value": "Workspaces", "id": "operations-tag-workspaces" }, + { "level": 2, "value": "GitAuth", "id": "git-auth" }, + { "level": 2, "value": "Internal APIs", "id": "internal-apis" }, + { "level": 3, "value": "Terraform", "id": "terraform" }, + { "level": 3, "value": "Query", "id": "query" }, + { "level": 3, "value": "Pipelines", "id": "pipelines" }, +]; + +export const APIUI = ({ url }) => { + const swaggerUrl = useBaseUrl(url); + return ( +
+ Loading...
}> + {() => { + const SwaggerUI = require("swagger-ui-react").default; + const query = new URLSearchParams(window.location.search); + const docExpansion = query.get("docExpansion") || undefined; + return ( + + ); + }} + + + ); +}; + +This is the complete API reference for the OSS and Enterprise versions of Weave Gitops. + +

Authentication

+ +Some simple examples of authentication are provided in the [Introduction](./intro.md) section. +It covers how to save the session cookie and how to use it to authenticate with the API. + +For completeness we provide the full list of endpoints for authentication here. + +| Method | Path | Description | +| --- | --- | --- | +| `GET` | /oauth2 | Redirects to the OAuth2 provider if configured | +| `GET` | /oauth2/callback | OAuth2 provider redirects back to this page and includes a `code` parameter | +| `POST` | /oauth2/sign_in | Sign in with a username and password. Request body should be in the form `{ "username": "foo", "password": "" }` | +| `GET` | /oauth2/userinfo | Get the current user info. Returns `{ "id": "user@example.com", "email": "user@example.com", "groups": ["foo", "bar"] }` | +| `POST` | /oauth2/refresh | Attempt to refresh the current session with the configured OAuth2 provider. | +| `POST` | /oauth2/logout | Log out of the current session. | + +

OSS Core

+ + + +

Enterprise Core

+ + + +

GitAuth

+ + + +

Internal APIs

+ +APIs that are not yet considered stable + +

Terraform

+ + + +

Query

+ + + +

Pipelines

+ + \ No newline at end of file diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 03031ae0b5..ac83d6d080 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -1,4 +1,6 @@ const versions = require("./versions.json"); +const webpack = require('webpack'); + /** @type {import('@docusaurus/types').DocusaurusConfig} */ module.exports = { title: "Weave GitOps", @@ -16,6 +18,17 @@ module.exports = { // Load yaml files as blobs configureWebpack: function () { return { + resolve: { + fallback: { + stream: require.resolve("stream-browserify"), + buffer: require.resolve('buffer/'), + } + }, + plugins: [ + new webpack.ProvidePlugin({ + Buffer: ['buffer', 'Buffer'], + }), + ], module: { rules: [ { diff --git a/website/package.json b/website/package.json index e409113a27..5d99249d17 100644 --- a/website/package.json +++ b/website/package.json @@ -30,6 +30,8 @@ "react": "^17.0.1", "react-dom": "^17.0.1", "react-player": "^2.11.0", + "stream-browserify": "^3.0.0", + "swagger-ui-react": "^5.9.0", "trim": "^1.0.1", "url-loader": "^4.1.1", "webpack": "^5.76.0" diff --git a/website/sidebars.js b/website/sidebars.js index d2872a302b..eeb55d3f32 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -264,7 +264,11 @@ 'workspaces/view-workspaces', ], }, - + { + type: "category", + label: "API Server", + items: ["api-server/intro", "api-server/examples", "api-server/reference"], + }, ], ref: [ { diff --git a/website/src/css/custom.css b/website/src/css/custom.css index c3ba6dcbc1..5e77409806 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -38,3 +38,110 @@ top: 0; left: 0; } + + +/* +Remove some of the title block margins. +They are very big headline things designed to be +at the top of pages. +*/ +.swagger-ui .info { + margin: 0 !important; +} + +/* +clear docusaurus table style +*/ +.swagger-ui table tr, +.swagger-ui table td, +.swagger-ui table th { + border: none; +} +.swagger-ui table thead { + background: none; +} + +/* +docusaurus adds some top margin here +Presumably for vertical lists +*/ +.swagger-ui .tab li + li { + margin-top: 0; +} + +/* +Make the titles smaller. +We provide our own bigger titles in docusaurus to get a +basic TOC on the left side. +*/ +.swagger-ui h2.title { + font-size: 1em !important; +} + +/* +Hide the little version bubbles. +The versions mentioned there are not correct. +*/ +.swagger-ui h2.title small { + display: none !important; +} + +/* Give the URL in "GET $URL + description" a bit more space +so it doesn't wrap as often */ +.swagger-ui .opblock .opblock-summary-path { + font-size: 14px !important; + max-width: calc(100% - 50px - 15rem) !important; +} + +/* markdown `code` blocks are a bit big */ +.swagger-ui .opblock-description-wrapper { + font-size: 14px !important; +} +.swagger-ui .markdown code { + padding: 2px 4px !important; +} + +/* style internal methods similarly to "deprecated" ones */ +.swagger-ui .opblock[id*='-internal-'], .swagger-ui .opblock-tag[id$='-internal'] { + opacity: 0.5; +} + +/* hide error responses */ +.swagger-ui .responses-wrapper tr[data-code="default"] { + display: none; +} + +/* hide the name of the submodel v1clusterobject etc */ +.swagger-ui .model-box-control { + display: none !important; +} +/* Enum's aren't auto expanded so we have to show the expander +So the user can do it manually */ +.swagger-ui .prop-enum .model-box-control { + display: block !important; +} + +/* non-monospace for the field descriptions */ +.swagger-ui .model .markdown { + font-family: sans-serif; + font-weight: normal; + font-size: 14px; +} + +/* narrow up the table a bit */ +.swagger-ui table.model tbody tr td:first-of-type { + width: unset !important; +} +/* Fix up the close brace, has some funny padding */ +.swagger-ui span>span.model .brace-close { + padding: 0 !important; +} +/* global style set by docusaurus we want to undo */ +.swagger-ui table { + margin-bottom: 0; +} +/* reduce padding on the table */ +.swagger-ui table.model tr.property-row td { + padding-right: 1em !important; + padding-left: 0 !important; +} \ No newline at end of file diff --git a/website/static/swagger/cluster_services.swagger.json b/website/static/swagger/cluster_services.swagger.json new file mode 100644 index 0000000000..5d1ce836a6 --- /dev/null +++ b/website/static/swagger/cluster_services.swagger.json @@ -0,0 +1,3351 @@ +{ + "swagger": "2.0", + "info": { + "title": "Weave GitOps Enterprise API", + "description": "The API handles operations for Weave GitOps Enterprise", + "version": "0.1" + }, + "tags": [ + { + "name": "default", + "description": "system endpoints" + }, + { + "name": "internal", + "description": "Internal APIs which should not be used" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/automations/pull-request": { + "post": { + "summary": "Creates a pull request to add automations to a cluster", + "description": "Add kustomizations, helm releases, external secrets, policy configs, and sops secrets\n\n**See the Examples for a complete solution.**\n\nAs in the template pull-request endpoint, this endpoint requires a few different parameters to be set.\n\n1. The details of the git repository to create the pull request in.\n2. An JWT encoded git provider token to autheticate the create-pull-request request.\n3. What kustomizations, helm releases, external secrets, policy configs, and sops secrets to add.", + "operationId": "ClustersService_CreateAutomationsPullRequest", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1CreateAutomationsPullRequestResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1CreateAutomationsPullRequestRequest" + } + } + ], + "tags": [ + "automations" + ] + } + }, + "/v1/automations/render": { + "post": { + "summary": "Preview adding automations to a cluster", + "description": "Preview what the automations would look like if added to a cluster.\n\nVarious resources can be created via this endpoint, see the `Model` section for full params\n\n- Kustomization \n- HelmRelease \n- ExternalSecret \n- PolicyConfig\n- SopsSecret", + "operationId": "ClustersService_RenderAutomation", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1RenderAutomationResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1RenderAutomationRequest" + } + } + ], + "tags": [ + "automations" + ] + } + }, + "/v1/charts/jobs/{jobId}": { + "get": { + "summary": "Retrieve the results of a /v1/charts/values job", + "description": "After calling `/v1/charts/values` a job will be created and a `jobId` returned in the response.\nThe jobId is then used with this endpoint to retrieve the results of the job.\n\nIf the job has not finished yet `values` will be empty.\nWhen the job has finished the `values` will contain the contents of `values.yaml` for the chart.\nIf an error has occurred the `error` will contain the error message.", + "operationId": "ClustersService_GetChartsJob", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetChartsJobResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "charts" + ] + } + }, + "/v1/charts/list": { + "get": { + "summary": "Lists charts in a HelmRepository", + "description": "Given a HelmRepository list the available charts and their versions.", + "operationId": "ClustersService_ListChartsForRepository", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListChartsForRepositoryResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "repository.cluster.namespace", + "description": "Namespace of the cluster.\nShould be an empty string when referencing the \"management\" / \"control-plane\" cluster\n(the cluster running Weave Gitops).", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "repository.cluster.name", + "description": "Name of the cluster.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "repository.name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "repository.namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "repository.kind", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "kind", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "charts" + ] + } + }, + "/v1/charts/values": { + "post": { + "summary": "Get the values.yaml for a chart", + "description": "Given\n- a helm repository reference of `{ cluster, name, namespace, kind }`\n- a chart reference within the helm repository of `{ name, version }`\n\nThen retrieve the values.yaml for this version of the chart.\n\nCreates a job. Job status the final result can be retrieved via /v1/charts/jobs/{job_id}", + "operationId": "ClustersService_GetValuesForChart", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetValuesForChartResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1GetValuesForChartRequest" + } + } + ], + "tags": [ + "charts" + ] + } + }, + "/v1/clusters": { + "get": { + "summary": "List GitOpsClusters", + "description": "List the `GitOpsClusters` in the management cluster.\n\nIf the GitopsCluster references a CAPI Cluster via a `capiClusterRef` then retrieve and include\nthat resources too.", + "operationId": "ClustersService_ListGitopsClusters", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListGitopsClustersResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "label", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "pageToken", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "refType", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "clusters" + ] + } + }, + "/v1/config": { + "get": { + "summary": "Get the Weave Gitops Enterprise configuration", + "description": "Returns information about the current configuration of the Weave GitOps Enterprise.", + "operationId": "ClustersService_GetConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetConfigResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/v1/encrypt-sops-secret": { + "post": { + "summary": "Encrypts a sops secret", + "operationId": "ClustersService_EncryptSopsSecret", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1EncryptSopsSecretResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1EncryptSopsSecretRequest" + } + } + ], + "tags": [ + "secrets" + ] + } + }, + "/v1/enterprise/events": { + "get": { + "summary": "List the kubernetes events for a resource", + "operationId": "ClustersService_ListEvents", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListEventsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "involvedObject.kind", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "involvedObject.name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "involvedObject.namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "internal" + ] + } + }, + "/v1/enterprise/version": { + "get": { + "summary": "Get the Weave Gitops Enterprise version", + "description": "Returns the version of the Weave GitOps Enterprise server.", + "operationId": "ClustersService_GetEnterpriseVersion", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetEnterpriseVersionResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/v1/external-secrets": { + "get": { + "summary": "List external secrets", + "operationId": "ClustersService_ListExternalSecrets", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListExternalSecretsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "secrets" + ] + } + }, + "/v1/external-secrets-stores": { + "get": { + "summary": "List external secrets stores", + "operationId": "ClustersService_ListExternalSecretStores", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListExternalSecretStoresResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "secrets" + ] + } + }, + "/v1/external-secrets/sync": { + "patch": { + "summary": "Sync externalSecret Operator secrets", + "operationId": "ClustersService_SyncExternalSecrets", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1SyncExternalSecretsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1SyncExternalSecretsRequest" + } + } + ], + "tags": [ + "secrets" + ] + } + }, + "/v1/namespaces/{namespace}/clusters/{name}/kubeconfig": { + "get": { + "summary": "Get the kubeconfig for a GitOpsCluster", + "description": "Provide the name and namespace of a `GitOpsCluster` to retrieve its kubeconfig", + "operationId": "ClustersService_GetKubeconfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/apiHttpBody" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "description": "The namespace of the `GitopsCluster`.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "The name of the `GitopsCluster`.", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "clusters" + ] + } + }, + "/v1/namespaces/{namespace}/external-secrets/{name}": { + "get": { + "summary": "Get secret details", + "operationId": "ClustersService_GetExternalSecret", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetExternalSecretResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "secrets" + ] + } + }, + "/v1/namespaces/{namespace}/templates/{name}": { + "get": { + "summary": "Get template details", + "description": "Get a single template from the management cluster.", + "operationId": "ClustersService_GetTemplate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetTemplateResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "templateKind", + "description": "Kind of the template\n`GitopsTemplate` or `CAPITemplate` (Default)", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "templates" + ] + } + }, + "/v1/namespaces/{namespace}/templates/{name}/pull-request": { + "post": { + "summary": "Create a pull request from a rendered template", + "description": "Render a template and create a pull request containing the output.\n\n**See the Examples for a complete solution.**\n\nThis endpoint requires a few different parameters to be set.\n\n1. The details of the git repository to create the pull request in.\n2. An JWT encoded git provider token to autheticate the create-pull-request request.\n This is provided via the `Git-Provider-Token` header. An existing git provider (github/gitlab)\n token should be wrapped in a JWT via the Weave Gitops GitAuth APIs.\n3. The template params and list of charts to include in the pull request.", + "operationId": "ClustersService_CreatePullRequest", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1CreatePullRequestResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "description": "The namespace of the template.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "description": "The name of the template to create a pull request for.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "repositoryUrl": { + "type": "string", + "description": "The repository to use e.g. https://github.com/my-org/my-repo." + }, + "headBranch": { + "type": "string", + "description": "The name of the new branch to be created e.g. adds-cluster-dev-01." + }, + "baseBranch": { + "type": "string", + "description": "The target branch to merge the new PR into, e.g. main." + }, + "title": { + "type": "string", + "description": "The title of the pull request." + }, + "description": { + "type": "string", + "description": "The description of the pull request." + }, + "parameterValues": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The values that populate the templates parameters.\n\nA map of string keys and values.\ne.g. `{\"CLUSTER_NAME\": \"my-cluster\"}`" + }, + "commitMessage": { + "type": "string", + "description": "The commit message." + }, + "credentials": { + "$ref": "#/definitions/v1Credential" + }, + "profiles": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ProfileValues" + }, + "description": "The values for each profile that will be installed." + }, + "repositoryApiUrl": { + "type": "string", + "description": "_DEPRECATED: This is no longer used and will be removed in the future._\nThe repo api url." + }, + "clusterNamespace": { + "type": "string", + "description": "_DEPRECATED: This is no longer used and will be removed in the future._\nThe cluster namespace." + }, + "kustomizations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Kustomization" + }, + "description": "Additional kustomizations to be created in the pull request." + }, + "templateKind": { + "type": "string", + "description": "The kind of the template, either `GitopsTemplate` or `CAPITemplate`." + }, + "previousValues": { + "$ref": "#/definitions/v1PreviousValues" + }, + "externalSecrets": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ExternalSecret" + }, + "description": "Additional external secrets to be created in the pull request." + }, + "policyConfigs": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyConfigObject" + }, + "description": "Additional policy configs to be created in the pull request." + }, + "sopsSecrets": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1SopsSecret" + }, + "description": "Additional sops secrets to be created in the pull request." + } + } + } + } + ], + "tags": [ + "templates" + ] + } + }, + "/v1/namespaces/{namespace}/templates/{name}/render": { + "post": { + "summary": "Renders a template using given values.", + "description": "Render out a template using the given values. See the /pull-request endpoint for more details.", + "operationId": "ClustersService_RenderTemplate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1RenderTemplateResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "parameterValues": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "credentials": { + "$ref": "#/definitions/v1Credential" + }, + "templateKind": { + "type": "string" + }, + "clusterNamespace": { + "type": "string" + }, + "profiles": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ProfileValues" + } + }, + "kustomizations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Kustomization" + } + }, + "externalSecrets": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ExternalSecret" + } + } + } + } + } + ], + "tags": [ + "templates" + ] + } + }, + "/v1/policy-configs": { + "get": { + "summary": "List policy configs", + "operationId": "ClustersService_ListPolicyConfigs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListPolicyConfigsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "policies" + ] + } + }, + "/v1/policy-configs/{name}": { + "get": { + "summary": "Get policy config details", + "operationId": "ClustersService_GetPolicyConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetPolicyConfigResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "policies" + ] + } + }, + "/v1/sops-kustomizations": { + "get": { + "summary": "List Sops kustomizations", + "operationId": "ClustersService_ListSopsKustomizations", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListSopsKustomizationsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "secrets" + ] + } + }, + "/v1/templates": { + "get": { + "summary": "List templates", + "description": "List templates from the management cluster.", + "operationId": "ClustersService_ListTemplates", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListTemplatesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "provider", + "description": "Filter by the capi provider resources used in the template\n`aws`, `azure`, `vsphere`, `gcp`, `openstack`, `digitalocean`, `packet`, `docker`", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "templateKind", + "description": "Filter by template's kind\n`GitopTemplate` or `CAPITemplate`", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "templates" + ] + } + }, + "/v1/templates/capi-identities": { + "get": { + "summary": "List available CAPI identities", + "description": "Search the cluster for available CAPI identities.", + "operationId": "ClustersService_ListCredentials", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListCredentialsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "templates" + ] + } + }, + "/v1/templates/deletion-pull-request": { + "post": { + "summary": "Create a pull request to delete templated resources", + "description": "_INTERNAL: will undergo changes to how we calculate which files to delete in the future._", + "operationId": "ClustersService_CreateDeletionPullRequest", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1CreateDeletionPullRequestResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1CreateDeletionPullRequestRequest" + } + } + ], + "tags": [ + "internal" + ] + } + }, + "/v1/tfcontrollers/pull-request": { + "post": { + "summary": "Creates a pull request from a tfcontroller template.", + "description": "Use CreatePullRequest instead", + "operationId": "ClustersService_CreateTfControllerPullRequest", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1CreateTfControllerPullRequestResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1CreateTfControllerPullRequestRequest" + } + } + ], + "tags": [ + "templates" + ], + "deprecated": true + } + }, + "/v1/workspaces": { + "get": { + "summary": "List workspaces", + "description": "See the workspaces documentation for an overview of how they work.\nIn effect a workspace is a set of namespaces, roles, rolebindings, serviceaccounts, and policies.\nAll these resources are labeled with the workspace.\n\nReturns a list of workspaces and the namespaces they each manage.", + "operationId": "ClustersService_ListWorkspaces", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListWorkspacesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "pagination.pageSize", + "description": "controls the number of results per page from each cluster", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pagination.pageToken", + "description": "a composite token used to retrieve the next page of results across all clusters\nthis is availble in the response as `nextPageToken`", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "workspaces" + ] + } + }, + "/v1/workspaces/{name}": { + "get": { + "summary": "Get workspace details", + "description": "Get a single workspace and its namespaces.", + "operationId": "ClustersService_GetWorkspace", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetWorkspaceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "workspaces" + ] + } + }, + "/v1/workspaces/{name}/policies": { + "get": { + "summary": "List workspace service accounts", + "operationId": "ClustersService_GetWorkspacePolicies", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetWorkspacePoliciesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "workspaces" + ] + } + }, + "/v1/workspaces/{name}/rolebindings": { + "get": { + "summary": "List workspace role bindings", + "operationId": "ClustersService_GetWorkspaceRoleBindings", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetWorkspaceRoleBindingsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "workspaces" + ] + } + }, + "/v1/workspaces/{name}/roles": { + "get": { + "summary": "List workspace roles", + "operationId": "ClustersService_GetWorkspaceRoles", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetWorkspaceRolesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "workspaces" + ] + } + }, + "/v1/workspaces/{name}/serviceaccounts": { + "get": { + "summary": "List workspace service accounts", + "operationId": "ClustersService_GetWorkspaceServiceAccounts", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetWorkspaceServiceAccountsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "workspaces" + ] + } + } + }, + "definitions": { + "CostEstimateRange": { + "type": "object", + "properties": { + "low": { + "type": "number", + "format": "float" + }, + "high": { + "type": "number", + "format": "float" + } + } + }, + "apiHttpBody": { + "type": "object", + "properties": { + "contentType": { + "type": "string", + "description": "The HTTP Content-Type header value specifying the content type of the body." + }, + "data": { + "type": "string", + "format": "byte", + "description": "The HTTP request/response body as raw binary." + }, + "extensions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + }, + "description": "Application specific response metadata. Must be set in the first response\nfor streaming APIs." + } + }, + "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest)\n returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody)\n returns (google.protobuf.Empty);\n\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged." + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\nExample 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\nExample 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "protobufNullValue": { + "type": "string", + "enum": [ + "NULL_VALUE" + ], + "default": "NULL_VALUE", + "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\n The JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value." + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "v1CapiCluster": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "status": { + "$ref": "#/definitions/v1CapiClusterStatus" + }, + "infrastructureRef": { + "$ref": "#/definitions/v1CapiClusterInfrastructureRef" + } + } + }, + "v1CapiClusterInfrastructureRef": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1CapiClusterStatus": { + "type": "object", + "properties": { + "phase": { + "type": "string" + }, + "infrastructureReady": { + "type": "boolean" + }, + "controlPlaneInitialized": { + "type": "boolean" + }, + "controlPlaneReady": { + "type": "boolean" + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Condition" + } + }, + "observedGeneration": { + "type": "string", + "format": "int64" + } + } + }, + "v1Chart": { + "type": "object", + "properties": { + "spec": { + "$ref": "#/definitions/v1ChartSpec" + } + } + }, + "v1ChartSpec": { + "type": "object", + "properties": { + "chart": { + "type": "string" + }, + "sourceRef": { + "$ref": "#/definitions/v1SourceRef" + }, + "version": { + "type": "string" + } + } + }, + "v1ClusterAutomation": { + "type": "object", + "properties": { + "cluster": { + "$ref": "#/definitions/v1ClusterNamespacedName" + }, + "isControlPlane": { + "type": "boolean", + "description": "If the cluster is the \"management\" aka \"control-plane\" cluster then this is set to true.\nEnsures the file_path is correctly constructed if an explicit path is not set." + }, + "kustomization": { + "$ref": "#/definitions/v1Kustomization" + }, + "helmRelease": { + "$ref": "#/definitions/v1HelmRelease" + }, + "filePath": { + "type": "string", + "description": "A path to write the resource to in the management git repo." + }, + "externalSecret": { + "$ref": "#/definitions/v1ExternalSecret" + }, + "policyConfig": { + "$ref": "#/definitions/v1PolicyConfigObject" + }, + "sopsSecret": { + "$ref": "#/definitions/v1SopsSecret" + } + } + }, + "v1ClusterNamespacedName": { + "type": "object", + "properties": { + "namespace": { + "type": "string", + "description": "Namespace of the cluster.\nShould be an empty string when referencing the \"management\" / \"control-plane\" cluster\n(the cluster running Weave Gitops)." + }, + "name": { + "type": "string", + "description": "Name of the cluster." + } + } + }, + "v1CommitFile": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "content": { + "type": "string" + } + } + }, + "v1Condition": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "status": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "message": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + }, + "title": "kubernetes status condition field\nXXX: is dup'd in core, can we share?" + }, + "v1CostEstimate": { + "type": "object", + "properties": { + "currency": { + "type": "string" + }, + "range": { + "$ref": "#/definitions/CostEstimateRange" + }, + "message": { + "type": "string" + } + } + }, + "v1CreateAutomationsPullRequestRequest": { + "type": "object", + "properties": { + "repositoryUrl": { + "type": "string", + "description": "The repository to use e.g. https://github.com/my-org/my-repo." + }, + "headBranch": { + "type": "string", + "description": "The name of the new branch to be created e.g. adds-cluster-dev-01." + }, + "baseBranch": { + "type": "string", + "description": "The target branch to merge the new PR into, e.g. main." + }, + "title": { + "type": "string", + "description": "The title of the pull request." + }, + "description": { + "type": "string", + "description": "The description of the pull request." + }, + "commitMessage": { + "type": "string", + "description": "The commit message." + }, + "repositoryApiUrl": { + "type": "string", + "description": "_DEPRECATED: This is no longer used and will be removed in the future._\nThe repo api url." + }, + "clusterAutomations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ClusterAutomation" + }, + "description": "A list of cluster and kustomization.\nThe cluster is used to determine the file path." + } + } + }, + "v1CreateAutomationsPullRequestResponse": { + "type": "object", + "properties": { + "webUrl": { + "type": "string", + "description": "The url of the new pull request." + } + } + }, + "v1CreateDeletionPullRequestRequest": { + "type": "object", + "properties": { + "repositoryUrl": { + "type": "string", + "description": "The repository to use." + }, + "headBranch": { + "type": "string", + "description": "The new branch that will be created." + }, + "baseBranch": { + "type": "string", + "description": "The target branch." + }, + "title": { + "type": "string", + "description": "The title of the pull request." + }, + "description": { + "type": "string", + "title": "The description of the pull request" + }, + "clusterNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The name of the clusters to be delete via a PR." + }, + "commitMessage": { + "type": "string", + "title": "The commit message" + }, + "credentials": { + "$ref": "#/definitions/v1Credential", + "title": "Credentials" + }, + "repositoryApiUrl": { + "type": "string", + "description": "_DEPRECATED: This is no longer used and will be removed in the future._\nThe repo api url." + }, + "clusterNamespacedNames": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ClusterNamespacedName" + } + } + } + }, + "v1CreateDeletionPullRequestResponse": { + "type": "object", + "properties": { + "webUrl": { + "type": "string", + "description": "The url of the new pull request." + } + } + }, + "v1CreatePullRequestResponse": { + "type": "object", + "properties": { + "webUrl": { + "type": "string", + "description": "The url of the new pull request." + } + } + }, + "v1CreateTfControllerPullRequestRequest": { + "type": "object", + "properties": { + "repositoryUrl": { + "type": "string", + "description": "The repository to use." + }, + "headBranch": { + "type": "string", + "description": "The new branch that will be created." + }, + "baseBranch": { + "type": "string", + "description": "The target branch." + }, + "title": { + "type": "string", + "description": "The title of the pull request." + }, + "description": { + "type": "string", + "title": "The description of the pull request" + }, + "name": { + "type": "string", + "description": "The name of the template to create a pull request for." + }, + "parameterValues": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The values that populate the template's parameters." + }, + "commitMessage": { + "type": "string", + "title": "The commit message" + }, + "repositoryApiUrl": { + "type": "string", + "description": "The repo api url." + }, + "namespace": { + "type": "string" + } + } + }, + "v1CreateTfControllerPullRequestResponse": { + "type": "object", + "properties": { + "webUrl": { + "type": "string", + "description": "The url of the new pull request." + } + } + }, + "v1Credential": { + "type": "object", + "properties": { + "group": { + "type": "string" + }, + "version": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + }, + "description": "A reference to a CAPI identity.\n\nSupported Identity kinds:\n- `AWSClusterStaticIdentity`\n- `AWSClusterRoleIdentity`\n- `AzureClusterIdentity`\n- `VSphereClusterIdentity`\n\nThe credentials available on the system can be listed via the /capi-identities endpoint." + }, + "v1Decryption": { + "type": "object", + "properties": { + "provider": { + "type": "string" + }, + "secretRef": { + "$ref": "#/definitions/v1SecretRef" + } + } + }, + "v1EncryptSopsSecretRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "type": { + "type": "string" + }, + "immutable": { + "type": "boolean" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "stringData": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "kustomizationName": { + "type": "string" + }, + "kustomizationNamespace": { + "type": "string" + }, + "clusterName": { + "type": "string" + } + } + }, + "v1EncryptSopsSecretResponse": { + "type": "object", + "properties": { + "encryptedSecret": {}, + "path": { + "type": "string" + } + } + }, + "v1Event": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "message": { + "type": "string" + }, + "timestamp": { + "type": "string" + }, + "component": { + "type": "string" + }, + "host": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1ExternalSecret": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/v1Metadata" + }, + "spec": { + "$ref": "#/definitions/v1ExternalSecretSpec" + } + }, + "title": "External Secrets template" + }, + "v1ExternalSecretData": { + "type": "object", + "properties": { + "secretKey": { + "type": "string" + }, + "remoteRef": { + "$ref": "#/definitions/v1ExternalSecretRemoteRef" + } + } + }, + "v1ExternalSecretDataFromRemoteRef": { + "type": "object", + "properties": { + "extract": { + "$ref": "#/definitions/v1ExternalSecretDataRemoteRef" + } + } + }, + "v1ExternalSecretDataRemoteRef": { + "type": "object", + "properties": { + "key": { + "type": "string" + } + } + }, + "v1ExternalSecretItem": { + "type": "object", + "properties": { + "secretName": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "secretStore": { + "type": "string" + }, + "status": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + } + }, + "v1ExternalSecretRemoteRef": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "property": { + "type": "string" + } + } + }, + "v1ExternalSecretSpec": { + "type": "object", + "properties": { + "refreshInterval": { + "type": "string" + }, + "secretStoreRef": { + "$ref": "#/definitions/v1ExternalSecretStoreRef" + }, + "target": { + "$ref": "#/definitions/v1ExternalSecretTarget" + }, + "data": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ExternalSecretData" + } + }, + "dataFrom": { + "$ref": "#/definitions/v1ExternalSecretDataFromRemoteRef" + } + } + }, + "v1ExternalSecretStore": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "v1ExternalSecretStoreRef": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "kind": { + "type": "string" + } + } + }, + "v1ExternalSecretTarget": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "v1GetChartsJobResponse": { + "type": "object", + "properties": { + "values": { + "type": "string", + "description": "This is the base64 encoded version of the raw values data." + }, + "error": { + "type": "string" + } + } + }, + "v1GetConfigResponse": { + "type": "object", + "properties": { + "repositoryUrl": { + "type": "string", + "description": "_DEPRECATED: This is no longer used and will be removed in the future._\nThe default git repository URL for the management cluster." + }, + "managementClusterName": { + "type": "string", + "description": "The given name of the management cluster which is used for some multi-cluster operations." + }, + "uiConfig": { + "type": "string", + "description": "JSON encoded string of UI configuration." + }, + "gitHostTypes": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The configured mapping of domains to git providers.\ne.g. `{ \"git.myhost.com\": \"gitlab\" }`) used\nfor authentication and creating pull requests." + } + } + }, + "v1GetEnterpriseVersionResponse": { + "type": "object", + "example": { + "version": "0.42.0" + }, + "properties": { + "version": { + "type": "string", + "description": "The version of Weave GitOps Enterprise." + } + } + }, + "v1GetExternalSecretResponse": { + "type": "object", + "properties": { + "secretName": { + "type": "string" + }, + "name": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "secretStore": { + "type": "string" + }, + "secretStoreType": { + "type": "string" + }, + "secretPath": { + "type": "string" + }, + "properties": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "version": { + "type": "string" + }, + "status": { + "type": "string" + }, + "timestamp": { + "type": "string" + }, + "yaml": { + "type": "string" + } + } + }, + "v1GetPolicyConfigResponse": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "age": { + "type": "string" + }, + "status": { + "type": "string" + }, + "matchType": { + "type": "string" + }, + "match": { + "$ref": "#/definitions/v1PolicyConfigMatch" + }, + "policies": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyConfigPolicy" + } + }, + "totalPolicies": { + "type": "integer", + "format": "int32" + } + } + }, + "v1GetTemplateResponse": { + "type": "object", + "properties": { + "template": { + "$ref": "#/definitions/v1Template" + } + } + }, + "v1GetValuesForChartRequest": { + "type": "object", + "properties": { + "repository": { + "$ref": "#/definitions/v1RepositoryRef" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1GetValuesForChartResponse": { + "type": "object", + "properties": { + "jobId": { + "type": "string" + } + } + }, + "v1GetWorkspacePoliciesResponse": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the workspace." + }, + "clusterName": { + "type": "string", + "description": "The cluster the workspaces is in." + }, + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1WorkspacePolicy" + }, + "description": "The list of policies that are part of the workspace." + } + } + }, + "v1GetWorkspaceResponse": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the workspace." + }, + "clusterName": { + "type": "string", + "description": "The cluster the workspace is in." + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The list of namespaces that are part of the workspace." + } + } + }, + "v1GetWorkspaceRoleBindingsResponse": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the workspace." + }, + "clusterName": { + "type": "string", + "description": "The cluster the workspace is in." + }, + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1WorkspaceRoleBinding" + }, + "description": "The list of role bindings that are part of the workspace." + } + } + }, + "v1GetWorkspaceRolesResponse": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the workspace." + }, + "clusterName": { + "type": "string", + "description": "The cluster the workspace is in." + }, + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1WorkspaceRole" + }, + "description": "The list of roles that are part of the workspace." + } + } + }, + "v1GetWorkspaceServiceAccountsResponse": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the workspace." + }, + "clusterName": { + "type": "string", + "description": "The cluster the workspace is in." + }, + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1WorkspaceServiceAccount" + }, + "description": "The list of service accounts that are part of the workspace." + } + } + }, + "v1GitopsCluster": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Condition" + } + }, + "capiClusterRef": { + "$ref": "#/definitions/v1GitopsClusterRef" + }, + "secretRef": { + "$ref": "#/definitions/v1GitopsClusterRef" + }, + "capiCluster": { + "$ref": "#/definitions/v1CapiCluster" + }, + "controlPlane": { + "type": "boolean" + }, + "type": { + "type": "string" + } + } + }, + "v1GitopsClusterRef": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "v1HelmRelease": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/v1Metadata" + }, + "spec": { + "$ref": "#/definitions/v1HelmReleaseSpec" + } + } + }, + "v1HelmReleaseSpec": { + "type": "object", + "properties": { + "chart": { + "$ref": "#/definitions/v1Chart" + }, + "values": { + "type": "string" + } + } + }, + "v1Kustomization": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/v1Metadata" + }, + "spec": { + "$ref": "#/definitions/v1KustomizationSpec" + } + } + }, + "v1KustomizationSpec": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "sourceRef": { + "$ref": "#/definitions/v1SourceRef" + }, + "targetNamespace": { + "type": "string" + }, + "createNamespace": { + "type": "boolean" + }, + "decryption": { + "$ref": "#/definitions/v1Decryption" + } + } + }, + "v1ListChartsForRepositoryResponse": { + "type": "object", + "properties": { + "charts": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1RepositoryChart" + } + } + } + }, + "v1ListCredentialsResponse": { + "type": "object", + "properties": { + "credentials": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Credential" + } + }, + "total": { + "type": "integer", + "format": "int32" + } + } + }, + "v1ListError": { + "type": "object", + "properties": { + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "v1ListEventsResponse": { + "type": "object", + "properties": { + "events": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Event" + } + } + } + }, + "v1ListExternalSecretStoresResponse": { + "type": "object", + "properties": { + "stores": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ExternalSecretStore" + } + }, + "total": { + "type": "integer", + "format": "int32" + } + } + }, + "v1ListExternalSecretsResponse": { + "type": "object", + "properties": { + "secrets": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ExternalSecretItem" + } + }, + "total": { + "type": "integer", + "format": "int32" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + } + } + }, + "v1ListGitopsClustersResponse": { + "type": "object", + "properties": { + "gitopsClusters": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1GitopsCluster" + } + }, + "total": { + "type": "integer", + "format": "int32" + }, + "nextPageToken": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + } + } + }, + "v1ListPolicyConfigsResponse": { + "type": "object", + "properties": { + "policyConfigs": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyConfigListItem" + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + }, + "total": { + "type": "integer", + "format": "int32" + } + } + }, + "v1ListSopsKustomizationsResponse": { + "type": "object", + "properties": { + "kustomizations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1SopsKustomizations" + } + }, + "total": { + "type": "integer", + "format": "int32" + } + } + }, + "v1ListTemplatesResponse": { + "type": "object", + "properties": { + "templates": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Template" + } + }, + "total": { + "type": "integer", + "format": "int32" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + } + } + }, + "v1ListWorkspacesResponse": { + "type": "object", + "properties": { + "workspaces": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Workspace" + } + }, + "total": { + "type": "integer", + "format": "int32" + }, + "nextPageToken": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + } + } + }, + "v1Metadata": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1ObjectRef": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "v1Pagination": { + "type": "object", + "properties": { + "pageSize": { + "type": "integer", + "format": "int32", + "title": "controls the number of results per page from each cluster" + }, + "pageToken": { + "type": "string", + "title": "a composite token used to retrieve the next page of results across all clusters\nthis is availble in the response as `nextPageToken`" + } + } + }, + "v1Parameter": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "required": { + "type": "boolean" + }, + "options": { + "type": "array", + "items": { + "type": "string" + } + }, + "default": { + "type": "string" + }, + "editable": { + "type": "boolean" + } + } + }, + "v1PolicyConfigApplicationMatch": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "v1PolicyConfigConf": { + "type": "object", + "properties": { + "parameters": { + "type": "object", + "additionalProperties": {} + } + } + }, + "v1PolicyConfigListItem": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "totalPolicies": { + "type": "integer", + "format": "int32" + }, + "match": { + "type": "string" + }, + "status": { + "type": "string" + }, + "age": { + "type": "string" + } + } + }, + "v1PolicyConfigMatch": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + }, + "workspaces": { + "type": "array", + "items": { + "type": "string" + } + }, + "apps": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyConfigApplicationMatch" + } + }, + "resources": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyConfigResourceMatch" + } + } + } + }, + "v1PolicyConfigObject": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/v1Metadata" + }, + "spec": { + "$ref": "#/definitions/v1PolicyConfigObjectSpec" + } + } + }, + "v1PolicyConfigObjectSpec": { + "type": "object", + "properties": { + "match": { + "$ref": "#/definitions/v1PolicyConfigMatch" + }, + "config": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/v1PolicyConfigConf" + } + } + } + }, + "v1PolicyConfigPolicy": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "parameters": { + "type": "object", + "additionalProperties": {} + }, + "status": { + "type": "string" + } + } + }, + "v1PolicyConfigResourceMatch": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "v1PreviousValues": { + "type": "object", + "properties": { + "parameterValues": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "credentials": { + "$ref": "#/definitions/v1Credential" + }, + "values": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ProfileValues" + } + }, + "kustomizations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Kustomization" + } + }, + "externalSecrets": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ExternalSecret" + } + }, + "policyConfigs": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyConfigObject" + } + }, + "sopsSecrets": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1SopsSecret" + } + } + }, + "description": "INTERNAL: DO NOT USE - This field will change.\n\nPrevious values for a CreatePullRequestRequest.\nIf provided this request will be considered an edit to previous set of resources that\nhave been rendered and merged. Files written by the previous request that are no longer\npresent in the current render will be deleted in the new Pull Request." + }, + "v1ProfileValues": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "values": { + "type": "string" + }, + "layer": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "v1RenderAutomationRequest": { + "type": "object", + "properties": { + "clusterAutomations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ClusterAutomation" + } + } + } + }, + "v1RenderAutomationResponse": { + "type": "object", + "properties": { + "kustomizationFiles": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1CommitFile" + } + }, + "helmReleaseFiles": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1CommitFile" + } + }, + "externalSecretsFiles": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1CommitFile" + } + }, + "policyConfigFiles": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1CommitFile" + } + }, + "sopsSecertFiles": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1CommitFile" + } + } + } + }, + "v1RenderTemplateResponse": { + "type": "object", + "properties": { + "renderedTemplates": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1CommitFile" + } + }, + "profileFiles": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1CommitFile" + } + }, + "kustomizationFiles": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1CommitFile" + } + }, + "costEstimate": { + "$ref": "#/definitions/v1CostEstimate" + }, + "externalSecretsFiles": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1CommitFile" + } + }, + "policyConfigFiles": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1CommitFile" + } + }, + "sopsSecretFiles": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1CommitFile" + } + } + } + }, + "v1RepositoryChart": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "versions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "This is the available versions in reverse semver order." + }, + "layer": { + "type": "string" + } + } + }, + "v1RepositoryRef": { + "type": "object", + "properties": { + "cluster": { + "$ref": "#/definitions/v1ClusterNamespacedName" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "kind": { + "type": "string" + } + } + }, + "v1SecretRef": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "v1SopsKustomizations": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "v1SopsSecret": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string", + "title": "(-- protolint:disable:next FIELD_NAMES_LOWER_SNAKE_CASE --)" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1SopsSecretMetadata" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "stringData": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "(-- protolint:disable:next FIELD_NAMES_LOWER_SNAKE_CASE --)" + }, + "type": { + "type": "string" + }, + "immutable": { + "type": "boolean" + }, + "sops": {} + } + }, + "v1SopsSecretMetadata": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1SourceRef": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "v1SyncExternalSecretsRequest": { + "type": "object", + "properties": { + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1SyncExternalSecretsResponse": { + "type": "object" + }, + "v1Template": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the template." + }, + "description": { + "type": "string", + "description": "The description of the template given in the spec." + }, + "provider": { + "type": "string", + "description": "The provider that the kinds found in the template belong to.\nE.g. If the template includes an AWSCluster then **aws** is returned here. Values:\naws, azure, vsphere, gcp, openstack, digitalocean, packet, docker." + }, + "parameters": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Parameter" + }, + "description": "The parameters that the template provides." + }, + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1TemplateObject" + }, + "description": "Metadata about the resources found in the template body.\nWhat kind they are, which parameters are found in this block etc." + }, + "error": { + "type": "string", + "description": "Any errors that occurred while parsing the template." + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The metadata.annotations of the template resource." + }, + "templateKind": { + "type": "string", + "description": "The kind of the template. Either **CAPITemplate** or **GitopsTemplate**." + }, + "templateType": { + "type": "string", + "description": "The type of the template declared by the weave.works/template-type label." + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The metadata.labels of the template resource." + }, + "namespace": { + "type": "string", + "description": "The namespace of the template." + }, + "profiles": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1TemplateProfile" + }, + "description": "Required and recommended profiles for the template." + } + } + }, + "v1TemplateObject": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "apiVersion": { + "type": "string" + }, + "parameters": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "displayName": { + "type": "string" + } + } + }, + "v1TemplateProfile": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "editable": { + "type": "boolean" + }, + "values": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "required": { + "type": "boolean" + }, + "profileTemplate": { + "type": "string" + }, + "layer": { + "type": "string" + } + } + }, + "v1Workspace": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the workspace." + }, + "clusterName": { + "type": "string", + "description": "The cluster the workspaces is in." + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The list of namespaces that are part of the workspace." + } + } + }, + "v1WorkspacePolicy": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "category": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + } + }, + "v1WorkspaceRole": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "rules": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1WorkspaceRoleRule" + } + }, + "manifest": { + "type": "string" + }, + "timestamp": { + "type": "string" + }, + "kind": { + "type": "string" + } + } + }, + "v1WorkspaceRoleBinding": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "manifest": { + "type": "string" + }, + "timestamp": { + "type": "string" + }, + "role": { + "$ref": "#/definitions/v1WorkspaceRoleBindingRoleRef" + }, + "subjects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1WorkspaceRoleBindingSubject" + } + }, + "kind": { + "type": "string" + } + } + }, + "v1WorkspaceRoleBindingRoleRef": { + "type": "object", + "properties": { + "apiGroup": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1WorkspaceRoleBindingSubject": { + "type": "object", + "properties": { + "apiGroup": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "v1WorkspaceRoleRule": { + "type": "object", + "properties": { + "groups": { + "type": "array", + "items": { + "type": "string" + } + }, + "resources": { + "type": "array", + "items": { + "type": "string" + } + }, + "verbs": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1WorkspaceServiceAccount": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "timestamp": { + "type": "string" + }, + "manifest": { + "type": "string" + }, + "kind": { + "type": "string" + } + } + } + } +} diff --git a/website/static/swagger/core.swagger.json b/website/static/swagger/core.swagger.json new file mode 100644 index 0000000000..97d8f58cdd --- /dev/null +++ b/website/static/swagger/core.swagger.json @@ -0,0 +1,1662 @@ +{ + "swagger": "2.0", + "info": { + "title": "Weave GitOps Core API", + "description": "The API handles operations for Weave GitOps Core", + "version": "0.1" + }, + "tags": [ + { + "name": "default", + "description": "system endpoints" + }, + { + "name": "objects", + "description": "Query and trigger kubernetes resources" + }, + { + "name": "policy", + "description": "Query policy config and validations" + }, + { + "name": "internal", + "description": "Internal APIs which should not be used" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/child_objects": { + "post": { + "summary": "Returns the children of a given object", + "description": "Use /inventory instead", + "operationId": "Core_GetChildObjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetChildObjectsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1GetChildObjectsRequest" + } + } + ], + "tags": [ + "internal" + ], + "deprecated": true + } + }, + "/v1/crds/{name}/is-available": { + "get": { + "summary": "Check which clusters have a given CRD installed", + "description": "Returns a map where the keys are cluster names, and the value is a boolean indicating\nwhether the given `CustomResourceDefinition` resource is available on that cluster.", + "operationId": "Core_IsCRDAvailable", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1IsCRDAvailableResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "description": "The name of the CustomResourceDefinition to check availability for across clusters. e.g.\n- `imageupdateautomations.image.toolkit.fluxcd.io`\n- `gitopssets.templates.weave.works`", + "in": "path", + "required": true, + "type": "string" + } + ] + } + }, + "/v1/feature-flags": { + "get": { + "summary": "Get feature flags", + "description": "Return infomation about what features and configuration options are enabled on the server.\n\nNew features are sometimes hidden behind feature flags. Other features (e.g. OIDC) can be enabled/disabled.", + "operationId": "Core_GetFeatureFlags", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetFeatureFlagsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/v1/flux/crds": { + "get": { + "summary": "Lists the Flux CRDs across all clusters", + "description": "Determine which flux CRDs are installed on which clusters and at what version.", + "operationId": "Core_ListFluxCrds", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListFluxCrdsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/v1/flux/deployments": { + "get": { + "summary": "Lists the Flux runtime deployments across all clusters", + "description": "Determine which controllers are installed, their image versions, status, etc.", + "operationId": "Core_ListFluxRuntimeObjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListFluxRuntimeObjectsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/v1/namespaces/{namespace}/objects/{kind}/{name}": { + "get": { + "summary": "Get details of an object", + "description": "Kind is used as the primary identifier rather than GroupVersionKind\n\nSupported kinds are:\n\n - some of the base Kubernetes groups including core (e.g. `ConfigMap`) and apps (e.g. `Deployment`)\n - All the of the Flux Custom Resource kinds e.g. (`GitRepository`, `HelmRelease`, `Kustomization`, `ImageAutomation`)\n - If using enterprise, `GitOpsSet` and `AutomatedClusterDiscovery` are also available", + "operationId": "Core_GetObject", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetObjectResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "objects" + ] + } + }, + "/v1/namespaces/{namespace}/objects/{kind}/{name}/events": { + "get": { + "summary": "List events for an object", + "description": "Kind is used as the primary identifier rather than GroupVersionKind\n\nSupported kinds are:\n\n - some of the base Kubernetes groups including core (e.g. `ConfigMap`) and apps (e.g. `Deployment`)\n - All the of the Flux Custom Resource kinds e.g. (`GitRepository`, `HelmRelease`, `Kustomization`, `ImageAutomation`)\n - If using enterprise, `GitOpsSet` and `AutomatedClusterDiscovery` are also available", + "operationId": "Core_ListEvents", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListEventsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "objects" + ] + } + }, + "/v1/namespaces/{namespace}/objects/{kind}/{name}/inventory": { + "get": { + "summary": "Get the inventory of an object", + "description": "Look up the inventory of a given object. The inventory is a list of\nobjects that were created as a result of reconciling the given object.\n\nThe response includes the full kubernetes resource for each inventory item.", + "operationId": "Core_GetInventory", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetInventoryResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "kind", + "description": "Supported kinds are `Kustomization` and `HelmRelease`\nIf using Enterprise, `GitOpsSet` and `AutomatedClusterDiscovery` are also supported", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "withChildren", + "description": "If true, the children of certain resources like Deployments and Replicasets will be included in the response", + "in": "query", + "required": false, + "type": "boolean" + } + ], + "tags": [ + "objects" + ] + } + }, + "/v1/objects/{kind}": { + "get": { + "summary": "List objects of kind across all clusters", + "description": "Kind is used as the primary identifier rather than GroupVersionKind\n\nSupported kinds are:\n\n - some of the base Kubernetes groups including core (e.g. `ConfigMap`) and apps (e.g. `Deployment`)\n - All the of the Flux Custom Resource kinds e.g. (`GitRepository`, `HelmRelease`, `Kustomization`, `ImageAutomation`)\n - If using enterprise, `GitOpsSet` and `AutomatedClusterDiscovery` are also available", + "operationId": "Core_ListObjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListObjectsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "kind", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "labelSelector", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "objects" + ] + } + }, + "/v1/policies": { + "get": { + "summary": "List policies available across all clusters", + "description": "This will return all the `Policy` custom resources that are available across all clusters.", + "operationId": "Core_ListPolicies", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListPoliciesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "pagination.pageSize", + "description": "controls the number of results per page from each cluster", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pagination.pageToken", + "description": "a composite token used to retrieve the next page of results across all clusters\nthis is availble in the response as `nextPageToken`", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "policy" + ] + } + }, + "/v1/policies/{name}": { + "get": { + "summary": "Gets a policy", + "description": "Get a `Policy` custom resource by name and cluster.", + "operationId": "Core_GetPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetPolicyResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "description": "The name of the `Policy` resource to retrieve.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "description": "The name of the cluster to retrieve the policy from. Default is the cluster running the API server.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "policy" + ] + } + }, + "/v1/policy-validations": { + "get": { + "summary": "Lists policy validations across all clusters", + "description": "Can be filtered by a few different properties of the `involvedObject`", + "operationId": "Core_ListPolicyValidations", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListPolicyValidationsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "clusterName", + "description": "filter for validations on a particular cluster", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "pagination.pageSize", + "description": "controls the number of results per page from each cluster", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pagination.pageToken", + "description": "a composite token used to retrieve the next page of results across all clusters\nthis is availble in the response as `nextPageToken`", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "application", + "description": "filter by `involvedObject.name`", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "description": "filter by `involvedObject.namespace`", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "kind", + "description": "filter by `involvedObject.kind`", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "policyId", + "description": "filter by id of the policy that triggered the validation", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "validationType", + "description": "filter for validation types of `Admission` or `Audit`", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "policy" + ] + } + }, + "/v1/policy-validations/{validationId}": { + "get": { + "summary": "Gets a policy validation", + "description": "Given a specific validation id, returns the validation details.", + "operationId": "Core_GetPolicyValidation", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetPolicyValidationResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "validationId", + "description": "The id of the validation.\nThis is often obtained from:\n- from the list policy validations endpoint.\n- from `Event` objects raised by the policy-agent", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "validationType", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "policy" + ] + } + }, + "/v1/reconciled_objects": { + "post": { + "summary": "Get the list of objects that were created as a result of reconciling a Flux automation.", + "description": "Use /inventory instead", + "operationId": "Core_GetReconciledObjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetReconciledObjectsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1GetReconciledObjectsRequest" + } + } + ], + "tags": [ + "internal" + ], + "deprecated": true + } + }, + "/v1/session-logs": { + "get": { + "summary": "Get the logs for a GitOpsRun session", + "description": "The GitOpsRun feature has been removed", + "operationId": "Core_GetSessionLogs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetSessionLogsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "sessionNamespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "sessionId", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "token", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "logSourceFilter", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "logLevelFilter", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "internal" + ], + "deprecated": true + } + }, + "/v1/suspend": { + "patch": { + "summary": "Suspend or resume reconciling multiple Flux objects", + "description": "Provide a list of objects to be suspended or resumed. Objects are identified by their kind, name, namespace and cluster.\n\nSupported kinds are:\n\n- any Flux custom resource (e.g. `GitRepository` or `HelmRelease`)\n- Enterprise objects that also support this pattern: `GitOpsSet` and `AutomatedClusterDiscovery`", + "operationId": "Core_ToggleSuspendResource", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ToggleSuspendResourceResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1ToggleSuspendResourceRequest" + } + } + ], + "tags": [ + "objects" + ] + } + }, + "/v1/sync": { + "patch": { + "summary": "Trigger reconciliation of multiple Flux objects", + "description": "Provide a list of objects to be reconciled. Objects are identified by their kind, name, namespace and cluster.\n\nSupported kinds are:\n\n- all Flux custom resources (e.g. `GitRepository` or `HelmRelease`)\n- Enterprise objects that also support this pattern: `GitOpsSet` and `AutomatedClusterDiscovery`\n\nif `withSource` is true the dependent Source resource will be synced too.\nSyncing a Kustomization `withSource` will sync an attached GitRepository.", + "operationId": "Core_SyncFluxObject", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1SyncFluxObjectResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1SyncFluxObjectRequest" + } + } + ], + "tags": [ + "objects" + ] + } + }, + "/v1/version": { + "get": { + "summary": "Get version information about the server", + "description": "Version information about weave-gitops including when the runninng server was built, the git commit and the git tag.\nAlso return the kubernetes version of the cluster running weave-gitops.", + "operationId": "Core_GetVersion", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetVersionResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + } + }, + "definitions": { + "CrdName": { + "type": "object", + "properties": { + "plural": { + "type": "string" + }, + "group": { + "type": "string" + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\nExample 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\nExample 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "v1ClusterNamespaceList": { + "type": "object", + "properties": { + "clusterName": { + "type": "string" + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1Condition": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "status": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "message": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + } + }, + "v1Crd": { + "type": "object", + "properties": { + "name": { + "$ref": "#/definitions/CrdName" + }, + "version": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1Deployment": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Condition" + } + }, + "images": { + "type": "array", + "items": { + "type": "string" + } + }, + "suspended": { + "type": "boolean" + }, + "clusterName": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1Event": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "message": { + "type": "string" + }, + "timestamp": { + "type": "string", + "description": "The LastTimestamp of the event." + }, + "component": { + "type": "string", + "description": "The Source Component." + }, + "host": { + "type": "string", + "description": "The Source Host." + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1GetChildObjectsRequest": { + "type": "object", + "properties": { + "groupVersionKind": { + "$ref": "#/definitions/v1GroupVersionKind" + }, + "namespace": { + "type": "string" + }, + "parentUid": { + "type": "string" + }, + "clusterName": { + "type": "string" + } + } + }, + "v1GetChildObjectsResponse": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Object" + } + } + } + }, + "v1GetFeatureFlagsResponse": { + "type": "object", + "example": { + "flags": { + "WEAVE_GITOPS_FEATURE_TENANCY": "true", + "OIDC_AUTH": "true" + } + }, + "properties": { + "flags": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1GetInventoryResponse": { + "type": "object", + "properties": { + "entries": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1InventoryEntry" + } + } + } + }, + "v1GetObjectResponse": { + "type": "object", + "properties": { + "object": { + "$ref": "#/definitions/v1Object" + } + } + }, + "v1GetPolicyResponse": { + "type": "object", + "properties": { + "policy": { + "$ref": "#/definitions/v1PolicyObj" + }, + "clusterName": { + "type": "string" + } + } + }, + "v1GetPolicyValidationResponse": { + "type": "object", + "properties": { + "validation": { + "$ref": "#/definitions/v1PolicyValidation" + } + } + }, + "v1GetReconciledObjectsRequest": { + "type": "object", + "properties": { + "automationName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "automationKind": { + "type": "string" + }, + "kinds": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1GroupVersionKind" + } + }, + "clusterName": { + "type": "string" + } + } + }, + "v1GetReconciledObjectsResponse": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Object" + } + } + } + }, + "v1GetSessionLogsResponse": { + "type": "object", + "properties": { + "logs": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1LogEntry" + } + }, + "nextToken": { + "type": "string" + }, + "error": { + "type": "string" + }, + "logSources": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1GetVersionResponse": { + "type": "object", + "properties": { + "semver": { + "type": "string" + }, + "commit": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "buildTime": { + "type": "string" + }, + "kubeVersion": { + "type": "string" + } + } + }, + "v1GroupVersionKind": { + "type": "object", + "properties": { + "group": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "title": "GroupVersionKind represents an objects Kubernetes API type data" + }, + "v1HealthStatus": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "v1InventoryEntry": { + "type": "object", + "properties": { + "payload": { + "type": "string", + "description": "A JSON string containing the complete Kubernetes object." + }, + "tenant": { + "type": "string", + "description": "The tenant the object belongs to if any." + }, + "clusterName": { + "type": "string", + "description": "The cluster the object is deployed to." + }, + "health": { + "$ref": "#/definitions/v1HealthStatus" + }, + "children": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1InventoryEntry" + }, + "description": "If the object is a parent e.g. `ReplicaSet` -\u003e `Pod`\nThen the children are included here with their payload, clusterName etc\nThis a recursive structure." + } + } + }, + "v1IsCRDAvailableResponse": { + "type": "object", + "example": { + "clusters": { + "clusters-1": true + } + }, + "properties": { + "clusters": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + } + } + }, + "v1ListError": { + "type": "object", + "properties": { + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "description": "Queries are made to each cluster. If its a namespaced query then a query\nis made per namespace too. If an error occurs for any specific query the error\nmessage is included here alongside the results for the queries that succeeded." + }, + "v1ListEventsResponse": { + "type": "object", + "properties": { + "events": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Event" + } + } + } + }, + "v1ListFluxCrdsResponse": { + "type": "object", + "properties": { + "crds": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Crd" + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + } + } + }, + "v1ListFluxRuntimeObjectsResponse": { + "type": "object", + "properties": { + "deployments": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Deployment" + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + } + } + }, + "v1ListObjectsResponse": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Object" + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + }, + "searchedNamespaces": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ClusterNamespaceList" + } + } + } + }, + "v1ListPoliciesResponse": { + "type": "object", + "properties": { + "policies": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyObj" + } + }, + "total": { + "type": "integer", + "format": "int32" + }, + "nextPageToken": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + } + } + }, + "v1ListPolicyValidationsResponse": { + "type": "object", + "properties": { + "violations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyValidation" + } + }, + "total": { + "type": "integer", + "format": "int32" + }, + "nextPageToken": { + "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + } + } + }, + "v1LogEntry": { + "type": "object", + "properties": { + "timestamp": { + "type": "string" + }, + "source": { + "type": "string" + }, + "level": { + "type": "string" + }, + "message": { + "type": "string" + }, + "sortingKey": { + "type": "string" + } + } + }, + "v1Object": { + "type": "object", + "properties": { + "payload": { + "type": "string", + "description": "A JSON string containing the complete Kubernetes object." + }, + "clusterName": { + "type": "string", + "description": "The cluster the object is deployed to." + }, + "tenant": { + "type": "string", + "description": "The tenant the object belongs to if any." + }, + "uid": { + "type": "string", + "description": "The Kubernetes UID of the object." + }, + "inventory": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1GroupVersionKind" + }, + "description": "DEPRECATED, use /inventory endpoint." + }, + "info": { + "type": "string", + "description": "DEPRECATED, GitOpsRun field." + }, + "health": { + "$ref": "#/definitions/v1HealthStatus" + } + } + }, + "v1ObjectRef": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "clusterName": { + "type": "string" + } + } + }, + "v1Pagination": { + "type": "object", + "properties": { + "pageSize": { + "type": "integer", + "format": "int32", + "title": "controls the number of results per page from each cluster" + }, + "pageToken": { + "type": "string", + "title": "a composite token used to retrieve the next page of results across all clusters\nthis is availble in the response as `nextPageToken`" + } + } + }, + "v1PolicyObj": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "code": { + "type": "string" + }, + "description": { + "type": "string" + }, + "howToSolve": { + "type": "string" + }, + "category": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "severity": { + "type": "string" + }, + "standards": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyStandard" + } + }, + "gitCommit": { + "type": "string" + }, + "parameters": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyParam" + } + }, + "targets": { + "$ref": "#/definitions/v1PolicyTargets" + }, + "createdAt": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "tenant": { + "type": "string" + }, + "modes": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1PolicyParam": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "value": { + "$ref": "#/definitions/protobufAny", + "title": "value is a generic value that can be a string, int, bool and array of\nstrings" + }, + "required": { + "type": "boolean" + } + } + }, + "v1PolicyStandard": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "controls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1PolicyTargetLabel": { + "type": "object", + "properties": { + "values": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1PolicyTargets": { + "type": "object", + "properties": { + "kinds": { + "type": "array", + "items": { + "type": "string" + } + }, + "labels": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyTargetLabel" + } + }, + "namespaces": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1PolicyValidation": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "clusterId": { + "type": "string" + }, + "category": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "entity": { + "type": "string" + }, + "entityKind": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "violatingEntity": { + "type": "string" + }, + "description": { + "type": "string" + }, + "howToSolve": { + "type": "string" + }, + "name": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "occurrences": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyValidationOccurrence" + } + }, + "policyId": { + "type": "string" + }, + "parameters": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PolicyValidationParam" + } + } + } + }, + "v1PolicyValidationOccurrence": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "v1PolicyValidationParam": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "value": { + "$ref": "#/definitions/protobufAny" + }, + "required": { + "type": "boolean" + }, + "configRef": { + "type": "string" + } + } + }, + "v1SyncFluxObjectRequest": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ObjectRef" + }, + "description": "The list of objects to sync." + }, + "withSource": { + "type": "boolean" + } + } + }, + "v1SyncFluxObjectResponse": { + "type": "object" + }, + "v1ToggleSuspendResourceRequest": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ObjectRef" + }, + "description": "The list of objects to suspend or resume." + }, + "suspend": { + "type": "boolean", + "description": "Suspend or resume the resources." + }, + "comment": { + "type": "string", + "description": "Include a comment about why the resources are being suspended." + } + } + }, + "v1ToggleSuspendResourceResponse": { + "type": "object" + } + } +} diff --git a/website/static/swagger/gitauth.swagger.json b/website/static/swagger/gitauth.swagger.json new file mode 100644 index 0000000000..34cfdda380 --- /dev/null +++ b/website/static/swagger/gitauth.swagger.json @@ -0,0 +1,581 @@ +{ + "swagger": "2.0", + "info": { + "title": "Weave Gitops Enterprise GitAuth API", + "description": "Weave Gitops Enterprise GitAuth API handles authentication via Github and Gitlab", + "version": "0.1" + }, + "consumes": [ + "gitauth/json" + ], + "produces": [ + "gitauth/json" + ], + "paths": { + "/v1/authenticate/{providerName}": { + "post": { + "summary": "Wrap an existing git provider token in a JWT", + "description": "If you already have an OAuth token, or a Personal Access Token, it can be\nmanually wrapped in a JWT using this endpoint.\n\nThe resulting JWT can be included in requests to other API endpoint\nthat interact with the Git provider (e.g. creating a pull request from a template).", + "operationId": "GitAuth_Authenticate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1AuthenticateResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "providerName", + "description": "The name of the git provider. E.g. \"github\", \"gitlab\", \"bitbucketserver\", \"azuredevops\".", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "accessToken": { + "type": "string", + "description": "The token of the git provider." + } + } + } + } + ] + } + }, + "/v1/gitauth/auth-providers/azuredevops": { + "get": { + "summary": "Get the Azure DevOps authorization URL used to initiate the OAuth flow.", + "operationId": "GitAuth_GetAzureDevOpsAuthURL", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetAzureDevOpsAuthURLResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "redirectUri", + "description": "The URI that Azure DevOps will use to send users back to Weave GitOps.", + "in": "query", + "required": false, + "type": "string" + } + ] + } + }, + "/v1/gitauth/auth-providers/azuredevops/authorize": { + "post": { + "summary": "Exchange an Azure DevOps code obtained via OAuth callback.", + "description": "Get a token after a user authorizes Azure DevOps to grant access to their account\non behalf of Weave GitOps Enterprise.", + "operationId": "GitAuth_AuthorizeAzureDevOps", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1AuthorizeAzureDevOpsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1AuthorizeAzureDevOpsRequest" + } + } + ] + } + }, + "/v1/gitauth/auth-providers/bitbucketserver": { + "get": { + "summary": "Get the URL to initiate a Bitbucket Server OAuth flow.", + "operationId": "GitAuth_GetBitbucketServerAuthURL", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetBitbucketServerAuthURLResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "redirectUri", + "description": "The URI that Bitbucket Server will use to send users back to Weave GitOps.", + "in": "query", + "required": false, + "type": "string" + } + ] + } + }, + "/v1/gitauth/auth-providers/bitbucketserver/authorize": { + "post": { + "summary": "Exchange a Bitbucket Server code obtained via OAuth callback.", + "description": "The returned token is useable for authentication with the Weave GitOps server only.", + "operationId": "GitAuth_AuthorizeBitbucketServer", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1AuthorizeBitbucketServerResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1AuthorizeBitbucketServerRequest" + } + } + ] + } + }, + "/v1/gitauth/auth-providers/github": { + "get": { + "summary": "Get a temporary device code for Github authentication", + "description": "This code is used to start the Github device-flow.", + "operationId": "GitAuth_GetGithubDeviceCode", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetGithubDeviceCodeResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/v1/gitauth/auth-providers/github/status": { + "post": { + "summary": "Get the status of the Github device flow authentication requests", + "description": "Once the user has completed the Github device flow, an access token will be returned.\nThis token will expire in 15 minutes,\nafter which the user will need to complete the flow again\nto do Git Provider operations.", + "operationId": "GitAuth_GetGithubAuthStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetGithubAuthStatusResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1GetGithubAuthStatusRequest" + } + } + ] + } + }, + "/v1/gitauth/auth-providers/gitlab": { + "get": { + "summary": "Get the URL to initiate a GitLab OAuth flow.", + "description": "The user must browse to the returned URL to authorize the OAuth callback\nto the Weave GitOps UI.\nSee the GitLab OAuth docs for more more information:\nhttps://docs.gitlab.com/ee/api/oauth2.html#supported-oauth-20-flows", + "operationId": "GitAuth_GetGitlabAuthURL", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetGitlabAuthURLResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "redirectUri", + "description": "The URI that GitLab will use to send users back to Weave GitOps.", + "in": "query", + "required": false, + "type": "string" + } + ] + } + }, + "/v1/gitauth/auth-providers/gitlab/authorize": { + "post": { + "summary": "Exchange a GitLab code obtained via OAuth callback.", + "description": "The returned token is useable for authentication with the Weave GitOps server only.\nSee the GitLab OAuth docs for more more information:\nhttps://docs.gitlab.com/ee/api/oauth2.html#supported-oauth-20-flows", + "operationId": "GitAuth_AuthorizeGitlab", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1AuthorizeGitlabResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1AuthorizeGitlabRequest" + } + } + ] + } + }, + "/v1/gitauth/parse-repo-url": { + "get": { + "summary": "Get structured data about a git repository URL", + "operationId": "GitAuth_ParseRepoURL", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ParseRepoURLResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "url", + "description": "The URL to be parsed.", + "in": "query", + "required": false, + "type": "string" + } + ] + } + }, + "/v1/gitauth/validate-token": { + "post": { + "summary": "Check if a git provider token is still valid", + "operationId": "GitAuth_ValidateProviderToken", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ValidateProviderTokenResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1ValidateProviderTokenRequest" + } + } + ] + } + } + }, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "v1AuthenticateResponse": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "The jwt token that was generated using git provider name and git provider token." + } + } + }, + "v1AuthorizeAzureDevOpsRequest": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The challenge code obtained from the OAuth callback." + }, + "state": { + "type": "string", + "description": "The state parameter provided in the authorization URL." + }, + "redirectUri": { + "type": "string", + "description": "The redirect URI that originated the OAuth flow." + } + } + }, + "v1AuthorizeAzureDevOpsResponse": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "A token that can be used to authenticate the Weave GitOps API server." + } + } + }, + "v1AuthorizeBitbucketServerRequest": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The challenge code obtained from the OAuth callback." + }, + "state": { + "type": "string", + "description": "The state parameter provided in the authorization URL." + }, + "redirectUri": { + "type": "string", + "description": "The redirect URI that originated the OAuth flow." + } + } + }, + "v1AuthorizeBitbucketServerResponse": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "A token that can be used to authenticate the Weave GitOps API server." + } + } + }, + "v1AuthorizeGitlabRequest": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The challenge code obtained from the OAuth callback." + }, + "redirectUri": { + "type": "string", + "description": "The redirect URI that originated the OAuth flow." + } + } + }, + "v1AuthorizeGitlabResponse": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "A token that can be used to authenticate the Weave GitOps API server." + } + } + }, + "v1GetAzureDevOpsAuthURLResponse": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "The URL that users must visit to initiate the Azure DevOps OAuth flow." + } + } + }, + "v1GetBitbucketServerAuthURLResponse": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "The URL that users must visit to authorize BitBucket Server authentication." + } + } + }, + "v1GetGithubAuthStatusRequest": { + "type": "object", + "properties": { + "deviceCode": { + "type": "string", + "description": "The deviceCode returned from a GetGithubDeviceCodeResponse." + } + } + }, + "v1GetGithubAuthStatusResponse": { + "type": "object", + "properties": { + "accessToken": { + "type": "string", + "description": "An access token that can be used to interact with the Weave GitOps API." + }, + "error": { + "type": "string", + "description": "An error message." + } + } + }, + "v1GetGithubDeviceCodeResponse": { + "type": "object", + "properties": { + "userCode": { + "type": "string", + "description": "The Github Device Flow code that will be shown to the user." + }, + "deviceCode": { + "type": "string", + "description": "A code that uniquely identifies a device." + }, + "validationUri": { + "type": "string", + "description": "The URI that the user will visit to complete the flow." + }, + "interval": { + "type": "integer", + "format": "int32", + "description": "How often the client should retry the request." + } + } + }, + "v1GetGitlabAuthURLResponse": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "The URL that users must visit to authorize GitLab authentication." + } + } + }, + "v1GitProvider": { + "type": "string", + "enum": [ + "Unknown", + "GitHub", + "GitLab", + "BitBucketServer", + "AzureDevOps" + ], + "default": "Unknown", + "description": "GitProvider enum defines the Git provider used in the GitAuth API." + }, + "v1ParseRepoURLResponse": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the git repository." + }, + "provider": { + "$ref": "#/definitions/v1GitProvider", + "description": "The GitProvider for the repository." + }, + "owner": { + "type": "string", + "description": "The person or organization to which this repo belongs." + } + } + }, + "v1ValidateProviderTokenRequest": { + "type": "object", + "properties": { + "provider": { + "$ref": "#/definitions/v1GitProvider" + } + } + }, + "v1ValidateProviderTokenResponse": { + "type": "object", + "properties": { + "valid": { + "type": "boolean" + } + } + } + } +} diff --git a/website/static/swagger/gitopssets.swagger.json b/website/static/swagger/gitopssets.swagger.json new file mode 100644 index 0000000000..5bd1574a88 --- /dev/null +++ b/website/static/swagger/gitopssets.swagger.json @@ -0,0 +1,492 @@ +{ + "swagger": "2.0", + "info": { + "title": "Weave GitOps GitOpsSets API", + "description": "The API handles operations for Weave GitOps GitopsSets", + "version": "0.1" + }, + "tags": [ + { + "name": "GitOpsSets" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/gitopssets": { + "get": { + "summary": "List GitOpsSets across all clusters", + "operationId": "GitOpsSets_ListGitOpsSets", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListGitOpsSetsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "GitOpsSets" + ] + } + }, + "/v1/namespaces/{namespace}/gitopssets/{name}": { + "get": { + "summary": "Get a GitOpsSet", + "operationId": "GitOpsSets_GetGitOpsSet", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetGitOpsSetResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "GitOpsSets" + ] + } + }, + "/v1/namespaces/{namespace}/gitopssets/{name}/reconciled-objects": { + "post": { + "summary": "Get the reconciled objects for a GitOpsSet", + "operationId": "GitOpsSets_GetReconciledObjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetReconciledObjectsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "kinds": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1GroupVersionKind" + } + }, + "clusterName": { + "type": "string" + } + } + } + } + ], + "tags": [ + "GitOpsSets" + ] + } + }, + "/v1/namespaces/{namespace}/gitopssets/{name}/suspend": { + "patch": { + "summary": "Toggle suspend on a GitOpsSet", + "operationId": "GitOpsSets_ToggleSuspendGitOpsSet", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ToggleSuspendGitOpsSetResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "clusterName": { + "type": "string" + }, + "suspend": { + "type": "boolean" + } + } + } + } + ], + "tags": [ + "GitOpsSets" + ] + } + }, + "/v1/namespaces/{namespace}/gitopssets/{name}/sync": { + "patch": { + "summary": "Trigger reconciliation of a GitOpsSet", + "operationId": "GitOpsSets_SyncGitOpsSet", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1SyncGitOpsSetResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "clusterName": { + "type": "string" + } + } + } + } + ], + "tags": [ + "GitOpsSets" + ] + } + } + }, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "v1Condition": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "status": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "message": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + } + }, + "v1GetGitOpsSetResponse": { + "type": "object", + "properties": { + "gitopsSet": { + "$ref": "#/definitions/v1GitOpsSet" + } + } + }, + "v1GetReconciledObjectsResponse": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Object" + } + } + } + }, + "v1GitOpsSet": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "inventory": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ResourceRef" + } + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Condition" + } + }, + "clusterName": { + "type": "string" + }, + "type": { + "type": "string" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "suspended": { + "type": "boolean" + }, + "observedGeneration": { + "type": "string", + "format": "int64" + }, + "yaml": { + "type": "string" + }, + "objectRef": { + "$ref": "#/definitions/v1ObjectRef" + } + } + }, + "v1GitOpsSetListError": { + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "message": { + "type": "string" + }, + "clusterName": { + "type": "string" + } + } + }, + "v1GroupVersionKind": { + "type": "object", + "properties": { + "group": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "title": "GroupVersionKind represents an objects Kubernetes API type data" + }, + "v1ListGitOpsSetsResponse": { + "type": "object", + "properties": { + "gitopssets": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1GitOpsSet" + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1GitOpsSetListError" + } + } + } + }, + "v1Object": { + "type": "object", + "properties": { + "payload": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "tenant": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "inventory": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1GroupVersionKind" + } + } + } + }, + "v1ObjectRef": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "clusterName": { + "type": "string" + } + } + }, + "v1ResourceRef": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1SyncGitOpsSetResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + } + } + }, + "v1ToggleSuspendGitOpsSetResponse": { + "type": "object" + } + } +} diff --git a/website/static/swagger/pipelines.swagger.json b/website/static/swagger/pipelines.swagger.json new file mode 100644 index 0000000000..24b2f8ba6d --- /dev/null +++ b/website/static/swagger/pipelines.swagger.json @@ -0,0 +1,505 @@ +{ + "swagger": "2.0", + "info": { + "title": "Weave GitOps Pipelines API", + "description": "The API handles operations for Weave GitOps Pipelines", + "version": "0.1" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/pipelines": { + "get": { + "summary": "FIXME", + "operationId": "Pipelines_ListPipelines", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListPipelinesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + } + ] + } + }, + "/v1/pipelines/approve/{name}": { + "post": { + "summary": "FIXME", + "operationId": "Pipelines_ApprovePromotion", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ApprovePromotionResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "env": { + "type": "string" + }, + "revision": { + "type": "string" + } + } + } + } + ] + } + }, + "/v1/pipelines/list_prs/{name}": { + "post": { + "summary": "FIXME", + "operationId": "Pipelines_ListPullRequests", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListPullRequestsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "namespace": { + "type": "string" + } + } + } + } + ] + } + }, + "/v1/pipelines/{name}": { + "get": { + "summary": "FIXME", + "operationId": "Pipelines_GetPipeline", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetPipelineResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + } + ] + } + } + }, + "definitions": { + "PipelineStatusEnvironmentStatus": { + "type": "object", + "properties": { + "waitingStatus": { + "$ref": "#/definitions/v1WaitingStatus" + }, + "targetsStatuses": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1PipelineTargetStatus" + } + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "v1AppRef": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1ApprovePromotionResponse": { + "type": "object", + "properties": { + "pullRequestUrl": { + "type": "string" + } + } + }, + "v1ClusterRef": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "v1Condition": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "status": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "message": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + } + }, + "v1Environment": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "targets": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Target" + } + }, + "promotion": { + "$ref": "#/definitions/v1Promotion" + } + } + }, + "v1GetPipelineResponse": { + "type": "object", + "properties": { + "pipeline": { + "$ref": "#/definitions/v1Pipeline" + }, + "errors": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1ListError": { + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "v1ListPipelinesResponse": { + "type": "object", + "properties": { + "pipelines": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Pipeline" + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ListError" + } + } + } + }, + "v1ListPullRequestsResponse": { + "type": "object", + "properties": { + "pullRequests": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1LocalObjectReference": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "v1Notification": { + "type": "object" + }, + "v1Pipeline": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "appRef": { + "$ref": "#/definitions/v1AppRef" + }, + "environments": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Environment" + } + }, + "targets": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Target" + } + }, + "status": { + "$ref": "#/definitions/v1PipelineStatus" + }, + "yaml": { + "type": "string" + }, + "type": { + "type": "string" + }, + "promotion": { + "$ref": "#/definitions/v1Promotion" + } + } + }, + "v1PipelineStatus": { + "type": "object", + "properties": { + "environments": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/PipelineStatusEnvironmentStatus" + } + } + } + }, + "v1PipelineTargetStatus": { + "type": "object", + "properties": { + "clusterRef": { + "$ref": "#/definitions/v1ClusterRef" + }, + "namespace": { + "type": "string" + }, + "workloads": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1WorkloadStatus" + } + } + } + }, + "v1Promotion": { + "type": "object", + "properties": { + "manual": { + "type": "boolean" + }, + "strategy": { + "$ref": "#/definitions/v1Strategy" + } + } + }, + "v1PullRequestPromotion": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "url": { + "type": "string" + }, + "branch": { + "type": "string" + } + } + }, + "v1Strategy": { + "type": "object", + "properties": { + "pullRequest": { + "$ref": "#/definitions/v1PullRequestPromotion" + }, + "notification": { + "$ref": "#/definitions/v1Notification" + }, + "secretRef": { + "$ref": "#/definitions/v1LocalObjectReference" + } + } + }, + "v1Target": { + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "clusterRef": { + "$ref": "#/definitions/v1ClusterRef" + } + } + }, + "v1WaitingStatus": { + "type": "object", + "properties": { + "revision": { + "type": "string" + } + } + }, + "v1WorkloadStatus": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "lastAppliedRevision": { + "type": "string" + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Condition" + } + }, + "suspended": { + "type": "boolean" + } + } + } + } +} diff --git a/website/static/swagger/query.swagger.json b/website/static/swagger/query.swagger.json new file mode 100644 index 0000000000..afe93dfb54 --- /dev/null +++ b/website/static/swagger/query.swagger.json @@ -0,0 +1,343 @@ +{ + "swagger": "2.0", + "info": { + "title": "Weave GitOps Query Service API", + "description": "The API handles handles cross-cluster queries for Weave GitOps Enterprise", + "version": "0.1" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/debug/access-rules": { + "get": { + "summary": "Get debug access rules", + "operationId": "Query_DebugGetAccessRules", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1DebugGetAccessRulesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/v1/enabled-components": { + "get": { + "summary": "FIXME", + "operationId": "Query_ListEnabledComponents", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListEnabledComponentsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + } + } + }, + "/v1/facets": { + "get": { + "summary": "List facets available for querying", + "operationId": "Query_ListFacets", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListFacetsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "category", + "in": "query", + "required": false, + "type": "string" + } + ] + } + }, + "/v1/query": { + "post": { + "summary": "Query for resources across clusters", + "operationId": "Query_DoQuery", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1DoQueryResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1DoQueryRequest" + } + } + ] + } + } + }, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "v1AccessRule": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "principal": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "accessibleKinds": { + "type": "array", + "items": { + "type": "string" + } + }, + "subjects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Subject" + } + }, + "providedByRole": { + "type": "string" + }, + "providedByBinding": { + "type": "string" + } + } + }, + "v1DebugGetAccessRulesResponse": { + "type": "object", + "properties": { + "rules": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1AccessRule" + } + } + } + }, + "v1DoQueryRequest": { + "type": "object", + "properties": { + "terms": { + "type": "string" + }, + "filters": { + "type": "array", + "items": { + "type": "string" + } + }, + "offset": { + "type": "integer", + "format": "int32" + }, + "limit": { + "type": "integer", + "format": "int32" + }, + "orderBy": { + "type": "string" + }, + "descending": { + "type": "boolean" + } + } + }, + "v1DoQueryResponse": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Object" + } + } + } + }, + "v1EnabledComponent": { + "type": "string", + "enum": [ + "unknown", + "applications", + "sources", + "gitopssets", + "templates", + "clusterdiscovery" + ], + "default": "unknown", + "title": "EnabledComponent represents a component of the UI that can be enabled or disabled" + }, + "v1Facet": { + "type": "object", + "properties": { + "field": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1ListEnabledComponentsResponse": { + "type": "object", + "properties": { + "components": { + "type": "array", + "items": { + "$ref": "#/definitions/v1EnabledComponent" + } + } + } + }, + "v1ListFacetsResponse": { + "type": "object", + "properties": { + "facets": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Facet" + } + }, + "humanReadableLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1Object": { + "type": "object", + "properties": { + "cluster": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "status": { + "type": "string" + }, + "apiGroup": { + "type": "string" + }, + "apiVersion": { + "type": "string" + }, + "message": { + "type": "string" + }, + "category": { + "type": "string" + }, + "unstructured": { + "type": "string" + }, + "id": { + "type": "string" + }, + "tenant": { + "type": "string" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1Subject": { + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } +} diff --git a/website/static/swagger/terraform.swagger.json b/website/static/swagger/terraform.swagger.json new file mode 100644 index 0000000000..0ccfaad721 --- /dev/null +++ b/website/static/swagger/terraform.swagger.json @@ -0,0 +1,575 @@ +{ + "swagger": "2.0", + "info": { + "title": "Weave GitOps Terraform API", + "description": "The API handles resources for the Terraform controller", + "version": "0.1" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/namespaces/{namespace}/terraform-objects/{name}": { + "get": { + "summary": "Get a terraform object", + "operationId": "Terraform_GetTerraformObject", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetTerraformObjectResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "clusterNamespace", + "in": "query", + "required": false, + "type": "string" + } + ] + } + }, + "/v1/namespaces/{namespace}/terraform-objects/{name}/plan": { + "get": { + "summary": "Get the plan for a terraform object", + "operationId": "Terraform_GetTerraformObjectPlan", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1GetTerraformObjectPlanResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + } + ] + } + }, + "/v1/namespaces/{namespace}/terraform-objects/{name}/replan": { + "post": { + "summary": "Replan a terraform object", + "operationId": "Terraform_ReplanTerraformObject", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ReplanTerraformObjectResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "clusterName": { + "type": "string" + } + } + } + } + ] + } + }, + "/v1/terraform-objects": { + "get": { + "summary": "List terraform objects across all clusters", + "operationId": "Terraform_ListTerraformObjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ListTerraformObjectsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "clusterName", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "namespace", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "pagination.pageSize", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "pagination.pageToken", + "in": "query", + "required": false, + "type": "string" + } + ] + } + }, + "/v1/terraform-objects/suspend": { + "patch": { + "summary": "Toggle suspend on multiple terraform objects", + "operationId": "Terraform_ToggleSuspendTerraformObjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1ToggleSuspendTerraformObjectsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1ToggleSuspendTerraformObjectsRequest" + } + } + ] + } + }, + "/v1/terraform-objects/sync": { + "patch": { + "summary": "Sync multiple terraform objects", + "operationId": "Terraform_SyncTerraformObjects", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1SyncTerraformObjectsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1SyncTerraformObjectsRequest" + } + } + ] + } + } + }, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "v1Condition": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "status": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "message": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + } + }, + "v1GetTerraformObjectPlanResponse": { + "type": "object", + "properties": { + "plan": { + "type": "string" + }, + "enablePlanViewing": { + "type": "boolean" + }, + "error": { + "type": "string" + } + } + }, + "v1GetTerraformObjectResponse": { + "type": "object", + "properties": { + "object": { + "$ref": "#/definitions/v1TerraformObject" + }, + "yaml": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "v1Interval": { + "type": "object", + "properties": { + "hours": { + "type": "string", + "format": "int64" + }, + "minutes": { + "type": "string", + "format": "int64" + }, + "seconds": { + "type": "string", + "format": "int64" + } + } + }, + "v1ListTerraformObjectsResponse": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1TerraformObject" + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1TerraformListError" + } + } + } + }, + "v1NamespacedObjectReference": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "v1ObjectRef": { + "type": "object", + "properties": { + "clusterName": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "kind": { + "type": "string" + } + } + }, + "v1Pagination": { + "type": "object", + "properties": { + "pageSize": { + "type": "integer", + "format": "int32" + }, + "pageToken": { + "type": "string" + } + } + }, + "v1ReplanTerraformObjectResponse": { + "type": "object", + "properties": { + "replanRequested": { + "type": "boolean" + } + } + }, + "v1ResourceRef": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "identifier": { + "type": "string" + } + } + }, + "v1SourceRef": { + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + } + } + }, + "v1SyncTerraformObjectsRequest": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ObjectRef" + } + } + } + }, + "v1SyncTerraformObjectsResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + } + } + }, + "v1TerraformListError": { + "type": "object", + "properties": { + "clusterName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "v1TerraformObject": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "sourceRef": { + "$ref": "#/definitions/v1SourceRef" + }, + "appliedRevision": { + "type": "string" + }, + "path": { + "type": "string" + }, + "interval": { + "$ref": "#/definitions/v1Interval" + }, + "lastUpdatedAt": { + "type": "string" + }, + "driftDetectionResult": { + "type": "boolean" + }, + "inventory": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ResourceRef" + } + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1Condition" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "dependsOn": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1NamespacedObjectReference" + } + }, + "suspended": { + "type": "boolean" + } + } + }, + "v1ToggleSuspendTerraformObjectsRequest": { + "type": "object", + "properties": { + "objects": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ObjectRef" + } + }, + "suspend": { + "type": "boolean" + } + } + }, + "v1ToggleSuspendTerraformObjectsResponse": { + "type": "object" + } + } +} diff --git a/website/yarn.lock b/website/yarn.lock index c547b27e4f..3cfe8db0b5 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -1207,6 +1207,14 @@ core-js-pure "^3.25.1" regenerator-runtime "^0.13.11" +"@babel/runtime-corejs3@^7.20.7", "@babel/runtime-corejs3@^7.22.15", "@babel/runtime-corejs3@^7.23.1": + version "7.23.1" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.23.1.tgz#d03f5819f4ba81a21dd1f80edfb19983e9e20fc1" + integrity sha512-OKKfytwoc0tr7cDHwQm0RLVR3y+hDGFz3EPuvLNU/0fOeXJeKNIHj7ffNVFnncWt3sC58uyUCRSzf8nBQbyF6A== + dependencies: + core-js-pure "^3.30.2" + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.8.4": version "7.20.13" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b" @@ -1214,6 +1222,13 @@ dependencies: regenerator-runtime "^0.13.11" +"@babel/runtime@^7.12.1", "@babel/runtime@^7.3.1", "@babel/runtime@^7.9.2": + version "7.23.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" + integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.20.7": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" @@ -1266,6 +1281,11 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" +"@braintree/sanitize-url@=6.0.4": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz#923ca57e173c6b232bbbb07347b1be982f03e783" + integrity sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A== + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -1712,6 +1732,11 @@ url-loader "^4.1.1" webpack "^5.73.0" +"@fastify/busboy@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.0.0.tgz#f22824caff3ae506b18207bad4126dbc6ccdb6b8" + integrity sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ== + "@fortawesome/fontawesome-common-types@6.3.0": version "6.3.0" resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.3.0.tgz#51f734e64511dbc3674cd347044d02f4dd26e86b" @@ -2050,6 +2075,320 @@ "@svgr/plugin-jsx" "^6.5.1" "@svgr/plugin-svgo" "^6.5.1" +"@swagger-api/apidom-ast@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ast/-/apidom-ast-0.77.0.tgz#56474ebfd318c0f9633c5c9ec895bfc9f5c61638" + integrity sha512-BqYc3oZEJ23x9KlamGjNbIymhKId0qxcqykjet7fO3NWm1c68ix/S+VgheTKig8Gl4IJ2lT+Cz3C178ia90ydQ== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-error" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + unraw "^3.0.0" + +"@swagger-api/apidom-core@>=0.77.0 <1.0.0", "@swagger-api/apidom-core@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-core/-/apidom-core-0.77.0.tgz#9ac615661102c9fcbb2b8a8ed9c22411eb737dda" + integrity sha512-Yec/Ek6tH8uaHpFsL8/KfOjkunUdQOf42467QfAkG4Df1u9fdrBIuk8y6oFOO5KAE4WXNjoOQW+Z865WCMwmkA== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-ast" "^0.77.0" + "@swagger-api/apidom-error" "^0.77.0" + "@types/ramda" "~0.29.3" + minim "~0.23.8" + ramda "~0.29.0" + ramda-adjunct "^4.1.1" + short-unique-id "^5.0.2" + stampit "^4.3.2" + +"@swagger-api/apidom-error@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-error/-/apidom-error-0.77.0.tgz#b4c0d2f691df44bcd103414f5c2d8357f4293590" + integrity sha512-7QQPwUdGAxxvAegJntbzuBD0ApPsdMay6nV3UpxQs/F4q4cTaxeTX8HCp2NefXR4B6VHps0oVvIyXf/LDQUtYw== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-json-pointer@>=0.77.0 <1.0.0", "@swagger-api/apidom-json-pointer@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-0.77.0.tgz#38ab117f437c801f6b79eec18e5f542877b5d1d7" + integrity sha512-VPslp6GbloFDNYTq3QV4z+ByxiqIDQVqqDebVhg70YWriU2+tVJCNV55770AZa8Yqj7QOIafXQoPFg8uAYu0yw== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-error" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-ns-api-design-systems@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-0.77.0.tgz#2ec9e4488320b72a3abc7d660aeed0102d144541" + integrity sha512-FaadpkDoClkomlOv4yT7Wc+Q+kb0uN7iBoo7j8+vnI2ID13I3FDaeqUcADsGdIgNT3JxaK/esJVIln+65TTdwA== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-error" "^0.77.0" + "@swagger-api/apidom-ns-openapi-3-1" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + +"@swagger-api/apidom-ns-asyncapi-2@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-0.77.0.tgz#de98bc7462f31f6ddef7aded4c6e41c214620ae4" + integrity sha512-4IbR49AIihXiegT/NHLCfxp6l+zco/ztUIUoJhnJuRdZ11U1PXaVhYGEdmQX+FoDtEUim17p5FnXSzi0uatbIw== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-ns-json-schema-draft-7" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + +"@swagger-api/apidom-ns-json-schema-draft-4@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-0.77.0.tgz#ea60bc71ecf0819829625ce1ca909450ba9d7f69" + integrity sha512-LLfNNDuoLNgKgN8ddPJxc5QCYgst3G1BnXEU+0lIFyVlFb5xowZiW4utYtfx/eRBy+UxpgTIk04hvvbaYppFZQ== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-ast" "^0.77.0" + "@swagger-api/apidom-core" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + +"@swagger-api/apidom-ns-json-schema-draft-6@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-0.77.0.tgz#3ee42c8f7bb7827a995a578bbd96e7cd20b8096a" + integrity sha512-1tXzvGdc96mHelU9IXp28pLRf/OHqCTOKtUNywwhmICEQHs9PVrPpFq4fuMjLA+QvusdUA0Z4PsYR6d51Qnv3Q== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-error" "^0.77.0" + "@swagger-api/apidom-ns-json-schema-draft-4" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + +"@swagger-api/apidom-ns-json-schema-draft-7@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-0.77.0.tgz#6285c4fdb2399cd585a132255876c2c24a986d12" + integrity sha512-UTwogsJ7gnCcXlwIEriezPwi6Q84rgxYrQxbwqEJN6VrYWb0R1MPJ+CnD6XkkciEI8ETfDs/3NKqto98UjRgkw== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-error" "^0.77.0" + "@swagger-api/apidom-ns-json-schema-draft-6" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + +"@swagger-api/apidom-ns-openapi-3-0@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-0.77.0.tgz#731dd54370ce113e793ca9cadb37d9a7091c9fe1" + integrity sha512-gqd14CVh+ufC8HSVCMmBfpBU7I/2L2fb9TO3b3mI8K38D+k2dbgBsxOch3efo7x+Diwu8QNdwQFuC2n7WAwO5Q== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-ns-json-schema-draft-4" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + +"@swagger-api/apidom-ns-openapi-3-1@>=0.77.0 <1.0.0", "@swagger-api/apidom-ns-openapi-3-1@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-0.77.0.tgz#727f6635048abd477335fa4271c0c921490093a2" + integrity sha512-UcGE5xMKRO+T7oFDIqYjr1kOHKe37MuUsd1CmTwu+QqZALk4L4IwOs6UUxDPyDLNeAP9g8VoXPJAPSFV0IEyYA== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-ast" "^0.77.0" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-ns-openapi-3-0" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + +"@swagger-api/apidom-parser-adapter-api-design-systems-json@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-0.77.0.tgz#ed4bda67e9967472aa7a651f979c2e7d8f705321" + integrity sha512-dwotraK1i80r4zKhV2a8p0qaPBn3dA4e167KUoY/ugwmf1lAtKL+K/Ow74wiOxQME2VD6HkM/CUV0nFJUWCS2A== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-ns-api-design-systems" "^0.77.0" + "@swagger-api/apidom-parser-adapter-json" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-0.77.0.tgz#ae9149586526744d5ccc91b7812f808c0ecab00f" + integrity sha512-ftHsFBgNdcpMqVkRXwWyatLjaaOFdgecKPA6/1q0F0NRGEDTdWocyI4KkLuAywbpo6XsbwOHZG2cK26cbLlBEA== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-ns-api-design-systems" "^0.77.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-parser-adapter-asyncapi-json-2@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-0.77.0.tgz#0f84274580ff81f19b53be0115b5299c2b6ccdf7" + integrity sha512-nV2aEmZ1YeXSLbnymBNlhBdwWgQAg3DPO1bIEPJifz6zopBjcW+q+MjGAdyj57dmqygL3QoddroKCF7wGgAlLg== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-ns-asyncapi-2" "^0.77.0" + "@swagger-api/apidom-parser-adapter-json" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-0.77.0.tgz#a621dd612c6fe58645c3f3688659f395f3b3bd20" + integrity sha512-fiYfoOttR3zbquaMzZji/+KcbGK092HQjE0HQpGvu/HfJWGfg51A0iFoWE+ebx2tklN3AhV6CD2NJuRa9DlphA== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-ns-asyncapi-2" "^0.77.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-parser-adapter-json@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-0.77.0.tgz#aa7474f6a2a632daec403308b7c3599ad5648f0a" + integrity sha512-nx8zqwHIhI0E+vpgQZ2rONdrmmdnSVum3Qct2h6JetYr72UWnFDqVgxOpGbOScMH1kvG7u2n5LpfjJw02uNDKg== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-ast" "^0.77.0" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-error" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + tree-sitter "=0.20.4" + tree-sitter-json "=0.20.0" + web-tree-sitter "=0.20.3" + +"@swagger-api/apidom-parser-adapter-openapi-json-3-0@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-0.77.0.tgz#5add6a1e1c3267cebebc533c13e904f7d9a3c047" + integrity sha512-J9hiyVJg19SVgbemK/Ug1l4FjXZ4zCsxTKAlYxVSwjONJI4YdE2SqKG26JagBaTMHeJRZYK4BAC2pXAvAUKISg== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-ns-openapi-3-0" "^0.77.0" + "@swagger-api/apidom-parser-adapter-json" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-parser-adapter-openapi-json-3-1@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-0.77.0.tgz#9480235d169beb8b6d93aad9173cb5880410267e" + integrity sha512-iLputU+USOtJNcUpr5mEMtWFIgdzYGAor4gujfhBbhctGDzdtFAumBU5j/hLRBQoHbfZ00o5379ekxHMDi2/7w== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-ns-openapi-3-1" "^0.77.0" + "@swagger-api/apidom-parser-adapter-json" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-0.77.0.tgz#f4f0a7f89e3d5c2171fde1356e5c3d26e94862eb" + integrity sha512-SDZkiCF5863Q6yfCtL4pZkh0s7J6Q8kZodW8CN9zHQ025BbjfbbddTXbSefx7h/Dc3g4QyGi2XT+Qu4lvrlbkg== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-ns-openapi-3-0" "^0.77.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-0.77.0.tgz#42e671e72bb78d9eff4d08c0080d4b4317231cba" + integrity sha512-JxfVLS4xB7UctZPaPUZyr0WbOh7DGchfCGJvMYCgTQ+oxJaKxUvAaJveA5Ch6DkMdwLJDIRBYFJGUXQOfKN1eQ== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-ns-openapi-3-1" "^0.77.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.0.0" + +"@swagger-api/apidom-parser-adapter-yaml-1-2@^0.77.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-0.77.0.tgz#d0f09950badf0282fc57c0bf5cce6bc3085e6ddc" + integrity sha512-ID3WXpa+4+/ip+4IlDHOvGevS/4M/OzZvtHhNReY4fSz+kTVIdp0C4tqDHcll+2+U360O4Y+bAChvI5BlrYgcw== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-ast" "^0.77.0" + "@swagger-api/apidom-core" "^0.77.0" + "@swagger-api/apidom-error" "^0.77.0" + "@types/ramda" "~0.29.3" + ramda "~0.29.0" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + tree-sitter "=0.20.4" + tree-sitter-yaml "=0.5.0" + web-tree-sitter "=0.20.3" + +"@swagger-api/apidom-reference@>=0.77.0 <1.0.0": + version "0.77.0" + resolved "https://registry.yarnpkg.com/@swagger-api/apidom-reference/-/apidom-reference-0.77.0.tgz#d91af3541064f71954c7833bd77b28c400642340" + integrity sha512-hwViVP7CORnuMYpxav1LH1YPslJyUAx3YsyMwrg5yeo7d8Fn1PCV7VYyFwvjgfOOdFinDkjZxKA9GXDVk2mR0g== + dependencies: + "@babel/runtime-corejs3" "^7.20.7" + "@swagger-api/apidom-core" "^0.77.0" + "@types/ramda" "~0.29.3" + axios "^1.4.0" + minimatch "^7.4.3" + process "^0.11.10" + ramda "~0.29.0" + ramda-adjunct "^4.1.1" + stampit "^4.3.2" + optionalDependencies: + "@swagger-api/apidom-error" "^0.77.0" + "@swagger-api/apidom-json-pointer" "^0.77.0" + "@swagger-api/apidom-ns-asyncapi-2" "^0.77.0" + "@swagger-api/apidom-ns-openapi-3-0" "^0.77.0" + "@swagger-api/apidom-ns-openapi-3-1" "^0.77.0" + "@swagger-api/apidom-parser-adapter-api-design-systems-json" "^0.77.0" + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml" "^0.77.0" + "@swagger-api/apidom-parser-adapter-asyncapi-json-2" "^0.77.0" + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2" "^0.77.0" + "@swagger-api/apidom-parser-adapter-json" "^0.77.0" + "@swagger-api/apidom-parser-adapter-openapi-json-3-0" "^0.77.0" + "@swagger-api/apidom-parser-adapter-openapi-json-3-1" "^0.77.0" + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0" "^0.77.0" + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1" "^0.77.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2" "^0.77.0" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -2161,6 +2500,14 @@ resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== +"@types/hoist-non-react-statics@^3.3.1": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#dc1e9ded53375d37603c479cc12c693b0878aa2a" + integrity sha512-YIQtIg4PKr7ZyqNPZObpxfHsHEmuB8dXCxd6qVcGuQVDK2bpsF7bYNnBJ4Nn7giuACZg+WewExgrtAJ3XnA4Xw== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + "@types/html-minifier-terser@^6.0.0": version "6.1.0" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" @@ -2251,6 +2598,13 @@ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== +"@types/ramda@~0.29.3": + version "0.29.5" + resolved "https://registry.yarnpkg.com/@types/ramda/-/ramda-0.29.5.tgz#0fafcf623f764d9ce086aa43ccedf6304b411cc7" + integrity sha512-oBBdRfoZoCl/aBIpBbct/uUHAbJ5i7vSOHK83SvH2Qr9ermYITRNKnEYgGJlnkagUY2cu8L2//Jq7o1355Go5A== + dependencies: + types-ramda "^0.29.4" + "@types/range-parser@*": version "1.2.4" resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" @@ -2340,6 +2694,11 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== +"@types/use-sync-external-store@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" + integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== + "@types/ws@^8.5.1": version "8.5.4" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" @@ -2656,7 +3015,7 @@ arg@^5.0.0: resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== -argparse@^1.0.7: +argparse@^1.0.10, argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== @@ -2693,11 +3052,23 @@ asap@~2.0.3: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +autolinker@^3.11.0: + version "3.16.2" + resolved "https://registry.yarnpkg.com/autolinker/-/autolinker-3.16.2.tgz#6bb4f32432fc111b65659336863e653973bfbcc9" + integrity sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA== + dependencies: + tslib "^2.3.0" + autoprefixer@^10.4.12, autoprefixer@^10.4.7: version "10.4.13" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8" @@ -2717,6 +3088,15 @@ axios@^0.25.0: dependencies: follow-redirects "^1.14.7" +axios@^1.4.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.1.tgz#11fbaa11fc35f431193a9564109c88c1f27b585f" + integrity sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + babel-loader@^8.2.5: version "8.3.0" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" @@ -2788,6 +3168,11 @@ base16@^1.0.0: resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== +base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + bash-glob@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/bash-glob/-/bash-glob-2.0.0.tgz" @@ -2824,6 +3209,15 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + body-parser@1.20.1: version "1.20.1" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" @@ -2893,6 +3287,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -2915,6 +3316,14 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -3066,6 +3475,11 @@ chokidar@^3.4.2, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" @@ -3081,6 +3495,16 @@ ci-info@^3.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.1.tgz#708a6cdae38915d597afdf3b145f2f8e1ff55f3f" integrity sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w== +ci-info@^3.7.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +classnames@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + clean-css@^5.2.2, clean-css@^5.3.0: version "5.3.2" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" @@ -3182,6 +3606,13 @@ combine-promises@^1.1.0: resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71" integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + comma-separated-tokens@^1.0.0: version "1.0.8" resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" @@ -3296,7 +3727,7 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.5.0: +cookie@0.5.0, cookie@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== @@ -3306,6 +3737,13 @@ copy-text-to-clipboard@^3.0.1: resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz#8cbf8f90e0a47f12e4a24743736265d157bce69c" integrity sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q== +copy-to-clipboard@^3.3.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== + dependencies: + toggle-selection "^1.0.6" + copy-webpack-plugin@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" @@ -3330,6 +3768,11 @@ core-js-pure@^3.25.1: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.27.2.tgz#47e9cc96c639eefc910da03c3ece26c5067c7553" integrity sha512-Cf2jqAbXgWH3VVzjyaaFkY1EBazxugUepGymDoeteyYr9ByX51kD2jdHZlsEF/xnJMyN3Prua7mQuzwMg6Zc9A== +core-js-pure@^3.30.2: + version "3.33.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.33.0.tgz#938a28754b4d82017a7a8cbd2727b1abecc63591" + integrity sha512-FKSIDtJnds/YFIEaZ4HszRX7hkxGpNKM7FC9aJ9WLJbSd3lD4vOltFuVIBLR8asSx9frkTSqL0dw90SKQxgKrg== + core-js@^3.23.3: version "3.27.2" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.27.2.tgz#85b35453a424abdcacb97474797815f4d62ebbf7" @@ -3458,6 +3901,11 @@ css-what@^6.0.1, css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== +css.escape@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -3557,7 +4005,14 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" -deep-extend@^0.6.0: +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-extend@0.6.0, deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== @@ -3572,6 +4027,11 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== +deepmerge@~4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + default-gateway@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" @@ -3611,6 +4071,11 @@ del@^6.1.1: rimraf "^3.0.2" slash "^3.0.0" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -3633,6 +4098,11 @@ detab@2.0.4: dependencies: repeat-string "^1.5.4" +detect-libc@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" + integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== + detect-node@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" @@ -3717,6 +4187,11 @@ domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" +dompurify@=3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.6.tgz#925ebd576d54a9531b5d76f0a5bef32548351dae" + integrity sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w== + domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" @@ -3750,6 +4225,11 @@ dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" +drange@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/drange/-/drange-1.1.1.tgz#b2aecec2aab82fcef11dbbd7b9e32b83f8f6c0b8" + integrity sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA== + duplexer3@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" @@ -3805,7 +4285,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -end-of-stream@^1.1.0: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -3950,6 +4430,11 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + express@^4.17.3: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -4015,6 +4500,11 @@ fast-glob@^3.2.11, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-json-patch@^3.0.0-1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz#85064ea1b1ebf97a3f7ad01e23f9337e72c66947" + integrity sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ== + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -4034,6 +4524,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fault@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" + integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== + dependencies: + format "^0.2.0" + faye-websocket@^0.11.3: version "0.11.4" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" @@ -4146,6 +4643,13 @@ find-up@^6.1.0, find-up@^6.3.0: locate-path "^7.1.0" path-exists "^5.0.0" +find-yarn-workspace-root@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== + dependencies: + micromatch "^4.0.2" + flux@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.3.tgz#573b504a24982c4768fdfb59d8d2ea5637d72ee7" @@ -4159,6 +4663,11 @@ follow-redirects@^1.0.0, follow-redirects@^1.14.7: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +follow-redirects@^1.15.0: + version "1.15.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + fork-ts-checker-webpack-plugin@^6.5.0: version "6.5.2" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340" @@ -4178,6 +4687,20 @@ fork-ts-checker-webpack-plugin@^6.5.0: semver "^7.3.2" tapable "^1.0.0" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +format@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -4193,6 +4716,11 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" @@ -4270,6 +4798,11 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + github-slugger@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" @@ -4374,6 +4907,11 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" +graceful-fs@^4.1.11: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" @@ -4508,6 +5046,11 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +highlight.js@^10.4.1, highlight.js@~10.7.0: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + history@^4.9.0: version "4.10.1" resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" @@ -4520,7 +5063,7 @@ history@^4.9.0: tiny-warning "^1.0.0" value-equal "^1.0.1" -hoist-non-react-statics@^3.1.0: +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -4669,6 +5212,11 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^5.2.0: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" @@ -4686,6 +5234,11 @@ immer@^9.0.7: resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.19.tgz#67fb97310555690b5f9cd8380d38fc0aabb6b38b" integrity sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ== +immutable@^3.x.x: + version "3.8.2" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" + integrity sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg== + import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -4722,7 +5275,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4752,7 +5305,7 @@ interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -invariant@^2.2.4: +invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -4905,6 +5458,11 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -4940,7 +5498,7 @@ is-word-character@^1.0.0: resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== -is-wsl@^2.2.0: +is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -5014,11 +5572,23 @@ joi@^17.6.0: "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" +js-file-download@^0.4.12: + version "0.4.12" + resolved "https://registry.yarnpkg.com/js-file-download/-/js-file-download-0.4.12.tgz#10c70ef362559a5b23cdbdc3bd6f399c3d91d821" + integrity sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@=4.1.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" @@ -5027,13 +5597,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -5064,6 +5627,13 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +json-stable-stringify@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz#e06f23128e0bbe342dc996ed5a19e28b57b580e0" + integrity sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g== + dependencies: + jsonify "^0.0.1" + json5@^2.1.2, json5@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" @@ -5078,6 +5648,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -5090,6 +5665,13 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -5185,7 +5767,7 @@ lodash.curry@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== -lodash.debounce@^4.0.8: +lodash.debounce@^4, lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== @@ -5205,7 +5787,7 @@ lodash.uniq@4.5.0, lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@4.17.21, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: +lodash@4.17.21, lodash@^4.15.0, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5234,6 +5816,14 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lowlight@^1.17.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.20.0.tgz#ddb197d33462ad0d93bf19d17b6c301aa3941888" + integrity sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw== + dependencies: + fault "^1.0.0" + highlight.js "~10.7.0" + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" @@ -5373,7 +5963,7 @@ mime-types@2.1.18: dependencies: mime-db "~1.33.0" -mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -5395,6 +5985,11 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + mini-css-extract-plugin@^2.6.1: version "2.7.2" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz#e049d3ea7d3e4e773aad585c6cb329ce0c7b72d7" @@ -5402,6 +5997,13 @@ mini-css-extract-plugin@^2.6.1: dependencies: schema-utils "^4.0.0" +minim@~0.23.8: + version "0.23.8" + resolved "https://registry.yarnpkg.com/minim/-/minim-0.23.8.tgz#a529837afe1654f119dfb68ce7487dd8d4866b9c" + integrity sha512-bjdr2xW1dBCMsMGGsUeqM4eFI60m94+szhxWys+B1ztIt6gWSfeGBdSVCIawezeHYLYn0j6zrsXdQS/JllBzww== + dependencies: + lodash "^4.15.0" + minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -5414,11 +6016,28 @@ minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" +minimatch@^7.4.3: + version "7.4.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" + integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +minimist@^1.2.3, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mrmime@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" @@ -5452,6 +6071,11 @@ nanoid@^3.3.6: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" @@ -5477,6 +6101,23 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-abi@^3.3.0: + version "3.47.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" + integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== + dependencies: + semver "^7.3.5" + +node-abort-controller@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" + integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== + +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + node-emoji@^1.10.0: version "1.11.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" @@ -5484,6 +6125,14 @@ node-emoji@^1.10.0: dependencies: lodash "^4.17.21" +node-fetch-commonjs@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch-commonjs/-/node-fetch-commonjs-3.3.2.tgz#0dd0fd4c4a314c5234f496ff7b5d9ce5a6c8feaa" + integrity sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + node-fetch@2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" @@ -5596,6 +6245,14 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +open@^7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + open@^8.0.9, open@^8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" @@ -5610,6 +6267,11 @@ opener@^1.5.2: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" @@ -5769,6 +6431,27 @@ pascal-case@^3.1.2: no-case "^3.0.4" tslib "^2.0.3" +patch-package@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.0.tgz#d191e2f1b6e06a4624a0116bcb88edd6714ede61" + integrity sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^4.1.2" + ci-info "^3.7.0" + cross-spawn "^7.0.3" + find-yarn-workspace-root "^2.0.0" + fs-extra "^9.0.0" + json-stable-stringify "^1.0.2" + klaw-sync "^6.0.0" + minimist "^1.2.6" + open "^7.4.2" + rimraf "^2.6.3" + semver "^7.5.3" + slash "^2.0.0" + tmp "^0.0.33" + yaml "^2.2.2" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -6147,6 +6830,24 @@ postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.19: picocolors "^1.0.0" source-map-js "^1.0.2" +prebuild-install@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" + integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" @@ -6170,16 +6871,26 @@ prism-react-renderer@^1.3.5: resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== -prismjs@^1.28.0: +prismjs@^1.27.0, prismjs@^1.28.0: version "1.29.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== +prismjs@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" + integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -6219,6 +6930,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" @@ -6261,6 +6977,18 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" +qs@^6.10.2: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -6273,6 +7001,24 @@ queue@6.0.2: dependencies: inherits "~2.0.3" +ramda-adjunct@^4.0.0, ramda-adjunct@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ramda-adjunct/-/ramda-adjunct-4.1.1.tgz#085ca9a7bf19857378eff648f9852b15136dc66f" + integrity sha512-BnCGsZybQZMDGram9y7RiryoRHS5uwx8YeGuUeDKuZuvK38XO6JJfmK85BwRWAKFA6pZ5nZBO/HBFtExVaf31w== + +ramda@~0.29.0: + version "0.29.0" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.29.0.tgz#fbbb67a740a754c8a4cbb41e2a6e0eb8507f55fb" + integrity sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA== + +randexp@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.5.3.tgz#f31c2de3148b30bdeb84b7c3f59b0ebb9fec3738" + integrity sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w== + dependencies: + drange "^1.0.2" + ret "^0.2.0" + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -6308,7 +7054,7 @@ raw-loader@^4.0.2: loader-utils "^2.0.0" schema-utils "^3.0.0" -rc@1.2.8, rc@^1.2.8: +rc@1.2.8, rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -6328,6 +7074,22 @@ react-base16-styling@^0.6.0: lodash.flow "^3.3.0" pure-color "^1.2.0" +react-copy-to-clipboard@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz#09aae5ec4c62750ccb2e6421a58725eabc41255c" + integrity sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A== + dependencies: + copy-to-clipboard "^3.3.1" + prop-types "^15.8.1" + +react-debounce-input@=3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/react-debounce-input/-/react-debounce-input-3.3.0.tgz#85e3ebcaa41f2016e50613134a1ec9fe3cdb422e" + integrity sha512-VEqkvs8JvY/IIZvh71Z0TC+mdbxERvYF33RcebnodlsUZ8RSgyKe2VWaHXv4+/8aoOgXLxWrdsYs2hDhcwbUgA== + dependencies: + lodash.debounce "^4" + prop-types "^15.8.1" + react-dev-utils@^12.0.1: version "12.0.1" resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" @@ -6388,11 +7150,33 @@ react-helmet-async@*, react-helmet-async@^1.3.0: react-fast-compare "^3.2.0" shallowequal "^1.1.0" +react-immutable-proptypes@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/react-immutable-proptypes/-/react-immutable-proptypes-2.2.0.tgz#cce96d68cc3c18e89617cbf3092d08e35126af4a" + integrity sha512-Vf4gBsePlwdGvSZoLSBfd4HAP93HDauMY4fDjXhreg/vg6F3Fj/MXDNyTbltPC/xZKmZc+cjLu3598DdYK6sgQ== + dependencies: + invariant "^2.2.2" + +react-immutable-pure-component@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/react-immutable-pure-component/-/react-immutable-pure-component-2.2.2.tgz#3014d3e20cd5a7a4db73b81f1f1464f4d351684b" + integrity sha512-vkgoMJUDqHZfXXnjVlG3keCxSO/U6WeDQ5/Sl0GK2cH8TOxEzQ5jXqDXHEL/jqk6fsNxV05oH5kD7VNMUE2k+A== + +react-inspector@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-6.0.2.tgz#aa3028803550cb6dbd7344816d5c80bf39d07e9d" + integrity sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ== + react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + react-json-view@^1.21.3: version "1.21.3" resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" @@ -6426,6 +7210,18 @@ react-player@^2.11.0: prop-types "^15.7.2" react-fast-compare "^3.0.1" +react-redux@^8.1.2: + version "8.1.3" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.3.tgz#4fdc0462d0acb59af29a13c27ffef6f49ab4df46" + integrity sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw== + dependencies: + "@babel/runtime" "^7.12.1" + "@types/hoist-non-react-statics" "^3.3.1" + "@types/use-sync-external-store" "^0.0.3" + hoist-non-react-statics "^3.3.2" + react-is "^18.0.0" + use-sync-external-store "^1.0.0" + react-router-config@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" @@ -6461,6 +7257,17 @@ react-router@5.3.4, react-router@^5.3.3: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" +react-syntax-highlighter@^15.5.0: + version "15.5.0" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz#4b3eccc2325fa2ec8eff1e2d6c18fa4a9e07ab20" + integrity sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg== + dependencies: + "@babel/runtime" "^7.3.1" + highlight.js "^10.4.1" + lowlight "^1.17.0" + prismjs "^1.27.0" + refractor "^3.6.0" + react-textarea-autosize@^8.3.2: version "8.4.0" resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.4.0.tgz#4d0244d6a50caa897806b8c44abc0540a69bfc8c" @@ -6500,6 +7307,15 @@ readable-stream@^3.0.6: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -6526,6 +7342,27 @@ recursive-readdir@^2.2.2: dependencies: minimatch "^3.0.5" +redux-immutable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/redux-immutable/-/redux-immutable-4.0.0.tgz#3a1a32df66366462b63691f0e1dc35e472bbc9f3" + integrity sha512-SchSn/DWfGb3oAejd+1hhHx01xUoxY+V7TeK0BKqpkLKiQPVFf7DYzEaKmrEVxsWxielKfSK9/Xq66YyxgR1cg== + +redux@^4.1.2: + version "4.2.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" + integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== + dependencies: + "@babel/runtime" "^7.9.2" + +refractor@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.6.0.tgz#ac318f5a0715ead790fcfb0c71f4dd83d977935a" + integrity sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA== + dependencies: + hastscript "^6.0.0" + parse-entities "^2.0.0" + prismjs "~1.27.0" + regenerate-unicode-properties@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" @@ -6543,6 +7380,11 @@ regenerator-runtime@^0.13.11: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + regenerator-transform@^0.15.1: version "0.15.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" @@ -6650,6 +7492,14 @@ remark-squeeze-paragraphs@4.0.0: dependencies: mdast-squeeze-paragraphs "^4.0.0" +remarkable@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remarkable/-/remarkable-2.0.1.tgz#280ae6627384dfb13d98ee3995627ca550a12f31" + integrity sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA== + dependencies: + argparse "^1.0.10" + autolinker "^3.11.0" + renderkid@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" @@ -6661,7 +7511,7 @@ renderkid@^3.0.0: lodash "^4.17.21" strip-ansi "^6.0.1" -repeat-string@^1.5.4: +repeat-string@^1.5.2, repeat-string@^1.5.4: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== @@ -6681,6 +7531,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== +reselect@^4.1.8: + version "4.1.8" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" + integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -6707,6 +7562,11 @@ responselike@^1.0.2: dependencies: lowercase-keys "^1.0.0" +ret@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.2.2.tgz#b6861782a1f4762dce43402a71eb7a283f44573c" + integrity sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ== + retry@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" @@ -6717,6 +7577,13 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -6758,7 +7625,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -6855,7 +7722,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -6881,6 +7748,13 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" +serialize-error@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-8.1.0.tgz#3a069970c712f78634942ddd50fbbc0eaebe2f67" + integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== + dependencies: + type-fest "^0.20.2" + serialize-javascript@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" @@ -6940,6 +7814,14 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== +sha.js@^2.4.11: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" @@ -6990,6 +7872,11 @@ shelljs@^0.8.5: interpret "^1.0.0" rechoir "^0.6.2" +short-unique-id@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/short-unique-id/-/short-unique-id-5.0.3.tgz#bc6975dc5e8b296960ff5ac91ddabbc7ddb693d9" + integrity sha512-yhniEILouC0s4lpH0h7rJsfylZdca10W9mDJRAFh3EpcSUanCHGb0R7kcFOIUCZYSAPo0PUD5ZxWQdW0T4xaug== + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -7004,6 +7891,20 @@ signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + sirv@^1.0.7: version "1.0.19" resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" @@ -7028,6 +7929,11 @@ sitemap@^7.1.1: arg "^5.0.0" sax "^1.2.4" +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -7118,6 +8024,11 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== +stampit@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/stampit/-/stampit-4.3.2.tgz#cfd3f607dd628a161ce6305621597994b4d56573" + integrity sha512-pE2org1+ZWQBnIxRPrBM2gVupkuDD0TTNIo1H6GdT/vO82NXli2z8lRE8cu/nBIHrcOCXFBAHpb9ZldrB2/qOA== + state-toggle@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" @@ -7138,6 +8049,14 @@ std-env@^3.0.1: resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.1.tgz#93a81835815e618c8aa75e7c8a4dc04f7c314e29" integrity sha512-3H20QlwQsSm2OvAxWIYhs+j01MzzqwMwGiiO1NQaJYZgJZFPuAbf95/DiKRBSTYIJ2FeGUc+B/6mPGcWP9dO3Q== +stream-browserify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" + integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== + dependencies: + inherits "~2.0.4" + readable-stream "^3.5.0" + string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -7272,6 +8191,67 @@ svgo@^2.7.0, svgo@^2.8.0: picocolors "^1.0.0" stable "^0.1.8" +swagger-client@^3.22.3: + version "3.23.0" + resolved "https://registry.yarnpkg.com/swagger-client/-/swagger-client-3.23.0.tgz#bbff11fc5d71a482a88cf8e261b2f34a3b787f45" + integrity sha512-n0erqA78BVFiQkb+HDdho4sKxGz+7u3g3BKkoQHy6KArF79TCKpD6GSPJwenknsuA8byjTd+CkgTBtCmJgXRFA== + dependencies: + "@babel/runtime-corejs3" "^7.22.15" + "@swagger-api/apidom-core" ">=0.77.0 <1.0.0" + "@swagger-api/apidom-json-pointer" ">=0.77.0 <1.0.0" + "@swagger-api/apidom-ns-openapi-3-1" ">=0.77.0 <1.0.0" + "@swagger-api/apidom-reference" ">=0.77.0 <1.0.0" + cookie "~0.5.0" + deepmerge "~4.3.0" + fast-json-patch "^3.0.0-1" + is-plain-object "^5.0.0" + js-yaml "^4.1.0" + node-abort-controller "^3.1.1" + node-fetch-commonjs "^3.3.1" + qs "^6.10.2" + traverse "~0.6.6" + undici "^5.24.0" + +swagger-ui-react@^5.9.0: + version "5.9.0" + resolved "https://registry.yarnpkg.com/swagger-ui-react/-/swagger-ui-react-5.9.0.tgz#574411a191f454d2451d2f533caa397b503934fd" + integrity sha512-j45ceuGHMRmI8nhOaG71VeQwrPutFHDq6QhgrxOmf4BRMOdOQgVY1POQY9ksnXZtskbD9J2NHURs4BLEDIs8gA== + dependencies: + "@babel/runtime-corejs3" "^7.23.1" + "@braintree/sanitize-url" "=6.0.4" + base64-js "^1.5.1" + classnames "^2.3.1" + css.escape "1.5.1" + deep-extend "0.6.0" + dompurify "=3.0.6" + ieee754 "^1.2.1" + immutable "^3.x.x" + js-file-download "^0.4.12" + js-yaml "=4.1.0" + lodash "^4.17.21" + patch-package "^8.0.0" + prop-types "^15.8.1" + randexp "^0.5.3" + randombytes "^2.1.0" + react-copy-to-clipboard "5.1.0" + react-debounce-input "=3.3.0" + react-immutable-proptypes "2.2.0" + react-immutable-pure-component "^2.2.0" + react-inspector "^6.0.1" + react-redux "^8.1.2" + react-syntax-highlighter "^15.5.0" + redux "^4.1.2" + redux-immutable "^4.0.0" + remarkable "^2.0.1" + reselect "^4.1.8" + serialize-error "^8.1.0" + sha.js "^2.4.11" + swagger-client "^3.22.3" + url-parse "^1.5.10" + xml "=1.0.1" + xml-but-prettier "^1.0.1" + zenscroll "^4.0.2" + synp@^1.9.10: version "1.9.10" resolved "https://registry.npmjs.org/synp/-/synp-1.9.10.tgz" @@ -7297,6 +8277,27 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3: version "5.3.6" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" @@ -7338,6 +8339,13 @@ tiny-warning@^1.0.0: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -7355,6 +8363,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== + toidentifier@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" @@ -7370,6 +8383,33 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +traverse@~0.6.6: + version "0.6.7" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe" + integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg== + +tree-sitter-json@=0.20.0: + version "0.20.0" + resolved "https://registry.yarnpkg.com/tree-sitter-json/-/tree-sitter-json-0.20.0.tgz#e17bb4917e8d5fe9f2f0d5eaec603e2d3552b07c" + integrity sha512-PteOLH+Tx6Bz4ZA/d40/DbkiSXXRM/gKahhHI8hQ1lWNfFvdknnz9k3Mz84ol5srRyLboJ8wp8GSkhZ6ht9EGQ== + dependencies: + nan "^2.14.1" + +tree-sitter-yaml@=0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/tree-sitter-yaml/-/tree-sitter-yaml-0.5.0.tgz#c617ba72837399d8105ec10cdb4c360e1ed76076" + integrity sha512-POJ4ZNXXSWIG/W4Rjuyg36MkUD4d769YRUGKRqN+sVaj/VCo6Dh6Pkssn1Rtewd5kybx+jT1BWMyWN0CijXnMA== + dependencies: + nan "^2.14.0" + +tree-sitter@=0.20.4: + version "0.20.4" + resolved "https://registry.yarnpkg.com/tree-sitter/-/tree-sitter-0.20.4.tgz#7d9d4f769fc05342ef43e5559f7ff34b0fc48327" + integrity sha512-rjfR5dc4knG3jnJNN/giJ9WOoN1zL/kZyrS0ILh+eqq8RNcIbiXA63JsMEgluug0aNvfQvK4BfCErN1vIzvKog== + dependencies: + nan "^2.17.0" + prebuild-install "^7.1.1" + trim-trailing-lines@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" @@ -7390,11 +8430,28 @@ trough@^1.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== +ts-toolbelt@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" + integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== + tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tslib@^2.3.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -7420,11 +8477,25 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +types-ramda@^0.29.4: + version "0.29.5" + resolved "https://registry.yarnpkg.com/types-ramda/-/types-ramda-0.29.5.tgz#1cb0488d39eb72723a8f95af9b6dfe483e4f34a7" + integrity sha512-u+bAYXHDPJR+amB0qMrMU/NXRB2PG8QqpO2v6j7yK/0mPZhlaaZj++ynYjnVpkPEpCkZEGxNpWY3X7qyLCGE3w== + dependencies: + ts-toolbelt "^9.6.0" + ua-parser-js@^0.7.30, ua-parser-js@^0.7.33: version "0.7.33" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532" integrity sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw== +undici@^5.24.0: + version "5.25.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.25.4.tgz#7d8ef81d94f84cd384986271e5e5599b6dff4296" + integrity sha512-450yJxT29qKMf3aoudzFpIciqpx6Pji3hEWaXqXmanbXF58LTAGCKxcJjxMXWu3iG+Mudgo3ZUfDB6YDFd/dAw== + dependencies: + "@fastify/busboy" "^2.0.0" + unherit@^1.0.4: version "1.1.3" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" @@ -7555,6 +8626,11 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +unraw@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unraw/-/unraw-3.0.0.tgz#73443ed70d2ab09ccbac2b00525602d5991fbbe3" + integrity sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg== + update-browserslist-db@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" @@ -7606,6 +8682,14 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" +url-parse@^1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + use-composed-ref@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" @@ -7623,7 +8707,7 @@ use-latest@^1.2.1: dependencies: use-isomorphic-layout-effect "^1.1.1" -use-sync-external-store@^1.2.0: +use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== @@ -7717,6 +8801,16 @@ web-namespaces@^1.0.0: resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== +web-streams-polyfill@^3.0.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" + integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + +web-tree-sitter@=0.20.3: + version "0.20.3" + resolved "https://registry.yarnpkg.com/web-tree-sitter/-/web-tree-sitter-0.20.3.tgz#3dd17b283ad63b1d8c07c5ea814f0fefb2b1f776" + integrity sha512-zKGJW9r23y3BcJusbgvnOH2OYAW40MXAOi9bi3Gcc7T4Gms9WWgXF8m6adsJWpGJEhgOzCrfiz1IzKowJWrtYw== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -7969,6 +9063,13 @@ xdg-basedir@^4.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +xml-but-prettier@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/xml-but-prettier/-/xml-but-prettier-1.0.1.tgz#f5a33267ed42ccd4e355c62557a5e39b01fb40f3" + integrity sha512-C2CJaadHrZTqESlH03WOyw0oZTtoy2uEg6dSDF6YRg+9GnYNub53RRemLpnvtbHDFelxMx4LajiFsYeR6XJHgQ== + dependencies: + repeat-string "^1.5.2" + xml-js@^1.6.11: version "1.6.11" resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" @@ -7976,6 +9077,11 @@ xml-js@^1.6.11: dependencies: sax "^1.2.4" +xml@=1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" + integrity sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== + xtend@^4.0.0, xtend@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -8035,6 +9141,11 @@ yocto-queue@^1.0.0: resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== +zenscroll@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/zenscroll/-/zenscroll-4.0.2.tgz#e8d5774d1c0738a47bcfa8729f3712e2deddeb25" + integrity sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg== + zwitch@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"