aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhrustyashko <hrustyashko@yandex-team.ru>2022-03-30 15:41:09 +0300
committerhrustyashko <hrustyashko@yandex-team.ru>2022-03-30 15:41:09 +0300
commitc44713288efab2c63aa923e108538419aef28629 (patch)
treec2bdd9b79dafd379841b17b83c5d6d0f014ad78f
parentf4544ae2d0880767e93f79031ad40202749cbb5f (diff)
downloadydb-c44713288efab2c63aa923e108538419aef28629.tar.gz
Cloud Function gateway
ref:f6ff1d18198749d377882291ee9ef9c4330b708d
-rw-r--r--CMakeLists.darwin.txt9
-rw-r--r--CMakeLists.linux.txt9
-rw-r--r--cloud/README.md7
-rw-r--r--cloud/__init__.py0
-rw-r--r--cloud/bitbucket/common-api/yandex/cloud/api/CMakeLists.txt53
-rw-r--r--cloud/bitbucket/common-api/yandex/cloud/api/operation.proto24
-rw-r--r--cloud/bitbucket/common-api/yandex/cloud/api/tools/CMakeLists.txt51
-rw-r--r--cloud/bitbucket/common-api/yandex/cloud/api/tools/options.proto87
-rw-r--r--cloud/bitbucket/private-api/README.md52
-rw-r--r--cloud/bitbucket/private-api/README.roles.md108
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/CMakeLists.txt53
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/access/CMakeLists.txt53
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/access/access.proto94
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/operation/CMakeLists.txt51
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/operation/operation.proto28
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/quota/CMakeLists.txt53
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/quota/quota.proto63
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/resources.yaml3
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/restrictions.yaml32
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/roles.yaml441
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/sensitive.proto24
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/CMakeLists.txt69
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function.proto135
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function_service.proto394
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/alice.proto38
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/common.proto14
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/control_service.proto286
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/engine_service.proto416
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/owner_data.proto22
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/package_service.proto67
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/quota_service.proto29
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/scheduler_service.proto43
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/operation_service.proto16
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/quota_service.proto35
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/session.proto82
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/session_service.proto266
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/services.yaml173
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/stages.yaml170
-rw-r--r--cloud/bitbucket/private-api/yandex/cloud/priv/validation.proto29
-rw-r--r--contrib/libs/googleapis-common-protos/.yandex_meta/devtools.copyrights.report192
-rw-r--r--contrib/libs/googleapis-common-protos/.yandex_meta/devtools.licenses.report128
-rw-r--r--contrib/libs/googleapis-common-protos/.yandex_meta/licenses.list.txt259
-rw-r--r--contrib/libs/googleapis-common-protos/CHANGELOG.md65
-rw-r--r--contrib/libs/googleapis-common-protos/CMakeLists.txt151
-rw-r--r--contrib/libs/googleapis-common-protos/CODE_OF_CONDUCT.md43
-rw-r--r--contrib/libs/googleapis-common-protos/CONTRIBUTING.md29
-rw-r--r--contrib/libs/googleapis-common-protos/LICENSE202
-rw-r--r--contrib/libs/googleapis-common-protos/README.md8
-rw-r--r--contrib/libs/googleapis-common-protos/SECURITY.md7
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/README.md46
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/annotations.proto31
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/auth.proto181
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/backend.proto51
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/billing.proto67
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/client.proto99
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/config_change.proto85
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/consumer.proto83
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/context.proto63
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/control.proto33
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/distribution.proto213
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/documentation.proto157
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/endpoint.proto71
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/field_behavior.proto84
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/http.proto318
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/httpbody.proto76
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/label.proto49
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/launch_stage.proto67
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/log.proto55
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/logging.proto83
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/metric.proto192
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/monitored_resource.proto116
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/monitoring.proto89
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/quota.proto259
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/resource.proto299
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/routing.proto461
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/service.proto175
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/source_info.proto32
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/system_parameter.proto96
-rw-r--r--contrib/libs/googleapis-common-protos/google/api/usage.proto92
-rw-r--r--contrib/libs/googleapis-common-protos/google/cloud/extended_operations.proto150
-rw-r--r--contrib/libs/googleapis-common-protos/google/cloud/location/locations.proto108
-rw-r--r--contrib/libs/googleapis-common-protos/google/gapic/metadata/gapic_metadata.proto92
-rw-r--r--contrib/libs/googleapis-common-protos/google/logging/type/README.md12
-rw-r--r--contrib/libs/googleapis-common-protos/google/logging/type/http_request.proto92
-rw-r--r--contrib/libs/googleapis-common-protos/google/logging/type/log_severity.proto72
-rw-r--r--contrib/libs/googleapis-common-protos/google/longrunning/README.md31
-rw-r--r--contrib/libs/googleapis-common-protos/google/longrunning/operations.proto247
-rw-r--r--contrib/libs/googleapis-common-protos/google/rpc/README.md18
-rw-r--r--contrib/libs/googleapis-common-protos/google/rpc/code.proto186
-rw-r--r--contrib/libs/googleapis-common-protos/google/rpc/context/attribute_context.proto287
-rw-r--r--contrib/libs/googleapis-common-protos/google/rpc/error_details.proto246
-rw-r--r--contrib/libs/googleapis-common-protos/google/rpc/status.proto47
-rw-r--r--contrib/libs/googleapis-common-protos/google/type/README.md7
-rw-r--r--contrib/libs/googleapis-common-protos/google/type/calendar_period.proto57
-rw-r--r--contrib/libs/googleapis-common-protos/google/type/color.proto170
-rw-r--r--contrib/libs/googleapis-common-protos/google/type/date.proto50
-rw-r--r--contrib/libs/googleapis-common-protos/google/type/datetime.proto97
-rw-r--r--contrib/libs/googleapis-common-protos/google/type/dayofweek.proto51
-rw-r--r--contrib/libs/googleapis-common-protos/google/type/expr.proto51
-rw-r--r--contrib/libs/googleapis-common-protos/google/type/fraction.proto34
-rw-r--r--contrib/libs/googleapis-common-protos/google/type/latlng.proto37
-rw-r--r--contrib/libs/googleapis-common-protos/google/type/money.proto43
-rw-r--r--contrib/libs/googleapis-common-protos/google/type/month.proto66
-rw-r--r--contrib/libs/googleapis-common-protos/google/type/postal_address.proto135
-rw-r--r--contrib/libs/googleapis-common-protos/google/type/quaternion.proto95
-rw-r--r--contrib/libs/googleapis-common-protos/google/type/timeofday.proto44
-rw-r--r--ydb/library/yql/providers/cloud_function/gateway/CMakeLists.txt27
-rw-r--r--ydb/library/yql/providers/cloud_function/gateway/cloud_function_gateway.cpp115
-rw-r--r--ydb/library/yql/providers/cloud_function/gateway/cloud_function_gateway.h27
109 files changed, 11080 insertions, 0 deletions
diff --git a/CMakeLists.darwin.txt b/CMakeLists.darwin.txt
index 32df6170c4..b15ec1188f 100644
--- a/CMakeLists.darwin.txt
+++ b/CMakeLists.darwin.txt
@@ -1199,6 +1199,15 @@ add_subdirectory(ydb/library/yql/parser/pg_catalog/ut)
add_subdirectory(ydb/library/yql/providers/common/schema)
add_subdirectory(ydb/library/yql/providers/common/schema/skiff)
add_subdirectory(ydb/library/yql/providers/cloud_function/actors)
+add_subdirectory(ydb/library/yql/providers/cloud_function/gateway)
+add_subdirectory(cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1)
+add_subdirectory(contrib/libs/googleapis-common-protos)
+add_subdirectory(cloud/bitbucket/common-api/yandex/cloud/api)
+add_subdirectory(cloud/bitbucket/common-api/yandex/cloud/api/tools)
+add_subdirectory(cloud/bitbucket/private-api/yandex/cloud/priv)
+add_subdirectory(cloud/bitbucket/private-api/yandex/cloud/priv/access)
+add_subdirectory(cloud/bitbucket/private-api/yandex/cloud/priv/operation)
+add_subdirectory(cloud/bitbucket/private-api/yandex/cloud/priv/quota)
add_subdirectory(ydb/library/yql/public/decimal/ut)
add_subdirectory(ydb/library/yql/public/issue/ut)
add_subdirectory(ydb/library/yql/public/udf/ut)
diff --git a/CMakeLists.linux.txt b/CMakeLists.linux.txt
index c8c26824f1..e6851c015e 100644
--- a/CMakeLists.linux.txt
+++ b/CMakeLists.linux.txt
@@ -1294,6 +1294,15 @@ add_subdirectory(ydb/library/yql/parser/pg_catalog/ut)
add_subdirectory(ydb/library/yql/providers/common/schema)
add_subdirectory(ydb/library/yql/providers/common/schema/skiff)
add_subdirectory(ydb/library/yql/providers/cloud_function/actors)
+add_subdirectory(ydb/library/yql/providers/cloud_function/gateway)
+add_subdirectory(cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1)
+add_subdirectory(contrib/libs/googleapis-common-protos)
+add_subdirectory(cloud/bitbucket/common-api/yandex/cloud/api)
+add_subdirectory(cloud/bitbucket/common-api/yandex/cloud/api/tools)
+add_subdirectory(cloud/bitbucket/private-api/yandex/cloud/priv)
+add_subdirectory(cloud/bitbucket/private-api/yandex/cloud/priv/access)
+add_subdirectory(cloud/bitbucket/private-api/yandex/cloud/priv/operation)
+add_subdirectory(cloud/bitbucket/private-api/yandex/cloud/priv/quota)
add_subdirectory(ydb/library/yql/public/decimal/ut)
add_subdirectory(ydb/library/yql/public/issue/ut)
add_subdirectory(ydb/library/yql/public/udf/ut)
diff --git a/cloud/README.md b/cloud/README.md
new file mode 100644
index 0000000000..3e469f7ad8
--- /dev/null
+++ b/cloud/README.md
@@ -0,0 +1,7 @@
+# Yandex Cloud (https://wiki.yandex-team.ru/cloud)
+
+This repository used for YC projects
+Another repositories - https://bb.yandex-team.ru/projects/CLOUD/
+
+Please contact devel@yandex-team.ru for any support
+
diff --git a/cloud/__init__.py b/cloud/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/cloud/__init__.py
diff --git a/cloud/bitbucket/common-api/yandex/cloud/api/CMakeLists.txt b/cloud/bitbucket/common-api/yandex/cloud/api/CMakeLists.txt
new file mode 100644
index 0000000000..d7b00adfc3
--- /dev/null
+++ b/cloud/bitbucket/common-api/yandex/cloud/api/CMakeLists.txt
@@ -0,0 +1,53 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(yandex-cloud-api)
+set_property(TARGET yandex-cloud-api PROPERTY
+ PROTOC_EXTRA_OUTS .grpc.pb.cc .grpc.pb.h
+)
+target_include_directories(yandex-cloud-api PUBLIC
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/common-api
+)
+target_include_directories(yandex-cloud-api PRIVATE
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/common-api
+)
+target_link_libraries(yandex-cloud-api PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ contrib-libs-grpc
+ contrib-libs-googleapis-common-protos
+ cloud-api-tools
+ contrib-libs-protobuf
+)
+target_proto_messages(yandex-cloud-api PRIVATE
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/common-api/yandex/cloud/api/operation.proto
+)
+target_sources(yandex-cloud-api PRIVATE
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/common-api/yandex/cloud/api/operation.pb.cc
+)
+target_proto_addincls(yandex-cloud-api
+ ./cloud/bitbucket/common-api
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/common-api
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/common-api
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/common-api
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+)
+target_proto_outs(yandex-cloud-api
+ --cpp_out=${CMAKE_BINARY_DIR}/cloud/bitbucket/common-api
+ --cpp_styleguide_out=${CMAKE_BINARY_DIR}/cloud/bitbucket/common-api
+)
+target_proto_plugin(yandex-cloud-api
+ grpc_cpp
+ grpc_cpp
+)
diff --git a/cloud/bitbucket/common-api/yandex/cloud/api/operation.proto b/cloud/bitbucket/common-api/yandex/cloud/api/operation.proto
new file mode 100644
index 0000000000..ad794a9cbe
--- /dev/null
+++ b/cloud/bitbucket/common-api/yandex/cloud/api/operation.proto
@@ -0,0 +1,24 @@
+syntax = "proto3";
+
+package yandex.cloud.api;
+
+import "google/protobuf/descriptor.proto";
+import "yandex/cloud/api/tools/options.proto";
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/common-api/yandex/cloud/api;api";
+option (cloud.api.tools.file).lint_skip.java_package = true;
+
+extend google.protobuf.MethodOptions { Operation operation = 87334; }
+
+// Operation is annotation for rpc that returns longrunning operation, describes
+// message types that will be returned in metadata [google.protobuf.Any], and
+// in response [google.protobuf.Any] (for successful operation).
+message Operation {
+ // Optional. If present, rpc returns operation which metadata field will
+ // contains message of specified type.
+ string metadata = 1; // Optional.
+
+ // Required. rpc returns operation, in case of success response will contains message of
+ // specified field.
+ string response = 2; // Required.
+}
diff --git a/cloud/bitbucket/common-api/yandex/cloud/api/tools/CMakeLists.txt b/cloud/bitbucket/common-api/yandex/cloud/api/tools/CMakeLists.txt
new file mode 100644
index 0000000000..a17d38e8a0
--- /dev/null
+++ b/cloud/bitbucket/common-api/yandex/cloud/api/tools/CMakeLists.txt
@@ -0,0 +1,51 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(cloud-api-tools)
+set_property(TARGET cloud-api-tools PROPERTY
+ PROTOC_EXTRA_OUTS .grpc.pb.cc .grpc.pb.h
+)
+target_include_directories(cloud-api-tools PUBLIC
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/common-api
+)
+target_include_directories(cloud-api-tools PRIVATE
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/common-api
+)
+target_link_libraries(cloud-api-tools PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ contrib-libs-grpc
+ contrib-libs-googleapis-common-protos
+ contrib-libs-protobuf
+)
+target_proto_messages(cloud-api-tools PRIVATE
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/common-api/yandex/cloud/api/tools/options.proto
+)
+target_sources(cloud-api-tools PRIVATE
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/common-api/yandex/cloud/api/tools/options.pb.cc
+)
+target_proto_addincls(cloud-api-tools
+ ./cloud/bitbucket/common-api
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/common-api
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/common-api
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+)
+target_proto_outs(cloud-api-tools
+ --cpp_out=${CMAKE_BINARY_DIR}/cloud/bitbucket/common-api
+ --cpp_styleguide_out=${CMAKE_BINARY_DIR}/cloud/bitbucket/common-api
+)
+target_proto_plugin(cloud-api-tools
+ grpc_cpp
+ grpc_cpp
+)
diff --git a/cloud/bitbucket/common-api/yandex/cloud/api/tools/options.proto b/cloud/bitbucket/common-api/yandex/cloud/api/tools/options.proto
new file mode 100644
index 0000000000..bc0c14275c
--- /dev/null
+++ b/cloud/bitbucket/common-api/yandex/cloud/api/tools/options.proto
@@ -0,0 +1,87 @@
+syntax = "proto3";
+
+package yandex.cloud.api.tools;
+
+import "google/protobuf/descriptor.proto";
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/common-api/yandex/cloud/api/tools;tools";
+option (cloud.api.tools.file).lint_skip.java_package = true;
+
+// NOTE(skipor): option extention names should have package scope unique names
+// and global unique ids per Options type from range 50000-99999 reserved for internal use.
+
+extend google.protobuf.FileOptions {FileOptions file = 67321;}
+extend google.protobuf.MessageOptions {MessageOptions message = 67321;}
+extend google.protobuf.FieldOptions {FieldOptions field = 67321;}
+extend google.protobuf.EnumOptions {EnumOptions enumeration = 67321;} // enum is reserved word :(
+extend google.protobuf.EnumValueOptions {EnumValueOptions value = 67321;}
+extend google.protobuf.ServiceOptions {ServiceOptions service = 67321;}
+extend google.protobuf.MethodOptions {MethodOptions method = 67321;}
+
+message FileOptions {
+ FileLintSkip lint_skip = 1;
+}
+
+message FileLintSkip {
+ bool all = 1;
+ bool go_package = 2;
+ bool file_path = 3;
+ bool java_package = 4;
+}
+
+message MessageOptions {
+ CommonLintSkip lint_skip = 1;
+ string openapi_name = 2;
+}
+
+message FieldOptions {
+ // Used to declare which schema may have protobuf.Struct field.
+ // TODO(skipor): if v1 and later apis use it move it to yandex.cloud.api package, and parse
+ // at lint stage, but not at options parse.
+ repeated string one_of = 1;
+ FieldLintSkip lint_skip = 2;
+}
+
+message FieldLintSkip {
+ bool all = 1;
+ bool int_type = 2;
+ bool float_type = 3;
+ bool json_name = 4;
+}
+
+message EnumOptions {
+ EnumLintSkip lint_skip = 2;
+ string openapi_name = 3;
+}
+
+message EnumLintSkip {
+ bool all = 1;
+ bool value_names_case = 2;
+ bool unspecified_value = 3;
+}
+
+message EnumValueOptions {
+ CommonLintSkip lint_skip = 1;
+}
+
+message ServiceOptions {
+ CommonLintSkip lint_skip = 1;
+ bool skip_generate = 2;
+}
+
+message MethodOptions {
+ MethodLintSkip lint_skip = 1;
+ bool skip_generate = 2;
+}
+
+message MethodLintSkip {
+ bool all = 1;
+ bool contains_resource_name = 2;
+ bool http_query_parameters = 3;
+ bool http_path = 4;
+ bool http_verb = 5;
+}
+
+message CommonLintSkip {
+ bool all = 1;
+}
diff --git a/cloud/bitbucket/private-api/README.md b/cloud/bitbucket/private-api/README.md
new file mode 100644
index 0000000000..5afc5b317e
--- /dev/null
+++ b/cloud/bitbucket/private-api/README.md
@@ -0,0 +1,52 @@
+## Private API development guide
+
+All cloud control plane API definition based on [gRPC](https://grpc.io).
+
+### Repository setup
+#### Prerequisites
+
+- make
+- on Mac OS X, protoc (should be >= 3.5) or Homebrew (protoc will be installed using brew)
+- on Linux, protoc (should be >= 3.5) or sudo access to install it from github
+
+#### Steps
+
+Example:
+
+```
+git clone https://bb.yandex-team.ru/scm/cloud/private-api.git
+cd private-api
+
+// ...Hack-hack-hack...
+
+make lint
+```
+
+### Checking proto compilation locally
+
+Just run `make lint` inside src root.
+To build proto tools from source set 'BUILD_TOOLS' variable to 1.
+Also you may check compilation of swagger docs out of cloud API: run `make generate` for that.
+
+For Pull Request build both successful `lint` and `generate` required.
+
+
+#### Validation
+
+Normally, all the fields of all messages received from users must be validated:
+- Request messages;
+- Value objects used in request messages;
+- Value objects used in value objects and so on.
+
+Output messages does not require validation.
+
+Syntax and examples can be found in ``yandex/cloud/priv/example/v1alpha/validation_example.proto``
+
+For Java developers there is ``java`` module, ``mvn clean package`` in this directory does following:
+ - builds and packages all proto-files in the repository
+ - tests all validators for syntax and applicability
+ - includes yandex.cloud.proto.ProtoValidator which helps validating messages in grpc interceptor.
+
+The `java/do_local_install.sh` script is useful for local development of a feature branch.
+The script will run `mvn versions:set && mvn clean install` and install built artifacts
+in the local maven repo with snapshot version. Please run `versions:revert` manually if script failed at compilation.
diff --git a/cloud/bitbucket/private-api/README.roles.md b/cloud/bitbucket/private-api/README.roles.md
new file mode 100644
index 0000000000..8fbc10189d
--- /dev/null
+++ b/cloud/bitbucket/private-api/README.roles.md
@@ -0,0 +1,108 @@
+# identity-role-access-matrix
+
+Этот документ описывает новый формат хранения данных о well-known сущностях IAM'а.
+
+Пермишены и сервисные роли хранятся в отдельном каталоге для сервиса, который ими управляет.
+Например, пермишен `compute.instances.start` может быть задан в файле `compute/permissions.yaml`, а роль `resource-manager.clouds.member` — в файле `resource-manager/roles.yaml`.
+Внутри своего каталога команда сервиса может организовать данные как угодно, одним файлом или несколькими, положить их в одном каталоге или раскидать по поддиректориям.
+Обязательное требование — файлы внутри подкаталогов должны называться `permissions.yaml`, `roles.yaml`, `stages.yaml`, `resources.yaml` для описания набора прав, ролей, стейджей и типов ресурсов соответсвенно.
+В каждом файле можно сослаться на сущность из любого другого файла — точно так же, как если бы сущности были описаны рядом, явно ссылаться на файл не нужно.
+
+Если эта документация противоречит тому, что на самом деле творится в файлах — значит, в файлах неправильно :)
+
+## Тулинг
+
+Для проверки того, что yaml'ы написаны верно, можно воспользоваться `yc-iam-compile-role-fixtures` из Python-пакета [yc_iam_tools](https://bb.yandex-team.ru/projects/CLOUD/repos/identity/browse/iam_tools/yc_iam_tools/). А можно и не пользоваться, такая же проверка запускается в TeamCity на каждый PR.
+
+## Роли
+
+```yaml
+roles:
+ # В этом dict'е перечисляются роли: ключ — название роли, значение — dict со свойствами
+
+ example.editor: # название роли
+
+ # Описание роли на английском для документации.
+ summary: |>
+ Edit different things that are managed by ExampleService.
+ Users with this role are also allowed to whisper to horses.
+
+ # Видимость роли: может быть public или internal. Роли public видят пользователи, а internal роли — нет.
+ # Public роль не должна включать в себя internal-пермишены, сейчас это warning при компиляции,
+ # в будущем повысим до error.
+ visibility: public
+
+ # Минимальный тип ресурса, на который можно назначить роль.
+ resourceType: resource-manager.folder
+ # Эту роль можно назначить на фолдер или на клауд, но нельзя на SA или на биллинг-аккаунт.
+ # Такая роль может содержать пермишены, у которых resourceType фолдер или какой-нибудь вложенный в него ресурс,
+ # но не может содержать никакие другие пермишены.
+
+ # Другие роли, входящие в состав этой.
+ # Параметр можно не указывать, если не нужно инклюдить никакие другие роли.
+ includedRoles:
+ - example.viewer
+ - horse.whisperer
+ # Роль `example.editor` содержит все пермишены из `example.viewer` и `horse.whisperer`.
+ # `includedRoles` работает транзитивно: если в определении `example.viewer` тоже инклюдятся какие-то роли,
+ # то их пермишены входят и в `example.editor`.
+
+ # Пермишены, входящие в роль.
+ # Параметр можно не указывать, если роль не включает никаких пермишенов напрямую.
+ permissions:
+ - example.things.edit
+ - example.things.manage
+ # Есть сокращённая форма записи:
+ - example.thingCollections.{create,update,delete}
+ # Фигурные скобки можно использовать в любом месте записи:
+ # `sample.{horses,mice,chickens}.{feed,pet}` тоже можно сказать,
+ # эта запись разресолвится в 6 пермишенов.
+ # (Но лучше таким не злоупотреблять.)
+
+ # В итоге получается, что в роль `example.editor` входят пермишены:
+ # `example.things.edit`, `example.things.manage`,
+ # `example.thingCollections.create`, `example.thingCollections.update`, `example.thingCollections.delete`,
+ # а также все пермишены, которые входят в роли `example.viewer` и `horse.whisperer`.
+
+ # Ещё одна роль.
+ example.viewer:
+ # Эта роль используется в роли `example.editor` выше.
+ # Но это не значит, что `example.viewer` в файле должна идти после `example.editor` —
+ # можно расположить их хоть как или вообще положить в разные файлы.
+ ...
+```
+
+Роли задаются аддитивно: можно создать роль "`viewer` плюс `compute.editor` плюс `iam.serviceAccounts.create`", но нельзя задать "`viewer` минус `billing.viewer`" или "все пермишены `serverless.*.*`, кроме `serverless.*.delete`". Это сделано специально, чтобы при добавлении новой роли/пермишена вся система вела себя более предсказуемо.
+
+Некоторые роли помечены как "псевдороли", у них есть поле `pseudorole: true`. Это временные сущности, они нужны только для того, чтобы из них составить общеоблачные роли типа `viewer`. Ни внешние, ни внутренние пользователи не могут видеть псевдороли в API и назначать на ресурсы. Сервисам рекомендуется заменить их на правильные сервисные роли.
+
+## Пермишены
+
+```yaml
+permissions:
+
+ iam.accessBinding.delete: # имя пермишена
+
+ # Описание роли на английском для документации.
+ description: Delete access binding.
+
+ # Стейдж. Чаще всего это GA.
+ # Список стейджей лежит в `stages.yaml`.
+ stage: GA
+
+ # Видимость пермишена: может быть public или internal.
+ # Связана с видимостью ролей: internal пермишены не должны входить в public роли.
+ visibility: public
+
+ # Здесь задаются условия, когда пермишен может действовать.
+ allowedWhen:
+
+ # Сейчас можно задать только условие на статус клауда.
+ cloud:
+ status:
+ - BLOCKED_BY_BILLING
+ - ACTIVE
+ # Этим пермишеном можно воспользоваться только тогда, когда клауд
+ # находится в статусе ACTIVE или BLOCKED_BY_BILLING.
+ # А если клауд в другом статусе — например, BLOCKED — пермишен запрещён.
+```
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/CMakeLists.txt b/cloud/bitbucket/private-api/yandex/cloud/priv/CMakeLists.txt
new file mode 100644
index 0000000000..57ce5f4354
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/CMakeLists.txt
@@ -0,0 +1,53 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(yandex-cloud-priv)
+set_property(TARGET yandex-cloud-priv PROPERTY
+ PROTOC_EXTRA_OUTS .grpc.pb.cc .grpc.pb.h
+)
+target_include_directories(yandex-cloud-priv PUBLIC
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_include_directories(yandex-cloud-priv PRIVATE
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_link_libraries(yandex-cloud-priv PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ contrib-libs-grpc
+ contrib-libs-googleapis-common-protos
+ contrib-libs-protobuf
+)
+target_proto_messages(yandex-cloud-priv PRIVATE
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/sensitive.proto
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/validation.proto
+)
+target_sources(yandex-cloud-priv PRIVATE
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/sensitive.pb.cc
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/validation.pb.cc
+)
+target_proto_addincls(yandex-cloud-priv
+ ./cloud/bitbucket/private-api
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+)
+target_proto_outs(yandex-cloud-priv
+ --cpp_out=${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+ --cpp_styleguide_out=${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_proto_plugin(yandex-cloud-priv
+ grpc_cpp
+ grpc_cpp
+)
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/access/CMakeLists.txt b/cloud/bitbucket/private-api/yandex/cloud/priv/access/CMakeLists.txt
new file mode 100644
index 0000000000..578c7fa86e
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/access/CMakeLists.txt
@@ -0,0 +1,53 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(cloud-priv-access)
+set_property(TARGET cloud-priv-access PROPERTY
+ PROTOC_EXTRA_OUTS .grpc.pb.cc .grpc.pb.h
+)
+target_include_directories(cloud-priv-access PUBLIC
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_include_directories(cloud-priv-access PRIVATE
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_link_libraries(cloud-priv-access PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ contrib-libs-grpc
+ contrib-libs-googleapis-common-protos
+ yandex-cloud-priv
+ contrib-libs-protobuf
+)
+target_proto_messages(cloud-priv-access PRIVATE
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/access/access.proto
+)
+target_sources(cloud-priv-access PRIVATE
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/access/access.pb.cc
+)
+target_proto_addincls(cloud-priv-access
+ ./cloud/bitbucket/private-api
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+)
+target_proto_outs(cloud-priv-access
+ --cpp_out=${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+ --cpp_styleguide_out=${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_proto_plugin(cloud-priv-access
+ grpc_cpp
+ grpc_cpp
+)
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/access/access.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/access/access.proto
new file mode 100644
index 0000000000..08ef897678
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/access/access.proto
@@ -0,0 +1,94 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.access;
+
+import "yandex/cloud/priv/validation.proto";
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/access;access";
+option java_outer_classname = "PA";
+
+// * `type = system, id = allUsers`: A special identifier that represents anyone.
+//
+// * `type = system, id = allAuthenticatedUsers`: A special identifier that represents anyone
+// who is authenticated.
+//
+// * `type = userAccount, id = <cloud generated id>`
+//
+// * `type = federatedUser, id = <cloud generated id>`
+//
+// * `type = serviceAccount, id = <cloud generated id>`
+//
+// * `type = group, id = <cloud generated id>`
+
+message Subject {
+ string id = 1 [(required) = true, (length) = "<=50"];
+ string type = 2 [(required) = true, (length) = "<=100"];
+}
+
+message AccessBinding {
+ string role_id = 1 [(required) = true, (length) = "<=50"];
+ Subject subject = 2 [(required) = true];
+}
+
+message ListAccessBindingsRequest {
+ string resource_id = 1 [(required) = true, (length) = "<=50"];
+ int64 page_size = 2 [(value) = "0-1000"];
+ string page_token = 3 [(length) = "<=100"];
+ // A flag allowing the service to determine that the original action was
+ // initiated from services (private API) when [private_call] = true, or from
+ // the public API when [private_call] = false. [private_call] = false adds
+ // additional restrictions on the execution of the action (ex. the prohibition
+ // of manipulating internal roles, internal roles are not returned in a result).
+ // When proxying from the public API, this field MUST be mapped to false.
+ bool private_call = 4;
+}
+
+message ListAccessBindingsResponse {
+ repeated AccessBinding access_bindings = 1;
+ string next_page_token = 2;
+}
+
+message SetAccessBindingsRequest {
+ string resource_id = 1 [(required) = true, (length) = "<=50"];
+ repeated AccessBinding access_bindings = 2;
+ // A flag allowing the service to determine that the original action was
+ // initiated from services (private API) when [private_call] = true, or from
+ // the public API when [private_call] = false. [private_call] = false adds
+ // additional restrictions on the execution of the action (ex. the prohibition
+ // of manipulating internal roles, throwing NotFoundException on an
+ // internal role). When proxying from the public API,
+ // this field MUST be mapped to false.
+ bool private_call = 3;
+}
+
+message SetAccessBindingsMetadata {
+ string resource_id = 1;
+}
+
+message UpdateAccessBindingsRequest {
+ string resource_id = 1 [(required) = true, (length) = "<=50"];
+ repeated AccessBindingDelta access_binding_deltas = 2 [(size) = ">0"];
+ // A flag allowing the service to determine that the original action was
+ // initiated from services (private API) when [private_call] = true, or from
+ // the public API when [private_call] = false. [private_call] = false adds
+ // additional restrictions on the execution of the action (ex. the prohibition
+ // of manipulating internal roles, throwing NotFoundException on an
+ // internal role). When proxying from the public API,
+ // this field MUST be mapped to false.
+ bool private_call = 3;
+}
+
+message UpdateAccessBindingsMetadata {
+ string resource_id = 1;
+}
+
+enum AccessBindingAction {
+ ACCESS_BINDING_ACTION_UNSPECIFIED = 0;
+ ADD = 1;
+ REMOVE = 2;
+}
+
+message AccessBindingDelta {
+ AccessBindingAction action = 1 [(required) = true];
+ AccessBinding access_binding = 2 [(required) = true];
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/operation/CMakeLists.txt b/cloud/bitbucket/private-api/yandex/cloud/priv/operation/CMakeLists.txt
new file mode 100644
index 0000000000..94d0f6f800
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/operation/CMakeLists.txt
@@ -0,0 +1,51 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(cloud-priv-operation)
+set_property(TARGET cloud-priv-operation PROPERTY
+ PROTOC_EXTRA_OUTS .grpc.pb.cc .grpc.pb.h
+)
+target_include_directories(cloud-priv-operation PUBLIC
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_include_directories(cloud-priv-operation PRIVATE
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_link_libraries(cloud-priv-operation PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ contrib-libs-grpc
+ contrib-libs-googleapis-common-protos
+ contrib-libs-protobuf
+)
+target_proto_messages(cloud-priv-operation PRIVATE
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/operation/operation.proto
+)
+target_sources(cloud-priv-operation PRIVATE
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/operation/operation.pb.cc
+)
+target_proto_addincls(cloud-priv-operation
+ ./cloud/bitbucket/private-api
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+)
+target_proto_outs(cloud-priv-operation
+ --cpp_out=${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+ --cpp_styleguide_out=${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_proto_plugin(cloud-priv-operation
+ grpc_cpp
+ grpc_cpp
+)
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/operation/operation.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/operation/operation.proto
new file mode 100644
index 0000000000..0867840b50
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/operation/operation.proto
@@ -0,0 +1,28 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.operation;
+
+import "google/protobuf/any.proto";
+import "google/rpc/status.proto";
+import "google/protobuf/timestamp.proto";
+
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/operation;operation";
+option java_outer_classname = "PO";
+
+message Operation {
+ string id = 1;
+ string description = 2; // ex: Create VM, Stop VM, Delete Disk, Snapshot Disk, etc
+ google.protobuf.Timestamp created_at = 3;
+ string created_by = 4;
+ google.protobuf.Timestamp modified_at = 5;
+
+ bool done = 6;
+
+ google.protobuf.Any metadata = 7;
+
+ oneof result {
+ google.rpc.Status error = 8; // for error and cancellation
+ google.protobuf.Any response = 9; // for 'Create/Update' should contain entity
+ }
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/quota/CMakeLists.txt b/cloud/bitbucket/private-api/yandex/cloud/priv/quota/CMakeLists.txt
new file mode 100644
index 0000000000..c8bc229101
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/quota/CMakeLists.txt
@@ -0,0 +1,53 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(cloud-priv-quota)
+set_property(TARGET cloud-priv-quota PROPERTY
+ PROTOC_EXTRA_OUTS .grpc.pb.cc .grpc.pb.h
+)
+target_include_directories(cloud-priv-quota PUBLIC
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_include_directories(cloud-priv-quota PRIVATE
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_link_libraries(cloud-priv-quota PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ contrib-libs-grpc
+ contrib-libs-googleapis-common-protos
+ yandex-cloud-priv
+ contrib-libs-protobuf
+)
+target_proto_messages(cloud-priv-quota PRIVATE
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/quota/quota.proto
+)
+target_sources(cloud-priv-quota PRIVATE
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/quota/quota.pb.cc
+)
+target_proto_addincls(cloud-priv-quota
+ ./cloud/bitbucket/private-api
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+)
+target_proto_outs(cloud-priv-quota
+ --cpp_out=${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+ --cpp_styleguide_out=${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_proto_plugin(cloud-priv-quota
+ grpc_cpp
+ grpc_cpp
+)
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/quota/quota.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/quota/quota.proto
new file mode 100644
index 0000000000..8e3200a024
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/quota/quota.proto
@@ -0,0 +1,63 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.quota;
+
+import "yandex/cloud/priv/validation.proto";
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/quota;quota";
+option java_outer_classname = "PQ";
+
+// Cloud service should implement grpc service with signature
+//
+//service QuotaService {
+// rpc Get (quota.GetQuotaRequest) returns (quota.Quota);
+//
+// rpc BatchUpdateMetric (quota.BatchUpdateQuotaMetricsRequest) returns (google.protobuf.Empty);
+//}
+
+message Quota {
+ string cloud_id = 1;
+ repeated QuotaMetric metrics = 2;
+}
+
+message QuotaMetric {
+ string name = 1; // formatted as <domain>.<metric>.<unit>, e.g. mdb.hdd.size
+ int64 value = 2 [deprecated=true]; // use 'usage' field instead
+ int64 limit = 3;
+ double usage = 4;
+}
+
+message MetricLimit {
+ string name = 1;
+ int64 limit = 2;
+}
+
+message GetQuotaRequest {
+ string cloud_id = 1 [(required) = true, (length) = "<=50"];
+}
+
+message UpdateQuotaMetricRequest {
+ string cloud_id = 1 [(required) = true, (length) = "<=50"];
+ MetricLimit metric = 2;
+}
+
+message BatchUpdateQuotaMetricsRequest {
+ string cloud_id = 1 [(required) = true, (length) = "<=50"];
+ repeated MetricLimit metrics = 2;
+}
+
+message GetQuotaDefaultRequest {
+}
+
+message GetQuotaDefaultResponse {
+ repeated MetricLimit metrics = 1;
+}
+
+message QuotaFailure {
+ message Violation {
+ QuotaMetric metric = 1;
+ int64 required = 2; // new value for the MetricLimit.limit, so it is: old limit + delta
+ }
+ string cloud_id = 1;
+ repeated Violation violations = 2;
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/resources.yaml b/cloud/bitbucket/private-api/yandex/cloud/priv/resources.yaml
new file mode 100644
index 0000000000..9a051f003a
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/resources.yaml
@@ -0,0 +1,3 @@
+resources:
+ root:
+ parents: []
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/restrictions.yaml b/cloud/bitbucket/private-api/yandex/cloud/priv/restrictions.yaml
new file mode 100644
index 0000000000..fe8e05053b
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/restrictions.yaml
@@ -0,0 +1,32 @@
+restrictions:
+ blockPermissions:
+ freeTier:
+ denyAllPermissionsByDefault: true
+
+ deletingContainer:
+ denyAllPermissionsByDefault: true
+
+ billSuspend:
+ servicesToStop: ["*"]
+ resourcesToStop: []
+ stopDelay: PT0S
+ deletionInitiationInterval: P57D
+ deletionDelay: P3D
+ denyAllPermissionsByDefault: true
+
+ clientBlocking:
+ servicesToStop: ["*"]
+ stopDelay: PT0S
+ denyAllPermissionsByDefault: true
+
+ fraud:
+ servicesToStop: ["*"]
+ stopDelay: PT0S
+ deletionInitiationInterval: P4D
+ deletionDelay: P3D
+ denyAllPermissionsByDefault: true
+
+ elasticsearchSanctions:
+ servicesToStop: ["managed-elasticsearch"]
+ stopDelay: P7D
+ denyAllPermissionsByDefault: false
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/roles.yaml b/cloud/bitbucket/private-api/yandex/cloud/priv/roles.yaml
new file mode 100644
index 0000000000..bf4922add3
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/roles.yaml
@@ -0,0 +1,441 @@
+role_groups:
+ primitive:
+ name: Primitive roles
+ staff:
+ name: Cloud Staff Roles
+ infra:
+ name: YC Infra roles
+
+roles:
+
+ ##############################################################################
+ # Primitive Roles
+ ##############################################################################
+
+ viewer:
+ name: viewer
+ groups: [primitive]
+ description: доступ ко всем функциям в режиме чтения
+ visibility: public
+ includedRoles:
+ - alb.viewer.pseudo
+ - api-gateway.viewer
+ - audit-trails.configViewer
+ - audit-trails.viewer
+ - billing.accounts.viewer
+ - cdn.viewer
+ - certificate-manager.viewer
+ - cic.partnerViewer
+ - cic.secretViewer
+ - cic.viewer
+ - compute.instanceGroups.viewer
+ - compute.viewer
+ - container-registry.viewer
+ - data-transfer.viewer
+ - dataproc.viewer
+ - datasphere.user
+ - dcnetwork.viewer # DoubleCloud Network
+ - dns.viewer
+ - gitlab.viewer
+ - iam.viewer
+ - iot.viewer
+ - k8s.cluster-api.viewer
+ - k8s.viewer
+ - kms.viewer
+ - load-balancer.viewer
+ - load-balancer.viewer
+ - loadtesting.viewer
+ - lockbox.viewer
+ - logging.reader
+ - logging.viewer
+ - marketplace.viewer
+ - mdb.viewer
+ - monitoring.viewer
+ - organization-manager.viewer
+ - quota-manager.viewer
+ - resource-manager.viewer
+ - serverless.containers.viewer
+ - serverless.functions.viewer.pseudo
+ - smart-captcha.viewer
+ - storage.viewer
+ - vdi.viewer
+ - vpc.viewer
+ - ydb.viewer
+ - ydb.viewer.pseudo
+ - yds.viewer
+ - ymq.viewer
+ - ymq.viewer.pseudo
+ - yq.viewer
+ scopes:
+ - yc.datalens.view
+ - yc.support.tickets.manage
+ permissions:
+ - cloudai.resources.{get,list}
+ - logs.logEvents.read
+
+ editor:
+ name: 'editor'
+ groups: [primitive]
+ description: доступ ко всем функциям в режиме чтения и записи
+ visibility: public
+ includedRoles:
+ - ai.speechkit-stt.user
+ - ai.speechkit-tts.user
+ - ai.translate.user
+ - ai.vision.user
+ - alb.editor.pseudo
+ - api-gateway.editor
+ - audit-trails.editor
+ - billing.accounts.editor
+ - cdn.editor
+ - certificate-manager.editor
+ - cic.editor
+ - cic.partnerEditor
+ - cic.secretEditor
+ - compute.editor
+ - compute.instanceGroups.editor
+ - compute.osLogin
+ - container-registry.editor
+ - data-transfer.editor
+ - datalens.instances.user
+ - dataproc.editor
+ - dcnetwork.editor # DoubleCloud Network
+ - dns.editor
+ - gitlab.editor
+ - iam.editor
+ - iot.editor
+ - k8s.cluster-api.cluster-admin
+ - k8s.editor
+ - kms.editor
+ - loadtesting.editor
+ - lockbox.editor
+ - logging.editor
+ - logging.writer
+ - marketplace.editor
+ - mdb.editor
+ - monitoring.editor
+ - organization-manager.editor
+ - quota-manager.editor
+ - resource-manager.editor
+ - serverless.containers.editor
+ - serverless.functions.editor.pseudo
+ - smart-captcha.editor
+ - storage.editor
+ - vdi.editor
+ - viewer
+ - vpc.privateEditor.pseudo
+ - vpc.publicEditor.pseudo
+ - vpc.securityGroups.editor.pseudo
+ - vpc.user
+ - ydb.editor
+ - yds.editor
+ - ylb.networkLoadBalancers.publicEditor.pseudo
+ - ylb.targetGroups.editor.pseudo
+ - ymq.editor
+ - yq.editor
+ permissions:
+ - cloudai.biometry.exec
+ - cloudai.locator.exec
+ - cloudai.predictor.exec
+ - cloudai.resources.{create,delete,update}
+ - cloudai.speller.exec
+ - cloudai.vocabulary.exec
+ - logs.logEvents.write
+
+ admin:
+ name: 'admin'
+ groups: [primitive]
+ description: доступ ко всем функциям в режиме чтения и записи, управление пользователями
+ и политиками
+ visibility: public
+ includedRoles:
+ - alb.admin.pseudo
+ - api-gateway.admin
+ - audit-trails.admin
+ - billing.accounts.admin
+ - cdn.admin
+ - certificate-manager.admin
+ - compute.admin
+ - compute.osAdminLogin
+ - container-registry.admin
+ - data-transfer.admin
+ - datalens.instances.admin
+ - dataproc.admin
+ - datasphere.admin
+ - dcnetwork.admin # DoubleCloud Network
+ - dns.admin
+ - editor
+ - gitlab.admin
+ - iam.admin
+ - iot.admin
+ - k8s.admin
+ - k8s.cluster-api.cluster-admin
+ - kms.admin
+ - loadtesting.admin
+ - lockbox.admin
+ - logging.admin
+ - mdb.admin
+ - monitoring.admin
+ - organization-manager.admin
+ - quota-manager.admin
+ - resource-manager.admin
+ - serverless.containers.admin
+ - serverless.functions.admin
+ - smart-captcha.admin
+ - storage.admin
+ - vdi.admin
+ - vpc.admin
+ - ydb.admin
+ - yds.admin
+ - ymq.admin
+ - yq.admin
+
+ auditor:
+ #это временная роль, которая сейчас по составу неправильная и в таком виде ее нельзя пускать дальше в прод, пока сервисы не готовы поддерживать новую сервисную роль самостоятельно https://st.yandex-team.ru/CLOUDBIZ-6178
+ name: auditor
+ groups: [primitive]
+ description: доступ только к конфигурации и метадате
+ visibility: internal
+ includedRoles:
+ - storage.configViewer
+ - vpc.viewer
+ - k8s.viewer
+ - k8s.cluster-api.viewer
+ - lockbox.viewer
+ - kms.viewer
+ - audit-trails.configViewer
+ - load-balancer.viewer
+ - certificate-manager.viewer
+ - container-registry.viewer
+ - iam.viewer
+ - dns.viewer
+ permissions:
+ - compute.console.getFolderStats
+ - compute.console.getDiskLimits
+ - compute.diskOperations.list
+ - compute.disks.{get,list}
+ - compute.filesystemOperations.list
+ - compute.filesystems.{get,list}
+ - compute.imageOperations.list
+ - compute.images.getLatestByFamily
+ - compute.images.{get,list}
+ - compute.instanceOperations.list
+ - compute.instances.{get,list}
+ - compute.instanceGroups.{get,list}
+ - compute.networkInterfaces.{get,list}
+ - compute.operations.{get,list}
+ - compute.placementGroups.{get,list,listInstances}
+ - compute.placementGroupOperations.list
+ - compute.platforms.get
+ - compute.diskPlacementGroups.{get,list,listDisks}
+ - compute.diskPlacementGroupOperations.list
+ - compute.hostGroups.{get,list,listHosts,listInstances}
+ - compute.hostGroupOperations.list
+ - compute.quotas.getCloudLimit
+ - compute.snapshotOperations.list
+ - compute.snapshots.{get,list}
+ - compute.zones.{get,list}
+
+ ##############################################################################
+ # Support Roles
+ ##############################################################################
+
+ support:
+ groups: [staff]
+ name: Техподдержка
+ visibility: internal
+ description: возможность проведения специфичных для support операций
+ includedRoles:
+ - alb.support
+ - audit-trails.support
+ - billing.support
+ - cdn.support
+ - certificate-manager.support
+ - cic.support
+ - cloudai.support
+ - cloudsearch.cloudsIndex.support
+ - compute.instanceGroups.support
+ - compute.support
+ - container-registry.support
+ - data-transfer.support
+ - datalens.support
+ - disk-manager.support
+ - dns.support
+ - gitlab.support
+ - iam.support
+ - iot.support
+ - k8s.support
+ - kms.support
+ - load-balancer.support
+ - loadtesting.support
+ - lockbox.support
+ - logging.support
+ - logs.support
+ - marketplace.support
+ - mdb.supportMdb
+ - monitoring.support
+ - nbs.support
+ - quota-manager.support
+ - serverless.support
+ - storage.support
+ - vdi.support
+ - vpc.support
+ - ydb.support
+ - yds.support
+ - ymq.support
+ permissions: []
+
+ supportAdmin:
+ groups: [staff]
+ name: Техподдержка
+ visibility: internal
+ description: доступ к методам удаления объектов и квотам compute
+ includedRoles:
+ - alb.supportAdmin
+ - audit-trails.supportAdmin
+ - billing.supportAdmin
+ - cdn.supportAdmin
+ - certificate-manager.supportAdmin
+ - cic.supportAdmin
+ - cloudai.supportAdmin
+ - compute.instanceGroups.supportAdmin
+ - compute.supportAdmin
+ - container-registry.supportAdmin
+ - data-transfer.supportAdmin
+ - datalens.supportAdmin
+ - disk-manager.supportAdmin
+ - dns.supportAdmin
+ - gitlab.supportAdmin
+ - iam.supportAdmin
+ - iot.supportAdmin
+ - k8s.supportAdmin
+ - kms.supportAdmin
+ - load-balancer.supportAdmin
+ - loadtesting.supportAdmin
+ - lockbox.supportAdmin
+ - logging.supportAdmin
+ - logs.supportAdmin
+ - marketplace.supportAdmin
+ - mdb.supportAdmin
+ - monitoring.supportAdmin
+ - nbs.supportAdmin
+ - quota-manager.supportAdmin
+ - serverless.supportAdmin
+ - storage.supportAdmin
+ - vdi.supportAdmin
+ - vpc.supportAdmin
+ - ydb.supportAdmin
+ - yds.supportAdmin
+ - ymq.supportAdmin
+ permissions: []
+
+ supportadmin:
+ groups: [staff]
+ name: Техподдержка
+ visibility: internal
+ description: DEPRECATED
+ includedRoles:
+ - alb.supportAdmin
+ - audit-trails.supportAdmin
+ - billing.supportAdmin
+ - cdn.supportAdmin
+ - certificate-manager.supportAdmin
+ - cloudai.supportAdmin
+ - compute.supportAdmin
+ - container-registry.supportAdmin
+ - data-transfer.supportAdmin
+ - datalens.supportAdmin
+ - disk-manager.supportAdmin
+ - iam.supportAdmin
+ - iot.supportAdmin
+ - k8s.supportAdmin
+ - kms.supportAdmin
+ - load-balancer.supportAdmin
+ - lockbox.supportAdmin
+ - logs.supportAdmin
+ - marketplace.supportAdmin
+ - mdb.supportAdmin
+ - monitoring.supportAdmin
+ - nbs.supportAdmin
+ - serverless.supportAdmin
+ - storage.supportAdmin
+ - vdi.supportAdmin
+ - vpc.supportAdmin
+ - ydb.supportAdmin
+ - yds.supportAdmin
+ - ymq.supportAdmin
+ permissions: []
+
+
+ ##############################################################################
+ # On-call Roles
+ ##############################################################################
+
+ onCall:
+ groups: [staff]
+ name: Инженер on-call
+ visibility: internal
+ description: доступы для всех инженеров on-call
+ includedRoles:
+ - monitoring.viewer # все дежурные могут смотреть в мониторинге метрики любых облаков и ресурсов CLOUD-67217
+ - cloudsearch.cloudsIndex.onCall # все дежурные могут смотреть в индекс по всем ресурсам
+ permissions:
+ - organization-manager.organizations.get
+ - resource-manager.clouds.get
+ - resource-manager.folders.get
+
+
+ ##############################################################################
+ # Internal Roles
+ ##############################################################################
+
+ compute.admin:
+ groups: [compute, instance-group]
+ name: Администратор Compute
+ visibility: public
+ description: доступ ко всем функциям compute, включая instance-group
+ includedRoles:
+ - compute.admin.withoutVpc.pseudo
+ - compute.instanceGroups.admin
+ - vpc.user
+
+ internal.empty:
+ groups: [infra]
+ name: (Внутренняя) Пустая роль
+ visibility: internal
+ description: роль без полномочий для тестовых целей
+ permissions: []
+
+ internal.infra:
+ groups: [infra]
+ name: Роль для SA селфхоста
+ visibility: internal
+ description: ''
+ permissions: []
+
+ internal.teamcityagent:
+ groups: [infra]
+ name: (Внутренняя) Агент Teamcity
+ visibility: internal
+ description: доступ к Container Registry
+ permissions:
+ - container-registry.images.{create,update}
+ - container-registry.images.{get,list}
+ - container-registry.quotas.get
+ - container-registry.registries.{get,list}
+
+ internal.computehead:
+ groups: [infra]
+ name: "(Внутренняя) Роль для SA head'ов compute"
+ visibility: internal
+ description: ''
+ includedRoles:
+ - internal.compute.snapshotService.admin
+ - internal.marketplacelicense
+ - internal.disk-manager.user
+ - internal.nbs.admin
+ permissions:
+ - vpcInternal.computeInternal.use
+ - compute.worker.catchTasks
+ - resource-manager.folders.get
+ - resource-manager.clouds.get
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/sensitive.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/sensitive.proto
new file mode 100644
index 0000000000..be953a9dcb
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/sensitive.proto
@@ -0,0 +1,24 @@
+syntax = "proto3";
+
+package yandex.cloud.priv;
+
+import "google/protobuf/descriptor.proto";
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv;cloud";
+
+enum SensitiveType {
+ SENSITIVE_TYPE_UNSPECIFIED = 0;
+ SENSITIVE_CRC = 1;
+ SENSITIVE_IAM_TOKEN = 2;
+ SENSITIVE_REMOVE = 3;
+ SENSITIVE_YANDEX_PASSPORT_OAUTH_TOKEN = 4;
+ SENSITIVE_IAM_COOKIE = 5;
+}
+
+extend google.protobuf.FieldOptions {
+ // novikoff:
+ // Sensitive fields are hidden in logs
+ // For now could be applied only to string fields
+ bool sensitive = 100601;
+ SensitiveType sensitive_type = 100602;
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/CMakeLists.txt b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/CMakeLists.txt
new file mode 100644
index 0000000000..e4e02ac570
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/CMakeLists.txt
@@ -0,0 +1,69 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(serverless-functions-v1)
+set_property(TARGET serverless-functions-v1 PROPERTY
+ PROTOC_EXTRA_OUTS .grpc.pb.cc .grpc.pb.h
+)
+target_include_directories(serverless-functions-v1 PUBLIC
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_include_directories(serverless-functions-v1 PRIVATE
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_link_libraries(serverless-functions-v1 PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ contrib-libs-grpc
+ contrib-libs-googleapis-common-protos
+ yandex-cloud-api
+ cloud-api-tools
+ yandex-cloud-priv
+ cloud-priv-access
+ cloud-priv-operation
+ cloud-priv-quota
+ contrib-libs-protobuf
+)
+target_proto_messages(serverless-functions-v1 PRIVATE
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function.proto
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function_service.proto
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/operation_service.proto
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/quota_service.proto
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/session.proto
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/session_service.proto
+)
+target_sources(serverless-functions-v1 PRIVATE
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function.pb.cc
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function_service.pb.cc
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/operation_service.pb.cc
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/quota_service.pb.cc
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/session.pb.cc
+ ${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/session_service.pb.cc
+)
+target_proto_addincls(serverless-functions-v1
+ ./cloud/bitbucket/private-api
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/common-api
+ ${CMAKE_SOURCE_DIR}/cloud/bitbucket/private-api
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+)
+target_proto_outs(serverless-functions-v1
+ --cpp_out=${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+ --cpp_styleguide_out=${CMAKE_BINARY_DIR}/cloud/bitbucket/private-api
+)
+target_proto_plugin(serverless-functions-v1
+ grpc_cpp
+ grpc_cpp
+)
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function.proto
new file mode 100644
index 0000000000..02b19328bb
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function.proto
@@ -0,0 +1,135 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.serverless.functions.v1;
+
+import "google/protobuf/duration.proto";
+import "google/protobuf/timestamp.proto";
+import "google/protobuf/struct.proto";
+import "yandex/cloud/priv/validation.proto";
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1;functions";
+option java_outer_classname = "PSF";
+
+message Function {
+ enum Status {
+ STATUS_UNSPECIFIED = 0;
+ CREATING = 1;
+ ACTIVE = 2;
+ DELETING = 3;
+ ERROR = 4;
+ }
+ string id = 1;
+ string folder_id = 2;
+ google.protobuf.Timestamp created_at = 3;
+ string name = 4;
+ string description = 5;
+ map<string, string> labels = 6;
+ string log_group_id = 7;
+ string http_invoke_url = 8;
+ Status status = 9;
+}
+
+message Runtime {
+ string id = 1;
+ repeated string builders = 2;
+ string default_builder = 3;
+ string language = 4;
+ string version = 5;
+ string stage = 6;
+}
+
+message Version {
+ enum Status {
+ STATUS_UNSPECIFIED = 0;
+ CREATING = 1;
+ ACTIVE = 2;
+ OBSOLETE = 3;
+ }
+
+ string id = 1;
+ string function_id = 2;
+ string description = 3;
+ google.protobuf.Timestamp created_at = 5;
+ string runtime = 6;
+ string entrypoint = 7;
+ Resources resources = 8;
+ google.protobuf.Duration execution_timeout = 9;
+ string service_account_id = 10;
+ int64 image_size = 12;
+ Status status = 13;
+ repeated string tags = 14;
+ string log_group_id = 15;
+ map<string, string> environment = 16;
+ string builder = 17;
+ bool tmpfs = 18;
+ map<string, string> named_service_accounts = 19;
+ int64 concurrency = 20;
+ Connectivity connectivity = 21;
+ DataDisk data_disk = 22;
+ OwnerData owner_data = 23;
+ repeated Secret secrets = 24;
+}
+
+message Resources {
+ int64 memory = 1 [(value) = "134217728-4294967296"];
+ int64 cores = 2 [(value) = ">=0"];
+ int64 core_fraction = 3 [(value) = "0-100"];
+}
+
+message Package {
+ string bucket_name = 1 [(required) = true];
+ string object_name = 2 [(required) = true];
+ string sha256 = 3;
+}
+
+message Connectivity {
+ string network_id = 1;
+ repeated string subnet_id = 2;
+}
+
+message DataDisk {
+ oneof source {
+ string image_id = 1;
+ string snapshot_id = 2;
+ }
+ string type_id = 3;
+ int64 size = 4;
+}
+
+message ScalingPolicy {
+ string function_id = 1;
+ string tag = 2;
+
+ google.protobuf.Timestamp created_at = 3;
+ google.protobuf.Timestamp modified_at = 4; // either version or params
+
+ // cached (current) field, no value means no version with this tag
+ string version_id = 5;
+
+ // Minimum guaranteed provisioned instances count for all zones in total.
+ // Billed separately.
+ int64 provisioned_instances_count = 6;
+
+ // Upper limit for instance count in each zone.
+ // 0 means no limit.
+ int64 zone_instances_limit = 7;
+
+ // Upper limit of requests count in each zone.
+ // 0 means no limit.
+ int64 zone_requests_limit = 8;
+}
+
+// OwnerData contains additional data from the owner resource (e.g. container, API Gateway, etc)
+message OwnerData {
+ google.protobuf.Struct data = 1;
+}
+
+message Secret {
+ string id = 1;
+ string version_id = 2;
+ string key = 3;
+ oneof reference {
+ string environment_variable = 4;
+ string file_path = 5;
+ }
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function_service.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function_service.proto
new file mode 100644
index 0000000000..1741d91de5
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function_service.proto
@@ -0,0 +1,394 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.serverless.functions.v1;
+
+import "google/protobuf/field_mask.proto";
+import "google/protobuf/duration.proto";
+import "google/protobuf/timestamp.proto";
+import "yandex/cloud/api/operation.proto";
+import "yandex/cloud/api/tools/options.proto";
+import "yandex/cloud/priv/access/access.proto";
+import "yandex/cloud/priv/serverless/functions/v1/function.proto";
+import "yandex/cloud/priv/operation/operation.proto";
+import "yandex/cloud/priv/validation.proto";
+import "yandex/cloud/priv/sensitive.proto";
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1;functions";
+option java_outer_classname = "PSFS";
+
+service FunctionService {
+ rpc Get (GetFunctionRequest) returns (Function);
+
+ rpc List (ListFunctionsRequest) returns (ListFunctionsResponse);
+
+ rpc Create (CreateFunctionRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "CreateFunctionMetadata"
+ response: "Function"
+ };
+ };
+
+ rpc Update (UpdateFunctionRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "UpdateFunctionMetadata"
+ response: "Function"
+ };
+ };
+
+ rpc Delete (DeleteFunctionRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "DeleteFunctionMetadata"
+ response: "google.protobuf.Empty"
+ };
+ };
+
+ rpc ForceDelete (DeleteFunctionRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "DeleteFunctionMetadata"
+ response: "google.protobuf.Empty"
+ };
+ };
+
+ rpc GetVersion (GetFunctionVersionRequest) returns (Version) {
+ }
+
+ rpc GetFunctionVersion (GetFunctionVersionRequest) returns (Version) {
+ option (yandex.cloud.api.tools.method).lint_skip.contains_resource_name = true;
+ };
+
+ rpc GetVersionByTag (GetFunctionVersionByTagRequest) returns (Version) {
+ }
+
+ rpc GetFunctionVersionByTag (GetFunctionVersionByTagRequest) returns (Version) {
+ option (yandex.cloud.api.tools.method).lint_skip.contains_resource_name = true;
+ };
+
+ rpc ListVersions (ListFunctionsVersionsRequest) returns (ListFunctionsVersionsResponse) {
+ }
+
+ rpc ListFunctionVersions (ListFunctionsVersionsRequest) returns (ListFunctionsVersionsResponse) {
+ option (yandex.cloud.api.tools.method).lint_skip.contains_resource_name = true;
+ };
+
+ rpc SetTag (SetFunctionTagRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "SetFunctionTagMetadata"
+ response: "Version"
+ };
+ }
+
+ rpc RemoveTag (RemoveFunctionTagRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "RemoveFunctionTagMetadata"
+ response: "Version"
+ };
+ }
+
+ rpc ListTagHistory (ListFunctionTagHistoryRequest) returns (ListFunctionTagHistoryResponse) {
+ }
+
+ rpc ListFunctionTagHistory (ListFunctionTagHistoryRequest) returns (ListFunctionTagHistoryResponse) {
+ option (yandex.cloud.api.tools.method).lint_skip.contains_resource_name = true;
+ };
+
+ rpc CreateVersion (CreateFunctionVersionRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "CreateFunctionVersionMetadata"
+ response: "Version"
+ };
+ }
+
+ rpc CreateFunctionVersion (CreateFunctionVersionRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "CreateFunctionVersionMetadata"
+ response: "Version"
+ };
+ option (yandex.cloud.api.tools.method).lint_skip.contains_resource_name = true;
+ };
+
+ rpc ListRuntimes (ListRuntimesRequest) returns (ListRuntimesResponse);
+
+ rpc ListOperations (ListFunctionOperationsRequest) returns (ListFunctionOperationsResponse);
+
+ rpc ListAccessBindings (access.ListAccessBindingsRequest) returns (access.ListAccessBindingsResponse);
+
+ rpc SetAccessBindings (access.SetAccessBindingsRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "access.SetAccessBindingsMetadata"
+ response: "google.protobuf.Empty"
+ };
+ }
+
+ rpc UpdateAccessBindings (access.UpdateAccessBindingsRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "access.UpdateAccessBindingsMetadata"
+ response: "google.protobuf.Empty"
+ };
+ }
+
+ rpc GetFolderStats (GetFolderStatsRequest) returns (FolderStats);
+
+ rpc ListScalingPolicies (ListScalingPoliciesRequest) returns (ListScalingPoliciesResponse);
+
+ rpc SetScalingPolicy (SetScalingPolicyRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "SetScalingPolicyMetadata"
+ response: "ScalingPolicy"
+ };
+ }
+
+ rpc RemoveScalingPolicy (RemoveScalingPolicyRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "RemoveScalingPolicyMetadata"
+ response: "google.protobuf.Empty"
+ };
+ }
+
+}
+
+message GetFunctionRequest {
+ string function_id = 1 [(required) = true];
+}
+
+message GetFunctionVersionRequest {
+ string function_version_id = 1 [(required) = true];
+}
+
+message GetFunctionVersionByTagRequest {
+ string function_id = 1 [(required) = true];
+ string tag = 2 [(pattern) = "[a-z][-_0-9a-z]*|[$]latest"];
+}
+
+message ListFunctionsRequest {
+ string folder_id = 1 [(required) = true];
+ int64 page_size = 2;
+ string page_token = 3;
+ // supported fields for filter:
+ // name
+ // created_at
+ string filter = 4;
+}
+
+message ListFunctionsResponse {
+ repeated Function functions = 1;
+ string next_page_token = 2;
+}
+
+message CreateFunctionRequest {
+ string folder_id = 1 [(required) = true];
+ string name = 2 [(pattern) = "|[a-z][-a-z0-9]{1,61}[a-z0-9]"];
+ string description = 3 [(length) = "<=256"];
+ map<string, string> labels = 4 [(size) = "<=64", (length) = "<=63", (pattern) = "[-_0-9a-z]*", (map_key).length = "1-63", (map_key).pattern = "[a-z][-_0-9a-z]*"];
+ string log_group_id = 5;
+}
+
+message CreateFunctionMetadata {
+ string function_id = 1;
+}
+
+message UpdateFunctionRequest {
+ string function_id = 1 [(required) = true];
+ google.protobuf.FieldMask update_mask = 2;
+
+ string name = 3 [(pattern) = "|[a-z][-a-z0-9]{1,61}[a-z0-9]"];
+ string description = 4 [(length) = "<=256"];
+ map<string, string> labels = 5 [(size) = "<=64", (length) = "<=63", (pattern) = "[-_0-9a-z]*", (map_key).length = "1-63", (map_key).pattern = "[a-z][-_0-9a-z]*"];
+}
+
+message UpdateFunctionMetadata {
+ string function_id = 1;
+}
+
+message DeleteFunctionRequest {
+ string function_id = 1 [(required) = true];
+}
+
+message DeleteFunctionMetadata {
+ string function_id = 1;
+}
+
+message ListRuntimesRequest {
+}
+
+message ListRuntimesResponse {
+ repeated string runtimes = 1; // backward compatibility
+ repeated Runtime available_runtimes = 2;
+}
+
+message ListFunctionsVersionsRequest {
+ oneof id {
+ option (exactly_one) = true;
+ string folder_id = 1;
+ string function_id = 2;
+ };
+ int64 page_size = 3 [(value) = "0-1000"];
+ string page_token = 4 [(length) = "<=100"];
+ // supported fields for filter
+ // status
+ // created_at
+ // runtime
+ // entrypoint
+ // service_account_id
+ string filter = 5 [(length) = "<=1000"];
+}
+
+message ListFunctionsVersionsResponse {
+ repeated Version versions = 1;
+ string next_page_token = 2;
+}
+
+message ListFunctionOperationsRequest {
+ string function_id = 1 [(required) = true];
+ int64 page_size = 2 [(value) = "0-1000"];
+ string page_token = 3 [(length) = "<=100"];
+ // supported attributes:
+ // description
+ // created_at
+ // modified_at
+ // created_by
+ // done
+ string filter = 4 [(length) = "<=1000"];
+}
+
+message ListFunctionOperationsResponse {
+ repeated operation.Operation operations = 1;
+ string next_page_token = 2;
+}
+
+message CreateFunctionVersionRequest {
+ string function_id = 1 [(required) = true];
+ string runtime = 2 [(required) = true];
+ string description = 3;
+ string entrypoint = 4 [(required) = true];
+ Resources resources = 5 [(required) = true];
+ google.protobuf.Duration execution_timeout = 6 [(value) = "<=600s"];
+ string service_account_id = 7;
+
+ oneof package_source {
+ option (exactly_one) = true;
+
+ // user bucket + object
+ Package package = 9;
+
+ // zipped content (user sends zipped data)
+ bytes content = 10 [(length) = "<=52428800"];
+
+ // id of the version to be copied from
+ string version_id = 11;
+
+ // docker image, can only be used by Serverless Containers.
+ string docker_image = 23;
+ };
+
+ string builder = 13;
+ map<string, string> environment = 12 [(length) = "<=4096", (map_key).pattern = "[a-zA-Z][a-zA-Z0-9_]*", (sensitive) = true];
+ bool tmpfs = 14;
+ access.Subject service_account_user = 15;
+ map<string, string> named_service_accounts = 16;
+ repeated string tag = 17 [(pattern) = "[a-z][-_0-9a-z]*"];
+ int64 concurrency = 18;
+ Connectivity connectivity = 19;
+ DataDisk data_disk_spec = 20;
+ OwnerData owner_data = 21;
+ repeated Secret secrets = 22;
+}
+
+message CreateFunctionVersionMetadata {
+ string function_version_id = 1;
+}
+
+message SetFunctionTagRequest {
+ string function_version_id = 1 [(required) = true];
+ string tag = 2 [(pattern) = "[a-z][-_0-9a-z]*"];
+}
+
+message RemoveFunctionTagRequest {
+ string function_version_id = 1 [(required) = true];
+ string tag = 2 [(pattern) = "[a-z][-_0-9a-z]*"];
+}
+
+message SetFunctionTagMetadata {
+ string function_version_id = 1;
+}
+
+message RemoveFunctionTagMetadata {
+ string function_version_id = 1;
+}
+
+message ListFunctionTagHistoryRequest {
+ string function_id = 1 [(required) = true];
+ string tag = 2 [(pattern) = "[a-z][-_0-9a-z]*|[$]latest"];
+ int64 page_size = 3 [(value) = "0-1000"];
+ string page_token = 4 [(length) = "<=100"];
+ // supported attributes:
+ // effective_from
+ // effective_to
+ // function_version_id
+ string filter = 5 [(length) = "<=1000"];
+}
+
+message ListFunctionTagHistoryResponse {
+ message FunctionTagHistoryRecord {
+ string function_id = 1;
+ string function_version_id = 3;
+ string tag = 2;
+ google.protobuf.Timestamp effective_from = 4;
+ google.protobuf.Timestamp effective_to = 5;
+ }
+
+ repeated FunctionTagHistoryRecord function_tag_history_record = 1;
+ string next_page_token = 2;
+}
+
+message GetFolderStatsRequest {
+ string folder_id = 1 [(required) = true];
+}
+
+message FolderStats {
+ int64 function_count = 1;
+}
+
+message ListScalingPoliciesRequest {
+ string function_id = 1 [(required) = true];
+ int64 page_size = 2 [(value) = "0-1000"];
+ string page_token = 3 [(length) = "<=100"];
+ string filter = 4 [(length) = "<=1000"];
+}
+
+message ListScalingPoliciesResponse {
+ repeated ScalingPolicy scaling_policies = 1;
+ string next_page_token = 2;
+}
+
+message SetScalingPolicyRequest {
+ string function_id = 1 [(required) = true];
+ string tag = 2 [(required) = true, (pattern) = "[a-z][-_0-9a-z]*|[$]latest"];
+
+ // TODO:
+ // google.protobuf.FieldMask update_mask = 3;
+
+ // Minimum guaranteed provisioned instances count for all zones in total.
+ // Billed separately.
+ int64 provisioned_instances_count = 4 [(value) = "0-1000"];
+
+ // Upper limit for instance count in each zone.
+ // 0 means no limit.
+ int64 zone_instances_limit = 5 [(value) = "0-1000"];
+
+ // Upper limit of requests count in each zone.
+ // 0 means no limit.
+ int64 zone_requests_limit = 6 [(value) = "0-1000"];
+}
+
+message SetScalingPolicyMetadata {
+ string function_id = 1;
+}
+
+message RemoveScalingPolicyRequest {
+ string function_id = 1 [(required) = true];
+ string tag = 2 [(required) = true, (pattern) = "[a-z][-_0-9a-z]*|[$]latest"];
+}
+
+message RemoveScalingPolicyMetadata {
+ string function_id = 1;
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/alice.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/alice.proto
new file mode 100644
index 0000000000..013d3a6522
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/alice.proto
@@ -0,0 +1,38 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.serverless.functions.v1.inner;
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner;inner";
+
+service AliceIntegrationService {
+ rpc ListUserFunctions (ListUserFunctionsRequest) returns (ListUserFunctionsResponse);
+ rpc ValidateFunction (ValidateFunctionRequest) returns (ValidateFunctionResponse);
+}
+
+message FunctionMetadata {
+ string cloud_id = 1;
+ string cloud_name = 2;
+
+ string folder_id = 3;
+ string folder_name = 4;
+
+ string function_id = 5;
+ string function_name = 6;
+}
+
+message ListUserFunctionsRequest {
+ string session_id = 1;
+}
+
+message ListUserFunctionsResponse {
+ repeated FunctionMetadata functions = 1;
+}
+
+message ValidateFunctionRequest {
+ string session_id = 1;
+ string function_id = 2;
+}
+
+message ValidateFunctionResponse {
+ // empty struct, error will be reported on transport layer
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/common.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/common.proto
new file mode 100644
index 0000000000..933d3c915e
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/common.proto
@@ -0,0 +1,14 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.serverless.functions.v1.inner;
+
+import "yandex/cloud/priv/validation.proto";
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner;inner";
+option java_outer_classname = "PSFI";
+
+message ObjectStorageReference {
+ int64 size = 1 [(value) = ">0"];
+ string bucket_name = 2 [(required) = true];
+ string object_name = 3 [(required) = true];
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/control_service.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/control_service.proto
new file mode 100644
index 0000000000..bb80d28284
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/control_service.proto
@@ -0,0 +1,286 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.serverless.functions.v1.inner;
+
+import "google/protobuf/duration.proto";
+import "yandex/cloud/priv/serverless/functions/v1/function.proto";
+import "yandex/cloud/priv/serverless/functions/v1/inner/common.proto";
+import "yandex/cloud/api/operation.proto";
+import "yandex/cloud/priv/operation/operation.proto";
+import "yandex/cloud/priv/quota/quota.proto";
+import "yandex/cloud/priv/validation.proto";
+import "yandex/cloud/priv/sensitive.proto";
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner;inner";
+option java_outer_classname = "PSFCS";
+
+service ControlService {
+ rpc GetVersion (GetVersionRequest) returns (GetVersionResponse);
+ rpc CreateRuntimePackage (CreateRuntimePackageRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "CreateRuntimePackageMetadata"
+ response: "RuntimeBundle"
+ };
+ }
+
+ rpc UpdateRuntimePackage (UpdateRuntimePackageRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "UpdateRuntimePackageMetadata"
+ response: "RuntimeBundle"
+ };
+ }
+
+ rpc UpdateRuntimeVisibility (UpdateRuntimeVisibilityRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "UpdateRuntimeVisibilityMetadata"
+ response: "RuntimeBundle"
+ };
+ }
+
+ rpc GetRuntimePackage(GetRuntimePackageRequest) returns (RuntimeBundle);
+
+ rpc ListRuntimePackages(ListRuntimePackagesRequest) returns (ListRuntimePackagesResponse);
+
+ rpc GetConfig (ConfigRequest) returns (ConfigResponse) {
+ }
+
+ rpc CreateBuilder(CreateBuilderRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "CreateBuilderMetadata"
+ response: "FunctionBuilder"
+ };
+ }
+
+ rpc ListBuilders(ListBuildersRequest) returns (ListBuildersResponse);
+
+ rpc UpdateBuilder(UpdateBuilderRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "UpdateBuilderMetadata"
+ response: "FunctionBuilder"
+ };
+ }
+
+ rpc UpdateBuilderVisibility(UpdateBuilderVisibilityRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "UpdateBuilderVisibilityMetadata"
+ response: "FunctionBuilder"
+ };
+ }
+
+ rpc GetBuilder(GetBuilderRequest) returns (FunctionBuilder);
+
+ rpc GetQuota (quota.GetQuotaRequest) returns (quota.Quota);
+
+ rpc LocateFunctions(LocateFunctionsRequest) returns (LocateFunctionsResponse);
+
+ rpc ListVersionScalingPolicies(ListVersionScalingPoliciesRequest) returns (ListVersionScalingPoliciesResponse);
+
+}
+
+message CreateRuntimePackageRequest {
+ reserved 1;
+ string runtime = 2 [(pattern) = "[a-z][-a-z0-9]{1,61}[a-z0-9]"];
+ ObjectStorageReference image = 3 [(required) = true];
+ string default_builder = 4 [(required) = true];
+ Visibility visibility = 5;
+ int64 builder_memory = 6;
+ bool unbuffered_content = 7;
+ string language = 8;
+ string version = 9;
+ string stage = 10;
+ bool preload_enabled = 11;
+}
+
+message UpdateRuntimeVisibilityRequest {
+ string runtime = 1 [(pattern) = "[a-z][-a-z0-9]{1,61}[a-z0-9]"];
+ Visibility visibility = 2 [(required) = true];
+}
+
+message UpdateRuntimePackageRequest {
+ reserved 1;
+ string runtime = 2 [(pattern) = "[a-z][-a-z0-9]{1,61}[a-z0-9]"];
+ ObjectStorageReference image = 3 [(required) = true];
+ string default_builder = 4 [(required) = true];
+ int64 builder_memory = 5;
+ bool unbuffered_content = 6;
+ string language = 8;
+ string version = 9;
+ string stage = 10;
+ bool preload_enabled = 11;
+}
+
+
+message CreateRuntimePackageMetadata {
+ string runtime = 1 [(required) = true];
+}
+
+message UpdateRuntimePackageMetadata {
+ string runtime = 1 [(required) = true];
+}
+
+message UpdateRuntimeVisibilityMetadata {
+ string runtime = 1 [(required) = true];
+}
+
+message RuntimeBundle {
+ string runtime = 1;
+ ObjectStorageReference image = 2;
+ string default_builder = 4;
+ Visibility visibility = 5;
+ int64 builder_memory = 6;
+ bool unbuffered_content = 7;
+ string language = 8;
+ string version = 9;
+ string stage = 10;
+ bool preload_enabled = 11;
+}
+
+message GetRuntimePackageRequest {
+ string runtime = 1 [(pattern) = "[a-z][-a-z0-9]{1,61}[a-z0-9]"];
+}
+
+message GetVersionRequest {
+ string function_id = 1;
+ oneof select {
+ option (exactly_one) = true;
+ string function_version_id = 2;
+ string tag = 3;
+ }
+}
+
+message GetVersionResponse {
+ string function_id = 1;
+ string function_version_id = 2;
+ string entrypoint = 3;
+ Resources resources = 4;
+ google.protobuf.Duration execution_timeout = 5;
+ string service_account_id = 6;
+ ObjectStorageReference user_image = 8;
+ ObjectStorageReference runtime_image = 9;
+ string runtime = 20;
+ string log_group_id = 10;
+ string folder_id = 11;
+ string cloud_id = 12;
+ map<string, string> environment = 13 [(sensitive) = true];
+ bool tmpfs = 14;
+ map<string, string> named_service_accounts = 15;
+ int64 concurrency = 16;
+ bool unbuffered_content = 17;
+ Connectivity connectivity = 18;
+ DataDisk data_disk = 19;
+ OwnerData owner_data = 21;
+ repeated Secret secrets = 22;
+}
+
+message ConfigRequest {
+
+}
+
+message ConfigResponse {
+ string version = 1;
+ string config = 2;
+}
+
+message FunctionBuilder {
+ string runtime = 1;
+ string builder = 2;
+ ObjectStorageReference builder_runtime_image = 3;
+ Visibility visibility = 4;
+}
+
+enum Visibility {
+ VISIBILITY_UNSPECIFIED = 0;
+ PUBLIC = 1;
+ PRIVATE = 2;
+ SYSTEM = 3;
+}
+
+message DataDisk {
+ map<string, string> zone_disks = 1;
+}
+
+message CreateBuilderRequest {
+ string runtime = 1 [(required) = true];
+ string builder = 2 [(required) = true];
+ ObjectStorageReference builder_runtime_image = 3 [(required) = true];
+ Visibility visibility = 4;
+}
+
+message UpdateBuilderRequest {
+ string runtime = 1 [(required) = true];
+ string builder = 2 [(required) = true];
+ ObjectStorageReference builder_runtime_image = 3 [(required) = true];
+}
+
+message UpdateBuilderVisibilityRequest {
+ string runtime = 1 [(required) = true];
+ string builder = 2 [(required) = true];
+ Visibility visibility = 3 [(required) = true];
+}
+
+message CreateBuilderMetadata {
+ string runtime = 1;
+ string builder = 2;
+}
+
+message UpdateBuilderMetadata {
+ string runtime = 1;
+ string builder = 2;
+}
+
+message UpdateBuilderVisibilityMetadata {
+ string runtime = 1;
+ string builder = 2;
+}
+
+message GetBuilderRequest {
+ string runtime = 1;
+ string builder = 2;
+}
+
+message ListRuntimePackagesRequest {
+}
+
+message ListRuntimePackagesResponse {
+ repeated RuntimeBundle runtimes = 1;
+}
+
+message ListBuildersRequest {
+ string runtime = 1 [(required) = true];
+}
+
+message ListBuildersResponse {
+ repeated FunctionBuilder builders = 1;
+}
+
+message LocateFunctionsRequest {
+ repeated string function_ids = 1;
+}
+
+message FunctionLocation {
+ string function_id = 1;
+ string folder_id = 2;
+}
+
+message LocateFunctionsResponse {
+ repeated FunctionLocation locations = 1;
+}
+
+message ListVersionScalingPoliciesRequest {
+ int64 page_size = 1 [(value) = "0-1000"];
+ string page_token = 2 [(length) = "<=100"];
+ string filter = 3 [(length) = "<=1000"];
+}
+
+message ListVersionScalingPoliciesResponse {
+ repeated VersionScalingPolicy version_scaling_policies = 1;
+ string next_page_token = 2;
+
+ message VersionScalingPolicy {
+ string function_id = 1;
+ string function_version_id = 2;
+ int64 provisioned_instances_count = 3;
+ int64 zone_instances_limit = 4;
+ int64 zone_requests_limit = 5;
+ }
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/engine_service.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/engine_service.proto
new file mode 100644
index 0000000000..8e8e30091e
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/engine_service.proto
@@ -0,0 +1,416 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.serverless.functions.v1.inner;
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner;inner";
+
+import "google/protobuf/timestamp.proto";
+import "google/protobuf/duration.proto";
+import "google/protobuf/empty.proto";
+import "yandex/cloud/priv/serverless/functions/v1/function.proto";
+import "yandex/cloud/priv/sensitive.proto";
+
+service EngineService {
+ // On each GetStateRequest returns full state
+ // On each state change send state (might be full or delta)
+ // Used by Scheduler
+ rpc GetState (stream GetStateRequest) returns (stream EngineState);
+
+ // Synchronously spawn worker and return worker_id
+ // Used by Scheduler
+ rpc CreateWorker (CreateWorkerRequest) returns (CreateWorkerResponse);
+
+ // Synchronously terminate worker
+ // Used by Scheduler
+ rpc TerminateWorker (TerminateWorkerRequest) returns (TerminateWorkerResponse);
+
+ // Synchronously put job in the queue and wait for completion
+ // Used by Router
+ rpc Invoke (InvokeRequest) returns (InvokeResponse);
+
+ // Synchronously put job in the queue and wait for completion. Allows for big payloads.
+ // Used by Router.
+ rpc InvokeStreaming (stream InvokeStreamingRequest) returns (stream InvokeStreamingResponse);
+
+ // Synchronously update provisioned flag in workers state
+ rpc MarkProvisioned (MarkProvisionedRequest) returns (MarkProvisionedResponse);
+
+ // Download artifacts listed in request
+ // Used by Scheduler
+ rpc DownloadArtifacts(DownloadArtifactsRequest) returns (DownloadArtifactsResponse);
+
+ // Specifies which runtimes are latest
+ // Used by Scheduler
+ rpc SetLatestRuntimes(SetLatestRuntimesRequest) returns (SetLatestRuntimesResponse);
+
+ // Configures network interfaces of newly started engine.
+ // Used by Scheduler
+ rpc ConfigureNetwork(ConfigureNetworkRequest) returns (google.protobuf.Empty);
+}
+
+message GetStateRequest {
+}
+
+// TODO: replace with createWorkerSet (with version data + initial amount of workers[>=1]) and addWorkers (target amount of workers[>=1])
+
+message CreateWorkerRequest {
+ string worker_set_id = 1;
+ string function_id = 11;
+ string function_version_id = 12;
+ string log_group_id = 13; // logging v0, TODO: remove later
+ string log_stream_name = 14; // logging v0, TODO: remove later
+
+ string cloud_id = 16; // for network management & billing
+ string folder_id = 17; // for network management & billing
+
+ string subnet_id = 19; // for network management & billing, XXX: !!!differs from version to version!!!
+
+ string runtime = 20; // runtime name
+ StorageRef package_runtime = 2;
+
+ StorageRef package_code = 3;
+
+ int64 memory_limit_bytes = 4;
+ double cpu_limit_cores = 5; // 1.0 is 100% of 1 cpu core, TODO: replace with int: 1024 = 100% core
+ int64 concurrency = 10;
+ string entry_point = 6;
+ map<string, string> environment = 7 [(sensitive) = true];
+ map<string, string> labels = 8; // TODO: remove me
+ google.protobuf.Duration execution_timeout = 9;
+ bool tmpfs = 15;
+ NBSDiskSpec data_disk = 18;
+
+ InvokeRequest first_request = 21;
+ bool provisioned = 23;
+
+ OwnerData owner_data = 22;
+}
+
+message CreateWorkerResponse {
+ string worker_id = 1;
+}
+
+message TerminateWorkerRequest {
+ string worker_id = 1;
+ string worker_set_id = 2;
+}
+
+message TerminateWorkerResponse {
+}
+
+message MarkProvisionedRequest {
+ string worker_set_id = 1;
+
+ // workerIDs of workers that should be marked as provisioned
+ // (all others should become regular)
+ repeated string worker_ids = 2;
+}
+
+message MarkProvisionedResponse {
+
+}
+
+// TODO: keep in sync with InvokeStreamingRequest.Initial
+message InvokeRequest {
+ string worker_set_id = 1;
+ string request_id = 2;
+
+ google.protobuf.Duration timeout = 5;
+ bytes payload = 8;
+
+ map<string, string> iam_token_by_name = 9 [(sensitive) = true];
+
+ bool dummy = 10;
+}
+
+message InvokeResponse {
+ ErrorStatus status = 5;
+ bytes payload = 1;
+
+ // total time spent by worker (handle)
+ // it MUST be lower than overall request time
+ google.protobuf.Duration time_spent = 2;
+
+ // time spent in queue
+ google.protobuf.Duration queue_time_spent = 6;
+
+ // time spent in function/runtime init stage (part of `time_spent` time)
+ google.protobuf.Duration init_time_spent = 8;
+
+ // billed time (normally equal to time_spent, but could be lower in case of concurrency execution and/or provisioned worker)
+ // will be used in billing and reported in log
+ google.protobuf.Duration billed_duration = 10;
+
+ // provisioned worker was used
+ bool provisioned = 9;
+
+ int64 used_memory_bytes = 3;
+ int64 free_memory_bytes = 4;
+
+ string network_subnet = 13;
+ string network_iface = 11;
+ repeated string network_addr = 12;
+
+ enum ErrorStatus {
+ ERROR_STATUS_UNSPECIFIED = 0; // means no error
+ ERROR_STATUS_CLIENT_ERROR = 1; // both runtime init and execution error
+ ERROR_STATUS_EXECUTION_TIMEOUT_EXCEEDED = 2; // execution timeout (user code has already been started => never retry)
+ ERROR_STATUS_EXECUTION_CANCELLED = 3; // execution has been cancelled (user code has already been started => never retry)
+ ERROR_STATUS_UNDEFINED = 127; // undefined error
+ }
+}
+
+message InvokeStreamingRequest {
+ // TODO: keep in sync with InvokeRequest
+ message Initial {
+ string worker_set_id = 1;
+ string request_id = 2;
+ google.protobuf.Duration timeout = 3;
+ map<string, string> iam_token_by_name = 4 [(sensitive) = true];
+ bool dummy = 5;
+
+ map<string,string> metadata = 6;
+
+ bytes payload = 7;
+ }
+ message PayloadChunk {
+ bytes payload = 1;
+ }
+ oneof req {
+ Initial initial = 1;
+ PayloadChunk payload = 2;
+ }
+}
+
+message InvokeStreamingResponse {
+ message Initial {
+ InvokeResponse.ErrorStatus status = 5;
+ bytes payload = 1;
+
+ // time spent in queue
+ google.protobuf.Duration queue_time_spent = 6;
+
+ // time spent in function/runtime init stage (part of `time_spent` time)
+ google.protobuf.Duration init_time_spent = 8;
+
+ // provisioned worker was used
+ bool provisioned = 9;
+
+ string network_subnet = 13;
+ string network_iface = 11;
+ repeated string network_addr = 12;
+
+ map<string, string> metadata = 14;
+ }
+
+ message PayloadChunk {
+ bytes payload = 1;
+ }
+
+ message Final {
+ // total time spent by worker (handle)
+ // it MUST be lower than overall request time
+ google.protobuf.Duration time_spent = 2;
+
+ // billed time (normally equal to time_spent, but could be lower in case of concurrency execution and/or provisioned worker)
+ // will be used in billing and reported in log
+ google.protobuf.Duration billed_duration = 10;
+
+ int64 used_memory_bytes = 3;
+ int64 free_memory_bytes = 4;
+
+ map<string, string> metadata = 5;
+ }
+
+ oneof resp {
+ Initial initial = 1;
+ PayloadChunk payload = 2;
+ Final final = 3;
+ }
+}
+
+message DownloadArtifactsRequest {
+ repeated StorageRef artifacts = 1;
+}
+
+message DownloadArtifactsResponse {
+}
+
+message SetLatestRuntimesRequest {
+ repeated Runtime runtimes = 1;
+ message Runtime {
+ string name = 1;
+ StorageRef reference = 2;
+
+ bool flag_preload_enabled = 3;
+ }
+}
+
+message SetLatestRuntimesResponse {
+}
+
+message EngineState {
+ google.protobuf.Timestamp updated_at = 1;
+ google.protobuf.Timestamp previous_update_at = 21; // for diff - updated_at of previous full/diff state sent to channel
+ map<string, WorkerSet> worker_sets = 2; // Key: ID
+ map<string, Artifact> artifacts = 3; // Key: ID (unique) = contracts.StorageReference.String()
+ bool is_full_state = 4;
+
+ reserved 10; // removed
+ reserved 11; // removed
+ Resources resources = 19;
+
+ reserved 16; // removed
+ map<string, NetworkPoolState> subnet_pool_state = 18; // Key: subnetID, empty key means "common"
+ map<string, NetworkConfigState> subnet_config_state = 22; // Key: subnetID
+
+ // Amount of ready VMs in pool.
+ VMPoolState vm_pool_state = 17;
+ map<string, RuntimePoolState> runtime_pool_state = 20; // Key: runtime name
+
+ message WorkerSet {
+ string id = 1;
+ Status status = 2;
+
+ string function_id = 19;
+ string version_id = 20;
+ string cloud_id = 17;
+ string folder_id = 18;
+
+ int64 memory_limit_bytes = 3;
+ double cpu_limit_cores = 4;
+ int64 concurrency = 15;
+
+ int64 queue_length = 10;
+ int64 inflight = 13;
+
+ StorageRef runtime = 16;
+ google.protobuf.Duration avg_execution_time = 11;
+ google.protobuf.Duration execution_timeout = 14;
+
+ map<string, string> labels = 12; // TODO: remove me
+
+ map<string, Worker> workers = 30; // Key: ID
+
+ OwnerData owner_data = 21;
+
+ enum Status {
+ STATUS_UNSPECIFIED = 0;
+ CREATING = 1; // acquiring resources and going to create first worker
+ STARTED = 2; // at least one Worker is in >STARTED state
+ TERMINATING = 3; // there is no workers in <SERVING state
+ DELETED = 4; // WorkerSet should be removed from state
+ }
+ }
+
+ message Worker {
+ string id = 1;
+ Status status = 2;
+
+ int64 active_jobs = 16; // count of currently active jobs
+ int64 jobs_processed = 10; // total count of jobs processed in this worker
+ google.protobuf.Timestamp last_job_at = 11; // might be used for worker gc
+ google.protobuf.Timestamp spawned_at = 12; // might be used for worker gc
+ int64 restarts_count = 13;
+ int64 timeouts_count = 14;
+ int64 suspends_count = 15;
+
+ bool provisioned = 17;
+
+ enum Status {
+ STATUS_UNSPECIFIED = 0;
+ ACQUIRING = 1; // MicroVM are requested from MicroVMPool
+ STARTED = 2; // MicroVM was adopted from worker pool and adjusted for current spec
+ PREPARED = 3; // Worker executed runtime and initialize function
+ SERVING = 4; // runtime asked for the first job and ready to serve
+ SUSPENDED = 5; // worker suspended
+ TERMINATING = 6; // graceful shutdown, won't accept new job
+ DELETED = 7; // Worker should be removed from state
+ }
+ }
+
+ message Artifact {
+ Status status = 1;
+ StorageRef reference = 2;
+
+ enum Status {
+ STATUS_UNSPECIFIED = 0;
+ DOWNLOADING = 1;
+ DOWNLOADED = 2;
+ REMOVING = 3;
+ DELETED = 4; // artifact should be removed from state
+ }
+ }
+
+ message NetworkPoolState {
+ // Total amount of interfaces allocated to engine
+ int64 total = 1;
+ // Free interfaces: t=not attached to any user and ready to use
+ int64 free = 2;
+ // Failed interfaces: had error on attach/detach, not really safe to use right now, may be cleaned up later.
+ int64 failed = 3;
+ // Interfaces bound to user - traffic will be billed, but we are able to detach them at once.
+ int64 bound = 4;
+ // Interfaces in use: interfaces that are attached to microvm at the moment
+ int64 in_use = 5;
+ }
+
+ message NetworkConfigState {
+ message Addr {
+ string address = 1;
+ string subnet_cidr = 2;
+ }
+
+ string subnet_id = 1;
+ bool is_private = 2;
+ Addr ipv4 = 3;
+ Addr ipv6 = 4;
+ ConfigureNetworkRequest.HubConfig hub = 5;
+ int64 seed = 6;
+ }
+
+ message VMPoolState {
+ int64 size = 1;
+ }
+
+ message RuntimePoolState {
+ int64 size = 1;
+ StorageRef reference = 2;
+ }
+
+ message Resources {
+ int64 memory_bytes_total = 1;
+ int64 memory_bytes_used = 2;
+ double cpu_cores_total = 3;
+ double cpu_cores_used = 4;
+ }
+}
+
+message StorageRef {
+ string storage_bucket = 1;
+ string storage_object = 2;
+ int64 data_size = 3;
+}
+
+message NBSDiskSpec {
+ map<string, string> zone_disks = 1;
+}
+
+message ConfigureNetworkRequest {
+ message HubConfig {
+ message StaticRoute {
+ string destination_prefix = 1;
+ string next_hop_address = 2;
+ }
+ string allowlist_cidr = 1;
+ StaticRoute static_route = 2;
+ int64 interfaces_count = 3;
+ }
+ message Subnet {
+ string subnet_id = 1;
+ bool is_private = 2;
+ HubConfig hub = 3;
+ int64 seed = 4;
+ }
+
+ repeated Subnet subnets = 1;
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/owner_data.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/owner_data.proto
new file mode 100644
index 0000000000..ae2471fc8b
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/owner_data.proto
@@ -0,0 +1,22 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.serverless.functions.v1.inner;
+
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner;inner";
+option java_outer_classname = "PSCOD";
+
+
+message ContainerOwnerData {
+ string resource_type = 1;
+ string resource_id = 2;
+ string subresource_type = 3;
+ string subresource_id = 4;
+
+ string folder_id = 5;
+ string cloud_id = 6;
+
+ bool enable_logging = 7;
+ bool enable_billing = 8;
+ bool enable_metrics = 9;
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/package_service.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/package_service.proto
new file mode 100644
index 0000000000..0adbc56051
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/package_service.proto
@@ -0,0 +1,67 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.serverless.functions.v1.inner;
+
+import "google/protobuf/empty.proto";
+import "yandex/cloud/api/tools/options.proto";
+import "yandex/cloud/priv/serverless/functions/v1/inner/common.proto";
+import "yandex/cloud/priv/serverless/functions/v1/function.proto";
+import "yandex/cloud/priv/validation.proto";
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner;inner";
+option java_outer_classname = "PSFPS";
+
+// errors:
+// NOT_FOUND = bucket/object not found
+// INVALID_ARGUMENT = sha256 does not match
+// FAILED_PRECONDITION = cannot unzip user image
+// RESOURCE_EXHAUSTED = unzipped file required too much disk space
+// PERMISSION_DENIED = system account does not have permission to access source_bucket
+service PackageService {
+ rpc BuildPackage (BuildPackageRequest) returns (ObjectStorageReference) {
+ option (yandex.cloud.api.tools.method).lint_skip.contains_resource_name = true;
+ };
+ rpc PatchPackage(PatchPackageRequest) returns (ObjectStorageReference) {
+ option (yandex.cloud.api.tools.method).lint_skip.contains_resource_name = true;
+ };
+ rpc DeleteImage(DeleteImageRequest) returns (google.protobuf.Empty);
+
+ rpc BuildFromDockerImage(BuildPackageFromDockerImageRequest) returns (ObjectStorageReference);
+}
+
+message BuildPackageRequest {
+ string function_version_id = 1 [(required) = true];
+ Package source = 2 [(required) = true];
+ string output_path = 3 [(required) = true];
+}
+
+message PatchPackageRequest {
+ enum Action {
+ ACTION_UNSPECIFIED = 0;
+ PUT = 1;
+ DELETE = 2;
+ }
+
+ message File {
+ string path = 1 [(required) = true];
+ bytes content = 2 [(length) = "<=10485760"];
+ bool executable = 3;
+ Action action = 4;
+ }
+
+ string function_version_id = 1;
+ ObjectStorageReference origin = 2;
+ string output_path = 3 [(required) = true];
+ repeated File files = 4;
+}
+
+message DeleteImageRequest {
+ ObjectStorageReference image = 1 [(required) = true];
+}
+
+message BuildPackageFromDockerImageRequest {
+ string resource_id = 1 [(required) = true];
+ // image_url should contain image digest.
+ string image_url = 2 [(required) = true];
+ string output_path = 3 [(required) = true];
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/quota_service.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/quota_service.proto
new file mode 100644
index 0000000000..b272dabe40
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/quota_service.proto
@@ -0,0 +1,29 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.serverless.functions.v1.inner;
+
+import "google/protobuf/empty.proto";
+import "yandex/cloud/priv/quota/quota.proto";
+import "yandex/cloud/api/tools/options.proto";
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner;inner";
+option java_outer_classname = "PSFQS";
+
+service QuotaService {
+ rpc Get (quota.GetQuotaRequest) returns (quota.Quota);
+
+ rpc UpdateQuotaUsage(UpdateQuotaUsageRequest) returns (google.protobuf.Empty) {
+ option (yandex.cloud.api.tools.method).lint_skip.contains_resource_name = true;
+ };
+}
+
+message UpdateQuotaUsageRequest {
+ string zone = 1;
+ repeated QuotaUsage usages = 2;
+}
+
+message QuotaUsage {
+ string cloud_id = 1;
+ string name = 2;
+ int64 value = 3;
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/scheduler_service.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/scheduler_service.proto
new file mode 100644
index 0000000000..1121de9b32
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner/scheduler_service.proto
@@ -0,0 +1,43 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.serverless.functions.v1.inner;
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/inner;inner";
+
+service SchedulerService {
+ rpc GetWorker(GetWorkerRequest) returns (GetWorkerResponse);
+ rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse);
+ rpc EngineShutdown(EngineShutdownRequest) returns (EngineShutdownResponse);
+}
+
+message GetWorkerRequest {
+ string function_id = 1;
+ string function_version_id = 3;
+ repeated string banned_engines = 4;
+}
+
+message GetWorkerResponse {
+ string engine_address = 5;
+ string worker_set_id = 6;
+ string server_name = 7;
+ string http_address = 8;
+}
+
+message HeartbeatRequest {
+ int64 engine_port = 1;
+ string engine_uuid = 2;
+ string server_name = 3;
+ int64 http_port = 4;
+}
+
+message HeartbeatResponse {
+}
+
+message EngineShutdownRequest {
+ int64 engine_port = 1;
+ string engine_uuid = 2;
+ string server_name = 3;
+ int64 http_port = 4;
+}
+
+message EngineShutdownResponse {
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/operation_service.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/operation_service.proto
new file mode 100644
index 0000000000..9bec187ad9
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/operation_service.proto
@@ -0,0 +1,16 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.serverless.functions.v1;
+
+import "yandex/cloud/priv/operation/operation.proto";
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1;functions";
+option java_outer_classname = "PFOS";
+
+service OperationService {
+ rpc Get (GetOperationRequest) returns (operation.Operation);
+}
+
+message GetOperationRequest {
+ string operation_id = 1;
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/quota_service.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/quota_service.proto
new file mode 100644
index 0000000000..e2985c47bd
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/quota_service.proto
@@ -0,0 +1,35 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.serverless.functions.v1;
+
+import "google/protobuf/empty.proto";
+import "yandex/cloud/api/tools/options.proto";
+import "yandex/cloud/priv/quota/quota.proto";
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1;functions";
+option java_outer_classname = "PFQS";
+
+service QuotaService {
+
+ rpc Get (quota.GetQuotaRequest) returns (quota.Quota);
+
+ rpc UpdateMetric (quota.UpdateQuotaMetricRequest) returns (google.protobuf.Empty);
+
+ rpc GetDefault (quota.GetQuotaDefaultRequest) returns (quota.GetQuotaDefaultResponse);
+
+ rpc UpdateQuotaUsage(UpdateQuotaUsageRequest) returns (google.protobuf.Empty) {
+ option (yandex.cloud.api.tools.method).lint_skip.contains_resource_name = true;
+ };
+
+}
+
+message UpdateQuotaUsageRequest {
+ string zone = 1;
+ repeated QuotaUsage usages = 2;
+}
+
+message QuotaUsage {
+ string cloud_id = 1;
+ string name = 2;
+ int64 value = 3;
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/session.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/session.proto
new file mode 100644
index 0000000000..22cb6321df
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/session.proto
@@ -0,0 +1,82 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.serverless.functions.v1;
+
+import "google/protobuf/duration.proto";
+import "google/protobuf/timestamp.proto";
+import "yandex/cloud/priv/validation.proto";
+import "yandex/cloud/priv/serverless/functions/v1/function.proto";
+
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1;functions";
+option java_outer_classname = "PSS";
+
+message Session {
+ string id = 1;
+ string folder_id = 2;
+ string function_id = 3;
+ google.protobuf.Timestamp created_at = 4;
+ string name = 5;
+ string description = 6;
+ map<string, string> labels = 7;
+ string author = 8;
+ VersionProperties version_properties = 9;
+ repeated FileAction file_actions = 10;
+}
+
+message VersionProperties {
+ string runtime = 1 [(required) = true];
+ string entrypoint = 2 [(required) = true];
+ Resources resources = 3 [(required) = true];
+ google.protobuf.Duration execution_timeout = 4 [(value) = "<=600s"];
+ string service_account_id = 5;
+ map<string, string> environment = 7 [(size) = "<=64", (length) = "<=4096", (map_key).pattern = "[a-zA-Z][a-zA-Z0-9_]*"];
+ string builder = 8;
+ bool tmpfs = 9;
+ repeated string tags = 10 [(pattern) = "[a-z][-_0-9a-z]*"];
+ int64 concurrency = 11;
+ Connectivity connectivity = 12;
+ DataDisk data_disk = 13;
+}
+
+enum FileType {
+ FILE_TYPE_UNSPECIFIED = 0;
+ REGULAR = 1;
+ DIRECTORY = 2;
+}
+
+message FileAction {
+ enum Action {
+ ACTION_UNSPECIFIED = 0;
+ ADD = 1;
+ MODIFY = 2;
+ DELETE = 3;
+ }
+ string path = 1;
+ FileType type = 2;
+ Action action = 3;
+}
+
+enum FileStatus {
+ FILE_STATUS_UNSPECIFIED = 0;
+ ADDED = 1;
+ MODIFIED = 2;
+ DELETED = 3;
+ UNMODIFIED = 4;
+}
+
+message SessionFile {
+ string path = 1;
+ bytes content = 2;
+ bool executable = 3;
+ FileType type = 4;
+ FileStatus status = 5;
+}
+
+message SessionFileInfo {
+ string path = 1;
+ int64 size = 2;
+ bool executable = 3;
+ FileType type = 4;
+ FileStatus status = 5;
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/session_service.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/session_service.proto
new file mode 100644
index 0000000000..596cb00141
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/session_service.proto
@@ -0,0 +1,266 @@
+syntax = "proto3";
+
+package yandex.cloud.priv.serverless.functions.v1;
+
+import "google/protobuf/field_mask.proto";
+import "google/protobuf/duration.proto";
+import "yandex/cloud/api/operation.proto";
+import "yandex/cloud/priv/serverless/functions/v1/session.proto";
+import "yandex/cloud/priv/serverless/functions/v1/function.proto";
+import "yandex/cloud/priv/operation/operation.proto";
+import "yandex/cloud/priv/validation.proto";
+
+
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1;functions";
+option java_outer_classname = "PSSS";
+
+service SessionService {
+ rpc Create (CreateSessionRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "CreateSessionMetadata"
+ response: "Session"
+ };
+ };
+
+ rpc Update (UpdateSessionRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "UpdateSessionMetadata"
+ response: "Session"
+ };
+ };
+
+ rpc Get (GetSessionRequest) returns (Session);
+
+ rpc Delete (DeleteSessionRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "DeleteSessionMetadata"
+ response: "google.protobuf.Empty"
+ };
+ };
+
+ rpc List (ListSessionsRequest) returns (ListSessionsResponse);
+
+ rpc Deploy (DeploySessionRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "DeploySessionMetadata"
+ response: "Version"
+ };
+ };
+
+ rpc ListFiles(ListFilesRequest) returns (ListFilesResponse);
+
+ rpc GetFile(GetFileRequest) returns (SessionFile);
+
+ rpc PutFile(PutFileRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "SessionPutFileMetadata"
+ response: "FileAction"
+ };
+ }
+
+ rpc AddFile(AddFileRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "SessionAddFileMetadata"
+ response: "FileAction"
+ };
+ }
+
+ // if file was modified, reverts it to original version; if deleted, restores; if added, removes and returns DELETE
+ rpc RevertFile(RevertFileRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "SessionRevertFileMetadata"
+ response: "FileAction"
+ };
+ }
+
+ rpc DeleteFile(DeleteFileRequest) returns (operation.Operation) {
+ option (yandex.cloud.api.operation) = {
+ metadata: "SessionDeleteFileMetadata"
+ response: "FileAction"
+ };
+ }
+}
+
+message CreateSessionRequest {
+ string function_id = 1 [(required) = true];
+ oneof initializer {
+ option (exactly_one) = true;
+ string function_version_id = 2;
+ EmptySession empty_session = 7;
+ FunctionVersionTemplate function_template = 9;
+ } ;
+ string name = 4;
+ string description = 5;
+ map<string, string> labels = 6;
+
+ enum EmptySession {
+ EMPTY_SESSION_UNSPECIFIED = 0;
+ FROM_SCRATCH = 1;
+ }
+}
+
+message FunctionVersionTemplate {
+ string runtime = 1;
+}
+
+message UpdateSessionRequest {
+ string session_id = 1 [(required) = true];
+ google.protobuf.FieldMask update_mask = 2;
+
+ string name = 3;
+ string description = 4;
+ map<string, string> labels = 5;
+
+ string runtime = 6 [(required) = true];
+ string entrypoint = 7 [(required) = true];
+ Resources resources = 8 [(required) = true];
+ google.protobuf.Duration execution_timeout = 9 [(value) = "<=600s"];
+ string service_account_id = 10;
+ map<string, string> environment = 12 [(size) = "<=64", (length) = "<=4096", (map_key).pattern = "[a-zA-Z][a-zA-Z0-9_]*"];
+ string builder = 13;
+ bool tmpfs = 14;
+ repeated string tag = 15 [(pattern) = "[a-z][-_0-9a-z]*"];
+ int64 concurrency = 16;
+ Connectivity connectivity = 17;
+ DataDisk data_disk = 18;
+}
+
+
+message CreateSessionMetadata {
+ string session_id = 1;
+}
+
+message UpdateSessionMetadata {
+ string session_id = 1;
+}
+
+message GetSessionRequest {
+ string session_id = 1 [(required) = true];
+}
+
+message DeleteSessionRequest {
+ string session_id = 1;
+}
+
+message DeleteSessionMetadata {
+ string session_id = 1;
+}
+
+message SessionPutFileMetadata {
+ string session_id = 1;
+ string path = 2;
+}
+
+message SessionAddFileMetadata {
+ string session_id = 1;
+ string path = 2;
+}
+
+message SessionRevertFileMetadata {
+ string session_id = 1;
+ string path = 2;
+}
+
+message SessionDeleteFileMetadata {
+ string session_id = 1;
+ string path = 2;
+}
+
+message ListSessionsRequest {
+ oneof id {
+ option (exactly_one) = true;
+ string folder_id = 1;
+ string function_id = 2;
+ } ;
+ int64 page_size = 3;
+ string page_token = 4;
+ // supported fields for filter:
+ // name
+ // created_at
+ // function_version_id
+ // author
+ string filter = 5;
+}
+
+message ListSessionsResponse {
+ repeated Session sessions = 1;
+ string next_page_token = 2;
+}
+
+message DeploySessionRequest {
+ string session_id = 1 [(required) = true];
+ oneof source {
+ option (exactly_one) = true;
+
+ Package package = 13;
+
+ // zipped content (user sends zipped data)
+ bytes content = 14 [(length) = "<=52428800"];
+
+ bool session = 15;
+
+ }
+ google.protobuf.FieldMask update_mask = 2;
+
+ string name = 3;
+ string description = 4;
+ map<string, string> labels = 5;
+
+ string runtime = 6 [(required) = true];
+ string entrypoint = 7 [(required) = true];
+ Resources resources = 8 [(required) = true];
+ google.protobuf.Duration execution_timeout = 9 [(value) = "<=600s"];
+ string service_account_id = 10;
+ map<string, string> environment = 12 [(size) = "<=64", (length) = "<=4096", (map_key).pattern = "[a-zA-Z][a-zA-Z0-9_]*"];
+ string builder = 16;
+ bool tmpfs = 17;
+ repeated string tag = 18 [(pattern) = "[a-z][-_0-9a-z]*"];
+ int64 concurrency = 19;
+ Connectivity connectivity = 20;
+ DataDisk data_disk = 21;
+}
+
+message DeploySessionMetadata {
+ string session_id = 1 [(required) = true];
+ string function_version_id = 2 [(required) = true];
+}
+
+message ListFilesRequest {
+ string session_id = 1 [(required) = true];
+ string prefix = 2;
+}
+
+message ListFilesResponse {
+ repeated SessionFileInfo files = 1;
+}
+
+message GetFileRequest {
+ string session_id = 1 [(required) = true];
+ string path = 2 [(required) = true];
+ bool original = 3; // if set, returns original version of file or NOT_FOUND if file created in this session
+}
+
+message PutFileRequest {
+ string session_id = 1 [(required) = true];
+ string path = 2 [(required) = true, (pattern) = "(/[-._A-Za-z0-9]{1,61})+"];
+ bytes content = 3 [(length) = "<=10485760"];
+ bool executable = 4;
+}
+
+message AddFileRequest {
+ string session_id = 1 [(required) = true];
+ string path = 2 [(required) = true, (pattern) = "(/[-._A-Za-z0-9]{1,61})+"];
+ FileType type = 3;
+ bytes content = 4 [(length) = "<=10485760"];
+ bool executable = 5;
+}
+
+message DeleteFileRequest {
+ string session_id = 1 [(required) = true];
+ string path = 2 [(required) = true];
+}
+
+message RevertFileRequest {
+ string session_id = 1 [(required) = true];
+ string path = 2 [(required) = true];
+}
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/services.yaml b/cloud/bitbucket/private-api/yandex/cloud/priv/services.yaml
new file mode 100644
index 0000000000..3ef399cba7
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/services.yaml
@@ -0,0 +1,173 @@
+# one of the following https://cloud.yandex.ru/services#_all
+services:
+ dwh:
+ name: Yandex Cloud DWH (Internal)
+ description: Облачный DWH
+ resource-manager:
+ name: Yandex Resource Manager
+ description: Управление ресурсами в каталогах и облаках
+ storage:
+ name: Yandex Object Storage
+ description: Масштабируемое хранилище данных
+ aliases: [s3]
+ ai:
+ name: Yandex SpeechKit, Yandex Translate, Yandex Vision
+ description: Комплекс технологий распознавания и синтеза речи, машинный перевод, анализ изображений
+ aliases: [cloudai]
+ certificate-manager:
+ name: Yandex Certificate Manager
+ description: Управление TLS-сертификатами
+ cdn:
+ name: Yandex Cloud CDN
+ description: Сервис CDN
+ compute:
+ name: Yandex Compute Cloud
+ description: Виртуальные машины и диски
+ container-registry:
+ name: Yandex Container Registry
+ description: Управление Docker-образами
+ datalens:
+ name: Yandex DataLens
+ description: Визуализация и анализ данных
+ datasphere:
+ name: Yandex DataSphere
+ description: Платформа для ML-разработчиков
+ dns:
+ name: Yandex Cloud DNS
+ description: ДНС
+ iam:
+ name: Yandex Identity and Access Management
+ description: Идентификация и контроль доступа к облачным ресурсам
+ iot:
+ name: Yandex IoT Core
+ description: Решения для интернета вещей
+ managed-kubernetes:
+ name: Yandex Managed Service for Kubernetes
+ description: Управление кластерами Kubernetes
+ aliases: [k8s]
+ kms:
+ name: Yandex Key Management Service
+ description: Управление ключами шифрования
+ ylb:
+ name: Yandex Load Balancer
+ description: Сетевые балансировщики нагрузки
+ aliases: [load-balancer]
+ mdb:
+ name: Yandex Managed Data Bases
+ description: Управление базами данных
+ instance-group:
+ name: Yandex Instance Groups
+ description: Группы виртуальных машин
+ monitoring:
+ name: Yandex Monitoring
+ description: Сбор и визуализация метрик
+ serverless:
+ name: Yandex Cloud Functions
+ description: Запуск вашего кода в виде функции
+ api-gateway:
+ name: Yandex API Gateway
+ description: Cервис для управления API-шлюзами
+ vpc:
+ name: Yandex Virtual Private Cloud
+ description: Управление сетями в облаке
+ cic:
+ name: Yandex Cloud Interconnect
+ description: Связность между виртуальными сетями и on-premise сетями
+ ydb:
+ name: Yandex Database
+ description: Распределённая отказоустойчивая NewSQL СУБД
+ yds:
+ name: Yandex Data Streams
+ description: Отказоустойчивый сервис для передачи потоков данных
+ ymq:
+ name: Yandex Message Queue
+ description: Очереди для обмена сообщениями между приложениями
+ marketplace:
+ name: Yandex Cloud Marketplace
+ description: ''
+ alb:
+ name: Load Balancer API
+ description: ''
+ oauth:
+ name: Yandex Cloud OAuth 2.0 & OpenID Connect server
+ description: ''
+ billing:
+ name: Billing (internal)
+ description: ''
+ support:
+ name: Support (internal)
+ description: ''
+ yq:
+ name: Yandex Query
+ description: Сервис безсерверной аналитики
+ data-transfer:
+ name: Data Transfer
+ description: Сервис без серверного трансфера данных
+ dataproc:
+ name: Data Proc
+ description: Управление кластерами Apache Hadoop и Apache Spark
+ organization-manager:
+ name: Organization Manager
+ description: Управление Организациями
+ vulnerability-scanner:
+ name: Vulnerability Scanner (internal)
+ description: Сервис сканирования образов на уязвимости
+ lockbox:
+ name: Yandex Lockbox
+ description: Управление секретами
+ managed-kafka:
+ name: Yandex Managed Service for Apache Kafka
+ description: Управление кластерами Apache Kafka
+ managed-elasticsearch:
+ name: Yandex Managed Service for Elasticsearch
+ description: Управление кластерами Elasticsearch
+ managed-sqlserver:
+ name: Yandex Managed Service for Microsoft SQL Server
+ description: Управление кластерами Microsoft SQL Server
+ logs:
+ name: Yandex Cloud Logs
+ description: Запись, хранение, чтение и настройка логов
+ logging:
+ name: Yandex Cloud Logging
+ description: Запись, хранение, чтение и настройка логов
+ audit-trails:
+ name: Yandex Audit Trails
+ description: Сервис аудитных логов
+ bastion:
+ name: Bastion (internal)
+ description: Сервис доступа по ssh
+ loadtesting:
+ name: Loadtesting
+ description: Сервис нагрузочного тестирования
+ vdi:
+ name: Virtual Desktop Infrastructure
+ description: Виртуальные рабочие места
+ uk8s:
+ name: Underlay K8S
+ description: Kubernetes для железных хостов
+ managed-gitlab:
+ name: Yandex Managed Service for Gitlab
+ description: Сервис управления Git-репозиториями
+ aliases: [gitlab]
+ quota-manager:
+ name: Quota Manager
+ description: Сервис просмотра квот и управление запросами на изменение квот
+ cloudsearch:
+ name: YC.CloudSearch
+ description: Сервис поиска по облакам
+ cloud-beaver:
+ name: CloudBeaver
+ description: Управление базами данных через web-интерфейс
+ smart-captcha:
+ name: Yandex SmartCaptcha
+ description: Сервис для встраивания капчи
+
+#DoubleCloud services
+ dcnetwork:
+ name: DoubleCloud Network Service
+ description: Управление сетями в DoubleCloud
+
+#Backoffice
+ backoffice:
+ name: YC.Backoffice
+ description: Внутренняя админка
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/stages.yaml b/cloud/bitbucket/private-api/yandex/cloud/priv/stages.yaml
new file mode 100644
index 0000000000..c54ac60a30
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/stages.yaml
@@ -0,0 +1,170 @@
+stages:
+ # Internal
+ - GA
+ - TEST_ALPHA # https://st.yandex-team.ru/CLOUD-36203
+
+ # Resource reaper flags https://st.yandex-team.ru/CLOUD-42619
+ - REAPER_NO_DELAY_FLAG
+ - REAPER_WHITELIST_FLAG
+
+ # MDB feature flags
+ - MDB_ALLOW_DECOMMISSIONED_ZONE_USE
+ - MDB_CLICKHOUSE_FAST_OPS
+ - MDB_CLICKHOUSE_SHARDING
+ - MDB_CLICKHOUSE_UNLIMITED_SHARD_COUNT
+ - MDB_CLICKHOUSE_UPGRADE
+ - MDB_CLICKHOUSE_CLOUD_STORAGE
+ - MDB_CLICKHOUSE_CLOUD_STORAGE_HA
+ - MDB_CLICKHOUSE_KEEPER
+ - MDB_CLICKHOUSE_SQL_MANAGEMENT
+ - MDB_CLICKHOUSE_TESTING_VERSIONS
+ - MDB_DATAPROC_INSTANCE_GROUPS
+ - MDB_DATAPROC_MANAGER
+ - MDB_DATAPROC_AUTOSCALING
+ - MDB_DATAPROC_ALLOW_DEPRECATED_VERSIONS
+ - MDB_HADOOP_ALPHA
+ - MDB_HADOOP_GPU
+ - MDB_LOCAL_DISK_RESIZE
+ - MDB_MONGODB_40
+ - MDB_MONGODB_4_2
+ - MDB_MONGODB_4_2_RS_UPGRADE
+ - MDB_MONGODB_4_2_SHARDED_UPGRADE
+ - MDB_MONGODB_EXTENDEDS
+ - MDB_MONGODB_FAST_OPS
+ - MDB_MONGODB_UNLIMITED_SHARD_COUNT
+ - MDB_MYSQL_80
+ - MDB_MYSQL_FAST_OPS
+ - MDB_NETWORK_DISK_NO_STOP_RESIZE
+ - MDB_NETWORK_DISK_TRUNCATE
+ - MDB_POSTGRESQL_10_1C
+ - MDB_POSTGRESQL_11
+ - MDB_POSTGRESQL_11_1C
+ - MDB_POSTGRESQL_12_1C
+ - MDB_POSTGRESQL_13
+ - MDB_POSTGRESQL_FAST_OPS
+ - MDB_GREENPLUM_CLUSTER
+ - MDB_REDIS
+ - MDB_REDIS_FAST_OPS
+ - MDB_REDIS_SHARDING
+ - MDB_KAFKA_CLUSTER
+ - MDB_KAFKA_CONNECT
+ - MDB_SQLSERVER_CLUSTER
+ - MDB_SQLSERVER_ALLOW_DEV
+ - MDB_SQLSERVER_ALLOW_17_19
+ - MDB_ELASTICSEARCH_CLUSTER
+ - MDB_ELASTICSEARCH_ALLOW_UNLIMITED_HOSTS
+ - MDB_DATAPROC_UI_PROXY
+ - MDB_MONGODB_RS_PITR
+ - MDB_ALLOW_NETWORK_SSD_NONREPLICATED
+ - MDB_DATAPROC_IMAGE_1_3
+ - MDB_MONGODB_INFRA_CFG
+ - MDB_MONGODB_4_4
+ - MDB_MONGODB_4_4_RS_UPGRADE
+ - MDB_MONGODB_4_4_SHARDED_UPGRADE
+ - MDB_MONGODB_SHARDED_PITR
+ - MDB_MONGODB_BACKUP_SERVICE
+ - MDB_FORCE_UNSAFE_RESIZE
+ - MDB_MONGODB_RESTORE_WITHOUT_REPLAY
+ - MDB_FLAVOR_80_512
+ - MDB_DATAPROC_IMAGE_2_0 # https://st.yandex-team.ru/MDB-8214
+ - MDB_MONGODB_ALLOW_DEPRECATED_VERSIONS
+ - MDB_MONGODB_PERF_DIAG
+ - MDB_V3GEN # https://st.yandex-team.ru/MDB-12883
+ - MDB_SQLSERVER_TWO_NODE_CLUSTER # https://st.yandex-team.ru/MDB-13389
+ - MDB_DEDICATED_HOSTS # https://st.yandex-team.ru/CLOUDFRONT-9054
+ - MDB_MONGODB_ENTERPRISE # https://st.yandex-team.ru/MDB-16140
+
+ # Other services feature flags
+ - KMS_STRONG_ENCRYPTION # https://st.yandex-team.ru/CLOUD-34154
+ - KMS_HSM_KEYS # https://st.yandex-team.ru/CLOUD-44371
+ - SOFTWARE_ACCELERATED_NETWORK_ALPHA # https://st.yandex-team.ru/CLOUDFRONT-2752
+ - VPC_DISABLE_ROUTE_TABLES_SUBNETS_CHECK # https://st.yandex-team.ru/CLOUD-30129
+ - STORAGE_ENABLE_ENCRYPTION # https://st.yandex-team.ru/MDS-11418
+ - STORAGE_ENABLE_SELECT # https://st.yandex-team.ru/MDS-13861
+ - CDN_ENABLE_ACCESS # https://st.yandex-team.ru/CLOUD-63401
+ - DATASPHERE_CUSTOM_LM_LEARNING # https://st.yandex-team.ru/CLOUD-52048
+ - DATA_TRANSFER_LOGBROKER
+ - DATA_TRANSFER_LOGFELLER
+ - DATA_TRANSFER_MONGODB
+ - DATA_TRANSFER_CLICKHOUSE
+ - DATA_TRANSFER_YDB
+ - DATA_TRANSFER_YDS # https://st.yandex-team.ru/TM-1460
+ - DATA_TRANSFER_KAFKA # https://st.yandex-team.ru/TM-2041
+ - DATA_TRANSFER_OBJECT_STORAGE # https://st.yandex-team.ru/TM-1747
+ - DATA_TRANSFER_ORACLE # https://st.yandex-team.ru/TM-643
+ - DATA_TRANSFER_POSTGRESQL_TO_YDB #https://st.yandex-team.ru/TM-2477
+ - DATA_TRANSFER_MYSQL_TO_YDB #https://st.yandex-team.ru/TM-2477
+ - DATA_TRANSFER_POSTGRESQL_TO_OBJECT_STORAGE #https://st.yandex-team.ru/TM-2477
+ - DATA_TRANSFER_MYSQL_TO_OBJECT_STORAGE #https://st.yandex-team.ru/TM-2477
+ - DATA_TRANSFER_MONGO_TO_OBJECT_STORAGE #https://st.yandex-team.ru/TM-2477
+ - DATA_TRANSFER_ORACLE_TO_POSTGRESQL #https://st.yandex-team.ru/TM-2477
+ - DATA_TRANSFER_ORACLE_TO_CLICKHOUSE #https://st.yandex-team.ru/TM-2477
+ - DATA_TRANSFER_YC_FROM_LOGBROKER #https://st.yandex-team.ru/TM-2563
+ - DATA_TRANSFER_YC_TO_LOGBROKER #https://st.yandex-team.ru/TM-2563
+ - DATA_TRANSFER_AIRBYTE #https://st.yandex-team.ru/TM-2899
+ - DATASPHERE_GENERAL_NIRVANA_GRAPHS # https://st.yandex-team.ru/CLOUD-62288
+ - DATASPHERE_CELL_DEPLOYMENT
+ - IAM_FOLDER_SAML_FEDERATIONS # iam SAML-federations in folder https://st.yandex-team.ru/CLOUD-69157
+ - IAM_ACCESS_KEY_PREFIX # https://st.yandex-team.ru/CLOUD-80368
+ - SERVERLESS_FUNCTIONS_PROVISION_ALPHA # https://st.yandex-team.ru/CLOUD-71805
+ - LOADTESTING_PREVIEW_ALPHA # https://st.yandex-team.ru/CLOUDLOAD-77
+ - DATASPHERE_TAAS # https://st.yandex-team.ru/CLOUD-80447
+ - DATASPHERE_IDE_ON_SERVANT # https://st.yandex-team.ru/CLOUD-85578
+ - DATASPHERE_DISK_VERSIONING # https://st.yandex-team.ru/CLOUD-93160
+ - TRIGGERS_CLOUD_LOGS_ALPHA # https://st.yandex-team.ru/CLOUD-80291
+ - TRIGGERS_MAIL_ALPHA # https://st.yandex-team.ru/CLOUD-95233
+ - SMART_CAPTCHA_ALPHA # https://st.yandex-team.ru/CAPTCHA-2599
+ - SERVERLESS_FUNCTIONS_SECRETS_ALPHA # https://st.yandex-team.ru/CLOUD-52449
+
+ # Services in development
+ - APIGW_ALPHA # https://st.yandex-team.ru/CLOUD-31754
+ - SERVERLESS_VPC # https://st.yandex-team.ru/CLOUD-40827
+ - CERTIFICATE_MANAGER_ALPHA # https://st.yandex-team.ru/CLOUD-35187
+ - CUSTOM_FQDN_INSTANCES_ALPHA # https://st.yandex-team.ru/CLOUD-15718
+ - EGRESS_NAT_ALPHA # https://st.yandex-team.ru/CLOUD-35281
+ - CIC_ALPHA # https://st.yandex-team.ru/CLOUD-74655
+ - KMS_ALPHA # https://st.yandex-team.ru/CLOUD-26559
+ - ML_PLATFORM_ALPHA # https://st.yandex-team.ru/CLOUD-35731
+ - MULTI_INTERFACE_INSTANCES_ALPHA # https://st.yandex-team.ru/CLOUD-15718
+ - UDP_LISTENER_YLB_ALPHA # https://st.yandex-team.ru/CLOUD-34630
+ - YDB_ALPHA # https://st.yandex-team.ru/CLOUD-24439
+ - COMPUTE_OSLOGIN_ALPHA # https://st.yandex-team.ru/CLOUD-21127
+ - DATA_TRANSFER_ALPHA #https://st.yandex-team.ru/CLOUD-40128
+ - DNS_ALPHA #https://st.yandex-team.ru/CLOUD-42207
+ - MDBPROXY_ALPHA #https://st.yandex-team.ru/CLOUD-38110
+ - IMAGE_SCANNER_ALPHA #https://st.yandex-team.ru/CLOUD-34754
+ - LOCKBOX_ALPHA #https://st.yandex-team.ru/CLOUD-46437
+ - ALB_ALPHA #https://st.yandex-team.ru/CLOUD-58061
+ - LOGGING_ALPHA # https://st.yandex-team.ru/CLOUD-62388
+ - LOGS_ALPHA # deprecated, use LOGGING_ALPHA
+ - AUDIT_TRAILS_ALPHA # https://st.yandex-team.ru/CLOUD-51927
+ - RESOURCEMANAGER_DELETE_ALPHA # https://st.yandex-team.ru/CLOUD-63858
+ - DATA_STREAMS_ALPHA # https://st.yandex-team.ru/CLOUD-68113
+ - SERVERLESS_CONTAINERS_ALPHA # https://st.yandex-team.ru/CLOUD-72622
+ - SERVERLESS_CONTAINERS_PROVISION_ALPHA # https://st.yandex-team.ru/CLOUD-85491
+ - K8S_MARKETPLACE_ALPHA #https://st.yandex-team.ru/CLOUD-72635
+ - K8S_MARKETPLACE_FRONT_ALPHA # https://st.yandex-team.ru/CLOUD-84678
+ - VDI_ALPHA #https://st.yandex-team.ru/CLOUDBIZ-5195
+ - MANAGED_GITLAB_ALPHA # https://st.yandex-team.ru/CLOUD-71805
+ - CLOUD_BEAVER_ALPHA # https://st.yandex-team.ru/CLOUD-87921
+
+ # VPC
+ - INTERNAL_YLB_ALPHA # https://st.yandex-team.ru/CLOUD-18755
+ - VPC_SG_ALPHA # https://st.yandex-team.ru/CLOUD-35341
+ - VPC_IPV6_ALPHA # https://st.yandex-team.ru/CLOUD-40113
+ - VPC_YANDEX_SERVICES # https://st.yandex-team.ru/CLOUD-62110
+
+ # Marketplace
+ - DISABLE_PLACEMENT_HINT_WINDOWS_DC # https://st.yandex-team.ru/CLOUD-82570
+ - DISABLE_PLACEMENT_HINT_WINDOWS_DC_SQL_ENTERPRISE # https://st.yandex-team.ru/CLOUD-82570
+ - YAGA_MARKETPLACE_ALPHA # https://st.yandex-team.ru/CLOUD-85253
+ - MARKETPLACE_MONGODB_ENTERPRISE # https://st.yandex-team.ru/CLOUD-80323
+
+ # Yandex Query
+ - YANDEX_QUERY_ALPHA # https://st.yandex-team.ru/CLOUD-79231
+ - YANDEX_QUERY_CONNECTION_CH
+ - YANDEX_QUERY_CONNECTION_YDB
+
+ # Outdated, don't use these (Stages CAN'T BE REMOVED)
+ - VPC_DHCP_OPTIONS_ALPHA
+
diff --git a/cloud/bitbucket/private-api/yandex/cloud/priv/validation.proto b/cloud/bitbucket/private-api/yandex/cloud/priv/validation.proto
new file mode 100644
index 0000000000..daec144396
--- /dev/null
+++ b/cloud/bitbucket/private-api/yandex/cloud/priv/validation.proto
@@ -0,0 +1,29 @@
+syntax = "proto3";
+
+package yandex.cloud.priv;
+
+import "google/protobuf/descriptor.proto";
+
+// See yandex/cloud/priv/example/v1alpha/validation_example.proto for usage examples.
+option go_package = "a.yandex-team.ru/cloud/bitbucket/private-api/yandex/cloud/priv;cloud";
+
+extend google.protobuf.OneofOptions {
+ bool exactly_one = 100400;
+}
+
+extend google.protobuf.FieldOptions {
+ bool required = 100501;
+ string pattern = 100502;
+ string value = 100503;
+ string size = 100504;
+ string length = 100505;
+ bool unique = 100506;
+ MapKeySpec map_key = 100510;
+ string bytes = 100511;
+}
+
+message MapKeySpec {
+ string value = 1;
+ string pattern = 2;
+ string length = 3;
+}
diff --git a/contrib/libs/googleapis-common-protos/.yandex_meta/devtools.copyrights.report b/contrib/libs/googleapis-common-protos/.yandex_meta/devtools.copyrights.report
new file mode 100644
index 0000000000..8b7f8626d2
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/.yandex_meta/devtools.copyrights.report
@@ -0,0 +1,192 @@
+# File format ($ symbol means the beginning of a line):
+#
+# $ # this message
+# $ # =======================
+# $ # comments (all commentaries should starts with some number of spaces and # symbol)
+# ${action} {license id} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/1/ya.make ./ya/make/2/ya.make
+# ${all_file_action} filename
+# $ # user commentaries (many lines)
+# $ generated description - files with this license, license text... (some number of lines that starts with some number of spaces, do not modify)
+# ${action} {license spdx} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/3/ya.make
+# ${all_file_action} filename
+# $ # user commentaries
+# $ generated description
+# $ ...
+#
+# You can modify action, all_file_action and add commentaries
+# Available actions:
+# keep - keep license in contrib and use in credits
+# skip - skip license
+# remove - remove all files with this license
+# rename - save license text/links into licenses texts file, but not store SPDX into LINCENSE macro. You should store correct license id into devtools.license.spdx.txt file
+#
+# {all file action} records will be generated when license text contains filename that exists on filesystem (in contrib directory)
+# We suppose that that files can contain some license info
+# Available all file actions:
+# FILE_IGNORE - ignore file (do nothing)
+# FILE_INCLUDE - include all file data into licenses text file
+# =======================
+
+KEEP COPYRIGHT_SERVICE_LABEL 05bdd09fb9fdb384a61f2eb54df462d6
+BELONGS ya.make
+ License text:
+ // Copyright 2016 Google Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ google/api/consumer.proto [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2531f49b086b54e88aae9438d8a9d63f
+BELONGS ya.make
+ License text:
+ // Copyright 2020 Google LLC
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ google/api/client.proto [1:1]
+ google/api/field_behavior.proto [1:1]
+ google/api/resource.proto [1:1]
+ google/rpc/code.proto [1:1]
+ google/rpc/context/attribute_context.proto [1:1]
+ google/rpc/error_details.proto [1:1]
+ google/rpc/status.proto [1:1]
+ google/type/latlng.proto [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 30222adbd0b829894165c0b67a2f8f49
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015, Google Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ google/api/annotations.proto [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 31fab26359e7ce5661ae59c43e7d60cb
+BELONGS ya.make
+ License text:
+ // Copyright 2018 Google LLC
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ google/api/http.proto [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 498cf2f7854ebbf6af390ac0fc190ee7
+BELONGS ya.make
+ License text:
+ // Copyright 2021 Google LLC
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ google/api/routing.proto [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6391d45c5ab2c1a5ff8c29e13d3bdfdf
+BELONGS ya.make
+ License text:
+ // Copyright 2018 Google LLC.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ google/api/auth.proto [1:1]
+ google/api/backend.proto [1:1]
+ google/api/billing.proto [1:1]
+ google/api/config_change.proto [1:1]
+ google/api/control.proto [1:1]
+ google/api/documentation.proto [1:1]
+ google/api/endpoint.proto [1:1]
+ google/api/httpbody.proto [1:1]
+ google/api/label.proto [1:1]
+ google/api/log.proto [1:1]
+ google/api/logging.proto [1:1]
+ google/api/metric.proto [1:1]
+ google/api/monitored_resource.proto [1:1]
+ google/api/monitoring.proto [1:1]
+ google/api/source_info.proto [1:1]
+ google/api/system_parameter.proto [1:1]
+ google/api/usage.proto [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6499e2ad737f62db5558c81fbd2749a7
+BELONGS ya.make
+ License text:
+ // Copyright 2017 Google Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ google/api/context.proto [1:1]
+ google/api/quota.proto [1:1]
+ google/api/service.proto [1:1]
+ google/logging/type/http_request.proto [1:1]
+ google/logging/type/log_severity.proto [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 79b98accf2a4f2be03be86ac314d9535
+BELONGS ya.make
+ License text:
+ // Copyright 2019 Google LLC.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ google/api/distribution.proto [1:1]
+ google/api/launch_stage.proto [1:1]
+ google/longrunning/operations.proto [1:1]
+ google/type/calendar_period.proto [1:1]
+ google/type/color.proto [1:1]
+ google/type/date.proto [1:1]
+ google/type/datetime.proto [1:1]
+ google/type/dayofweek.proto [1:1]
+ google/type/expr.proto [1:1]
+ google/type/fraction.proto [1:1]
+ google/type/money.proto [1:1]
+ google/type/month.proto [1:1]
+ google/type/postal_address.proto [1:1]
+ google/type/quaternion.proto [1:1]
+ google/type/timeofday.proto [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL c06f0823493d2ec03ec723004d287aab
+BELONGS ya.make
+ License text:
+ // Copyright 2020 Google LLC.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ google/gapic/metadata/gapic_metadata.proto [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL de62d4ef47d15bdcbe773ca452bc3c3a
+BELONGS ya.make
+ License text:
+ // Copyright 2021 Google LLC.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ google/cloud/extended_operations.proto [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL e618dd164932f955bb8121f5f486e841
+BELONGS ya.make
+ License text:
+ // Copyright 2022 Google LLC
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ google/cloud/location/locations.proto [1:1]
diff --git a/contrib/libs/googleapis-common-protos/.yandex_meta/devtools.licenses.report b/contrib/libs/googleapis-common-protos/.yandex_meta/devtools.licenses.report
new file mode 100644
index 0000000000..6df2244bcc
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/.yandex_meta/devtools.licenses.report
@@ -0,0 +1,128 @@
+# File format ($ symbol means the beginning of a line):
+#
+# $ # this message
+# $ # =======================
+# $ # comments (all commentaries should starts with some number of spaces and # symbol)
+# ${action} {license spdx} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/1/ya.make ./ya/make/2/ya.make
+# ${all_file_action} filename
+# $ # user commentaries (many lines)
+# $ generated description - files with this license, license text... (some number of lines that starts with some number of spaces, do not modify)
+# ${action} {license spdx} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/3/ya.make
+# ${all_file_action} filename
+# $ # user commentaries
+# $ generated description
+# $ ...
+#
+# You can modify action, all_file_action and add commentaries
+# Available actions:
+# keep - keep license in contrib and use in credits
+# skip - skip license
+# remove - remove all files with this license
+# rename - save license text/links into licenses texts file, but not store SPDX into LINCENSE macro. You should store correct license id into devtools.license.spdx.txt file
+#
+# {all file action} records will be generated when license text contains filename that exists on filesystem (in contrib directory)
+# We suppose that that files can contain some license info
+# Available all file actions:
+# FILE_IGNORE - ignore file (do nothing)
+# FILE_INCLUDE - include all file data into licenses text file
+# =======================
+
+KEEP Apache-2.0 2b42edef8fa55315f34f2370b4715ca9
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: Apache-2.0
+ Score : 100.00
+ Match type : TEXT
+ Links : http://www.apache.org/licenses/, http://www.apache.org/licenses/LICENSE-2.0, https://spdx.org/licenses/Apache-2.0
+ Files with this license:
+ LICENSE [2:202]
+
+KEEP Apache-2.0 4248d6c827c367ff9f1b5e59ca41408e
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: Apache-2.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.apache.org/licenses/, http://www.apache.org/licenses/LICENSE-2.0, https://spdx.org/licenses/Apache-2.0
+ Files with this license:
+ google/api/annotations.proto [3:13]
+ google/api/auth.proto [3:13]
+ google/api/backend.proto [3:13]
+ google/api/billing.proto [3:13]
+ google/api/client.proto [3:13]
+ google/api/config_change.proto [3:13]
+ google/api/consumer.proto [3:13]
+ google/api/context.proto [3:13]
+ google/api/control.proto [3:13]
+ google/api/distribution.proto [3:13]
+ google/api/documentation.proto [3:13]
+ google/api/endpoint.proto [3:13]
+ google/api/field_behavior.proto [3:13]
+ google/api/http.proto [3:13]
+ google/api/httpbody.proto [3:13]
+ google/api/label.proto [3:13]
+ google/api/launch_stage.proto [3:13]
+ google/api/log.proto [3:13]
+ google/api/logging.proto [3:13]
+ google/api/metric.proto [3:13]
+ google/api/monitored_resource.proto [3:13]
+ google/api/monitoring.proto [3:13]
+ google/api/quota.proto [3:13]
+ google/api/resource.proto [3:13]
+ google/api/routing.proto [3:13]
+ google/api/service.proto [3:13]
+ google/api/source_info.proto [3:13]
+ google/api/system_parameter.proto [3:13]
+ google/api/usage.proto [3:13]
+ google/cloud/extended_operations.proto [3:13]
+ google/cloud/location/locations.proto [3:13]
+ google/gapic/metadata/gapic_metadata.proto [3:13]
+ google/logging/type/http_request.proto [3:13]
+ google/logging/type/log_severity.proto [3:13]
+ google/longrunning/operations.proto [3:13]
+ google/rpc/code.proto [3:13]
+ google/rpc/context/attribute_context.proto [3:13]
+ google/rpc/error_details.proto [3:13]
+ google/rpc/status.proto [3:13]
+ google/type/calendar_period.proto [3:13]
+ google/type/color.proto [3:13]
+ google/type/date.proto [3:13]
+ google/type/datetime.proto [3:13]
+ google/type/dayofweek.proto [3:13]
+ google/type/expr.proto [3:13]
+ google/type/fraction.proto [3:13]
+ google/type/latlng.proto [3:13]
+ google/type/money.proto [3:13]
+ google/type/month.proto [3:13]
+ google/type/postal_address.proto [3:13]
+ google/type/quaternion.proto [3:13]
+ google/type/timeofday.proto [3:13]
+
+SKIP LicenseRef-scancode-generic-cla 5d780ffa423067f23c6a123ae33e7c18
+BELONGS ya.make
+ License text:
+ \## Contributor License Agreement
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-generic-cla
+ Score : 16.00
+ Match type : NOTICE
+ Links : https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/generic-cla.LICENSE
+ Files with this license:
+ CONTRIBUTING.md [6:6]
+
+SKIP LicenseRef-scancode-generic-cla d629c1791f1024cda2ec24fa16773bcd
+BELONGS ya.make
+ License text:
+ Contributions to this project must be accompanied by a Contributor License
+ Agreement (CLA). You (or your employer) retain the copyright to your
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-generic-cla
+ Score : 22.00
+ Match type : NOTICE
+ Links : https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/generic-cla.LICENSE
+ Files with this license:
+ CONTRIBUTING.md [8:9]
diff --git a/contrib/libs/googleapis-common-protos/.yandex_meta/licenses.list.txt b/contrib/libs/googleapis-common-protos/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..cdd8bd22f7
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/.yandex_meta/licenses.list.txt
@@ -0,0 +1,259 @@
+====================Apache-2.0====================
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+====================Apache-2.0====================
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015, Google Inc.
+
+
+====================COPYRIGHT====================
+// Copyright 2016 Google Inc.
+
+
+====================COPYRIGHT====================
+// Copyright 2017 Google Inc.
+
+
+====================COPYRIGHT====================
+// Copyright 2018 Google LLC
+
+
+====================COPYRIGHT====================
+// Copyright 2018 Google LLC.
+
+
+====================COPYRIGHT====================
+// Copyright 2019 Google LLC.
+
+
+====================COPYRIGHT====================
+// Copyright 2020 Google LLC
+
+
+====================COPYRIGHT====================
+// Copyright 2020 Google LLC.
+
+
+====================COPYRIGHT====================
+// Copyright 2021 Google LLC
+
+
+====================COPYRIGHT====================
+// Copyright 2021 Google LLC.
+
+
+====================COPYRIGHT====================
+// Copyright 2022 Google LLC
diff --git a/contrib/libs/googleapis-common-protos/CHANGELOG.md b/contrib/libs/googleapis-common-protos/CHANGELOG.md
new file mode 100644
index 0000000000..6d6264cbe8
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/CHANGELOG.md
@@ -0,0 +1,65 @@
+# Changelog
+
+## [1.55.0](https://github.com/googleapis/python-api-common-protos/compare/v1.54.0...v1.55.0) (2022-02-15)
+
+
+### Features
+
+* add location proto files. ([#84](https://github.com/googleapis/python-api-common-protos/issues/84)) ([9a33e56](https://github.com/googleapis/python-api-common-protos/commit/9a33e56ac6a07a2e717edc55a39fa7cf2f9eec15))
+
+## [1.54.0](https://www.github.com/googleapis/python-api-common-protos/compare/v1.53.0...v1.54.0) (2021-12-07)
+
+
+### Features
+
+* add extended_operations.proto ([#77](https://www.github.com/googleapis/python-api-common-protos/issues/77)) ([bc85849](https://www.github.com/googleapis/python-api-common-protos/commit/bc85849e21494b267d87cd6dc5d0a0e23e012470))
+* add google/api/routing.proto ([#75](https://www.github.com/googleapis/python-api-common-protos/issues/75)) ([1ae0bbc](https://www.github.com/googleapis/python-api-common-protos/commit/1ae0bbcc9747af4dd467e7a246c1a2a4cd5ef2ec))
+
+## [1.53.0](https://www.github.com/googleapis/python-api-common-protos/compare/v1.52.0...v1.53.0) (2021-02-25)
+
+
+### Features
+
+* add `google.api.ResourceDescriptor.Style` ([4ce679c](https://www.github.com/googleapis/python-api-common-protos/commit/4ce679cd49771946bf781108e92e07cdf04a61eb))
+* add API method signatures to longrunning operations ([8de7ae2](https://www.github.com/googleapis/python-api-common-protos/commit/8de7ae28dfe5dd4d0cb99dd3b89a8f1e614bbe6d))
+* add gapic_metadata_pb2 ([#38](https://www.github.com/googleapis/python-api-common-protos/issues/38)) ([8de7ae2](https://www.github.com/googleapis/python-api-common-protos/commit/8de7ae28dfe5dd4d0cb99dd3b89a8f1e614bbe6d))
+* add UNORDERED_LIST to field options ([8de7ae2](https://www.github.com/googleapis/python-api-common-protos/commit/8de7ae28dfe5dd4d0cb99dd3b89a8f1e614bbe6d))
+* add WaitOperation method to longrunning operations ([8de7ae2](https://www.github.com/googleapis/python-api-common-protos/commit/8de7ae28dfe5dd4d0cb99dd3b89a8f1e614bbe6d))
+* require python >=3.6 and ([#31](https://www.github.com/googleapis/python-api-common-protos/issues/31)) ([4ce679c](https://www.github.com/googleapis/python-api-common-protos/commit/4ce679cd49771946bf781108e92e07cdf04a61eb))
+
+
+### Bug Fixes
+
+* add `create_key` to FieldDescriptors ([4ce679c](https://www.github.com/googleapis/python-api-common-protos/commit/4ce679cd49771946bf781108e92e07cdf04a61eb))
+* Generate gRPC files for long-running operations ([#13](https://www.github.com/googleapis/python-api-common-protos/issues/13)) ([a9ce288](https://www.github.com/googleapis/python-api-common-protos/commit/a9ce28840ddfec712da5b296f43e6c3131840db4))
+
+
+### Documentation
+
+* add link to PyPI ([#10](https://www.github.com/googleapis/python-api-common-protos/issues/10)) ([3f79402](https://www.github.com/googleapis/python-api-common-protos/commit/3f7940226b0e22aef31b82c8dc2196aa25b48a3f))
+
+## [1.53.0dev1](https://www.github.com/googleapis/python-api-common-protos/compare/v1.52.0...v1.53.0dev1) (2021-01-27)
+
+
+### Features
+
+* add `google.api.ResourceDescriptor.Style` ([4ce679c](https://www.github.com/googleapis/python-api-common-protos/commit/4ce679cd49771946bf781108e92e07cdf04a61eb))
+* require python >=3.6 and ([#31](https://www.github.com/googleapis/python-api-common-protos/issues/31)) ([4ce679c](https://www.github.com/googleapis/python-api-common-protos/commit/4ce679cd49771946bf781108e92e07cdf04a61eb))
+
+
+### Bug Fixes
+
+* add `create_key` to FieldDescriptors ([4ce679c](https://www.github.com/googleapis/python-api-common-protos/commit/4ce679cd49771946bf781108e92e07cdf04a61eb))
+* Generate gRPC files for long-running operations ([#13](https://www.github.com/googleapis/python-api-common-protos/issues/13)) ([a9ce288](https://www.github.com/googleapis/python-api-common-protos/commit/a9ce28840ddfec712da5b296f43e6c3131840db4))
+
+
+### Documentation
+
+* add link to PyPI ([#10](https://www.github.com/googleapis/python-api-common-protos/issues/10)) ([3f79402](https://www.github.com/googleapis/python-api-common-protos/commit/3f7940226b0e22aef31b82c8dc2196aa25b48a3f))
+
+## 1.52.0 (2020-06-04)
+
+
+### Features
+
+* create api-common-protos repo for python common protos ([4ef4b0d](https://www.github.com/googleapis/python-api-common-protos/commit/4ef4b0d177136bfbd19f4c00ccf2f6d7eaccb153))
diff --git a/contrib/libs/googleapis-common-protos/CMakeLists.txt b/contrib/libs/googleapis-common-protos/CMakeLists.txt
new file mode 100644
index 0000000000..1da5c7b8f4
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/CMakeLists.txt
@@ -0,0 +1,151 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(contrib-libs-googleapis-common-protos)
+set_property(TARGET contrib-libs-googleapis-common-protos PROPERTY
+ PROTOC_EXTRA_OUTS .grpc.pb.cc .grpc.pb.h
+)
+target_include_directories(contrib-libs-googleapis-common-protos PUBLIC
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos
+)
+target_include_directories(contrib-libs-googleapis-common-protos PRIVATE
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos
+)
+target_link_libraries(contrib-libs-googleapis-common-protos PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ contrib-libs-grpc
+ contrib-libs-protobuf
+)
+target_proto_messages(contrib-libs-googleapis-common-protos PRIVATE
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/annotations.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/auth.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/backend.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/billing.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/client.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/config_change.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/consumer.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/context.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/control.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/distribution.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/documentation.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/endpoint.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/field_behavior.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/http.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/httpbody.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/label.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/launch_stage.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/log.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/logging.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/metric.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/monitored_resource.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/monitoring.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/quota.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/resource.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/routing.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/service.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/source_info.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/system_parameter.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/api/usage.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/cloud/extended_operations.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/cloud/location/locations.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/gapic/metadata/gapic_metadata.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/logging/type/http_request.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/logging/type/log_severity.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/longrunning/operations.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/rpc/code.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/rpc/context/attribute_context.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/rpc/error_details.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/rpc/status.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/type/calendar_period.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/type/color.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/type/date.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/type/datetime.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/type/dayofweek.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/type/expr.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/type/fraction.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/type/latlng.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/type/money.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/type/month.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/type/postal_address.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/type/quaternion.proto
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos/google/type/timeofday.proto
+)
+target_sources(contrib-libs-googleapis-common-protos PRIVATE
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/annotations.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/auth.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/backend.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/billing.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/client.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/config_change.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/consumer.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/context.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/control.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/distribution.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/documentation.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/endpoint.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/field_behavior.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/http.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/httpbody.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/label.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/launch_stage.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/log.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/logging.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/metric.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/monitored_resource.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/monitoring.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/quota.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/resource.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/routing.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/service.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/source_info.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/system_parameter.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/api/usage.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/cloud/extended_operations.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/cloud/location/locations.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/gapic/metadata/gapic_metadata.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/logging/type/http_request.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/logging/type/log_severity.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/longrunning/operations.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/rpc/code.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/rpc/context/attribute_context.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/rpc/error_details.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/rpc/status.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/type/calendar_period.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/type/color.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/type/date.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/type/datetime.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/type/dayofweek.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/type/expr.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/type/fraction.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/type/latlng.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/type/money.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/type/month.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/type/postal_address.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/type/quaternion.pb.cc
+ ${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos/google/type/timeofday.pb.cc
+)
+target_proto_addincls(contrib-libs-googleapis-common-protos
+ ./contrib/libs/googleapis-common-protos
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/contrib/libs/googleapis-common-protos
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src
+)
+target_proto_outs(contrib-libs-googleapis-common-protos
+ --cpp_out=${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos
+ --cpp_styleguide_out=${CMAKE_BINARY_DIR}/contrib/libs/googleapis-common-protos
+)
+target_proto_plugin(contrib-libs-googleapis-common-protos
+ grpc_cpp
+ grpc_cpp
+)
diff --git a/contrib/libs/googleapis-common-protos/CODE_OF_CONDUCT.md b/contrib/libs/googleapis-common-protos/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000000..46b2a08ea6
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/CODE_OF_CONDUCT.md
@@ -0,0 +1,43 @@
+# Contributor Code of Conduct
+
+As contributors and maintainers of this project,
+and in the interest of fostering an open and welcoming community,
+we pledge to respect all people who contribute through reporting issues,
+posting feature requests, updating documentation,
+submitting pull requests or patches, and other activities.
+
+We are committed to making participation in this project
+a harassment-free experience for everyone,
+regardless of level of experience, gender, gender identity and expression,
+sexual orientation, disability, personal appearance,
+body size, race, ethnicity, age, religion, or nationality.
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery
+* Personal attacks
+* Trolling or insulting/derogatory comments
+* Public or private harassment
+* Publishing other's private information,
+such as physical or electronic
+addresses, without explicit permission
+* Other unethical or unprofessional conduct.
+
+Project maintainers have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct.
+By adopting this Code of Conduct,
+project maintainers commit themselves to fairly and consistently
+applying these principles to every aspect of managing this project.
+Project maintainers who do not follow or enforce the Code of Conduct
+may be permanently removed from the project team.
+
+This code of conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community.
+
+Instances of abusive, harassing, or otherwise unacceptable behavior
+may be reported by opening an issue
+or contacting one or more of the project maintainers.
+
+This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0,
+available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)
diff --git a/contrib/libs/googleapis-common-protos/CONTRIBUTING.md b/contrib/libs/googleapis-common-protos/CONTRIBUTING.md
new file mode 100644
index 0000000000..b16a4668cb
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/CONTRIBUTING.md
@@ -0,0 +1,29 @@
+# How to Contribute
+
+We'd love to accept your patches and contributions to this project. There are
+just a few small guidelines you need to follow.
+
+## Contributor License Agreement
+
+Contributions to this project must be accompanied by a Contributor License
+Agreement (CLA). You (or your employer) retain the copyright to your
+contribution; this simply gives us permission to use and redistribute your
+contributions as part of the project. Head over to
+<https://cla.developers.google.com/> to see your current agreements on file or
+to sign a new one.
+
+You generally only need to submit a CLA once, so if you've already submitted one
+(even if it was for a different project), you probably don't need to do it
+again.
+
+## Code reviews
+
+All submissions, including submissions by project members, require review. We
+use GitHub pull requests for this purpose. Consult
+[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
+information on using pull requests.
+
+## Community Guidelines
+
+This project follows
+[Google's Open Source Community Guidelines](https://opensource.google/conduct/). \ No newline at end of file
diff --git a/contrib/libs/googleapis-common-protos/LICENSE b/contrib/libs/googleapis-common-protos/LICENSE
new file mode 100644
index 0000000000..d645695673
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/contrib/libs/googleapis-common-protos/README.md b/contrib/libs/googleapis-common-protos/README.md
new file mode 100644
index 0000000000..8fe5fbe677
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/README.md
@@ -0,0 +1,8 @@
+
+# Google APIs common protos
+
+[![pypi](https://img.shields.io/pypi/v/googleapis-common-protos.svg)](https://pypi.org/project/googleapis-common-protos/)
+
+
+googleapis-common-protos contains the python classes generated from the common
+protos in the [googleapis/api-common-protos](https://github.com/googleapis/api-common-protos) repository.
diff --git a/contrib/libs/googleapis-common-protos/SECURITY.md b/contrib/libs/googleapis-common-protos/SECURITY.md
new file mode 100644
index 0000000000..8b58ae9c01
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/SECURITY.md
@@ -0,0 +1,7 @@
+# Security Policy
+
+To report a security issue, please use [g.co/vulnz](https://g.co/vulnz).
+
+The Google Security Team will respond within 5 working days of your report on g.co/vulnz.
+
+We use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue.
diff --git a/contrib/libs/googleapis-common-protos/google/api/README.md b/contrib/libs/googleapis-common-protos/google/api/README.md
new file mode 100644
index 0000000000..4aa4b50c90
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/README.md
@@ -0,0 +1,46 @@
+## API Protos
+
+This folder contains the schema of the configuration model for Google's
+internal API serving platform, which handles routing, quotas, monitoring,
+logging, and the like.
+
+Google refers to this configuration colloquially as the "service config",
+and the `service.proto` file in this directory is the entry point for
+understanding these.
+
+## Using these protos
+
+To be honest, we probably open sourced way too much of this (basically by
+accident). There are a couple files in here you are most likely to be
+interested in: `http.proto`, `documentation.proto`, `auth.proto`, and
+`annotations.proto`.
+
+### HTTP and REST
+
+The `http.proto` file contains the `Http` message (which then is wrapped
+in an annotation in `annotations.proto`), which provides a specification
+for REST endpoints and verbs (`GET`, `POST`, etc.) on RPC methods.
+We recommend use of this annotation for describing the relationship
+between RPCs and REST endpoints.
+
+### Documentation
+
+The `documentation.proto` file contains a `Documentation` message which
+provides a mechanism to fully describe an API, allowing a tool to build
+structured documentation artifacts.
+
+### Authentication
+
+The `auth.proto` file contains descriptions of both authentication rules
+and authenticaion providers, allowing you to describe what your services
+expect and accept from clients.
+
+## api-compiler
+
+Google provides a tool called [api-compiler][], which is a tool that accepts
+a protocol buffer descriptor and a YAML file specifying some of the
+options described in `service.proto`, and outputs a much more thorough
+`Service` descriptor based on the information it infers from the protos
+themselves.
+
+ [api-compiler]: https://github.com/googleapis/api-compiler
diff --git a/contrib/libs/googleapis-common-protos/google/api/annotations.proto b/contrib/libs/googleapis-common-protos/google/api/annotations.proto
new file mode 100644
index 0000000000..85c361b47f
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/annotations.proto
@@ -0,0 +1,31 @@
+// Copyright (c) 2015, Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/api/http.proto";
+import "google/protobuf/descriptor.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations";
+option java_multiple_files = true;
+option java_outer_classname = "AnnotationsProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+extend google.protobuf.MethodOptions {
+ // See `HttpRule`.
+ HttpRule http = 72295728;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/auth.proto b/contrib/libs/googleapis-common-protos/google/api/auth.proto
new file mode 100644
index 0000000000..cdbc1efe90
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/auth.proto
@@ -0,0 +1,181 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/api/annotations.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "AuthProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// `Authentication` defines the authentication configuration for an API.
+//
+// Example for an API targeted for external use:
+//
+// name: calendar.googleapis.com
+// authentication:
+// providers:
+// - id: google_calendar_auth
+// jwks_uri: https://www.googleapis.com/oauth2/v1/certs
+// issuer: https://securetoken.google.com
+// rules:
+// - selector: "*"
+// requirements:
+// provider_id: google_calendar_auth
+message Authentication {
+ // A list of authentication rules that apply to individual API methods.
+ //
+ // **NOTE:** All service configuration rules follow "last one wins" order.
+ repeated AuthenticationRule rules = 3;
+
+ // Defines a set of authentication providers that a service supports.
+ repeated AuthProvider providers = 4;
+}
+
+// Authentication rules for the service.
+//
+// By default, if a method has any authentication requirements, every request
+// must include a valid credential matching one of the requirements.
+// It's an error to include more than one kind of credential in a single
+// request.
+//
+// If a method doesn't have any auth requirements, request credentials will be
+// ignored.
+message AuthenticationRule {
+ // Selects the methods to which this rule applies.
+ //
+ // Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
+ string selector = 1;
+
+ // The requirements for OAuth credentials.
+ OAuthRequirements oauth = 2;
+
+ // If true, the service accepts API keys without any other credential.
+ bool allow_without_credential = 5;
+
+ // Requirements for additional authentication providers.
+ repeated AuthRequirement requirements = 7;
+}
+
+// Configuration for an anthentication provider, including support for
+// [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
+message AuthProvider {
+ // The unique identifier of the auth provider. It will be referred to by
+ // `AuthRequirement.provider_id`.
+ //
+ // Example: "bookstore_auth".
+ string id = 1;
+
+ // Identifies the principal that issued the JWT. See
+ // https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1
+ // Usually a URL or an email address.
+ //
+ // Example: https://securetoken.google.com
+ // Example: 1234567-compute@developer.gserviceaccount.com
+ string issuer = 2;
+
+ // URL of the provider's public key set to validate signature of the JWT. See
+ // [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).
+ // Optional if the key set document:
+ // - can be retrieved from
+ // [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html
+ // of the issuer.
+ // - can be inferred from the email domain of the issuer (e.g. a Google service account).
+ //
+ // Example: https://www.googleapis.com/oauth2/v1/certs
+ string jwks_uri = 3;
+
+ // The list of JWT
+ // [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).
+ // that are allowed to access. A JWT containing any of these audiences will
+ // be accepted. When this setting is absent, only JWTs with audience
+ // "https://[Service_name][google.api.Service.name]/[API_name][google.protobuf.Api.name]"
+ // will be accepted. For example, if no audiences are in the setting,
+ // LibraryService API will only accept JWTs with the following audience
+ // "https://library-example.googleapis.com/google.example.library.v1.LibraryService".
+ //
+ // Example:
+ //
+ // audiences: bookstore_android.apps.googleusercontent.com,
+ // bookstore_web.apps.googleusercontent.com
+ string audiences = 4;
+
+ // Redirect URL if JWT token is required but no present or is expired.
+ // Implement authorizationUrl of securityDefinitions in OpenAPI spec.
+ string authorization_url = 5;
+}
+
+// OAuth scopes are a way to define data and permissions on data. For example,
+// there are scopes defined for "Read-only access to Google Calendar" and
+// "Access to Cloud Platform". Users can consent to a scope for an application,
+// giving it permission to access that data on their behalf.
+//
+// OAuth scope specifications should be fairly coarse grained; a user will need
+// to see and understand the text description of what your scope means.
+//
+// In most cases: use one or at most two OAuth scopes for an entire family of
+// products. If your product has multiple APIs, you should probably be sharing
+// the OAuth scope across all of those APIs.
+//
+// When you need finer grained OAuth consent screens: talk with your product
+// management about how developers will use them in practice.
+//
+// Please note that even though each of the canonical scopes is enough for a
+// request to be accepted and passed to the backend, a request can still fail
+// due to the backend requiring additional scopes or permissions.
+message OAuthRequirements {
+ // The list of publicly documented OAuth scopes that are allowed access. An
+ // OAuth token containing any of these scopes will be accepted.
+ //
+ // Example:
+ //
+ // canonical_scopes: https://www.googleapis.com/auth/calendar,
+ // https://www.googleapis.com/auth/calendar.read
+ string canonical_scopes = 1;
+}
+
+// User-defined authentication requirements, including support for
+// [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
+message AuthRequirement {
+ // [id][google.api.AuthProvider.id] from authentication provider.
+ //
+ // Example:
+ //
+ // provider_id: bookstore_auth
+ string provider_id = 1;
+
+ // NOTE: This will be deprecated soon, once AuthProvider.audiences is
+ // implemented and accepted in all the runtime components.
+ //
+ // The list of JWT
+ // [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).
+ // that are allowed to access. A JWT containing any of these audiences will
+ // be accepted. When this setting is absent, only JWTs with audience
+ // "https://[Service_name][google.api.Service.name]/[API_name][google.protobuf.Api.name]"
+ // will be accepted. For example, if no audiences are in the setting,
+ // LibraryService API will only accept JWTs with the following audience
+ // "https://library-example.googleapis.com/google.example.library.v1.LibraryService".
+ //
+ // Example:
+ //
+ // audiences: bookstore_android.apps.googleusercontent.com,
+ // bookstore_web.apps.googleusercontent.com
+ string audiences = 2;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/backend.proto b/contrib/libs/googleapis-common-protos/google/api/backend.proto
new file mode 100644
index 0000000000..dd22919d07
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/backend.proto
@@ -0,0 +1,51 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "BackendProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// `Backend` defines the backend configuration for a service.
+message Backend {
+ // A list of API backend rules that apply to individual API methods.
+ //
+ // **NOTE:** All service configuration rules follow "last one wins" order.
+ repeated BackendRule rules = 1;
+}
+
+// A backend rule provides configuration for an individual API element.
+message BackendRule {
+ // Selects the methods to which this rule applies.
+ //
+ // Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
+ string selector = 1;
+
+ // The address of the API backend.
+ string address = 2;
+
+ // The number of seconds to wait for a response from a request. The default
+ // deadline for gRPC is infinite (no deadline) and HTTP requests is 5 seconds.
+ double deadline = 3;
+
+ // Minimum deadline in seconds needed for this method. Calls having deadline
+ // value lower than this will be rejected.
+ double min_deadline = 4;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/billing.proto b/contrib/libs/googleapis-common-protos/google/api/billing.proto
new file mode 100644
index 0000000000..54c6cca97a
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/billing.proto
@@ -0,0 +1,67 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/api/annotations.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "BillingProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// Billing related configuration of the service.
+//
+// The following example shows how to configure monitored resources and metrics
+// for billing:
+//
+// monitored_resources:
+// - type: library.googleapis.com/branch
+// labels:
+// - key: /city
+// description: The city where the library branch is located in.
+// - key: /name
+// description: The name of the branch.
+// metrics:
+// - name: library.googleapis.com/book/borrowed_count
+// metric_kind: DELTA
+// value_type: INT64
+// billing:
+// consumer_destinations:
+// - monitored_resource: library.googleapis.com/branch
+// metrics:
+// - library.googleapis.com/book/borrowed_count
+message Billing {
+ // Configuration of a specific billing destination (Currently only support
+ // bill against consumer project).
+ message BillingDestination {
+ // The monitored resource type. The type must be defined in
+ // [Service.monitored_resources][google.api.Service.monitored_resources] section.
+ string monitored_resource = 1;
+
+ // Names of the metrics to report to this billing destination.
+ // Each name must be defined in [Service.metrics][google.api.Service.metrics] section.
+ repeated string metrics = 2;
+ }
+
+ // Billing configurations for sending metrics to the consumer project.
+ // There can be multiple consumer destinations per service, each one must have
+ // a different monitored resource type. A metric can be used in at most
+ // one consumer destination.
+ repeated BillingDestination consumer_destinations = 8;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/client.proto b/contrib/libs/googleapis-common-protos/google/api/client.proto
new file mode 100644
index 0000000000..2102623d30
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/client.proto
@@ -0,0 +1,99 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/protobuf/descriptor.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations";
+option java_multiple_files = true;
+option java_outer_classname = "ClientProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+extend google.protobuf.MethodOptions {
+ // A definition of a client library method signature.
+ //
+ // In client libraries, each proto RPC corresponds to one or more methods
+ // which the end user is able to call, and calls the underlying RPC.
+ // Normally, this method receives a single argument (a struct or instance
+ // corresponding to the RPC request object). Defining this field will
+ // add one or more overloads providing flattened or simpler method signatures
+ // in some languages.
+ //
+ // The fields on the method signature are provided as a comma-separated
+ // string.
+ //
+ // For example, the proto RPC and annotation:
+ //
+ // rpc CreateSubscription(CreateSubscriptionRequest)
+ // returns (Subscription) {
+ // option (google.api.method_signature) = "name,topic";
+ // }
+ //
+ // Would add the following Java overload (in addition to the method accepting
+ // the request object):
+ //
+ // public final Subscription createSubscription(String name, String topic)
+ //
+ // The following backwards-compatibility guidelines apply:
+ //
+ // * Adding this annotation to an unannotated method is backwards
+ // compatible.
+ // * Adding this annotation to a method which already has existing
+ // method signature annotations is backwards compatible if and only if
+ // the new method signature annotation is last in the sequence.
+ // * Modifying or removing an existing method signature annotation is
+ // a breaking change.
+ // * Re-ordering existing method signature annotations is a breaking
+ // change.
+ repeated string method_signature = 1051;
+}
+
+extend google.protobuf.ServiceOptions {
+ // The hostname for this service.
+ // This should be specified with no prefix or protocol.
+ //
+ // Example:
+ //
+ // service Foo {
+ // option (google.api.default_host) = "foo.googleapi.com";
+ // ...
+ // }
+ string default_host = 1049;
+
+ // OAuth scopes needed for the client.
+ //
+ // Example:
+ //
+ // service Foo {
+ // option (google.api.oauth_scopes) = \
+ // "https://www.googleapis.com/auth/cloud-platform";
+ // ...
+ // }
+ //
+ // If there is more than one scope, use a comma-separated string:
+ //
+ // Example:
+ //
+ // service Foo {
+ // option (google.api.oauth_scopes) = \
+ // "https://www.googleapis.com/auth/cloud-platform,"
+ // "https://www.googleapis.com/auth/monitoring";
+ // ...
+ // }
+ string oauth_scopes = 1050;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/config_change.proto b/contrib/libs/googleapis-common-protos/google/api/config_change.proto
new file mode 100644
index 0000000000..1e787931c1
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/config_change.proto
@@ -0,0 +1,85 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+option go_package = "google.golang.org/genproto/googleapis/api/configchange;configchange";
+option java_multiple_files = true;
+option java_outer_classname = "ConfigChangeProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// Output generated from semantically comparing two versions of a service
+// configuration.
+//
+// Includes detailed information about a field that have changed with
+// applicable advice about potential consequences for the change, such as
+// backwards-incompatibility.
+message ConfigChange {
+ // Object hierarchy path to the change, with levels separated by a '.'
+ // character. For repeated fields, an applicable unique identifier field is
+ // used for the index (usually selector, name, or id). For maps, the term
+ // 'key' is used. If the field has no unique identifier, the numeric index
+ // is used.
+ // Examples:
+ // - visibility.rules[selector=="google.LibraryService.CreateBook"].restriction
+ // - quota.metric_rules[selector=="google"].metric_costs[key=="reads"].value
+ // - logging.producer_destinations[0]
+ string element = 1;
+
+ // Value of the changed object in the old Service configuration,
+ // in JSON format. This field will not be populated if ChangeType == ADDED.
+ string old_value = 2;
+
+ // Value of the changed object in the new Service configuration,
+ // in JSON format. This field will not be populated if ChangeType == REMOVED.
+ string new_value = 3;
+
+ // The type for this change, either ADDED, REMOVED, or MODIFIED.
+ ChangeType change_type = 4;
+
+ // Collection of advice provided for this change, useful for determining the
+ // possible impact of this change.
+ repeated Advice advices = 5;
+}
+
+// Generated advice about this change, used for providing more
+// information about how a change will affect the existing service.
+message Advice {
+ // Useful description for why this advice was applied and what actions should
+ // be taken to mitigate any implied risks.
+ string description = 2;
+}
+
+// Classifies set of possible modifications to an object in the service
+// configuration.
+enum ChangeType {
+ // No value was provided.
+ CHANGE_TYPE_UNSPECIFIED = 0;
+
+ // The changed object exists in the 'new' service configuration, but not
+ // in the 'old' service configuration.
+ ADDED = 1;
+
+ // The changed object exists in the 'old' service configuration, but not
+ // in the 'new' service configuration.
+ REMOVED = 2;
+
+ // The changed object exists in both service configurations, but its value
+ // is different.
+ MODIFIED = 3;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/consumer.proto b/contrib/libs/googleapis-common-protos/google/api/consumer.proto
new file mode 100644
index 0000000000..4e963168ef
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/consumer.proto
@@ -0,0 +1,83 @@
+// Copyright 2016 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "ConsumerProto";
+option java_package = "com.google.api";
+
+
+// A descriptor for defining project properties for a service. One service may
+// have many consumer projects, and the service may want to behave differently
+// depending on some properties on the project. For example, a project may be
+// associated with a school, or a business, or a government agency, a business
+// type property on the project may affect how a service responds to the client.
+// This descriptor defines which properties are allowed to be set on a project.
+//
+// Example:
+//
+// project_properties:
+// properties:
+// - name: NO_WATERMARK
+// type: BOOL
+// description: Allows usage of the API without watermarks.
+// - name: EXTENDED_TILE_CACHE_PERIOD
+// type: INT64
+message ProjectProperties {
+ // List of per consumer project-specific properties.
+ repeated Property properties = 1;
+}
+
+// Defines project properties.
+//
+// API services can define properties that can be assigned to consumer projects
+// so that backends can perform response customization without having to make
+// additional calls or maintain additional storage. For example, Maps API
+// defines properties that controls map tile cache period, or whether to embed a
+// watermark in a result.
+//
+// These values can be set via API producer console. Only API providers can
+// define and set these properties.
+message Property {
+ // Supported data type of the property values
+ enum PropertyType {
+ // The type is unspecified, and will result in an error.
+ UNSPECIFIED = 0;
+
+ // The type is `int64`.
+ INT64 = 1;
+
+ // The type is `bool`.
+ BOOL = 2;
+
+ // The type is `string`.
+ STRING = 3;
+
+ // The type is 'double'.
+ DOUBLE = 4;
+ }
+
+ // The name of the property (a.k.a key).
+ string name = 1;
+
+ // The type of this property.
+ PropertyType type = 2;
+
+ // The description of the property
+ string description = 3;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/context.proto b/contrib/libs/googleapis-common-protos/google/api/context.proto
new file mode 100644
index 0000000000..fd03fcae91
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/context.proto
@@ -0,0 +1,63 @@
+// Copyright 2017 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "ContextProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// `Context` defines which contexts an API requests.
+//
+// Example:
+//
+// context:
+// rules:
+// - selector: "*"
+// requested:
+// - google.rpc.context.ProjectContext
+// - google.rpc.context.OriginContext
+//
+// The above specifies that all methods in the API request
+// `google.rpc.context.ProjectContext` and
+// `google.rpc.context.OriginContext`.
+//
+// Available context types are defined in package
+// `google.rpc.context`.
+message Context {
+ // A list of RPC context rules that apply to individual API methods.
+ //
+ // **NOTE:** All service configuration rules follow "last one wins" order.
+ repeated ContextRule rules = 1;
+}
+
+// A context rule provides information about the context for an individual API
+// element.
+message ContextRule {
+ // Selects the methods to which this rule applies.
+ //
+ // Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
+ string selector = 1;
+
+ // A list of full type names of requested contexts.
+ repeated string requested = 2;
+
+ // A list of full type names of provided contexts.
+ repeated string provided = 3;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/control.proto b/contrib/libs/googleapis-common-protos/google/api/control.proto
new file mode 100644
index 0000000000..772d61175f
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/control.proto
@@ -0,0 +1,33 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "ControlProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// Selects and configures the service controller used by the service. The
+// service controller handles features like abuse, quota, billing, logging,
+// monitoring, etc.
+message Control {
+ // The service control environment to use. If empty, no control plane
+ // feature (like quota and billing) will be enabled.
+ string environment = 1;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/distribution.proto b/contrib/libs/googleapis-common-protos/google/api/distribution.proto
new file mode 100644
index 0000000000..f8bb252683
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/distribution.proto
@@ -0,0 +1,213 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/protobuf/any.proto";
+import "google/protobuf/timestamp.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/distribution;distribution";
+option java_multiple_files = true;
+option java_outer_classname = "DistributionProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// `Distribution` contains summary statistics for a population of values. It
+// optionally contains a histogram representing the distribution of those values
+// across a set of buckets.
+//
+// The summary statistics are the count, mean, sum of the squared deviation from
+// the mean, the minimum, and the maximum of the set of population of values.
+// The histogram is based on a sequence of buckets and gives a count of values
+// that fall into each bucket. The boundaries of the buckets are given either
+// explicitly or by formulas for buckets of fixed or exponentially increasing
+// widths.
+//
+// Although it is not forbidden, it is generally a bad idea to include
+// non-finite values (infinities or NaNs) in the population of values, as this
+// will render the `mean` and `sum_of_squared_deviation` fields meaningless.
+message Distribution {
+ // The range of the population values.
+ message Range {
+ // The minimum of the population values.
+ double min = 1;
+
+ // The maximum of the population values.
+ double max = 2;
+ }
+
+ // `BucketOptions` describes the bucket boundaries used to create a histogram
+ // for the distribution. The buckets can be in a linear sequence, an
+ // exponential sequence, or each bucket can be specified explicitly.
+ // `BucketOptions` does not include the number of values in each bucket.
+ //
+ // A bucket has an inclusive lower bound and exclusive upper bound for the
+ // values that are counted for that bucket. The upper bound of a bucket must
+ // be strictly greater than the lower bound. The sequence of N buckets for a
+ // distribution consists of an underflow bucket (number 0), zero or more
+ // finite buckets (number 1 through N - 2) and an overflow bucket (number N -
+ // 1). The buckets are contiguous: the lower bound of bucket i (i > 0) is the
+ // same as the upper bound of bucket i - 1. The buckets span the whole range
+ // of finite values: lower bound of the underflow bucket is -infinity and the
+ // upper bound of the overflow bucket is +infinity. The finite buckets are
+ // so-called because both bounds are finite.
+ message BucketOptions {
+ // Specifies a linear sequence of buckets that all have the same width
+ // (except overflow and underflow). Each bucket represents a constant
+ // absolute uncertainty on the specific value in the bucket.
+ //
+ // There are `num_finite_buckets + 2` (= N) buckets. Bucket `i` has the
+ // following boundaries:
+ //
+ // Upper bound (0 <= i < N-1): offset + (width * i).
+ // Lower bound (1 <= i < N): offset + (width * (i - 1)).
+ message Linear {
+ // Must be greater than 0.
+ int32 num_finite_buckets = 1;
+
+ // Must be greater than 0.
+ double width = 2;
+
+ // Lower bound of the first bucket.
+ double offset = 3;
+ }
+
+ // Specifies an exponential sequence of buckets that have a width that is
+ // proportional to the value of the lower bound. Each bucket represents a
+ // constant relative uncertainty on a specific value in the bucket.
+ //
+ // There are `num_finite_buckets + 2` (= N) buckets. Bucket `i` has the
+ // following boundaries:
+ //
+ // Upper bound (0 <= i < N-1): scale * (growth_factor ^ i).
+ // Lower bound (1 <= i < N): scale * (growth_factor ^ (i - 1)).
+ message Exponential {
+ // Must be greater than 0.
+ int32 num_finite_buckets = 1;
+
+ // Must be greater than 1.
+ double growth_factor = 2;
+
+ // Must be greater than 0.
+ double scale = 3;
+ }
+
+ // Specifies a set of buckets with arbitrary widths.
+ //
+ // There are `size(bounds) + 1` (= N) buckets. Bucket `i` has the following
+ // boundaries:
+ //
+ // Upper bound (0 <= i < N-1): bounds[i]
+ // Lower bound (1 <= i < N); bounds[i - 1]
+ //
+ // The `bounds` field must contain at least one element. If `bounds` has
+ // only one element, then there are no finite buckets, and that single
+ // element is the common boundary of the overflow and underflow buckets.
+ message Explicit {
+ // The values must be monotonically increasing.
+ repeated double bounds = 1;
+ }
+
+ // Exactly one of these three fields must be set.
+ oneof options {
+ // The linear bucket.
+ Linear linear_buckets = 1;
+
+ // The exponential buckets.
+ Exponential exponential_buckets = 2;
+
+ // The explicit buckets.
+ Explicit explicit_buckets = 3;
+ }
+ }
+
+ // Exemplars are example points that may be used to annotate aggregated
+ // distribution values. They are metadata that gives information about a
+ // particular value added to a Distribution bucket, such as a trace ID that
+ // was active when a value was added. They may contain further information,
+ // such as a example values and timestamps, origin, etc.
+ message Exemplar {
+ // Value of the exemplar point. This value determines to which bucket the
+ // exemplar belongs.
+ double value = 1;
+
+ // The observation (sampling) time of the above value.
+ google.protobuf.Timestamp timestamp = 2;
+
+ // Contextual information about the example value. Examples are:
+ //
+ // Trace ID: type.googleapis.com/google.devtools.cloudtrace.v1.Trace
+ //
+ // Literal string: type.googleapis.com/google.protobuf.StringValue
+ //
+ // Labels dropped during aggregation:
+ // type.googleapis.com/google.monitoring.v3.DroppedLabels
+ //
+ // There may be only a single attachment of any given message type in a
+ // single exemplar, and this is enforced by the system.
+ repeated google.protobuf.Any attachments = 3;
+ }
+
+ // The number of values in the population. Must be non-negative. This value
+ // must equal the sum of the values in `bucket_counts` if a histogram is
+ // provided.
+ int64 count = 1;
+
+ // The arithmetic mean of the values in the population. If `count` is zero
+ // then this field must be zero.
+ double mean = 2;
+
+ // The sum of squared deviations from the mean of the values in the
+ // population. For values x_i this is:
+ //
+ // Sum[i=1..n]((x_i - mean)^2)
+ //
+ // Knuth, "The Art of Computer Programming", Vol. 2, page 323, 3rd edition
+ // describes Welford's method for accumulating this sum in one pass.
+ //
+ // If `count` is zero then this field must be zero.
+ double sum_of_squared_deviation = 3;
+
+ // If specified, contains the range of the population values. The field
+ // must not be present if the `count` is zero.
+ Range range = 4;
+
+ // Defines the histogram bucket boundaries. If the distribution does not
+ // contain a histogram, then omit this field.
+ BucketOptions bucket_options = 6;
+
+ // The number of values in each bucket of the histogram, as described in
+ // `bucket_options`. If the distribution does not have a histogram, then omit
+ // this field. If there is a histogram, then the sum of the values in
+ // `bucket_counts` must equal the value in the `count` field of the
+ // distribution.
+ //
+ // If present, `bucket_counts` should contain N values, where N is the number
+ // of buckets specified in `bucket_options`. If you supply fewer than N
+ // values, the remaining values are assumed to be 0.
+ //
+ // The order of the values in `bucket_counts` follows the bucket numbering
+ // schemes described for the three bucket types. The first value must be the
+ // count for the underflow bucket (number 0). The next N-2 values are the
+ // counts for the finite buckets (number 1 through N-2). The N'th value in
+ // `bucket_counts` is the count for the overflow bucket (number N-1).
+ repeated int64 bucket_counts = 7;
+
+ // Must be in increasing order of `value` field.
+ repeated Exemplar exemplars = 10;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/documentation.proto b/contrib/libs/googleapis-common-protos/google/api/documentation.proto
new file mode 100644
index 0000000000..03cd73109a
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/documentation.proto
@@ -0,0 +1,157 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "DocumentationProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// `Documentation` provides the information for describing a service.
+//
+// Example:
+// <pre><code>documentation:
+// summary: >
+// The Google Calendar API gives access
+// to most calendar features.
+// pages:
+// - name: Overview
+// content: &#40;== include google/foo/overview.md ==&#41;
+// - name: Tutorial
+// content: &#40;== include google/foo/tutorial.md ==&#41;
+// subpages;
+// - name: Java
+// content: &#40;== include google/foo/tutorial_java.md ==&#41;
+// rules:
+// - selector: google.calendar.Calendar.Get
+// description: >
+// ...
+// - selector: google.calendar.Calendar.Put
+// description: >
+// ...
+// </code></pre>
+// Documentation is provided in markdown syntax. In addition to
+// standard markdown features, definition lists, tables and fenced
+// code blocks are supported. Section headers can be provided and are
+// interpreted relative to the section nesting of the context where
+// a documentation fragment is embedded.
+//
+// Documentation from the IDL is merged with documentation defined
+// via the config at normalization time, where documentation provided
+// by config rules overrides IDL provided.
+//
+// A number of constructs specific to the API platform are supported
+// in documentation text.
+//
+// In order to reference a proto element, the following
+// notation can be used:
+// <pre><code>&#91;fully.qualified.proto.name]&#91;]</code></pre>
+// To override the display text used for the link, this can be used:
+// <pre><code>&#91;display text]&#91;fully.qualified.proto.name]</code></pre>
+// Text can be excluded from doc using the following notation:
+// <pre><code>&#40;-- internal comment --&#41;</code></pre>
+//
+// A few directives are available in documentation. Note that
+// directives must appear on a single line to be properly
+// identified. The `include` directive includes a markdown file from
+// an external source:
+// <pre><code>&#40;== include path/to/file ==&#41;</code></pre>
+// The `resource_for` directive marks a message to be the resource of
+// a collection in REST view. If it is not specified, tools attempt
+// to infer the resource from the operations in a collection:
+// <pre><code>&#40;== resource_for v1.shelves.books ==&#41;</code></pre>
+// The directive `suppress_warning` does not directly affect documentation
+// and is documented together with service config validation.
+message Documentation {
+ // A short summary of what the service does. Can only be provided by
+ // plain text.
+ string summary = 1;
+
+ // The top level pages for the documentation set.
+ repeated Page pages = 5;
+
+ // A list of documentation rules that apply to individual API elements.
+ //
+ // **NOTE:** All service configuration rules follow "last one wins" order.
+ repeated DocumentationRule rules = 3;
+
+ // The URL to the root of documentation.
+ string documentation_root_url = 4;
+
+ // Declares a single overview page. For example:
+ // <pre><code>documentation:
+ // summary: ...
+ // overview: &#40;== include overview.md ==&#41;
+ // </code></pre>
+ // This is a shortcut for the following declaration (using pages style):
+ // <pre><code>documentation:
+ // summary: ...
+ // pages:
+ // - name: Overview
+ // content: &#40;== include overview.md ==&#41;
+ // </code></pre>
+ // Note: you cannot specify both `overview` field and `pages` field.
+ string overview = 2;
+}
+
+// A documentation rule provides information about individual API elements.
+message DocumentationRule {
+ // The selector is a comma-separated list of patterns. Each pattern is a
+ // qualified name of the element which may end in "*", indicating a wildcard.
+ // Wildcards are only allowed at the end and for a whole component of the
+ // qualified name, i.e. "foo.*" is ok, but not "foo.b*" or "foo.*.bar". To
+ // specify a default for all applicable elements, the whole pattern "*"
+ // is used.
+ string selector = 1;
+
+ // Description of the selected API(s).
+ string description = 2;
+
+ // Deprecation description of the selected element(s). It can be provided if an
+ // element is marked as `deprecated`.
+ string deprecation_description = 3;
+}
+
+// Represents a documentation page. A page can contain subpages to represent
+// nested documentation set structure.
+message Page {
+ // The name of the page. It will be used as an identity of the page to
+ // generate URI of the page, text of the link to this page in navigation,
+ // etc. The full page name (start from the root page name to this page
+ // concatenated with `.`) can be used as reference to the page in your
+ // documentation. For example:
+ // <pre><code>pages:
+ // - name: Tutorial
+ // content: &#40;== include tutorial.md ==&#41;
+ // subpages:
+ // - name: Java
+ // content: &#40;== include tutorial_java.md ==&#41;
+ // </code></pre>
+ // You can reference `Java` page using Markdown reference link syntax:
+ // `[Java][Tutorial.Java]`.
+ string name = 1;
+
+ // The Markdown content of the page. You can use <code>&#40;== include {path} ==&#41;</code>
+ // to include content from a Markdown file.
+ string content = 2;
+
+ // Subpages of this page. The order of subpages specified here will be
+ // honored in the generated docset.
+ repeated Page subpages = 3;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/endpoint.proto b/contrib/libs/googleapis-common-protos/google/api/endpoint.proto
new file mode 100644
index 0000000000..c7bb13b037
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/endpoint.proto
@@ -0,0 +1,71 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/api/annotations.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "EndpointProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// `Endpoint` describes a network endpoint that serves a set of APIs.
+// A service may expose any number of endpoints, and all endpoints share the
+// same service configuration, such as quota configuration and monitoring
+// configuration.
+//
+// Example service configuration:
+//
+// name: library-example.googleapis.com
+// endpoints:
+// # Below entry makes 'google.example.library.v1.Library'
+// # API be served from endpoint address library-example.googleapis.com.
+// # It also allows HTTP OPTIONS calls to be passed to the backend, for
+// # it to decide whether the subsequent cross-origin request is
+// # allowed to proceed.
+// - name: library-example.googleapis.com
+// allow_cors: true
+message Endpoint {
+ // The canonical name of this endpoint.
+ string name = 1;
+
+ // DEPRECATED: This field is no longer supported. Instead of using aliases,
+ // please specify multiple [google.api.Endpoint][google.api.Endpoint] for each of the intended
+ // aliases.
+ //
+ // Additional names that this endpoint will be hosted on.
+ repeated string aliases = 2;
+
+ // The list of features enabled on this endpoint.
+ repeated string features = 4;
+
+ // The specification of an Internet routable address of API frontend that will
+ // handle requests to this [API Endpoint](https://cloud.google.com/apis/design/glossary).
+ // It should be either a valid IPv4 address or a fully-qualified domain name.
+ // For example, "8.8.8.8" or "myservice.appspot.com".
+ string target = 101;
+
+ // Allowing
+ // [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka
+ // cross-domain traffic, would allow the backends served from this endpoint to
+ // receive and respond to HTTP OPTIONS requests. The response will be used by
+ // the browser to determine whether the subsequent cross-origin request is
+ // allowed to proceed.
+ bool allow_cors = 5;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/field_behavior.proto b/contrib/libs/googleapis-common-protos/google/api/field_behavior.proto
new file mode 100644
index 0000000000..686667954a
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/field_behavior.proto
@@ -0,0 +1,84 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/protobuf/descriptor.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations";
+option java_multiple_files = true;
+option java_outer_classname = "FieldBehaviorProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+extend google.protobuf.FieldOptions {
+ // A designation of a specific field behavior (required, output only, etc.)
+ // in protobuf messages.
+ //
+ // Examples:
+ //
+ // string name = 1 [(google.api.field_behavior) = REQUIRED];
+ // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
+ // google.protobuf.Duration ttl = 1
+ // [(google.api.field_behavior) = INPUT_ONLY];
+ // google.protobuf.Timestamp expire_time = 1
+ // [(google.api.field_behavior) = OUTPUT_ONLY,
+ // (google.api.field_behavior) = IMMUTABLE];
+ repeated google.api.FieldBehavior field_behavior = 1052;
+}
+
+// An indicator of the behavior of a given field (for example, that a field
+// is required in requests, or given as output but ignored as input).
+// This **does not** change the behavior in protocol buffers itself; it only
+// denotes the behavior and may affect how API tooling handles the field.
+//
+// Note: This enum **may** receive new values in the future.
+enum FieldBehavior {
+ // Conventional default for enums. Do not use this.
+ FIELD_BEHAVIOR_UNSPECIFIED = 0;
+
+ // Specifically denotes a field as optional.
+ // While all fields in protocol buffers are optional, this may be specified
+ // for emphasis if appropriate.
+ OPTIONAL = 1;
+
+ // Denotes a field as required.
+ // This indicates that the field **must** be provided as part of the request,
+ // and failure to do so will cause an error (usually `INVALID_ARGUMENT`).
+ REQUIRED = 2;
+
+ // Denotes a field as output only.
+ // This indicates that the field is provided in responses, but including the
+ // field in a request does nothing (the server *must* ignore it and
+ // *must not* throw an error as a result of the field's presence).
+ OUTPUT_ONLY = 3;
+
+ // Denotes a field as input only.
+ // This indicates that the field is provided in requests, and the
+ // corresponding field is not included in output.
+ INPUT_ONLY = 4;
+
+ // Denotes a field as immutable.
+ // This indicates that the field may be set once in a request to create a
+ // resource, but may not be changed thereafter.
+ IMMUTABLE = 5;
+
+ // Denotes that a (repeated) field is an unordered list.
+ // This indicates that the service may provide the elements of the list
+ // in any arbitrary order, rather than the order the user originally
+ // provided. Additionally, the list's order may or may not be stable.
+ UNORDERED_LIST = 6;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/http.proto b/contrib/libs/googleapis-common-protos/google/api/http.proto
new file mode 100644
index 0000000000..2bd3a19bfa
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/http.proto
@@ -0,0 +1,318 @@
+// Copyright 2018 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations";
+option java_multiple_files = true;
+option java_outer_classname = "HttpProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// Defines the HTTP configuration for an API service. It contains a list of
+// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method
+// to one or more HTTP REST API methods.
+message Http {
+ // A list of HTTP configuration rules that apply to individual API methods.
+ //
+ // **NOTE:** All service configuration rules follow "last one wins" order.
+ repeated HttpRule rules = 1;
+
+ // When set to true, URL path parmeters will be fully URI-decoded except in
+ // cases of single segment matches in reserved expansion, where "%2F" will be
+ // left encoded.
+ //
+ // The default behavior is to not decode RFC 6570 reserved characters in multi
+ // segment matches.
+ bool fully_decode_reserved_expansion = 2;
+}
+
+// `HttpRule` defines the mapping of an RPC method to one or more HTTP
+// REST API methods. The mapping specifies how different portions of the RPC
+// request message are mapped to URL path, URL query parameters, and
+// HTTP request body. The mapping is typically specified as an
+// `google.api.http` annotation on the RPC method,
+// see "google/api/annotations.proto" for details.
+//
+// The mapping consists of a field specifying the path template and
+// method kind. The path template can refer to fields in the request
+// message, as in the example below which describes a REST GET
+// operation on a resource collection of messages:
+//
+//
+// service Messaging {
+// rpc GetMessage(GetMessageRequest) returns (Message) {
+// option (google.api.http).get = "/v1/messages/{message_id}/{sub.subfield}";
+// }
+// }
+// message GetMessageRequest {
+// message SubMessage {
+// string subfield = 1;
+// }
+// string message_id = 1; // mapped to the URL
+// SubMessage sub = 2; // `sub.subfield` is url-mapped
+// }
+// message Message {
+// string text = 1; // content of the resource
+// }
+//
+// The same http annotation can alternatively be expressed inside the
+// `GRPC API Configuration` YAML file.
+//
+// http:
+// rules:
+// - selector: <proto_package_name>.Messaging.GetMessage
+// get: /v1/messages/{message_id}/{sub.subfield}
+//
+// This definition enables an automatic, bidrectional mapping of HTTP
+// JSON to RPC. Example:
+//
+// HTTP | RPC
+// -----|-----
+// `GET /v1/messages/123456/foo` | `GetMessage(message_id: "123456" sub: SubMessage(subfield: "foo"))`
+//
+// In general, not only fields but also field paths can be referenced
+// from a path pattern. Fields mapped to the path pattern cannot be
+// repeated and must have a primitive (non-message) type.
+//
+// Any fields in the request message which are not bound by the path
+// pattern automatically become (optional) HTTP query
+// parameters. Assume the following definition of the request message:
+//
+//
+// service Messaging {
+// rpc GetMessage(GetMessageRequest) returns (Message) {
+// option (google.api.http).get = "/v1/messages/{message_id}";
+// }
+// }
+// message GetMessageRequest {
+// message SubMessage {
+// string subfield = 1;
+// }
+// string message_id = 1; // mapped to the URL
+// int64 revision = 2; // becomes a parameter
+// SubMessage sub = 3; // `sub.subfield` becomes a parameter
+// }
+//
+//
+// This enables a HTTP JSON to RPC mapping as below:
+//
+// HTTP | RPC
+// -----|-----
+// `GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: "foo"))`
+//
+// Note that fields which are mapped to HTTP parameters must have a
+// primitive type or a repeated primitive type. Message types are not
+// allowed. In the case of a repeated type, the parameter can be
+// repeated in the URL, as in `...?param=A&param=B`.
+//
+// For HTTP method kinds which allow a request body, the `body` field
+// specifies the mapping. Consider a REST update method on the
+// message resource collection:
+//
+//
+// service Messaging {
+// rpc UpdateMessage(UpdateMessageRequest) returns (Message) {
+// option (google.api.http) = {
+// put: "/v1/messages/{message_id}"
+// body: "message"
+// };
+// }
+// }
+// message UpdateMessageRequest {
+// string message_id = 1; // mapped to the URL
+// Message message = 2; // mapped to the body
+// }
+//
+//
+// The following HTTP JSON to RPC mapping is enabled, where the
+// representation of the JSON in the request body is determined by
+// protos JSON encoding:
+//
+// HTTP | RPC
+// -----|-----
+// `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" message { text: "Hi!" })`
+//
+// The special name `*` can be used in the body mapping to define that
+// every field not bound by the path template should be mapped to the
+// request body. This enables the following alternative definition of
+// the update method:
+//
+// service Messaging {
+// rpc UpdateMessage(Message) returns (Message) {
+// option (google.api.http) = {
+// put: "/v1/messages/{message_id}"
+// body: "*"
+// };
+// }
+// }
+// message Message {
+// string message_id = 1;
+// string text = 2;
+// }
+//
+//
+// The following HTTP JSON to RPC mapping is enabled:
+//
+// HTTP | RPC
+// -----|-----
+// `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" text: "Hi!")`
+//
+// Note that when using `*` in the body mapping, it is not possible to
+// have HTTP parameters, as all fields not bound by the path end in
+// the body. This makes this option more rarely used in practice of
+// defining REST APIs. The common usage of `*` is in custom methods
+// which don't use the URL at all for transferring data.
+//
+// It is possible to define multiple HTTP methods for one RPC by using
+// the `additional_bindings` option. Example:
+//
+// service Messaging {
+// rpc GetMessage(GetMessageRequest) returns (Message) {
+// option (google.api.http) = {
+// get: "/v1/messages/{message_id}"
+// additional_bindings {
+// get: "/v1/users/{user_id}/messages/{message_id}"
+// }
+// };
+// }
+// }
+// message GetMessageRequest {
+// string message_id = 1;
+// string user_id = 2;
+// }
+//
+//
+// This enables the following two alternative HTTP JSON to RPC
+// mappings:
+//
+// HTTP | RPC
+// -----|-----
+// `GET /v1/messages/123456` | `GetMessage(message_id: "123456")`
+// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: "123456")`
+//
+// # Rules for HTTP mapping
+//
+// The rules for mapping HTTP path, query parameters, and body fields
+// to the request message are as follows:
+//
+// 1. The `body` field specifies either `*` or a field path, or is
+// omitted. If omitted, it indicates there is no HTTP request body.
+// 2. Leaf fields (recursive expansion of nested messages in the
+// request) can be classified into three types:
+// (a) Matched in the URL template.
+// (b) Covered by body (if body is `*`, everything except (a) fields;
+// else everything under the body field)
+// (c) All other fields.
+// 3. URL query parameters found in the HTTP request are mapped to (c) fields.
+// 4. Any body sent with an HTTP request can contain only (b) fields.
+//
+// The syntax of the path template is as follows:
+//
+// Template = "/" Segments [ Verb ] ;
+// Segments = Segment { "/" Segment } ;
+// Segment = "*" | "**" | LITERAL | Variable ;
+// Variable = "{" FieldPath [ "=" Segments ] "}" ;
+// FieldPath = IDENT { "." IDENT } ;
+// Verb = ":" LITERAL ;
+//
+// The syntax `*` matches a single path segment. The syntax `**` matches zero
+// or more path segments, which must be the last part of the path except the
+// `Verb`. The syntax `LITERAL` matches literal text in the path.
+//
+// The syntax `Variable` matches part of the URL path as specified by its
+// template. A variable template must not contain other variables. If a variable
+// matches a single path segment, its template may be omitted, e.g. `{var}`
+// is equivalent to `{var=*}`.
+//
+// If a variable contains exactly one path segment, such as `"{var}"` or
+// `"{var=*}"`, when such a variable is expanded into a URL path, all characters
+// except `[-_.~0-9a-zA-Z]` are percent-encoded. Such variables show up in the
+// Discovery Document as `{var}`.
+//
+// If a variable contains one or more path segments, such as `"{var=foo/*}"`
+// or `"{var=**}"`, when such a variable is expanded into a URL path, all
+// characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. Such variables
+// show up in the Discovery Document as `{+var}`.
+//
+// NOTE: While the single segment variable matches the semantics of
+// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2
+// Simple String Expansion, the multi segment variable **does not** match
+// RFC 6570 Reserved Expansion. The reason is that the Reserved Expansion
+// does not expand special characters like `?` and `#`, which would lead
+// to invalid URLs.
+//
+// NOTE: the field paths in variables and in the `body` must not refer to
+// repeated fields or map fields.
+message HttpRule {
+ // Selects methods to which this rule applies.
+ //
+ // Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
+ string selector = 1;
+
+ // Determines the URL pattern is matched by this rules. This pattern can be
+ // used with any of the {get|put|post|delete|patch} methods. A custom method
+ // can be defined using the 'custom' field.
+ oneof pattern {
+ // Used for listing and getting information about resources.
+ string get = 2;
+
+ // Used for updating a resource.
+ string put = 3;
+
+ // Used for creating a resource.
+ string post = 4;
+
+ // Used for deleting a resource.
+ string delete = 5;
+
+ // Used for updating a resource.
+ string patch = 6;
+
+ // The custom pattern is used for specifying an HTTP method that is not
+ // included in the `pattern` field, such as HEAD, or "*" to leave the
+ // HTTP method unspecified for this rule. The wild-card rule is useful
+ // for services that provide content to Web (HTML) clients.
+ CustomHttpPattern custom = 8;
+ }
+
+ // The name of the request field whose value is mapped to the HTTP body, or
+ // `*` for mapping all fields not captured by the path pattern to the HTTP
+ // body. NOTE: the referred field must not be a repeated field and must be
+ // present at the top-level of request message type.
+ string body = 7;
+
+ // Optional. The name of the response field whose value is mapped to the HTTP
+ // body of response. Other response fields are ignored. When
+ // not set, the response message will be used as HTTP body of response.
+ string response_body = 12;
+
+ // Additional HTTP bindings for the selector. Nested bindings must
+ // not contain an `additional_bindings` field themselves (that is,
+ // the nesting may only be one level deep).
+ repeated HttpRule additional_bindings = 11;
+}
+
+// A custom pattern is used for defining custom HTTP verb.
+message CustomHttpPattern {
+ // The name of this custom HTTP verb.
+ string kind = 1;
+
+ // The path matched by this custom verb.
+ string path = 2;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/httpbody.proto b/contrib/libs/googleapis-common-protos/google/api/httpbody.proto
new file mode 100644
index 0000000000..0e86e267d7
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/httpbody.proto
@@ -0,0 +1,76 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/protobuf/any.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/httpbody;httpbody";
+option java_multiple_files = true;
+option java_outer_classname = "HttpBodyProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// Message that represents an arbitrary HTTP body. It should only be used for
+// payload formats that can't be represented as JSON, such as raw binary or
+// an HTML page.
+//
+//
+// This message can be used both in streaming and non-streaming API methods in
+// the request as well as the response.
+//
+// It can be used as a top-level request field, which is convenient if one
+// wants to extract parameters from either the URL or HTTP template into the
+// request fields and also want access to the raw HTTP body.
+//
+// Example:
+//
+// message GetResourceRequest {
+// // A unique request id.
+// string request_id = 1;
+//
+// // The raw HTTP body is bound to this field.
+// google.api.HttpBody http_body = 2;
+// }
+//
+// service ResourceService {
+// rpc GetResource(GetResourceRequest) returns (google.api.HttpBody);
+// rpc UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty);
+// }
+//
+// Example with streaming methods:
+//
+// service CaldavService {
+// rpc GetCalendar(stream google.api.HttpBody)
+// returns (stream google.api.HttpBody);
+// rpc UpdateCalendar(stream google.api.HttpBody)
+// returns (stream google.api.HttpBody);
+// }
+//
+// Use of this type only changes how the request and response bodies are
+// handled, all other features will continue to work unchanged.
+message HttpBody {
+ // The HTTP Content-Type string representing the content type of the body.
+ string content_type = 1;
+
+ // HTTP body binary data.
+ bytes data = 2;
+
+ // Application specific response metadata. Must be set in the first response
+ // for streaming APIs.
+ repeated google.protobuf.Any extensions = 3;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/label.proto b/contrib/libs/googleapis-common-protos/google/api/label.proto
new file mode 100644
index 0000000000..3c20752ceb
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/label.proto
@@ -0,0 +1,49 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/api/label;label";
+option java_multiple_files = true;
+option java_outer_classname = "LabelProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// A description of a label.
+message LabelDescriptor {
+ // Value types that can be used as label values.
+ enum ValueType {
+ // A variable-length string. This is the default.
+ STRING = 0;
+
+ // Boolean; true or false.
+ BOOL = 1;
+
+ // A 64-bit signed integer.
+ INT64 = 2;
+ }
+
+ // The label key.
+ string key = 1;
+
+ // The type of data that can be assigned to the label.
+ ValueType value_type = 2;
+
+ // A human-readable description for the label.
+ string description = 3;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/launch_stage.proto b/contrib/libs/googleapis-common-protos/google/api/launch_stage.proto
new file mode 100644
index 0000000000..55fd914242
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/launch_stage.proto
@@ -0,0 +1,67 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.api;
+
+option go_package = "google.golang.org/genproto/googleapis/api;api";
+option java_multiple_files = true;
+option java_outer_classname = "LaunchStageProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+// The launch stage as defined by [Google Cloud Platform
+// Launch Stages](http://cloud.google.com/terms/launch-stages).
+enum LaunchStage {
+ // Do not use this default value.
+ LAUNCH_STAGE_UNSPECIFIED = 0;
+
+ // Early Access features are limited to a closed group of testers. To use
+ // these features, you must sign up in advance and sign a Trusted Tester
+ // agreement (which includes confidentiality provisions). These features may
+ // be unstable, changed in backward-incompatible ways, and are not
+ // guaranteed to be released.
+ EARLY_ACCESS = 1;
+
+ // Alpha is a limited availability test for releases before they are cleared
+ // for widespread use. By Alpha, all significant design issues are resolved
+ // and we are in the process of verifying functionality. Alpha customers
+ // need to apply for access, agree to applicable terms, and have their
+ // projects whitelisted. Alpha releases don’t have to be feature complete,
+ // no SLAs are provided, and there are no technical support obligations, but
+ // they will be far enough along that customers can actually use them in
+ // test environments or for limited-use tests -- just like they would in
+ // normal production cases.
+ ALPHA = 2;
+
+ // Beta is the point at which we are ready to open a release for any
+ // customer to use. There are no SLA or technical support obligations in a
+ // Beta release. Products will be complete from a feature perspective, but
+ // may have some open outstanding issues. Beta releases are suitable for
+ // limited production use cases.
+ BETA = 3;
+
+ // GA features are open to all developers and are considered stable and
+ // fully qualified for production use.
+ GA = 4;
+
+ // Deprecated features are scheduled to be shut down and removed. For more
+ // information, see the “Deprecation Policy” section of our [Terms of
+ // Service](https://cloud.google.com/terms/)
+ // and the [Google Cloud Platform Subject to the Deprecation
+ // Policy](https://cloud.google.com/terms/deprecation) documentation.
+ DEPRECATED = 5;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/log.proto b/contrib/libs/googleapis-common-protos/google/api/log.proto
new file mode 100644
index 0000000000..673b5245ab
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/log.proto
@@ -0,0 +1,55 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/api/label.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "LogProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// A description of a log type. Example in YAML format:
+//
+// - name: library.googleapis.com/activity_history
+// description: The history of borrowing and returning library items.
+// display_name: Activity
+// labels:
+// - key: /customer_id
+// description: Identifier of a library customer
+message LogDescriptor {
+ // The name of the log. It must be less than 512 characters long and can
+ // include the following characters: upper- and lower-case alphanumeric
+ // characters [A-Za-z0-9], and punctuation characters including
+ // slash, underscore, hyphen, period [/_-.].
+ string name = 1;
+
+ // The set of labels that are available to describe a specific log entry.
+ // Runtime requests that contain labels not specified here are
+ // considered invalid.
+ repeated LabelDescriptor labels = 2;
+
+ // A human-readable description of this log. This information appears in
+ // the documentation and can contain details.
+ string description = 3;
+
+ // The human-readable name for this log. This information appears on
+ // the user interface and should be concise.
+ string display_name = 4;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/logging.proto b/contrib/libs/googleapis-common-protos/google/api/logging.proto
new file mode 100644
index 0000000000..ee7c1966e4
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/logging.proto
@@ -0,0 +1,83 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/api/annotations.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "LoggingProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// Logging configuration of the service.
+//
+// The following example shows how to configure logs to be sent to the
+// producer and consumer projects. In the example, the `activity_history`
+// log is sent to both the producer and consumer projects, whereas the
+// `purchase_history` log is only sent to the producer project.
+//
+// monitored_resources:
+// - type: library.googleapis.com/branch
+// labels:
+// - key: /city
+// description: The city where the library branch is located in.
+// - key: /name
+// description: The name of the branch.
+// logs:
+// - name: activity_history
+// labels:
+// - key: /customer_id
+// - name: purchase_history
+// logging:
+// producer_destinations:
+// - monitored_resource: library.googleapis.com/branch
+// logs:
+// - activity_history
+// - purchase_history
+// consumer_destinations:
+// - monitored_resource: library.googleapis.com/branch
+// logs:
+// - activity_history
+message Logging {
+ // Configuration of a specific logging destination (the producer project
+ // or the consumer project).
+ message LoggingDestination {
+ // The monitored resource type. The type must be defined in the
+ // [Service.monitored_resources][google.api.Service.monitored_resources] section.
+ string monitored_resource = 3;
+
+ // Names of the logs to be sent to this destination. Each name must
+ // be defined in the [Service.logs][google.api.Service.logs] section. If the log name is
+ // not a domain scoped name, it will be automatically prefixed with
+ // the service name followed by "/".
+ repeated string logs = 1;
+ }
+
+ // Logging configurations for sending logs to the producer project.
+ // There can be multiple producer destinations, each one must have a
+ // different monitored resource type. A log can be used in at most
+ // one producer destination.
+ repeated LoggingDestination producer_destinations = 1;
+
+ // Logging configurations for sending logs to the consumer project.
+ // There can be multiple consumer destinations, each one must have a
+ // different monitored resource type. A log can be used in at most
+ // one consumer destination.
+ repeated LoggingDestination consumer_destinations = 2;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/metric.proto b/contrib/libs/googleapis-common-protos/google/api/metric.proto
new file mode 100644
index 0000000000..5473ce5bfe
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/metric.proto
@@ -0,0 +1,192 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/api/label.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/metric;metric";
+option java_multiple_files = true;
+option java_outer_classname = "MetricProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// Defines a metric type and its schema. Once a metric descriptor is created,
+// deleting or altering it stops data collection and makes the metric type's
+// existing data unusable.
+message MetricDescriptor {
+ // The kind of measurement. It describes how the data is reported.
+ enum MetricKind {
+ // Do not use this default value.
+ METRIC_KIND_UNSPECIFIED = 0;
+
+ // An instantaneous measurement of a value.
+ GAUGE = 1;
+
+ // The change in a value during a time interval.
+ DELTA = 2;
+
+ // A value accumulated over a time interval. Cumulative
+ // measurements in a time series should have the same start time
+ // and increasing end times, until an event resets the cumulative
+ // value to zero and sets a new start time for the following
+ // points.
+ CUMULATIVE = 3;
+ }
+
+ // The value type of a metric.
+ enum ValueType {
+ // Do not use this default value.
+ VALUE_TYPE_UNSPECIFIED = 0;
+
+ // The value is a boolean.
+ // This value type can be used only if the metric kind is `GAUGE`.
+ BOOL = 1;
+
+ // The value is a signed 64-bit integer.
+ INT64 = 2;
+
+ // The value is a double precision floating point number.
+ DOUBLE = 3;
+
+ // The value is a text string.
+ // This value type can be used only if the metric kind is `GAUGE`.
+ STRING = 4;
+
+ // The value is a [`Distribution`][google.api.Distribution].
+ DISTRIBUTION = 5;
+
+ // The value is money.
+ MONEY = 6;
+ }
+
+ // The resource name of the metric descriptor.
+ string name = 1;
+
+ // The metric type, including its DNS name prefix. The type is not
+ // URL-encoded. All user-defined custom metric types have the DNS name
+ // `custom.googleapis.com`. Metric types should use a natural hierarchical
+ // grouping. For example:
+ //
+ // "custom.googleapis.com/invoice/paid/amount"
+ // "appengine.googleapis.com/http/server/response_latencies"
+ string type = 8;
+
+ // The set of labels that can be used to describe a specific
+ // instance of this metric type. For example, the
+ // `appengine.googleapis.com/http/server/response_latencies` metric
+ // type has a label for the HTTP response code, `response_code`, so
+ // you can look at latencies for successful responses or just
+ // for responses that failed.
+ repeated LabelDescriptor labels = 2;
+
+ // Whether the metric records instantaneous values, changes to a value, etc.
+ // Some combinations of `metric_kind` and `value_type` might not be supported.
+ MetricKind metric_kind = 3;
+
+ // Whether the measurement is an integer, a floating-point number, etc.
+ // Some combinations of `metric_kind` and `value_type` might not be supported.
+ ValueType value_type = 4;
+
+ // The unit in which the metric value is reported. It is only applicable
+ // if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The
+ // supported units are a subset of [The Unified Code for Units of
+ // Measure](http://unitsofmeasure.org/ucum.html) standard:
+ //
+ // **Basic units (UNIT)**
+ //
+ // * `bit` bit
+ // * `By` byte
+ // * `s` second
+ // * `min` minute
+ // * `h` hour
+ // * `d` day
+ //
+ // **Prefixes (PREFIX)**
+ //
+ // * `k` kilo (10**3)
+ // * `M` mega (10**6)
+ // * `G` giga (10**9)
+ // * `T` tera (10**12)
+ // * `P` peta (10**15)
+ // * `E` exa (10**18)
+ // * `Z` zetta (10**21)
+ // * `Y` yotta (10**24)
+ // * `m` milli (10**-3)
+ // * `u` micro (10**-6)
+ // * `n` nano (10**-9)
+ // * `p` pico (10**-12)
+ // * `f` femto (10**-15)
+ // * `a` atto (10**-18)
+ // * `z` zepto (10**-21)
+ // * `y` yocto (10**-24)
+ // * `Ki` kibi (2**10)
+ // * `Mi` mebi (2**20)
+ // * `Gi` gibi (2**30)
+ // * `Ti` tebi (2**40)
+ //
+ // **Grammar**
+ //
+ // The grammar also includes these connectors:
+ //
+ // * `/` division (as an infix operator, e.g. `1/s`).
+ // * `.` multiplication (as an infix operator, e.g. `GBy.d`)
+ //
+ // The grammar for a unit is as follows:
+ //
+ // Expression = Component { "." Component } { "/" Component } ;
+ //
+ // Component = ( [ PREFIX ] UNIT | "%" ) [ Annotation ]
+ // | Annotation
+ // | "1"
+ // ;
+ //
+ // Annotation = "{" NAME "}" ;
+ //
+ // Notes:
+ //
+ // * `Annotation` is just a comment if it follows a `UNIT` and is
+ // equivalent to `1` if it is used alone. For examples,
+ // `{requests}/s == 1/s`, `By{transmitted}/s == By/s`.
+ // * `NAME` is a sequence of non-blank printable ASCII characters not
+ // containing '{' or '}'.
+ // * `1` represents dimensionless value 1, such as in `1/s`.
+ // * `%` represents dimensionless value 1/100, and annotates values giving
+ // a percentage.
+ string unit = 5;
+
+ // A detailed description of the metric, which can be used in documentation.
+ string description = 6;
+
+ // A concise name for the metric, which can be displayed in user interfaces.
+ // Use sentence case without an ending period, for example "Request count".
+ // This field is optional but it is recommended to be set for any metrics
+ // associated with user-visible concepts, such as Quota.
+ string display_name = 7;
+}
+
+// A specific metric, identified by specifying values for all of the
+// labels of a [`MetricDescriptor`][google.api.MetricDescriptor].
+message Metric {
+ // An existing metric type, see [google.api.MetricDescriptor][google.api.MetricDescriptor].
+ // For example, `custom.googleapis.com/invoice/paid/amount`.
+ string type = 3;
+
+ // The set of label values that uniquely identify this metric. All
+ // labels listed in the `MetricDescriptor` must be assigned values.
+ map<string, string> labels = 2;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/monitored_resource.proto b/contrib/libs/googleapis-common-protos/google/api/monitored_resource.proto
new file mode 100644
index 0000000000..189ccd4aa7
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/monitored_resource.proto
@@ -0,0 +1,116 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/api/label.proto";
+import "google/protobuf/struct.proto";
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/api/monitoredres;monitoredres";
+option java_multiple_files = true;
+option java_outer_classname = "MonitoredResourceProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// An object that describes the schema of a [MonitoredResource][google.api.MonitoredResource] object using a
+// type name and a set of labels. For example, the monitored resource
+// descriptor for Google Compute Engine VM instances has a type of
+// `"gce_instance"` and specifies the use of the labels `"instance_id"` and
+// `"zone"` to identify particular VM instances.
+//
+// Different APIs can support different monitored resource types. APIs generally
+// provide a `list` method that returns the monitored resource descriptors used
+// by the API.
+message MonitoredResourceDescriptor {
+ // Optional. The resource name of the monitored resource descriptor:
+ // `"projects/{project_id}/monitoredResourceDescriptors/{type}"` where
+ // {type} is the value of the `type` field in this object and
+ // {project_id} is a project ID that provides API-specific context for
+ // accessing the type. APIs that do not use project information can use the
+ // resource name format `"monitoredResourceDescriptors/{type}"`.
+ string name = 5;
+
+ // Required. The monitored resource type. For example, the type
+ // `"cloudsql_database"` represents databases in Google Cloud SQL.
+ // The maximum length of this value is 256 characters.
+ string type = 1;
+
+ // Optional. A concise name for the monitored resource type that might be
+ // displayed in user interfaces. It should be a Title Cased Noun Phrase,
+ // without any article or other determiners. For example,
+ // `"Google Cloud SQL Database"`.
+ string display_name = 2;
+
+ // Optional. A detailed description of the monitored resource type that might
+ // be used in documentation.
+ string description = 3;
+
+ // Required. A set of labels used to describe instances of this monitored
+ // resource type. For example, an individual Google Cloud SQL database is
+ // identified by values for the labels `"database_id"` and `"zone"`.
+ repeated LabelDescriptor labels = 4;
+}
+
+// An object representing a resource that can be used for monitoring, logging,
+// billing, or other purposes. Examples include virtual machine instances,
+// databases, and storage devices such as disks. The `type` field identifies a
+// [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor] object that describes the resource's
+// schema. Information in the `labels` field identifies the actual resource and
+// its attributes according to the schema. For example, a particular Compute
+// Engine VM instance could be represented by the following object, because the
+// [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor] for `"gce_instance"` has labels
+// `"instance_id"` and `"zone"`:
+//
+// { "type": "gce_instance",
+// "labels": { "instance_id": "12345678901234",
+// "zone": "us-central1-a" }}
+message MonitoredResource {
+ // Required. The monitored resource type. This field must match
+ // the `type` field of a [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor] object. For
+ // example, the type of a Compute Engine VM instance is `gce_instance`.
+ string type = 1;
+
+ // Required. Values for all of the labels listed in the associated monitored
+ // resource descriptor. For example, Compute Engine VM instances use the
+ // labels `"project_id"`, `"instance_id"`, and `"zone"`.
+ map<string, string> labels = 2;
+}
+
+// Auxiliary metadata for a [MonitoredResource][google.api.MonitoredResource] object.
+// [MonitoredResource][google.api.MonitoredResource] objects contain the minimum set of information to
+// uniquely identify a monitored resource instance. There is some other useful
+// auxiliary metadata. Google Stackdriver Monitoring & Logging uses an ingestion
+// pipeline to extract metadata for cloud resources of all types , and stores
+// the metadata in this message.
+message MonitoredResourceMetadata {
+ // Output only. Values for predefined system metadata labels.
+ // System labels are a kind of metadata extracted by Google Stackdriver.
+ // Stackdriver determines what system labels are useful and how to obtain
+ // their values. Some examples: "machine_image", "vpc", "subnet_id",
+ // "security_group", "name", etc.
+ // System label values can be only strings, Boolean values, or a list of
+ // strings. For example:
+ //
+ // { "name": "my-test-instance",
+ // "security_group": ["a", "b", "c"],
+ // "spot_instance": false }
+ google.protobuf.Struct system_labels = 1;
+
+ // Output only. A map of user-defined metadata labels.
+ map<string, string> user_labels = 2;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/monitoring.proto b/contrib/libs/googleapis-common-protos/google/api/monitoring.proto
new file mode 100644
index 0000000000..30572146dc
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/monitoring.proto
@@ -0,0 +1,89 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/api/annotations.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "MonitoringProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// Monitoring configuration of the service.
+//
+// The example below shows how to configure monitored resources and metrics
+// for monitoring. In the example, a monitored resource and two metrics are
+// defined. The `library.googleapis.com/book/returned_count` metric is sent
+// to both producer and consumer projects, whereas the
+// `library.googleapis.com/book/overdue_count` metric is only sent to the
+// consumer project.
+//
+// monitored_resources:
+// - type: library.googleapis.com/branch
+// labels:
+// - key: /city
+// description: The city where the library branch is located in.
+// - key: /name
+// description: The name of the branch.
+// metrics:
+// - name: library.googleapis.com/book/returned_count
+// metric_kind: DELTA
+// value_type: INT64
+// labels:
+// - key: /customer_id
+// - name: library.googleapis.com/book/overdue_count
+// metric_kind: GAUGE
+// value_type: INT64
+// labels:
+// - key: /customer_id
+// monitoring:
+// producer_destinations:
+// - monitored_resource: library.googleapis.com/branch
+// metrics:
+// - library.googleapis.com/book/returned_count
+// consumer_destinations:
+// - monitored_resource: library.googleapis.com/branch
+// metrics:
+// - library.googleapis.com/book/returned_count
+// - library.googleapis.com/book/overdue_count
+message Monitoring {
+ // Configuration of a specific monitoring destination (the producer project
+ // or the consumer project).
+ message MonitoringDestination {
+ // The monitored resource type. The type must be defined in
+ // [Service.monitored_resources][google.api.Service.monitored_resources] section.
+ string monitored_resource = 1;
+
+ // Names of the metrics to report to this monitoring destination.
+ // Each name must be defined in [Service.metrics][google.api.Service.metrics] section.
+ repeated string metrics = 2;
+ }
+
+ // Monitoring configurations for sending metrics to the producer project.
+ // There can be multiple producer destinations, each one must have a
+ // different monitored resource type. A metric can be used in at most
+ // one producer destination.
+ repeated MonitoringDestination producer_destinations = 1;
+
+ // Monitoring configurations for sending metrics to the consumer project.
+ // There can be multiple consumer destinations, each one must have a
+ // different monitored resource type. A metric can be used in at most
+ // one consumer destination.
+ repeated MonitoringDestination consumer_destinations = 2;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/quota.proto b/contrib/libs/googleapis-common-protos/google/api/quota.proto
new file mode 100644
index 0000000000..aa327a1969
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/quota.proto
@@ -0,0 +1,259 @@
+// Copyright 2017 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/api/annotations.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "QuotaProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// Quota configuration helps to achieve fairness and budgeting in service
+// usage.
+//
+// The quota configuration works this way:
+// - The service configuration defines a set of metrics.
+// - For API calls, the quota.metric_rules maps methods to metrics with
+// corresponding costs.
+// - The quota.limits defines limits on the metrics, which will be used for
+// quota checks at runtime.
+//
+// An example quota configuration in yaml format:
+//
+// quota:
+// limits:
+//
+// - name: apiWriteQpsPerProject
+// metric: library.googleapis.com/write_calls
+// unit: "1/min/{project}" # rate limit for consumer projects
+// values:
+// STANDARD: 10000
+//
+// # The metric rules bind all methods to the read_calls metric,
+// # except for the UpdateBook and DeleteBook methods. These two methods
+// # are mapped to the write_calls metric, with the UpdateBook method
+// # consuming at twice rate as the DeleteBook method.
+// metric_rules:
+// - selector: "*"
+// metric_costs:
+// library.googleapis.com/read_calls: 1
+// - selector: google.example.library.v1.LibraryService.UpdateBook
+// metric_costs:
+// library.googleapis.com/write_calls: 2
+// - selector: google.example.library.v1.LibraryService.DeleteBook
+// metric_costs:
+// library.googleapis.com/write_calls: 1
+//
+// Corresponding Metric definition:
+//
+// metrics:
+// - name: library.googleapis.com/read_calls
+// display_name: Read requests
+// metric_kind: DELTA
+// value_type: INT64
+//
+// - name: library.googleapis.com/write_calls
+// display_name: Write requests
+// metric_kind: DELTA
+// value_type: INT64
+//
+message Quota {
+ // List of `QuotaLimit` definitions for the service.
+ //
+ // Used by metric-based quotas only.
+ repeated QuotaLimit limits = 3;
+
+ // List of `MetricRule` definitions, each one mapping a selected method to one
+ // or more metrics.
+ //
+ // Used by metric-based quotas only.
+ repeated MetricRule metric_rules = 4;
+}
+
+// Bind API methods to metrics. Binding a method to a metric causes that
+// metric's configured quota, billing, and monitoring behaviors to apply to the
+// method call.
+//
+// Used by metric-based quotas only.
+message MetricRule {
+ // Selects the methods to which this rule applies.
+ //
+ // Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
+ string selector = 1;
+
+ // Metrics to update when the selected methods are called, and the associated
+ // cost applied to each metric.
+ //
+ // The key of the map is the metric name, and the values are the amount
+ // increased for the metric against which the quota limits are defined.
+ // The value must not be negative.
+ map<string, int64> metric_costs = 2;
+}
+
+// `QuotaLimit` defines a specific limit that applies over a specified duration
+// for a limit type. There can be at most one limit for a duration and limit
+// type combination defined within a `QuotaGroup`.
+message QuotaLimit {
+ // Name of the quota limit. The name is used to refer to the limit when
+ // overriding the default limit on per-consumer basis.
+ //
+ // For group-based quota limits, the name must be unique within the quota
+ // group. If a name is not provided, it will be generated from the limit_by
+ // and duration fields.
+ //
+ // For metric-based quota limits, the name must be provided, and it must be
+ // unique within the service. The name can only include alphanumeric
+ // characters as well as '-'.
+ //
+ // The maximum length of the limit name is 64 characters.
+ //
+ // The name of a limit is used as a unique identifier for this limit.
+ // Therefore, once a limit has been put into use, its name should be
+ // immutable. You can use the display_name field to provide a user-friendly
+ // name for the limit. The display name can be evolved over time without
+ // affecting the identity of the limit.
+ string name = 6;
+
+ // Optional. User-visible, extended description for this quota limit.
+ // Should be used only when more context is needed to understand this limit
+ // than provided by the limit's display name (see: `display_name`).
+ string description = 2;
+
+ // Default number of tokens that can be consumed during the specified
+ // duration. This is the number of tokens assigned when a client
+ // application developer activates the service for his/her project.
+ //
+ // Specifying a value of 0 will block all requests. This can be used if you
+ // are provisioning quota to selected consumers and blocking others.
+ // Similarly, a value of -1 will indicate an unlimited quota. No other
+ // negative values are allowed.
+ //
+ // Used by group-based quotas only.
+ int64 default_limit = 3;
+
+ // Maximum number of tokens that can be consumed during the specified
+ // duration. Client application developers can override the default limit up
+ // to this maximum. If specified, this value cannot be set to a value less
+ // than the default limit. If not specified, it is set to the default limit.
+ //
+ // To allow clients to apply overrides with no upper bound, set this to -1,
+ // indicating unlimited maximum quota.
+ //
+ // Used by group-based quotas only.
+ int64 max_limit = 4;
+
+ // Free tier value displayed in the Developers Console for this limit.
+ // The free tier is the number of tokens that will be subtracted from the
+ // billed amount when billing is enabled.
+ // This field can only be set on a limit with duration "1d", in a billable
+ // group; it is invalid on any other limit. If this field is not set, it
+ // defaults to 0, indicating that there is no free tier for this service.
+ //
+ // Used by group-based quotas only.
+ int64 free_tier = 7;
+
+ // Duration of this limit in textual notation. Example: "100s", "24h", "1d".
+ // For duration longer than a day, only multiple of days is supported. We
+ // support only "100s" and "1d" for now. Additional support will be added in
+ // the future. "0" indicates indefinite duration.
+ //
+ // Used by group-based quotas only.
+ string duration = 5;
+
+ // The name of the metric this quota limit applies to. The quota limits with
+ // the same metric will be checked together during runtime. The metric must be
+ // defined within the service config.
+ //
+ // Used by metric-based quotas only.
+ string metric = 8;
+
+ // Specify the unit of the quota limit. It uses the same syntax as
+ // [Metric.unit][]. The supported unit kinds are determined by the quota
+ // backend system.
+ //
+ // The [Google Service Control](https://cloud.google.com/service-control)
+ // supports the following unit components:
+ // * One of the time intevals:
+ // * "/min" for quota every minute.
+ // * "/d" for quota every 24 hours, starting 00:00 US Pacific Time.
+ // * Otherwise the quota won't be reset by time, such as storage limit.
+ // * One and only one of the granted containers:
+ // * "/{organization}" quota for an organization.
+ // * "/{project}" quota for a project.
+ // * "/{folder}" quota for a folder.
+ // * "/{resource}" quota for a universal resource.
+ // * Zero or more quota segmentation dimension. Not all combos are valid.
+ // * "/{region}" quota for every region. Not to be used with time intervals.
+ // * Otherwise the resources granted on the target is not segmented.
+ // * "/{zone}" quota for every zone. Not to be used with time intervals.
+ // * Otherwise the resources granted on the target is not segmented.
+ // * "/{resource}" quota for a resource associated with a project or org.
+ //
+ // Here are some examples:
+ // * "1/min/{project}" for quota per minute per project.
+ // * "1/min/{user}" for quota per minute per user.
+ // * "1/min/{organization}" for quota per minute per organization.
+ //
+ // Note: the order of unit components is insignificant.
+ // The "1" at the beginning is required to follow the metric unit syntax.
+ //
+ // Used by metric-based quotas only.
+ string unit = 9;
+
+ // Tiered limit values. Also allows for regional or zone overrides for these
+ // values if "/{region}" or "/{zone}" is specified in the unit field.
+ //
+ // Currently supported tiers from low to high:
+ // VERY_LOW, LOW, STANDARD, HIGH, VERY_HIGH
+ //
+ // To apply different limit values for users according to their tiers, specify
+ // the values for the tiers you want to differentiate. For example:
+ // {LOW:100, STANDARD:500, HIGH:1000, VERY_HIGH:5000}
+ //
+ // The limit value for each tier is optional except for the tier STANDARD.
+ // The limit value for an unspecified tier falls to the value of its next
+ // tier towards tier STANDARD. For the above example, the limit value for tier
+ // STANDARD is 500.
+ //
+ // To apply the same limit value for all users, just specify limit value for
+ // tier STANDARD. For example: {STANDARD:500}.
+ //
+ // To apply a regional overide for a tier, add a map entry with key
+ // "<TIER>/<region>", where <region> is a region name. Similarly, for a zone
+ // override, add a map entry with key "<TIER>/{zone}".
+ // Further, a wildcard can be used at the end of a zone name in order to
+ // specify zone level overrides. For example:
+ // LOW: 10, STANDARD: 50, HIGH: 100,
+ // LOW/us-central1: 20, STANDARD/us-central1: 60, HIGH/us-central1: 200,
+ // LOW/us-central1-*: 10, STANDARD/us-central1-*: 20, HIGH/us-central1-*: 80
+ //
+ // The regional overrides tier set for each region must be the same as
+ // the tier set for default limit values. Same rule applies for zone overrides
+ // tier as well.
+ //
+ // Used by metric-based quotas only.
+ map<string, int64> values = 10;
+
+ // User-visible display name for this limit.
+ // Optional. If not set, the UI will provide a default display name based on
+ // the quota configuration. This field can be used to override the default
+ // display name generated from the configuration.
+ string display_name = 12;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/resource.proto b/contrib/libs/googleapis-common-protos/google/api/resource.proto
new file mode 100644
index 0000000000..fd9ee66def
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/resource.proto
@@ -0,0 +1,299 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/protobuf/descriptor.proto";
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations";
+option java_multiple_files = true;
+option java_outer_classname = "ResourceProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+extend google.protobuf.FieldOptions {
+ // An annotation that describes a resource reference, see
+ // [ResourceReference][].
+ google.api.ResourceReference resource_reference = 1055;
+}
+
+extend google.protobuf.FileOptions {
+ // An annotation that describes a resource definition without a corresponding
+ // message; see [ResourceDescriptor][].
+ repeated google.api.ResourceDescriptor resource_definition = 1053;
+}
+
+extend google.protobuf.MessageOptions {
+ // An annotation that describes a resource definition, see
+ // [ResourceDescriptor][].
+ google.api.ResourceDescriptor resource = 1053;
+}
+
+// A simple descriptor of a resource type.
+//
+// ResourceDescriptor annotates a resource message (either by means of a
+// protobuf annotation or use in the service config), and associates the
+// resource's schema, the resource type, and the pattern of the resource name.
+//
+// Example:
+//
+// message Topic {
+// // Indicates this message defines a resource schema.
+// // Declares the resource type in the format of {service}/{kind}.
+// // For Kubernetes resources, the format is {api group}/{kind}.
+// option (google.api.resource) = {
+// type: "pubsub.googleapis.com/Topic"
+// name_descriptor: {
+// pattern: "projects/{project}/topics/{topic}"
+// parent_type: "cloudresourcemanager.googleapis.com/Project"
+// parent_name_extractor: "projects/{project}"
+// }
+// };
+// }
+//
+// The ResourceDescriptor Yaml config will look like:
+//
+// resources:
+// - type: "pubsub.googleapis.com/Topic"
+// name_descriptor:
+// - pattern: "projects/{project}/topics/{topic}"
+// parent_type: "cloudresourcemanager.googleapis.com/Project"
+// parent_name_extractor: "projects/{project}"
+//
+// Sometimes, resources have multiple patterns, typically because they can
+// live under multiple parents.
+//
+// Example:
+//
+// message LogEntry {
+// option (google.api.resource) = {
+// type: "logging.googleapis.com/LogEntry"
+// name_descriptor: {
+// pattern: "projects/{project}/logs/{log}"
+// parent_type: "cloudresourcemanager.googleapis.com/Project"
+// parent_name_extractor: "projects/{project}"
+// }
+// name_descriptor: {
+// pattern: "folders/{folder}/logs/{log}"
+// parent_type: "cloudresourcemanager.googleapis.com/Folder"
+// parent_name_extractor: "folders/{folder}"
+// }
+// name_descriptor: {
+// pattern: "organizations/{organization}/logs/{log}"
+// parent_type: "cloudresourcemanager.googleapis.com/Organization"
+// parent_name_extractor: "organizations/{organization}"
+// }
+// name_descriptor: {
+// pattern: "billingAccounts/{billing_account}/logs/{log}"
+// parent_type: "billing.googleapis.com/BillingAccount"
+// parent_name_extractor: "billingAccounts/{billing_account}"
+// }
+// };
+// }
+//
+// The ResourceDescriptor Yaml config will look like:
+//
+// resources:
+// - type: 'logging.googleapis.com/LogEntry'
+// name_descriptor:
+// - pattern: "projects/{project}/logs/{log}"
+// parent_type: "cloudresourcemanager.googleapis.com/Project"
+// parent_name_extractor: "projects/{project}"
+// - pattern: "folders/{folder}/logs/{log}"
+// parent_type: "cloudresourcemanager.googleapis.com/Folder"
+// parent_name_extractor: "folders/{folder}"
+// - pattern: "organizations/{organization}/logs/{log}"
+// parent_type: "cloudresourcemanager.googleapis.com/Organization"
+// parent_name_extractor: "organizations/{organization}"
+// - pattern: "billingAccounts/{billing_account}/logs/{log}"
+// parent_type: "billing.googleapis.com/BillingAccount"
+// parent_name_extractor: "billingAccounts/{billing_account}"
+//
+// For flexible resources, the resource name doesn't contain parent names, but
+// the resource itself has parents for policy evaluation.
+//
+// Example:
+//
+// message Shelf {
+// option (google.api.resource) = {
+// type: "library.googleapis.com/Shelf"
+// name_descriptor: {
+// pattern: "shelves/{shelf}"
+// parent_type: "cloudresourcemanager.googleapis.com/Project"
+// }
+// name_descriptor: {
+// pattern: "shelves/{shelf}"
+// parent_type: "cloudresourcemanager.googleapis.com/Folder"
+// }
+// };
+// }
+//
+// The ResourceDescriptor Yaml config will look like:
+//
+// resources:
+// - type: 'library.googleapis.com/Shelf'
+// name_descriptor:
+// - pattern: "shelves/{shelf}"
+// parent_type: "cloudresourcemanager.googleapis.com/Project"
+// - pattern: "shelves/{shelf}"
+// parent_type: "cloudresourcemanager.googleapis.com/Folder"
+message ResourceDescriptor {
+ // A description of the historical or future-looking state of the
+ // resource pattern.
+ enum History {
+ // The "unset" value.
+ HISTORY_UNSPECIFIED = 0;
+
+ // The resource originally had one pattern and launched as such, and
+ // additional patterns were added later.
+ ORIGINALLY_SINGLE_PATTERN = 1;
+
+ // The resource has one pattern, but the API owner expects to add more
+ // later. (This is the inverse of ORIGINALLY_SINGLE_PATTERN, and prevents
+ // that from being necessary once there are multiple patterns.)
+ FUTURE_MULTI_PATTERN = 2;
+ }
+
+ // A flag representing a specific style that a resource claims to conform to.
+ enum Style {
+ // The unspecified value. Do not use.
+ STYLE_UNSPECIFIED = 0;
+
+ // This resource is intended to be "declarative-friendly".
+ //
+ // Declarative-friendly resources must be more strictly consistent, and
+ // setting this to true communicates to tools that this resource should
+ // adhere to declarative-friendly expectations.
+ //
+ // Note: This is used by the API linter (linter.aip.dev) to enable
+ // additional checks.
+ DECLARATIVE_FRIENDLY = 1;
+ }
+
+ // The resource type. It must be in the format of
+ // {service_name}/{resource_type_kind}. The `resource_type_kind` must be
+ // singular and must not include version numbers.
+ //
+ // Example: `storage.googleapis.com/Bucket`
+ //
+ // The value of the resource_type_kind must follow the regular expression
+ // /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and
+ // should use PascalCase (UpperCamelCase). The maximum number of
+ // characters allowed for the `resource_type_kind` is 100.
+ string type = 1;
+
+ // Optional. The relative resource name pattern associated with this resource
+ // type. The DNS prefix of the full resource name shouldn't be specified here.
+ //
+ // The path pattern must follow the syntax, which aligns with HTTP binding
+ // syntax:
+ //
+ // Template = Segment { "/" Segment } ;
+ // Segment = LITERAL | Variable ;
+ // Variable = "{" LITERAL "}" ;
+ //
+ // Examples:
+ //
+ // - "projects/{project}/topics/{topic}"
+ // - "projects/{project}/knowledgeBases/{knowledge_base}"
+ //
+ // The components in braces correspond to the IDs for each resource in the
+ // hierarchy. It is expected that, if multiple patterns are provided,
+ // the same component name (e.g. "project") refers to IDs of the same
+ // type of resource.
+ repeated string pattern = 2;
+
+ // Optional. The field on the resource that designates the resource name
+ // field. If omitted, this is assumed to be "name".
+ string name_field = 3;
+
+ // Optional. The historical or future-looking state of the resource pattern.
+ //
+ // Example:
+ //
+ // // The InspectTemplate message originally only supported resource
+ // // names with organization, and project was added later.
+ // message InspectTemplate {
+ // option (google.api.resource) = {
+ // type: "dlp.googleapis.com/InspectTemplate"
+ // pattern:
+ // "organizations/{organization}/inspectTemplates/{inspect_template}"
+ // pattern: "projects/{project}/inspectTemplates/{inspect_template}"
+ // history: ORIGINALLY_SINGLE_PATTERN
+ // };
+ // }
+ History history = 4;
+
+ // The plural name used in the resource name and permission names, such as
+ // 'projects' for the resource name of 'projects/{project}' and the permission
+ // name of 'cloudresourcemanager.googleapis.com/projects.get'. It is the same
+ // concept of the `plural` field in k8s CRD spec
+ // https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/
+ //
+ // Note: The plural form is required even for singleton resources. See
+ // https://aip.dev/156
+ string plural = 5;
+
+ // The same concept of the `singular` field in k8s CRD spec
+ // https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/
+ // Such as "project" for the `resourcemanager.googleapis.com/Project` type.
+ string singular = 6;
+
+ // Style flag(s) for this resource.
+ // These indicate that a resource is expected to conform to a given
+ // style. See the specific style flags for additional information.
+ repeated Style style = 10;
+}
+
+// Defines a proto annotation that describes a string field that refers to
+// an API resource.
+message ResourceReference {
+ // The resource type that the annotated field references.
+ //
+ // Example:
+ //
+ // message Subscription {
+ // string topic = 2 [(google.api.resource_reference) = {
+ // type: "pubsub.googleapis.com/Topic"
+ // }];
+ // }
+ //
+ // Occasionally, a field may reference an arbitrary resource. In this case,
+ // APIs use the special value * in their resource reference.
+ //
+ // Example:
+ //
+ // message GetIamPolicyRequest {
+ // string resource = 2 [(google.api.resource_reference) = {
+ // type: "*"
+ // }];
+ // }
+ string type = 1;
+
+ // The resource type of a child collection that the annotated field
+ // references. This is useful for annotating the `parent` field that
+ // doesn't have a fixed resource type.
+ //
+ // Example:
+ //
+ // message ListLogEntriesRequest {
+ // string parent = 1 [(google.api.resource_reference) = {
+ // child_type: "logging.googleapis.com/LogEntry"
+ // };
+ // }
+ string child_type = 2;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/routing.proto b/contrib/libs/googleapis-common-protos/google/api/routing.proto
new file mode 100644
index 0000000000..0138283890
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/routing.proto
@@ -0,0 +1,461 @@
+// Copyright 2021 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/protobuf/descriptor.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations";
+option java_multiple_files = true;
+option java_outer_classname = "RoutingProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+extend google.protobuf.MethodOptions {
+ // See RoutingRule.
+ google.api.RoutingRule routing = 72295729;
+}
+
+// Specifies the routing information that should be sent along with the request
+// in the form of routing header.
+// **NOTE:** All service configuration rules follow the "last one wins" order.
+//
+// The examples below will apply to an RPC which has the following request type:
+//
+// Message Definition:
+//
+// message Request {
+// // The name of the Table
+// // Values can be of the following formats:
+// // - `projects/<project>/tables/<table>`
+// // - `projects/<project>/instances/<instance>/tables/<table>`
+// // - `region/<region>/zones/<zone>/tables/<table>`
+// string table_name = 1;
+//
+// // This value specifies routing for replication.
+// // It can be in the following formats:
+// // - `profiles/<profile_id>`
+// // - a legacy `profile_id` that can be any string
+// string app_profile_id = 2;
+// }
+//
+// Example message:
+//
+// {
+// table_name: projects/proj_foo/instances/instance_bar/table/table_baz,
+// app_profile_id: profiles/prof_qux
+// }
+//
+// The routing header consists of one or multiple key-value pairs. Every key
+// and value must be percent-encoded, and joined together in the format of
+// `key1=value1&key2=value2`.
+// In the examples below I am skipping the percent-encoding for readablity.
+//
+// Example 1
+//
+// Extracting a field from the request to put into the routing header
+// unchanged, with the key equal to the field name.
+//
+// annotation:
+//
+// option (google.api.routing) = {
+// // Take the `app_profile_id`.
+// routing_parameters {
+// field: "app_profile_id"
+// }
+// };
+//
+// result:
+//
+// x-goog-request-params: app_profile_id=profiles/prof_qux
+//
+// Example 2
+//
+// Extracting a field from the request to put into the routing header
+// unchanged, with the key different from the field name.
+//
+// annotation:
+//
+// option (google.api.routing) = {
+// // Take the `app_profile_id`, but name it `routing_id` in the header.
+// routing_parameters {
+// field: "app_profile_id"
+// path_template: "{routing_id=**}"
+// }
+// };
+//
+// result:
+//
+// x-goog-request-params: routing_id=profiles/prof_qux
+//
+// Example 3
+//
+// Extracting a field from the request to put into the routing
+// header, while matching a path template syntax on the field's value.
+//
+// NB: it is more useful to send nothing than to send garbage for the purpose
+// of dynamic routing, since garbage pollutes cache. Thus the matching.
+//
+// Sub-example 3a
+//
+// The field matches the template.
+//
+// annotation:
+//
+// option (google.api.routing) = {
+// // Take the `table_name`, if it's well-formed (with project-based
+// // syntax).
+// routing_parameters {
+// field: "table_name"
+// path_template: "{table_name=projects/*/instances/*/**}"
+// }
+// };
+//
+// result:
+//
+// x-goog-request-params:
+// table_name=projects/proj_foo/instances/instance_bar/table/table_baz
+//
+// Sub-example 3b
+//
+// The field does not match the template.
+//
+// annotation:
+//
+// option (google.api.routing) = {
+// // Take the `table_name`, if it's well-formed (with region-based
+// // syntax).
+// routing_parameters {
+// field: "table_name"
+// path_template: "{table_name=regions/*/zones/*/**}"
+// }
+// };
+//
+// result:
+//
+// <no routing header will be sent>
+//
+// Sub-example 3c
+//
+// Multiple alternative conflictingly named path templates are
+// specified. The one that matches is used to construct the header.
+//
+// annotation:
+//
+// option (google.api.routing) = {
+// // Take the `table_name`, if it's well-formed, whether
+// // using the region- or projects-based syntax.
+//
+// routing_parameters {
+// field: "table_name"
+// path_template: "{table_name=regions/*/zones/*/**}"
+// }
+// routing_parameters {
+// field: "table_name"
+// path_template: "{table_name=projects/*/instances/*/**}"
+// }
+// };
+//
+// result:
+//
+// x-goog-request-params:
+// table_name=projects/proj_foo/instances/instance_bar/table/table_baz
+//
+// Example 4
+//
+// Extracting a single routing header key-value pair by matching a
+// template syntax on (a part of) a single request field.
+//
+// annotation:
+//
+// option (google.api.routing) = {
+// // Take just the project id from the `table_name` field.
+// routing_parameters {
+// field: "table_name"
+// path_template: "{routing_id=projects/*}/**"
+// }
+// };
+//
+// result:
+//
+// x-goog-request-params: routing_id=projects/proj_foo
+//
+// Example 5
+//
+// Extracting a single routing header key-value pair by matching
+// several conflictingly named path templates on (parts of) a single request
+// field. The last template to match "wins" the conflict.
+//
+// annotation:
+//
+// option (google.api.routing) = {
+// // If the `table_name` does not have instances information,
+// // take just the project id for routing.
+// // Otherwise take project + instance.
+//
+// routing_parameters {
+// field: "table_name"
+// path_template: "{routing_id=projects/*}/**"
+// }
+// routing_parameters {
+// field: "table_name"
+// path_template: "{routing_id=projects/*/instances/*}/**"
+// }
+// };
+//
+// result:
+//
+// x-goog-request-params:
+// routing_id=projects/proj_foo/instances/instance_bar
+//
+// Example 6
+//
+// Extracting multiple routing header key-value pairs by matching
+// several non-conflicting path templates on (parts of) a single request field.
+//
+// Sub-example 6a
+//
+// Make the templates strict, so that if the `table_name` does not
+// have an instance information, nothing is sent.
+//
+// annotation:
+//
+// option (google.api.routing) = {
+// // The routing code needs two keys instead of one composite
+// // but works only for the tables with the "project-instance" name
+// // syntax.
+//
+// routing_parameters {
+// field: "table_name"
+// path_template: "{project_id=projects/*}/instances/*/**"
+// }
+// routing_parameters {
+// field: "table_name"
+// path_template: "projects/*/{instance_id=instances/*}/**"
+// }
+// };
+//
+// result:
+//
+// x-goog-request-params:
+// project_id=projects/proj_foo&instance_id=instances/instance_bar
+//
+// Sub-example 6b
+//
+// Make the templates loose, so that if the `table_name` does not
+// have an instance information, just the project id part is sent.
+//
+// annotation:
+//
+// option (google.api.routing) = {
+// // The routing code wants two keys instead of one composite
+// // but will work with just the `project_id` for tables without
+// // an instance in the `table_name`.
+//
+// routing_parameters {
+// field: "table_name"
+// path_template: "{project_id=projects/*}/**"
+// }
+// routing_parameters {
+// field: "table_name"
+// path_template: "projects/*/{instance_id=instances/*}/**"
+// }
+// };
+//
+// result (is the same as 6a for our example message because it has the instance
+// information):
+//
+// x-goog-request-params:
+// project_id=projects/proj_foo&instance_id=instances/instance_bar
+//
+// Example 7
+//
+// Extracting multiple routing header key-value pairs by matching
+// several path templates on multiple request fields.
+//
+// NB: note that here there is no way to specify sending nothing if one of the
+// fields does not match its template. E.g. if the `table_name` is in the wrong
+// format, the `project_id` will not be sent, but the `routing_id` will be.
+// The backend routing code has to be aware of that and be prepared to not
+// receive a full complement of keys if it expects multiple.
+//
+// annotation:
+//
+// option (google.api.routing) = {
+// // The routing needs both `project_id` and `routing_id`
+// // (from the `app_profile_id` field) for routing.
+//
+// routing_parameters {
+// field: "table_name"
+// path_template: "{project_id=projects/*}/**"
+// }
+// routing_parameters {
+// field: "app_profile_id"
+// path_template: "{routing_id=**}"
+// }
+// };
+//
+// result:
+//
+// x-goog-request-params:
+// project_id=projects/proj_foo&routing_id=profiles/prof_qux
+//
+// Example 8
+//
+// Extracting a single routing header key-value pair by matching
+// several conflictingly named path templates on several request fields. The
+// last template to match "wins" the conflict.
+//
+// annotation:
+//
+// option (google.api.routing) = {
+// // The `routing_id` can be a project id or a region id depending on
+// // the table name format, but only if the `app_profile_id` is not set.
+// // If `app_profile_id` is set it should be used instead.
+//
+// routing_parameters {
+// field: "table_name"
+// path_template: "{routing_id=projects/*}/**"
+// }
+// routing_parameters {
+// field: "table_name"
+// path_template: "{routing_id=regions/*}/**"
+// }
+// routing_parameters {
+// field: "app_profile_id"
+// path_template: "{routing_id=**}"
+// }
+// };
+//
+// result:
+//
+// x-goog-request-params: routing_id=profiles/prof_qux
+//
+// Example 9
+//
+// Bringing it all together.
+//
+// annotation:
+//
+// option (google.api.routing) = {
+// // For routing both `table_location` and a `routing_id` are needed.
+// //
+// // table_location can be either an instance id or a region+zone id.
+// //
+// // For `routing_id`, take the value of `app_profile_id`
+// // - If it's in the format `profiles/<profile_id>`, send
+// // just the `<profile_id>` part.
+// // - If it's any other literal, send it as is.
+// // If the `app_profile_id` is empty, and the `table_name` starts with
+// // the project_id, send that instead.
+//
+// routing_parameters {
+// field: "table_name"
+// path_template: "projects/*/{table_location=instances/*}/tables/*"
+// }
+// routing_parameters {
+// field: "table_name"
+// path_template: "{table_location=regions/*/zones/*}/tables/*"
+// }
+// routing_parameters {
+// field: "table_name"
+// path_template: "{routing_id=projects/*}/**"
+// }
+// routing_parameters {
+// field: "app_profile_id"
+// path_template: "{routing_id=**}"
+// }
+// routing_parameters {
+// field: "app_profile_id"
+// path_template: "profiles/{routing_id=*}"
+// }
+// };
+//
+// result:
+//
+// x-goog-request-params:
+// table_location=instances/instance_bar&routing_id=prof_qux
+message RoutingRule {
+ // A collection of Routing Parameter specifications.
+ // **NOTE:** If multiple Routing Parameters describe the same key
+ // (via the `path_template` field or via the `field` field when
+ // `path_template` is not provided), "last one wins" rule
+ // determines which Parameter gets used.
+ // See the examples for more details.
+ repeated RoutingParameter routing_parameters = 2;
+}
+
+// A projection from an input message to the GRPC or REST header.
+message RoutingParameter {
+ // A request field to extract the header key-value pair from.
+ string field = 1;
+
+ // A pattern matching the key-value field. Optional.
+ // If not specified, the whole field specified in the `field` field will be
+ // taken as value, and its name used as key. If specified, it MUST contain
+ // exactly one named segment (along with any number of unnamed segments) The
+ // pattern will be matched over the field specified in the `field` field, then
+ // if the match is successful:
+ // - the name of the single named segment will be used as a header name,
+ // - the match value of the segment will be used as a header value;
+ // if the match is NOT successful, nothing will be sent.
+ //
+ // Example:
+ //
+ // -- This is a field in the request message
+ // | that the header value will be extracted from.
+ // |
+ // | -- This is the key name in the
+ // | | routing header.
+ // V |
+ // field: "table_name" v
+ // path_template: "projects/*/{table_location=instances/*}/tables/*"
+ // ^ ^
+ // | |
+ // In the {} brackets is the pattern that -- |
+ // specifies what to extract from the |
+ // field as a value to be sent. |
+ // |
+ // The string in the field must match the whole pattern --
+ // before brackets, inside brackets, after brackets.
+ //
+ // When looking at this specific example, we can see that:
+ // - A key-value pair with the key `table_location`
+ // and the value matching `instances/*` should be added
+ // to the x-goog-request-params routing header.
+ // - The value is extracted from the request message's `table_name` field
+ // if it matches the full pattern specified:
+ // `projects/*/instances/*/tables/*`.
+ //
+ // **NB:** If the `path_template` field is not provided, the key name is
+ // equal to the field name, and the whole field should be sent as a value.
+ // This makes the pattern for the field and the value functionally equivalent
+ // to `**`, and the configuration
+ //
+ // {
+ // field: "table_name"
+ // }
+ //
+ // is a functionally equivalent shorthand to:
+ //
+ // {
+ // field: "table_name"
+ // path_template: "{table_name=**}"
+ // }
+ //
+ // See Example 1 for more details.
+ string path_template = 2;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/service.proto b/contrib/libs/googleapis-common-protos/google/api/service.proto
new file mode 100644
index 0000000000..951c7ac050
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/service.proto
@@ -0,0 +1,175 @@
+// Copyright 2017 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/api/annotations.proto";
+import "google/api/auth.proto";
+import "google/api/backend.proto";
+import "google/api/billing.proto";
+import "google/api/context.proto";
+import "google/api/control.proto";
+import "google/api/documentation.proto";
+import "google/api/endpoint.proto";
+import "google/api/http.proto";
+import "google/api/log.proto";
+import "google/api/logging.proto";
+import "google/api/metric.proto";
+import "google/api/monitored_resource.proto";
+import "google/api/monitoring.proto";
+import "google/api/quota.proto";
+import "google/api/source_info.proto";
+import "google/api/system_parameter.proto";
+import "google/api/usage.proto";
+import "google/protobuf/api.proto";
+import "google/protobuf/type.proto";
+import "google/protobuf/wrappers.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "ServiceProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// `Service` is the root object of Google service configuration schema. It
+// describes basic information about a service, such as the name and the
+// title, and delegates other aspects to sub-sections. Each sub-section is
+// either a proto message or a repeated proto message that configures a
+// specific aspect, such as auth. See each proto message definition for details.
+//
+// Example:
+//
+// type: google.api.Service
+// config_version: 3
+// name: calendar.googleapis.com
+// title: Google Calendar API
+// apis:
+// - name: google.calendar.v3.Calendar
+// authentication:
+// providers:
+// - id: google_calendar_auth
+// jwks_uri: https://www.googleapis.com/oauth2/v1/certs
+// issuer: https://securetoken.google.com
+// rules:
+// - selector: "*"
+// requirements:
+// provider_id: google_calendar_auth
+message Service {
+ // The semantic version of the service configuration. The config version
+ // affects the interpretation of the service configuration. For example,
+ // certain features are enabled by default for certain config versions.
+ // The latest config version is `3`.
+ google.protobuf.UInt32Value config_version = 20;
+
+ // The DNS address at which this service is available,
+ // e.g. `calendar.googleapis.com`.
+ string name = 1;
+
+ // A unique ID for a specific instance of this message, typically assigned
+ // by the client for tracking purpose. If empty, the server may choose to
+ // generate one instead.
+ string id = 33;
+
+ // The product title for this service.
+ string title = 2;
+
+ // The Google project that owns this service.
+ string producer_project_id = 22;
+
+ // A list of API interfaces exported by this service. Only the `name` field
+ // of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration
+ // author, as the remaining fields will be derived from the IDL during the
+ // normalization process. It is an error to specify an API interface here
+ // which cannot be resolved against the associated IDL files.
+ repeated google.protobuf.Api apis = 3;
+
+ // A list of all proto message types included in this API service.
+ // Types referenced directly or indirectly by the `apis` are
+ // automatically included. Messages which are not referenced but
+ // shall be included, such as types used by the `google.protobuf.Any` type,
+ // should be listed here by name. Example:
+ //
+ // types:
+ // - name: google.protobuf.Int32
+ repeated google.protobuf.Type types = 4;
+
+ // A list of all enum types included in this API service. Enums
+ // referenced directly or indirectly by the `apis` are automatically
+ // included. Enums which are not referenced but shall be included
+ // should be listed here by name. Example:
+ //
+ // enums:
+ // - name: google.someapi.v1.SomeEnum
+ repeated google.protobuf.Enum enums = 5;
+
+ // Additional API documentation.
+ Documentation documentation = 6;
+
+ // API backend configuration.
+ Backend backend = 8;
+
+ // HTTP configuration.
+ Http http = 9;
+
+ // Quota configuration.
+ Quota quota = 10;
+
+ // Auth configuration.
+ Authentication authentication = 11;
+
+ // Context configuration.
+ Context context = 12;
+
+ // Configuration controlling usage of this service.
+ Usage usage = 15;
+
+ // Configuration for network endpoints. If this is empty, then an endpoint
+ // with the same name as the service is automatically generated to service all
+ // defined APIs.
+ repeated Endpoint endpoints = 18;
+
+ // Configuration for the service control plane.
+ Control control = 21;
+
+ // Defines the logs used by this service.
+ repeated LogDescriptor logs = 23;
+
+ // Defines the metrics used by this service.
+ repeated MetricDescriptor metrics = 24;
+
+ // Defines the monitored resources used by this service. This is required
+ // by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations.
+ repeated MonitoredResourceDescriptor monitored_resources = 25;
+
+ // Billing configuration.
+ Billing billing = 26;
+
+ // Logging configuration.
+ Logging logging = 27;
+
+ // Monitoring configuration.
+ Monitoring monitoring = 28;
+
+ // System parameter configuration.
+ SystemParameters system_parameters = 29;
+
+ // Output only. The source information for this configuration if available.
+ SourceInfo source_info = 37;
+
+ // Experimental configuration.
+ reserved 101;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/source_info.proto b/contrib/libs/googleapis-common-protos/google/api/source_info.proto
new file mode 100644
index 0000000000..58777856fb
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/source_info.proto
@@ -0,0 +1,32 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/protobuf/any.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "SourceInfoProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// Source information used to create a Service Config
+message SourceInfo {
+ // All files used during config generation.
+ repeated google.protobuf.Any source_files = 1;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/system_parameter.proto b/contrib/libs/googleapis-common-protos/google/api/system_parameter.proto
new file mode 100644
index 0000000000..a55212f044
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/system_parameter.proto
@@ -0,0 +1,96 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "SystemParameterProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// ### System parameter configuration
+//
+// A system parameter is a special kind of parameter defined by the API
+// system, not by an individual API. It is typically mapped to an HTTP header
+// and/or a URL query parameter. This configuration specifies which methods
+// change the names of the system parameters.
+message SystemParameters {
+ // Define system parameters.
+ //
+ // The parameters defined here will override the default parameters
+ // implemented by the system. If this field is missing from the service
+ // config, default system parameters will be used. Default system parameters
+ // and names is implementation-dependent.
+ //
+ // Example: define api key for all methods
+ //
+ // system_parameters
+ // rules:
+ // - selector: "*"
+ // parameters:
+ // - name: api_key
+ // url_query_parameter: api_key
+ //
+ //
+ // Example: define 2 api key names for a specific method.
+ //
+ // system_parameters
+ // rules:
+ // - selector: "/ListShelves"
+ // parameters:
+ // - name: api_key
+ // http_header: Api-Key1
+ // - name: api_key
+ // http_header: Api-Key2
+ //
+ // **NOTE:** All service configuration rules follow "last one wins" order.
+ repeated SystemParameterRule rules = 1;
+}
+
+// Define a system parameter rule mapping system parameter definitions to
+// methods.
+message SystemParameterRule {
+ // Selects the methods to which this rule applies. Use '*' to indicate all
+ // methods in all APIs.
+ //
+ // Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
+ string selector = 1;
+
+ // Define parameters. Multiple names may be defined for a parameter.
+ // For a given method call, only one of them should be used. If multiple
+ // names are used the behavior is implementation-dependent.
+ // If none of the specified names are present the behavior is
+ // parameter-dependent.
+ repeated SystemParameter parameters = 2;
+}
+
+// Define a parameter's name and location. The parameter may be passed as either
+// an HTTP header or a URL query parameter, and if both are passed the behavior
+// is implementation-dependent.
+message SystemParameter {
+ // Define the name of the parameter, such as "api_key" . It is case sensitive.
+ string name = 1;
+
+ // Define the HTTP header name to use for the parameter. It is case
+ // insensitive.
+ string http_header = 2;
+
+ // Define the URL query parameter name to use for the parameter. It is case
+ // sensitive.
+ string url_query_parameter = 3;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/api/usage.proto b/contrib/libs/googleapis-common-protos/google/api/usage.proto
new file mode 100644
index 0000000000..63299b56d2
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/api/usage.proto
@@ -0,0 +1,92 @@
+// Copyright 2018 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.api;
+
+import "google/api/annotations.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
+option java_multiple_files = true;
+option java_outer_classname = "UsageProto";
+option java_package = "com.google.api";
+option objc_class_prefix = "GAPI";
+
+
+// Configuration controlling usage of a service.
+message Usage {
+ // Requirements that must be satisfied before a consumer project can use the
+ // service. Each requirement is of the form <service.name>/<requirement-id>;
+ // for example 'serviceusage.googleapis.com/billing-enabled'.
+ repeated string requirements = 1;
+
+ // A list of usage rules that apply to individual API methods.
+ //
+ // **NOTE:** All service configuration rules follow "last one wins" order.
+ repeated UsageRule rules = 6;
+
+ // The full resource name of a channel used for sending notifications to the
+ // service producer.
+ //
+ // Google Service Management currently only supports
+ // [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification
+ // channel. To use Google Cloud Pub/Sub as the channel, this must be the name
+ // of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format
+ // documented in https://cloud.google.com/pubsub/docs/overview.
+ string producer_notification_channel = 7;
+}
+
+// Usage configuration rules for the service.
+//
+// NOTE: Under development.
+//
+//
+// Use this rule to configure unregistered calls for the service. Unregistered
+// calls are calls that do not contain consumer project identity.
+// (Example: calls that do not contain an API key).
+// By default, API methods do not allow unregistered calls, and each method call
+// must be identified by a consumer project identity. Use this rule to
+// allow/disallow unregistered calls.
+//
+// Example of an API that wants to allow unregistered calls for entire service.
+//
+// usage:
+// rules:
+// - selector: "*"
+// allow_unregistered_calls: true
+//
+// Example of a method that wants to allow unregistered calls.
+//
+// usage:
+// rules:
+// - selector: "google.example.library.v1.LibraryService.CreateBook"
+// allow_unregistered_calls: true
+message UsageRule {
+ // Selects the methods to which this rule applies. Use '*' to indicate all
+ // methods in all APIs.
+ //
+ // Refer to [selector][google.api.DocumentationRule.selector] for syntax details.
+ string selector = 1;
+
+ // If true, the selected method allows unregistered calls, e.g. calls
+ // that don't identify any user or application.
+ bool allow_unregistered_calls = 2;
+
+ // If true, the selected method should skip service control and the control
+ // plane features, such as quota and billing, will not be available.
+ // This flag is used by Google Cloud Endpoints to bypass checks for internal
+ // methods, such as service health check methods.
+ bool skip_service_control = 3;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/cloud/extended_operations.proto b/contrib/libs/googleapis-common-protos/google/cloud/extended_operations.proto
new file mode 100644
index 0000000000..1477d2d69a
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/cloud/extended_operations.proto
@@ -0,0 +1,150 @@
+// Copyright 2021 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This file contains custom annotations that are used by GAPIC generators to
+// handle Long Running Operation methods (LRO) that are NOT compliant with
+// https://google.aip.dev/151. These annotations are public for technical
+// reasons only. Please DO NOT USE them in your protos.
+syntax = "proto3";
+
+package google.cloud;
+
+import "google/protobuf/descriptor.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/cloud/extendedops;extendedops";
+option java_multiple_files = true;
+option java_outer_classname = "ExtendedOperationsProto";
+option java_package = "com.google.cloud";
+option objc_class_prefix = "GAPI";
+
+// FieldOptions to match corresponding fields in the initial request,
+// polling request and operation response messages.
+//
+// Example:
+//
+// In an API-specific operation message:
+//
+// message MyOperation {
+// string http_error_message = 1 [(operation_field) = ERROR_MESSAGE];
+// int32 http_error_status_code = 2 [(operation_field) = ERROR_CODE];
+// string id = 3 [(operation_field) = NAME];
+// Status status = 4 [(operation_field) = STATUS];
+// }
+//
+// In a polling request message (the one which is used to poll for an LRO
+// status):
+//
+// message MyPollingRequest {
+// string operation = 1 [(operation_response_field) = "id"];
+// string project = 2;
+// string region = 3;
+// }
+//
+// In an initial request message (the one which starts an LRO):
+//
+// message MyInitialRequest {
+// string my_project = 2 [(operation_request_field) = "project"];
+// string my_region = 3 [(operation_request_field) = "region"];
+// }
+//
+extend google.protobuf.FieldOptions {
+ // A field annotation that maps fields in an API-specific Operation object to
+ // their standard counterparts in google.longrunning.Operation. See
+ // OperationResponseMapping enum definition.
+ OperationResponseMapping operation_field = 1149;
+
+ // A field annotation that maps fields in the initial request message
+ // (the one which started the LRO) to their counterparts in the polling
+ // request message. For non-standard LRO, the polling response may be missing
+ // some of the information needed to make a subsequent polling request. The
+ // missing information (for example, project or region ID) is contained in the
+ // fields of the initial request message that this annotation must be applied
+ // to. The string value of the annotation corresponds to the name of the
+ // counterpart field in the polling request message that the annotated field's
+ // value will be copied to.
+ string operation_request_field = 1150;
+
+ // A field annotation that maps fields in the polling request message to their
+ // counterparts in the initial and/or polling response message. The initial
+ // and the polling methods return an API-specific Operation object. Some of
+ // the fields from that response object must be reused in the subsequent
+ // request (like operation name/ID) to fully identify the polled operation.
+ // This annotation must be applied to the fields in the polling request
+ // message, the string value of the annotation must correspond to the name of
+ // the counterpart field in the Operation response object whose value will be
+ // copied to the annotated field.
+ string operation_response_field = 1151;
+}
+
+// MethodOptions to identify the actual service and method used for operation
+// status polling.
+//
+// Example:
+//
+// In a method, which starts an LRO:
+//
+// service MyService {
+// rpc Foo(MyInitialRequest) returns (MyOperation) {
+// option (operation_service) = "MyPollingService";
+// }
+// }
+//
+// In a polling method:
+//
+// service MyPollingService {
+// rpc Get(MyPollingRequest) returns (MyOperation) {
+// option (operation_polling_method) = true;
+// }
+// }
+extend google.protobuf.MethodOptions {
+ // A method annotation that maps an LRO method (the one which starts an LRO)
+ // to the service, which will be used to poll for the operation status. The
+ // annotation must be applied to the method which starts an LRO, the string
+ // value of the annotation must correspond to the name of the service used to
+ // poll for the operation status.
+ string operation_service = 1249;
+
+ // A method annotation that marks methods that can be used for polling
+ // operation status (e.g. the MyPollingService.Get(MyPollingRequest) method).
+ bool operation_polling_method = 1250;
+}
+
+// An enum to be used to mark the essential (for polling) fields in an
+// API-specific Operation object. A custom Operation object may contain many
+// different fields, but only few of them are essential to conduct a successful
+// polling process.
+enum OperationResponseMapping {
+ // Do not use.
+ UNDEFINED = 0;
+
+ // A field in an API-specific (custom) Operation object which carries the same
+ // meaning as google.longrunning.Operation.name.
+ NAME = 1;
+
+ // A field in an API-specific (custom) Operation object which carries the same
+ // meaning as google.longrunning.Operation.done. If the annotated field is of
+ // an enum type, `annotated_field_name == EnumType.DONE` semantics should be
+ // equivalent to `Operation.done == true`. If the annotated field is of type
+ // boolean, then it should follow the same semantics as Operation.done.
+ // Otherwise, a non-empty value should be treated as `Operation.done == true`.
+ STATUS = 2;
+
+ // A field in an API-specific (custom) Operation object which carries the same
+ // meaning as google.longrunning.Operation.error.code.
+ ERROR_CODE = 3;
+
+ // A field in an API-specific (custom) Operation object which carries the same
+ // meaning as google.longrunning.Operation.error.message.
+ ERROR_MESSAGE = 4;
+} \ No newline at end of file
diff --git a/contrib/libs/googleapis-common-protos/google/cloud/location/locations.proto b/contrib/libs/googleapis-common-protos/google/cloud/location/locations.proto
new file mode 100644
index 0000000000..b210cc3230
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/cloud/location/locations.proto
@@ -0,0 +1,108 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.cloud.location;
+
+import "google/api/annotations.proto";
+import "google/protobuf/any.proto";
+import "google/api/client.proto";
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/cloud/location;location";
+option java_multiple_files = true;
+option java_outer_classname = "LocationsProto";
+option java_package = "com.google.cloud.location";
+
+// An abstract interface that provides location-related information for
+// a service. Service-specific metadata is provided through the
+// [Location.metadata][google.cloud.location.Location.metadata] field.
+service Locations {
+ option (google.api.default_host) = "cloud.googleapis.com";
+ option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform";
+
+ // Lists information about the supported locations for this service.
+ rpc ListLocations(ListLocationsRequest) returns (ListLocationsResponse) {
+ option (google.api.http) = {
+ get: "/v1/{name=locations}"
+ additional_bindings {
+ get: "/v1/{name=projects/*}/locations"
+ }
+ };
+ }
+
+ // Gets information about a location.
+ rpc GetLocation(GetLocationRequest) returns (Location) {
+ option (google.api.http) = {
+ get: "/v1/{name=locations/*}"
+ additional_bindings {
+ get: "/v1/{name=projects/*/locations/*}"
+ }
+ };
+ }
+}
+
+// The request message for [Locations.ListLocations][google.cloud.location.Locations.ListLocations].
+message ListLocationsRequest {
+ // The resource that owns the locations collection, if applicable.
+ string name = 1;
+
+ // The standard list filter.
+ string filter = 2;
+
+ // The standard list page size.
+ int32 page_size = 3;
+
+ // The standard list page token.
+ string page_token = 4;
+}
+
+// The response message for [Locations.ListLocations][google.cloud.location.Locations.ListLocations].
+message ListLocationsResponse {
+ // A list of locations that matches the specified filter in the request.
+ repeated Location locations = 1;
+
+ // The standard List next-page token.
+ string next_page_token = 2;
+}
+
+// The request message for [Locations.GetLocation][google.cloud.location.Locations.GetLocation].
+message GetLocationRequest {
+ // Resource name for the location.
+ string name = 1;
+}
+
+// A resource that represents Google Cloud Platform location.
+message Location {
+ // Resource name for the location, which may vary between implementations.
+ // For example: `"projects/example-project/locations/us-east1"`
+ string name = 1;
+
+ // The canonical id for this location. For example: `"us-east1"`.
+ string location_id = 4;
+
+ // The friendly name for this location, typically a nearby city name.
+ // For example, "Tokyo".
+ string display_name = 5;
+
+ // Cross-service attributes for the location. For example
+ //
+ // {"cloud.googleapis.com/region": "us-east1"}
+ map<string, string> labels = 2;
+
+ // Service-specific metadata. For example the available capacity at the given
+ // location.
+ google.protobuf.Any metadata = 3;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/gapic/metadata/gapic_metadata.proto b/contrib/libs/googleapis-common-protos/google/gapic/metadata/gapic_metadata.proto
new file mode 100644
index 0000000000..16090ede07
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/gapic/metadata/gapic_metadata.proto
@@ -0,0 +1,92 @@
+// Copyright 2020 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.gapic.metadata;
+
+option csharp_namespace = "Google.Gapic.Metadata";
+option go_package = "google.golang.org/genproto/googleapis/gapic/metadata;metadata";
+option java_multiple_files = true;
+option java_outer_classname = "GapicMetadataProto";
+option java_package = "com.google.gapic.metadata";
+option php_namespace = "Google\\Gapic\\Metadata";
+option ruby_package = "Google::Gapic::Metadata";
+
+// Metadata about a GAPIC library for a specific combination of API, version, and
+// computer language.
+message GapicMetadata {
+ // Schema version of this proto. Current value: 1.0
+ string schema = 1;
+
+ // Any human-readable comments to be included in this file.
+ string comment = 2;
+
+ // Computer language of this generated language. This must be
+ // spelled out as it spoken in English, with no capitalization or
+ // separators (e.g. "csharp", "nodejs").
+ string language = 3;
+
+ // The proto package containing the API definition for which this
+ // GAPIC library was generated.
+ string proto_package = 4;
+
+ // The language-specific library package for this GAPIC library.
+ string library_package = 5;
+
+ // A map from each proto-defined service to ServiceForTransports,
+ // which allows listing information about transport-specific
+ // implementations of the service.
+ //
+ // The key is the name of the service as it appears in the .proto
+ // file.
+ map<string, ServiceForTransport> services = 6;
+
+ // A map from a transport name to ServiceAsClient, which allows
+ // listing information about the client objects that implement the
+ // parent RPC service for the specified transport.
+ //
+ // The key name is the transport, lower-cased with no separators
+ // (e.g. "grpc", "rest").
+ message ServiceForTransport {
+ map<string, ServiceAsClient> clients = 1;
+ }
+
+ // Information about a specific client implementing a proto-defined service.
+ message ServiceAsClient {
+ // The name of the library client formatted as it appears in the source code
+ string library_client = 1;
+
+ // A mapping from each proto-defined RPC name to the the list of
+ // methods in library_client that implement it. There can be more
+ // than one library_client method for each RPC. RPCs with no
+ // library_client methods need not be included.
+ //
+ // The key name is the name of the RPC as defined and formated in
+ // the proto file.
+ map<string, MethodList> rpcs = 2;
+ }
+
+ // List of GAPIC client methods implementing the proto-defined RPC
+ // for the transport and service specified in the containing
+ // structures.
+ message MethodList {
+ // List of methods for a specific proto-service client in the
+ // GAPIC. These names should be formatted as they appear in the
+ // source code.
+ repeated string methods = 1;
+ }
+
+}
diff --git a/contrib/libs/googleapis-common-protos/google/logging/type/README.md b/contrib/libs/googleapis-common-protos/google/logging/type/README.md
new file mode 100644
index 0000000000..2d51dc0417
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/logging/type/README.md
@@ -0,0 +1,12 @@
+## Logging types
+
+This package contains shared [protocol buffer][protobuf] types that are populated
+by the Stackdriver Logging API and consumed by other APIs.
+
+### Key Concepts
+
+- **HttpRequest**: Contains the complete set of information about a particular
+ HTTP request, such as HTTP method, request URL, status code, and other things.
+- **LogSeverity**: The severity of a log entry (e.g. `DEBUG`, `INFO`, `WARNING`).
+
+[protobuf]: https://developers.google.com/protocol-buffers/
diff --git a/contrib/libs/googleapis-common-protos/google/logging/type/http_request.proto b/contrib/libs/googleapis-common-protos/google/logging/type/http_request.proto
new file mode 100644
index 0000000000..8b9301f117
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/logging/type/http_request.proto
@@ -0,0 +1,92 @@
+// Copyright 2017 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.logging.type;
+
+import "google/api/annotations.proto";
+import "google/protobuf/duration.proto";
+
+option csharp_namespace = "Google.Cloud.Logging.Type";
+option go_package = "google.golang.org/genproto/googleapis/logging/type;ltype";
+option java_multiple_files = true;
+option java_outer_classname = "HttpRequestProto";
+option java_package = "com.google.logging.type";
+option php_namespace = "Google\\Cloud\\Logging\\Type";
+
+
+// A common proto for logging HTTP requests. Only contains semantics
+// defined by the HTTP specification. Product-specific logging
+// information MUST be defined in a separate message.
+message HttpRequest {
+ // The request method. Examples: `"GET"`, `"HEAD"`, `"PUT"`, `"POST"`.
+ string request_method = 1;
+
+ // The scheme (http, https), the host name, the path and the query
+ // portion of the URL that was requested.
+ // Example: `"http://example.com/some/info?color=red"`.
+ string request_url = 2;
+
+ // The size of the HTTP request message in bytes, including the request
+ // headers and the request body.
+ int64 request_size = 3;
+
+ // The response code indicating the status of response.
+ // Examples: 200, 404.
+ int32 status = 4;
+
+ // The size of the HTTP response message sent back to the client, in bytes,
+ // including the response headers and the response body.
+ int64 response_size = 5;
+
+ // The user agent sent by the client. Example:
+ // `"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET CLR 1.0.3705)"`.
+ string user_agent = 6;
+
+ // The IP address (IPv4 or IPv6) of the client that issued the HTTP
+ // request. Examples: `"192.168.1.1"`, `"FE80::0202:B3FF:FE1E:8329"`.
+ string remote_ip = 7;
+
+ // The IP address (IPv4 or IPv6) of the origin server that the request was
+ // sent to.
+ string server_ip = 13;
+
+ // The referer URL of the request, as defined in
+ // [HTTP/1.1 Header Field Definitions](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html).
+ string referer = 8;
+
+ // The request processing latency on the server, from the time the request was
+ // received until the response was sent.
+ google.protobuf.Duration latency = 14;
+
+ // Whether or not a cache lookup was attempted.
+ bool cache_lookup = 11;
+
+ // Whether or not an entity was served from cache
+ // (with or without validation).
+ bool cache_hit = 9;
+
+ // Whether or not the response was validated with the origin server before
+ // being served from cache. This field is only meaningful if `cache_hit` is
+ // True.
+ bool cache_validated_with_origin_server = 10;
+
+ // The number of HTTP response bytes inserted into cache. Set only when a
+ // cache fill was attempted.
+ int64 cache_fill_bytes = 12;
+
+ // Protocol used for the request. Examples: "HTTP/1.1", "HTTP/2", "websocket"
+ string protocol = 15;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/logging/type/log_severity.proto b/contrib/libs/googleapis-common-protos/google/logging/type/log_severity.proto
new file mode 100644
index 0000000000..41351c6765
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/logging/type/log_severity.proto
@@ -0,0 +1,72 @@
+// Copyright 2017 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.logging.type;
+
+import "google/api/annotations.proto";
+
+option csharp_namespace = "Google.Cloud.Logging.Type";
+option go_package = "google.golang.org/genproto/googleapis/logging/type;ltype";
+option java_multiple_files = true;
+option java_outer_classname = "LogSeverityProto";
+option java_package = "com.google.logging.type";
+option php_namespace = "Google\\Cloud\\Logging\\Type";
+
+
+// The severity of the event described in a log entry, expressed as one of the
+// standard severity levels listed below. For your reference, the levels are
+// assigned the listed numeric values. The effect of using numeric values other
+// than those listed is undefined.
+//
+// You can filter for log entries by severity. For example, the following
+// filter expression will match log entries with severities `INFO`, `NOTICE`,
+// and `WARNING`:
+//
+// severity > DEBUG AND severity <= WARNING
+//
+// If you are writing log entries, you should map other severity encodings to
+// one of these standard levels. For example, you might map all of Java's FINE,
+// FINER, and FINEST levels to `LogSeverity.DEBUG`. You can preserve the
+// original severity level in the log entry payload if you wish.
+enum LogSeverity {
+ // (0) The log entry has no assigned severity level.
+ DEFAULT = 0;
+
+ // (100) Debug or trace information.
+ DEBUG = 100;
+
+ // (200) Routine information, such as ongoing status or performance.
+ INFO = 200;
+
+ // (300) Normal but significant events, such as start up, shut down, or
+ // a configuration change.
+ NOTICE = 300;
+
+ // (400) Warning events might cause problems.
+ WARNING = 400;
+
+ // (500) Error events are likely to cause problems.
+ ERROR = 500;
+
+ // (600) Critical events cause more severe problems or outages.
+ CRITICAL = 600;
+
+ // (700) A person must take an action immediately.
+ ALERT = 700;
+
+ // (800) One or more systems are unusable.
+ EMERGENCY = 800;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/longrunning/README.md b/contrib/libs/googleapis-common-protos/google/longrunning/README.md
new file mode 100644
index 0000000000..7eba891ea0
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/longrunning/README.md
@@ -0,0 +1,31 @@
+## Long-running Operations API
+
+This package contains the definition of an abstract interface that
+manages long running operations with API services.
+
+### Operation
+
+The primary message to understand within LRO is the `Operation` message.
+Operations have a unique name (in the context of a particular endpoint).
+Additionally, a service (called `Operations` -- plural) defines the interface
+for querying the state of any given operation.
+
+APIs that implement a concept of long-running operations are encouraged
+to follow this pattern: When a caller invokes an API backend to start a job...
+
+ * The API backend starts asychronous work to fulfill the caller's
+ request, and generates a unique name (the `Operation` name) to refer
+ to the ongoing asychronous work.
+ * The API backend immediately returns the `Operation` back to the caller.
+ * The caller can invoke the API methods defined in the `Operations` service
+ to get the current status of the asychronous work, and also to
+ discover the final result (success or error).
+
+For Google APIs, the implementation of this pattern and the use of this
+proto are part of our [design rules][operations-rules]. Additionally, our
+[API client tooling][gapic-generator] seeks to be intelligent about these, to
+improve the client API consumption experience. Therefore, APIs outside of
+Google can also benefit by following this same pattern.
+
+ [operations-rules]: https://cloud.google.com/apis/design/design_patterns#long_running_operations
+ [gapic-generator]: https://github.com/googleapis/gapic-generator
diff --git a/contrib/libs/googleapis-common-protos/google/longrunning/operations.proto b/contrib/libs/googleapis-common-protos/google/longrunning/operations.proto
new file mode 100644
index 0000000000..299eefb2e5
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/longrunning/operations.proto
@@ -0,0 +1,247 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.longrunning;
+
+import "google/api/annotations.proto";
+import "google/api/client.proto";
+import "google/protobuf/any.proto";
+import "google/protobuf/duration.proto";
+import "google/protobuf/empty.proto";
+import "google/rpc/status.proto";
+import "google/protobuf/descriptor.proto";
+
+option cc_enable_arenas = true;
+option csharp_namespace = "Google.LongRunning";
+option go_package = "google.golang.org/genproto/googleapis/longrunning;longrunning";
+option java_multiple_files = true;
+option java_outer_classname = "OperationsProto";
+option java_package = "com.google.longrunning";
+option php_namespace = "Google\\LongRunning";
+
+extend google.protobuf.MethodOptions {
+ // Additional information regarding long-running operations.
+ // In particular, this specifies the types that are returned from
+ // long-running operations.
+ //
+ // Required for methods that return `google.longrunning.Operation`; invalid
+ // otherwise.
+ google.longrunning.OperationInfo operation_info = 1049;
+}
+
+// Manages long-running operations with an API service.
+//
+// When an API method normally takes long time to complete, it can be designed
+// to return [Operation][google.longrunning.Operation] to the client, and the client can use this
+// interface to receive the real response asynchronously by polling the
+// operation resource, or pass the operation resource to another API (such as
+// Google Cloud Pub/Sub API) to receive the response. Any API service that
+// returns long-running operations should implement the `Operations` interface
+// so developers can have a consistent client experience.
+service Operations {
+ option (google.api.default_host) = "longrunning.googleapis.com";
+
+ // Lists operations that match the specified filter in the request. If the
+ // server doesn't support this method, it returns `UNIMPLEMENTED`.
+ //
+ // NOTE: the `name` binding allows API services to override the binding
+ // to use different resource name schemes, such as `users/*/operations`. To
+ // override the binding, API services can add a binding such as
+ // `"/v1/{name=users/*}/operations"` to their service configuration.
+ // For backwards compatibility, the default name includes the operations
+ // collection id, however overriding users must ensure the name binding
+ // is the parent resource, without the operations collection id.
+ rpc ListOperations(ListOperationsRequest) returns (ListOperationsResponse) {
+ option (google.api.http) = {
+ get: "/v1/{name=operations}"
+ };
+ option (google.api.method_signature) = "name,filter";
+ }
+
+ // Gets the latest state of a long-running operation. Clients can use this
+ // method to poll the operation result at intervals as recommended by the API
+ // service.
+ rpc GetOperation(GetOperationRequest) returns (Operation) {
+ option (google.api.http) = {
+ get: "/v1/{name=operations/**}"
+ };
+ option (google.api.method_signature) = "name";
+ }
+
+ // Deletes a long-running operation. This method indicates that the client is
+ // no longer interested in the operation result. It does not cancel the
+ // operation. If the server doesn't support this method, it returns
+ // `google.rpc.Code.UNIMPLEMENTED`.
+ rpc DeleteOperation(DeleteOperationRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete: "/v1/{name=operations/**}"
+ };
+ option (google.api.method_signature) = "name";
+ }
+
+ // Starts asynchronous cancellation on a long-running operation. The server
+ // makes a best effort to cancel the operation, but success is not
+ // guaranteed. If the server doesn't support this method, it returns
+ // `google.rpc.Code.UNIMPLEMENTED`. Clients can use
+ // [Operations.GetOperation][google.longrunning.Operations.GetOperation] or
+ // other methods to check whether the cancellation succeeded or whether the
+ // operation completed despite cancellation. On successful cancellation,
+ // the operation is not deleted; instead, it becomes an operation with
+ // an [Operation.error][google.longrunning.Operation.error] value with a [google.rpc.Status.code][google.rpc.Status.code] of 1,
+ // corresponding to `Code.CANCELLED`.
+ rpc CancelOperation(CancelOperationRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post: "/v1/{name=operations/**}:cancel"
+ body: "*"
+ };
+ option (google.api.method_signature) = "name";
+ }
+
+ // Waits for the specified long-running operation until it is done or reaches
+ // at most a specified timeout, returning the latest state. If the operation
+ // is already done, the latest state is immediately returned. If the timeout
+ // specified is greater than the default HTTP/RPC timeout, the HTTP/RPC
+ // timeout is used. If the server does not support this method, it returns
+ // `google.rpc.Code.UNIMPLEMENTED`.
+ // Note that this method is on a best-effort basis. It may return the latest
+ // state before the specified timeout (including immediately), meaning even an
+ // immediate response is no guarantee that the operation is done.
+ rpc WaitOperation(WaitOperationRequest) returns (Operation) {
+ }
+}
+
+// This resource represents a long-running operation that is the result of a
+// network API call.
+message Operation {
+ // The server-assigned name, which is only unique within the same service that
+ // originally returns it. If you use the default HTTP mapping, the
+ // `name` should be a resource name ending with `operations/{unique_id}`.
+ string name = 1;
+
+ // Service-specific metadata associated with the operation. It typically
+ // contains progress information and common metadata such as create time.
+ // Some services might not provide such metadata. Any method that returns a
+ // long-running operation should document the metadata type, if any.
+ google.protobuf.Any metadata = 2;
+
+ // If the value is `false`, it means the operation is still in progress.
+ // If `true`, the operation is completed, and either `error` or `response` is
+ // available.
+ bool done = 3;
+
+ // The operation result, which can be either an `error` or a valid `response`.
+ // If `done` == `false`, neither `error` nor `response` is set.
+ // If `done` == `true`, exactly one of `error` or `response` is set.
+ oneof result {
+ // The error result of the operation in case of failure or cancellation.
+ google.rpc.Status error = 4;
+
+ // The normal response of the operation in case of success. If the original
+ // method returns no data on success, such as `Delete`, the response is
+ // `google.protobuf.Empty`. If the original method is standard
+ // `Get`/`Create`/`Update`, the response should be the resource. For other
+ // methods, the response should have the type `XxxResponse`, where `Xxx`
+ // is the original method name. For example, if the original method name
+ // is `TakeSnapshot()`, the inferred response type is
+ // `TakeSnapshotResponse`.
+ google.protobuf.Any response = 5;
+ }
+}
+
+// The request message for [Operations.GetOperation][google.longrunning.Operations.GetOperation].
+message GetOperationRequest {
+ // The name of the operation resource.
+ string name = 1;
+}
+
+// The request message for [Operations.ListOperations][google.longrunning.Operations.ListOperations].
+message ListOperationsRequest {
+ // The name of the operation's parent resource.
+ string name = 4;
+
+ // The standard list filter.
+ string filter = 1;
+
+ // The standard list page size.
+ int32 page_size = 2;
+
+ // The standard list page token.
+ string page_token = 3;
+}
+
+// The response message for [Operations.ListOperations][google.longrunning.Operations.ListOperations].
+message ListOperationsResponse {
+ // A list of operations that matches the specified filter in the request.
+ repeated Operation operations = 1;
+
+ // The standard List next-page token.
+ string next_page_token = 2;
+}
+
+// The request message for [Operations.CancelOperation][google.longrunning.Operations.CancelOperation].
+message CancelOperationRequest {
+ // The name of the operation resource to be cancelled.
+ string name = 1;
+}
+
+// The request message for [Operations.DeleteOperation][google.longrunning.Operations.DeleteOperation].
+message DeleteOperationRequest {
+ // The name of the operation resource to be deleted.
+ string name = 1;
+}
+
+// The request message for [Operations.WaitOperation][google.longrunning.Operations.WaitOperation].
+message WaitOperationRequest {
+ // The name of the operation resource to wait on.
+ string name = 1;
+
+ // The maximum duration to wait before timing out. If left blank, the wait
+ // will be at most the time permitted by the underlying HTTP/RPC protocol.
+ // If RPC context deadline is also specified, the shorter one will be used.
+ google.protobuf.Duration timeout = 2;
+}
+
+// A message representing the message types used by a long-running operation.
+//
+// Example:
+//
+// rpc LongRunningRecognize(LongRunningRecognizeRequest)
+// returns (google.longrunning.Operation) {
+// option (google.longrunning.operation_info) = {
+// response_type: "LongRunningRecognizeResponse"
+// metadata_type: "LongRunningRecognizeMetadata"
+// };
+// }
+message OperationInfo {
+ // Required. The message name of the primary return type for this
+ // long-running operation.
+ // This type will be used to deserialize the LRO's response.
+ //
+ // If the response is in a different package from the rpc, a fully-qualified
+ // message name must be used (e.g. `google.protobuf.Struct`).
+ //
+ // Note: Altering this value constitutes a breaking change.
+ string response_type = 1;
+
+ // Required. The message name of the metadata type for this long-running
+ // operation.
+ //
+ // If the response is in a different package from the rpc, a fully-qualified
+ // message name must be used (e.g. `google.protobuf.Struct`).
+ //
+ // Note: Altering this value constitutes a breaking change.
+ string metadata_type = 2;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/rpc/README.md b/contrib/libs/googleapis-common-protos/google/rpc/README.md
new file mode 100644
index 0000000000..b47750076b
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/rpc/README.md
@@ -0,0 +1,18 @@
+## RPC (Remote Procedure Call) Types
+
+This package contains [protocol buffer][protobuf] types that represent remote procedure
+call concepts. While [gRPC](https://grpc.io) uses these types, we encourage their
+use in any interested RPC implementation to promote compatibility and consistency.
+
+### Key Concepts
+
+- **Code**: An enum that represents an error code returned by an RPC. These error codes
+ map to HTTP codes, but are slightly finer-grained. Every gRPC code has exactly one
+ corresponding HTTP code; however, some HTTP codes have more than one corresponding
+ gRPC code.
+- **Error details**: Any of the types contained in `error_details.proto` which provide
+ extra details about particular types of failures.
+- **Status**: Combines a code, message, and error details to represent the success or
+ failure details of an RPC call.
+
+[protobuf]: https://developers.google.com/protocol-buffers/
diff --git a/contrib/libs/googleapis-common-protos/google/rpc/code.proto b/contrib/libs/googleapis-common-protos/google/rpc/code.proto
new file mode 100644
index 0000000000..98ae0ac18f
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/rpc/code.proto
@@ -0,0 +1,186 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.rpc;
+
+option go_package = "google.golang.org/genproto/googleapis/rpc/code;code";
+option java_multiple_files = true;
+option java_outer_classname = "CodeProto";
+option java_package = "com.google.rpc";
+option objc_class_prefix = "RPC";
+
+// The canonical error codes for gRPC APIs.
+//
+//
+// Sometimes multiple error codes may apply. Services should return
+// the most specific error code that applies. For example, prefer
+// `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply.
+// Similarly prefer `NOT_FOUND` or `ALREADY_EXISTS` over `FAILED_PRECONDITION`.
+enum Code {
+ // Not an error; returned on success
+ //
+ // HTTP Mapping: 200 OK
+ OK = 0;
+
+ // The operation was cancelled, typically by the caller.
+ //
+ // HTTP Mapping: 499 Client Closed Request
+ CANCELLED = 1;
+
+ // Unknown error. For example, this error may be returned when
+ // a `Status` value received from another address space belongs to
+ // an error space that is not known in this address space. Also
+ // errors raised by APIs that do not return enough error information
+ // may be converted to this error.
+ //
+ // HTTP Mapping: 500 Internal Server Error
+ UNKNOWN = 2;
+
+ // The client specified an invalid argument. Note that this differs
+ // from `FAILED_PRECONDITION`. `INVALID_ARGUMENT` indicates arguments
+ // that are problematic regardless of the state of the system
+ // (e.g., a malformed file name).
+ //
+ // HTTP Mapping: 400 Bad Request
+ INVALID_ARGUMENT = 3;
+
+ // The deadline expired before the operation could complete. For operations
+ // that change the state of the system, this error may be returned
+ // even if the operation has completed successfully. For example, a
+ // successful response from a server could have been delayed long
+ // enough for the deadline to expire.
+ //
+ // HTTP Mapping: 504 Gateway Timeout
+ DEADLINE_EXCEEDED = 4;
+
+ // Some requested entity (e.g., file or directory) was not found.
+ //
+ // Note to server developers: if a request is denied for an entire class
+ // of users, such as gradual feature rollout or undocumented whitelist,
+ // `NOT_FOUND` may be used. If a request is denied for some users within
+ // a class of users, such as user-based access control, `PERMISSION_DENIED`
+ // must be used.
+ //
+ // HTTP Mapping: 404 Not Found
+ NOT_FOUND = 5;
+
+ // The entity that a client attempted to create (e.g., file or directory)
+ // already exists.
+ //
+ // HTTP Mapping: 409 Conflict
+ ALREADY_EXISTS = 6;
+
+ // The caller does not have permission to execute the specified
+ // operation. `PERMISSION_DENIED` must not be used for rejections
+ // caused by exhausting some resource (use `RESOURCE_EXHAUSTED`
+ // instead for those errors). `PERMISSION_DENIED` must not be
+ // used if the caller can not be identified (use `UNAUTHENTICATED`
+ // instead for those errors). This error code does not imply the
+ // request is valid or the requested entity exists or satisfies
+ // other pre-conditions.
+ //
+ // HTTP Mapping: 403 Forbidden
+ PERMISSION_DENIED = 7;
+
+ // The request does not have valid authentication credentials for the
+ // operation.
+ //
+ // HTTP Mapping: 401 Unauthorized
+ UNAUTHENTICATED = 16;
+
+ // Some resource has been exhausted, perhaps a per-user quota, or
+ // perhaps the entire file system is out of space.
+ //
+ // HTTP Mapping: 429 Too Many Requests
+ RESOURCE_EXHAUSTED = 8;
+
+ // The operation was rejected because the system is not in a state
+ // required for the operation's execution. For example, the directory
+ // to be deleted is non-empty, an rmdir operation is applied to
+ // a non-directory, etc.
+ //
+ // Service implementors can use the following guidelines to decide
+ // between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`:
+ // (a) Use `UNAVAILABLE` if the client can retry just the failing call.
+ // (b) Use `ABORTED` if the client should retry at a higher level
+ // (e.g., when a client-specified test-and-set fails, indicating the
+ // client should restart a read-modify-write sequence).
+ // (c) Use `FAILED_PRECONDITION` if the client should not retry until
+ // the system state has been explicitly fixed. E.g., if an "rmdir"
+ // fails because the directory is non-empty, `FAILED_PRECONDITION`
+ // should be returned since the client should not retry unless
+ // the files are deleted from the directory.
+ //
+ // HTTP Mapping: 400 Bad Request
+ FAILED_PRECONDITION = 9;
+
+ // The operation was aborted, typically due to a concurrency issue such as
+ // a sequencer check failure or transaction abort.
+ //
+ // See the guidelines above for deciding between `FAILED_PRECONDITION`,
+ // `ABORTED`, and `UNAVAILABLE`.
+ //
+ // HTTP Mapping: 409 Conflict
+ ABORTED = 10;
+
+ // The operation was attempted past the valid range. E.g., seeking or
+ // reading past end-of-file.
+ //
+ // Unlike `INVALID_ARGUMENT`, this error indicates a problem that may
+ // be fixed if the system state changes. For example, a 32-bit file
+ // system will generate `INVALID_ARGUMENT` if asked to read at an
+ // offset that is not in the range [0,2^32-1], but it will generate
+ // `OUT_OF_RANGE` if asked to read from an offset past the current
+ // file size.
+ //
+ // There is a fair bit of overlap between `FAILED_PRECONDITION` and
+ // `OUT_OF_RANGE`. We recommend using `OUT_OF_RANGE` (the more specific
+ // error) when it applies so that callers who are iterating through
+ // a space can easily look for an `OUT_OF_RANGE` error to detect when
+ // they are done.
+ //
+ // HTTP Mapping: 400 Bad Request
+ OUT_OF_RANGE = 11;
+
+ // The operation is not implemented or is not supported/enabled in this
+ // service.
+ //
+ // HTTP Mapping: 501 Not Implemented
+ UNIMPLEMENTED = 12;
+
+ // Internal errors. This means that some invariants expected by the
+ // underlying system have been broken. This error code is reserved
+ // for serious errors.
+ //
+ // HTTP Mapping: 500 Internal Server Error
+ INTERNAL = 13;
+
+ // The service is currently unavailable. This is most likely a
+ // transient condition, which can be corrected by retrying with
+ // a backoff. Note that it is not always safe to retry
+ // non-idempotent operations.
+ //
+ // See the guidelines above for deciding between `FAILED_PRECONDITION`,
+ // `ABORTED`, and `UNAVAILABLE`.
+ //
+ // HTTP Mapping: 503 Service Unavailable
+ UNAVAILABLE = 14;
+
+ // Unrecoverable data loss or corruption.
+ //
+ // HTTP Mapping: 500 Internal Server Error
+ DATA_LOSS = 15;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/rpc/context/attribute_context.proto b/contrib/libs/googleapis-common-protos/google/rpc/context/attribute_context.proto
new file mode 100644
index 0000000000..e60a5ae94e
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/rpc/context/attribute_context.proto
@@ -0,0 +1,287 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.rpc.context;
+
+import "google/protobuf/struct.proto";
+import "google/protobuf/timestamp.proto";
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/rpc/context/attribute_context;attribute_context";
+option java_multiple_files = true;
+option java_outer_classname = "AttributeContextProto";
+option java_package = "com.google.rpc.context";
+
+// This message defines the standard attribute vocabulary for Google APIs.
+//
+// An attribute is a piece of metadata that describes an activity on a network
+// service. For example, the size of an HTTP request, or the status code of
+// an HTTP response.
+//
+// Each attribute has a type and a name, which is logically defined as
+// a proto message field in `AttributeContext`. The field type becomes the
+// attribute type, and the field path becomes the attribute name. For example,
+// the attribute `source.ip` maps to field `AttributeContext.source.ip`.
+//
+// This message definition is guaranteed not to have any wire breaking change.
+// So you can use it directly for passing attributes across different systems.
+//
+// NOTE: Different system may generate different subset of attributes. Please
+// verify the system specification before relying on an attribute generated
+// a system.
+message AttributeContext {
+ // This message defines attributes for a node that handles a network request.
+ // The node can be either a service or an application that sends, forwards,
+ // or receives the request. Service peers should fill in
+ // `principal` and `labels` as appropriate.
+ message Peer {
+ // The IP address of the peer.
+ string ip = 1;
+
+ // The network port of the peer.
+ int64 port = 2;
+
+ // The labels associated with the peer.
+ map<string, string> labels = 6;
+
+ // The identity of this peer. Similar to `Request.auth.principal`, but
+ // relative to the peer instead of the request. For example, the
+ // idenity associated with a load balancer that forwared the request.
+ string principal = 7;
+
+ // The CLDR country/region code associated with the above IP address.
+ // If the IP address is private, the `region_code` should reflect the
+ // physical location where this peer is running.
+ string region_code = 8;
+ }
+
+ // This message defines attributes associated with API operations, such as
+ // a network API request. The terminology is based on the conventions used
+ // by Google APIs, Istio, and OpenAPI.
+ message Api {
+ // The API service name. It is a logical identifier for a networked API,
+ // such as "pubsub.googleapis.com". The naming syntax depends on the
+ // API management system being used for handling the request.
+ string service = 1;
+
+ // The API operation name. For gRPC requests, it is the fully qualified API
+ // method name, such as "google.pubsub.v1.Publisher.Publish". For OpenAPI
+ // requests, it is the `operationId`, such as "getPet".
+ string operation = 2;
+
+ // The API protocol used for sending the request, such as "http", "https",
+ // "grpc", or "internal".
+ string protocol = 3;
+
+ // The API version associated with the API operation above, such as "v1" or
+ // "v1alpha1".
+ string version = 4;
+ }
+
+ // This message defines request authentication attributes. Terminology is
+ // based on the JSON Web Token (JWT) standard, but the terms also
+ // correlate to concepts in other standards.
+ message Auth {
+ // The authenticated principal. Reflects the issuer (`iss`) and subject
+ // (`sub`) claims within a JWT. The issuer and subject should be `/`
+ // delimited, with `/` percent-encoded within the subject fragment. For
+ // Google accounts, the principal format is:
+ // "https://accounts.google.com/{id}"
+ string principal = 1;
+
+ // The intended audience(s) for this authentication information. Reflects
+ // the audience (`aud`) claim within a JWT. The audience
+ // value(s) depends on the `issuer`, but typically include one or more of
+ // the following pieces of information:
+ //
+ // * The services intended to receive the credential such as
+ // ["pubsub.googleapis.com", "storage.googleapis.com"]
+ // * A set of service-based scopes. For example,
+ // ["https://www.googleapis.com/auth/cloud-platform"]
+ // * The client id of an app, such as the Firebase project id for JWTs
+ // from Firebase Auth.
+ //
+ // Consult the documentation for the credential issuer to determine the
+ // information provided.
+ repeated string audiences = 2;
+
+ // The authorized presenter of the credential. Reflects the optional
+ // Authorized Presenter (`azp`) claim within a JWT or the
+ // OAuth client id. For example, a Google Cloud Platform client id looks
+ // as follows: "123456789012.apps.googleusercontent.com".
+ string presenter = 3;
+
+ // Structured claims presented with the credential. JWTs include
+ // `{key: value}` pairs for standard and private claims. The following
+ // is a subset of the standard required and optional claims that would
+ // typically be presented for a Google-based JWT:
+ //
+ // {'iss': 'accounts.google.com',
+ // 'sub': '113289723416554971153',
+ // 'aud': ['123456789012', 'pubsub.googleapis.com'],
+ // 'azp': '123456789012.apps.googleusercontent.com',
+ // 'email': 'jsmith@example.com',
+ // 'iat': 1353601026,
+ // 'exp': 1353604926}
+ //
+ // SAML assertions are similarly specified, but with an identity provider
+ // dependent structure.
+ google.protobuf.Struct claims = 4;
+
+ // A list of access level resource names that allow resources to be
+ // accessed by authenticated requester. It is part of Secure GCP processing
+ // for the incoming request. An access level string has the format:
+ // "//{api_service_name}/accessPolicies/{policy_id}/accessLevels/{short_name}"
+ //
+ // Example:
+ // "//accesscontextmanager.googleapis.com/accessPolicies/MY_POLICY_ID/accessLevels/MY_LEVEL"
+ repeated string access_levels = 5;
+ }
+
+ // This message defines attributes for an HTTP request. If the actual
+ // request is not an HTTP request, the runtime system should try to map
+ // the actual request to an equivalent HTTP request.
+ message Request {
+ // The unique ID for a request, which can be propagated to downstream
+ // systems. The ID should have low probability of collision
+ // within a single day for a specific service.
+ string id = 1;
+
+ // The HTTP request method, such as `GET`, `POST`.
+ string method = 2;
+
+ // The HTTP request headers. If multiple headers share the same key, they
+ // must be merged according to the HTTP spec. All header keys must be
+ // lowercased, because HTTP header keys are case-insensitive.
+ map<string, string> headers = 3;
+
+ // The HTTP URL path.
+ string path = 4;
+
+ // The HTTP request `Host` header value.
+ string host = 5;
+
+ // The HTTP URL scheme, such as `http` and `https`.
+ string scheme = 6;
+
+ // The HTTP URL query in the format of `name1=value1&name2=value2`, as it
+ // appears in the first line of the HTTP request. No decoding is performed.
+ string query = 7;
+
+ // The timestamp when the `destination` service receives the first byte of
+ // the request.
+ google.protobuf.Timestamp time = 9;
+
+ // The HTTP request size in bytes. If unknown, it must be -1.
+ int64 size = 10;
+
+ // The network protocol used with the request, such as "http/1.1",
+ // "spdy/3", "h2", "h2c", "webrtc", "tcp", "udp", "quic". See
+ // https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids
+ // for details.
+ string protocol = 11;
+
+ // A special parameter for request reason. It is used by security systems
+ // to associate auditing information with a request.
+ string reason = 12;
+
+ // The request authentication. May be absent for unauthenticated requests.
+ // Derived from the HTTP request `Authorization` header or equivalent.
+ Auth auth = 13;
+ }
+
+ // This message defines attributes for a typical network response. It
+ // generally models semantics of an HTTP response.
+ message Response {
+ // The HTTP response status code, such as `200` and `404`.
+ int64 code = 1;
+
+ // The HTTP response size in bytes. If unknown, it must be -1.
+ int64 size = 2;
+
+ // The HTTP response headers. If multiple headers share the same key, they
+ // must be merged according to HTTP spec. All header keys must be
+ // lowercased, because HTTP header keys are case-insensitive.
+ map<string, string> headers = 3;
+
+ // The timestamp when the `destination` service generates the first byte of
+ // the response.
+ google.protobuf.Timestamp time = 4;
+ }
+
+ // This message defines core attributes for a resource. A resource is an
+ // addressable (named) entity provided by the destination service. For
+ // example, a file stored on a network storage service.
+ message Resource {
+ // The name of the service that this resource belongs to, such as
+ // `pubsub.googleapis.com`. The service may be different from the DNS
+ // hostname that actually serves the request.
+ string service = 1;
+
+ // The stable identifier (name) of a resource on the `service`. A resource
+ // can be logically identified as "//{resource.service}/{resource.name}".
+ // The differences between a resource name and a URI are:
+ //
+ // * Resource name is a logical identifier, independent of network
+ // protocol and API version. For example,
+ // `//pubsub.googleapis.com/projects/123/topics/news-feed`.
+ // * URI often includes protocol and version information, so it can
+ // be used directly by applications. For example,
+ // `https://pubsub.googleapis.com/v1/projects/123/topics/news-feed`.
+ //
+ // See https://cloud.google.com/apis/design/resource_names for details.
+ string name = 2;
+
+ // The type of the resource. The syntax is platform-specific because
+ // different platforms define their resources differently.
+ //
+ // For Google APIs, the type format must be "{service}/{kind}".
+ string type = 3;
+
+ // The labels or tags on the resource, such as AWS resource tags and
+ // Kubernetes resource labels.
+ map<string, string> labels = 4;
+ }
+
+ // The origin of a network activity. In a multi hop network activity,
+ // the origin represents the sender of the first hop. For the first hop,
+ // the `source` and the `origin` must have the same content.
+ Peer origin = 7;
+
+ // The source of a network activity, such as starting a TCP connection.
+ // In a multi hop network activity, the source represents the sender of the
+ // last hop.
+ Peer source = 1;
+
+ // The destination of a network activity, such as accepting a TCP connection.
+ // In a multi hop network activity, the destination represents the receiver of
+ // the last hop.
+ Peer destination = 2;
+
+ // Represents a network request, such as an HTTP request.
+ Request request = 3;
+
+ // Represents a network response, such as an HTTP response.
+ Response response = 4;
+
+ // Represents a target resource that is involved with a network activity.
+ // If multiple resources are involved with an activity, this must be the
+ // primary one.
+ Resource resource = 5;
+
+ // Represents an API operation that is involved to a network activity.
+ Api api = 6;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/rpc/error_details.proto b/contrib/libs/googleapis-common-protos/google/rpc/error_details.proto
new file mode 100644
index 0000000000..4862ebfe88
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/rpc/error_details.proto
@@ -0,0 +1,246 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.rpc;
+
+import "google/protobuf/duration.proto";
+
+option go_package = "google.golang.org/genproto/googleapis/rpc/errdetails;errdetails";
+option java_multiple_files = true;
+option java_outer_classname = "ErrorDetailsProto";
+option java_package = "com.google.rpc";
+option objc_class_prefix = "RPC";
+
+// Describes when the clients can retry a failed request. Clients could ignore
+// the recommendation here or retry when this information is missing from error
+// responses.
+//
+// It's always recommended that clients should use exponential backoff when
+// retrying.
+//
+// Clients should wait until `retry_delay` amount of time has passed since
+// receiving the error response before retrying. If retrying requests also
+// fail, clients should use an exponential backoff scheme to gradually increase
+// the delay between retries based on `retry_delay`, until either a maximum
+// number of retries have been reached or a maximum retry delay cap has been
+// reached.
+message RetryInfo {
+ // Clients should wait at least this long between retrying the same request.
+ google.protobuf.Duration retry_delay = 1;
+}
+
+// Describes additional debugging info.
+message DebugInfo {
+ // The stack trace entries indicating where the error occurred.
+ repeated string stack_entries = 1;
+
+ // Additional debugging information provided by the server.
+ string detail = 2;
+}
+
+// Describes how a quota check failed.
+//
+// For example if a daily limit was exceeded for the calling project,
+// a service could respond with a QuotaFailure detail containing the project
+// id and the description of the quota limit that was exceeded. If the
+// calling project hasn't enabled the service in the developer console, then
+// a service could respond with the project id and set `service_disabled`
+// to true.
+//
+// Also see RetryInfo and Help types for other details about handling a
+// quota failure.
+message QuotaFailure {
+ // A message type used to describe a single quota violation. For example, a
+ // daily quota or a custom quota that was exceeded.
+ message Violation {
+ // The subject on which the quota check failed.
+ // For example, "clientip:<ip address of client>" or "project:<Google
+ // developer project id>".
+ string subject = 1;
+
+ // A description of how the quota check failed. Clients can use this
+ // description to find more about the quota configuration in the service's
+ // public documentation, or find the relevant quota limit to adjust through
+ // developer console.
+ //
+ // For example: "Service disabled" or "Daily Limit for read operations
+ // exceeded".
+ string description = 2;
+ }
+
+ // Describes all quota violations.
+ repeated Violation violations = 1;
+}
+
+// Describes the cause of the error with structured details.
+//
+// Example of an error when contacting the "pubsub.googleapis.com" API when it
+// is not enabled:
+// { "reason": "API_DISABLED"
+// "domain": "googleapis.com"
+// "metadata": {
+// "resource": "projects/123",
+// "service": "pubsub.googleapis.com"
+// }
+// }
+// This response indicates that the pubsub.googleapis.com API is not enabled.
+//
+// Example of an error that is returned when attempting to create a Spanner
+// instance in a region that is out of stock:
+// { "reason": "STOCKOUT"
+// "domain": "spanner.googleapis.com",
+// "metadata": {
+// "availableRegions": "us-central1,us-east2"
+// }
+// }
+//
+message ErrorInfo {
+ // The reason of the error. This is a constant value that identifies the
+ // proximate cause of the error. Error reasons are unique within a particular
+ // domain of errors. This should be at most 63 characters and match
+ // /[A-Z0-9_]+/.
+ string reason = 1;
+
+ // The logical grouping to which the "reason" belongs. Often "domain" will
+ // contain the registered service name of the tool or product that is the
+ // source of the error. Example: "pubsub.googleapis.com". If the error is
+ // common across many APIs, the first segment of the example above will be
+ // omitted. The value will be, "googleapis.com".
+ string domain = 2;
+
+ // Additional structured details about this error.
+ //
+ // Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+ // length. When identifying the current value of an exceeded limit, the units
+ // should be contained in the key, not the value. For example, rather than
+ // {"instanceLimit": "100/request"}, should be returned as,
+ // {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+ // instances that can be created in a single (batch) request.
+ map<string, string> metadata = 3;
+}
+
+// Describes what preconditions have failed.
+//
+// For example, if an RPC failed because it required the Terms of Service to be
+// acknowledged, it could list the terms of service violation in the
+// PreconditionFailure message.
+message PreconditionFailure {
+ // A message type used to describe a single precondition failure.
+ message Violation {
+ // The type of PreconditionFailure. We recommend using a service-specific
+ // enum type to define the supported precondition violation subjects. For
+ // example, "TOS" for "Terms of Service violation".
+ string type = 1;
+
+ // The subject, relative to the type, that failed.
+ // For example, "google.com/cloud" relative to the "TOS" type would indicate
+ // which terms of service is being referenced.
+ string subject = 2;
+
+ // A description of how the precondition failed. Developers can use this
+ // description to understand how to fix the failure.
+ //
+ // For example: "Terms of service not accepted".
+ string description = 3;
+ }
+
+ // Describes all precondition violations.
+ repeated Violation violations = 1;
+}
+
+// Describes violations in a client request. This error type focuses on the
+// syntactic aspects of the request.
+message BadRequest {
+ // A message type used to describe a single bad request field.
+ message FieldViolation {
+ // A path leading to a field in the request body. The value will be a
+ // sequence of dot-separated identifiers that identify a protocol buffer
+ // field. E.g., "field_violations.field" would identify this field.
+ string field = 1;
+
+ // A description of why the request element is bad.
+ string description = 2;
+ }
+
+ // Describes all violations in a client request.
+ repeated FieldViolation field_violations = 1;
+}
+
+// Contains metadata about the request that clients can attach when filing a bug
+// or providing other forms of feedback.
+message RequestInfo {
+ // An opaque string that should only be interpreted by the service generating
+ // it. For example, it can be used to identify requests in the service's logs.
+ string request_id = 1;
+
+ // Any data that was used to serve this request. For example, an encrypted
+ // stack trace that can be sent back to the service provider for debugging.
+ string serving_data = 2;
+}
+
+// Describes the resource that is being accessed.
+message ResourceInfo {
+ // A name for the type of resource being accessed, e.g. "sql table",
+ // "cloud storage bucket", "file", "Google calendar"; or the type URL
+ // of the resource: e.g. "type.googleapis.com/google.pubsub.v1.Topic".
+ string resource_type = 1;
+
+ // The name of the resource being accessed. For example, a shared calendar
+ // name: "example.com_4fghdhgsrgh@group.calendar.google.com", if the current
+ // error is [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED].
+ string resource_name = 2;
+
+ // The owner of the resource (optional).
+ // For example, "user:<owner email>" or "project:<Google developer project
+ // id>".
+ string owner = 3;
+
+ // Describes what error is encountered when accessing this resource.
+ // For example, updating a cloud project may require the `writer` permission
+ // on the developer console project.
+ string description = 4;
+}
+
+// Provides links to documentation or for performing an out of band action.
+//
+// For example, if a quota check failed with an error indicating the calling
+// project hasn't enabled the accessed service, this can contain a URL pointing
+// directly to the right place in the developer console to flip the bit.
+message Help {
+ // Describes a URL link.
+ message Link {
+ // Describes what the link offers.
+ string description = 1;
+
+ // The URL of the link.
+ string url = 2;
+ }
+
+ // URL(s) pointing to additional information on handling the current error.
+ repeated Link links = 1;
+}
+
+// Provides a localized error message that is safe to return to the user
+// which can be attached to an RPC error.
+message LocalizedMessage {
+ // The locale used following the specification defined at
+ // http://www.rfc-editor.org/rfc/bcp/bcp47.txt.
+ // Examples are: "en-US", "fr-CH", "es-MX"
+ string locale = 1;
+
+ // The localized error message in the above locale.
+ string message = 2;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/rpc/status.proto b/contrib/libs/googleapis-common-protos/google/rpc/status.proto
new file mode 100644
index 0000000000..3b1f7a932f
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/rpc/status.proto
@@ -0,0 +1,47 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.rpc;
+
+import "google/protobuf/any.proto";
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/rpc/status;status";
+option java_multiple_files = true;
+option java_outer_classname = "StatusProto";
+option java_package = "com.google.rpc";
+option objc_class_prefix = "RPC";
+
+// The `Status` type defines a logical error model that is suitable for
+// different programming environments, including REST APIs and RPC APIs. It is
+// used by [gRPC](https://github.com/grpc). Each `Status` message contains
+// three pieces of data: error code, error message, and error details.
+//
+// You can find out more about this error model and how to work with it in the
+// [API Design Guide](https://cloud.google.com/apis/design/errors).
+message Status {
+ // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ int32 code = 1;
+
+ // A developer-facing error message, which should be in English. Any
+ // user-facing error message should be localized and sent in the
+ // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ string message = 2;
+
+ // A list of messages that carry the error details. There is a common set of
+ // message types for APIs to use.
+ repeated google.protobuf.Any details = 3;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/type/README.md b/contrib/libs/googleapis-common-protos/google/type/README.md
new file mode 100644
index 0000000000..adf1563a82
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/type/README.md
@@ -0,0 +1,7 @@
+## Google Common Types
+
+This package contains definitions of common types for Google APIs.
+All types defined in this package are suitable for different APIs to
+exchange data, and will never break binary compatibility. They should
+have design quality comparable to major programming languages like
+Java and C#.
diff --git a/contrib/libs/googleapis-common-protos/google/type/calendar_period.proto b/contrib/libs/googleapis-common-protos/google/type/calendar_period.proto
new file mode 100644
index 0000000000..a91d0c35c8
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/type/calendar_period.proto
@@ -0,0 +1,57 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.type;
+
+option go_package = "google.golang.org/genproto/googleapis/type/calendarperiod;calendarperiod";
+option java_multiple_files = true;
+option java_outer_classname = "CalendarPeriodProto";
+option java_package = "com.google.type";
+option objc_class_prefix = "GTP";
+
+// A `CalendarPeriod` represents the abstract concept of a time period that has
+// a canonical start. Grammatically, "the start of the current
+// `CalendarPeriod`." All calendar times begin at midnight UTC.
+enum CalendarPeriod {
+ // Undefined period, raises an error.
+ CALENDAR_PERIOD_UNSPECIFIED = 0;
+
+ // A day.
+ DAY = 1;
+
+ // A week. Weeks begin on Monday, following
+ // [ISO 8601](https://en.wikipedia.org/wiki/ISO_week_date).
+ WEEK = 2;
+
+ // A fortnight. The first calendar fortnight of the year begins at the start
+ // of week 1 according to
+ // [ISO 8601](https://en.wikipedia.org/wiki/ISO_week_date).
+ FORTNIGHT = 3;
+
+ // A month.
+ MONTH = 4;
+
+ // A quarter. Quarters start on dates 1-Jan, 1-Apr, 1-Jul, and 1-Oct of each
+ // year.
+ QUARTER = 5;
+
+ // A half-year. Half-years start on dates 1-Jan and 1-Jul.
+ HALF = 6;
+
+ // A year.
+ YEAR = 7;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/type/color.proto b/contrib/libs/googleapis-common-protos/google/type/color.proto
new file mode 100644
index 0000000000..417f1c4b19
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/type/color.proto
@@ -0,0 +1,170 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.type;
+
+import "google/protobuf/wrappers.proto";
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/type/color;color";
+option java_multiple_files = true;
+option java_outer_classname = "ColorProto";
+option java_package = "com.google.type";
+option objc_class_prefix = "GTP";
+
+// Represents a color in the RGBA color space. This representation is designed
+// for simplicity of conversion to/from color representations in various
+// languages over compactness; for example, the fields of this representation
+// can be trivially provided to the constructor of "java.awt.Color" in Java; it
+// can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+// method in iOS; and, with just a little work, it can be easily formatted into
+// a CSS "rgba()" string in JavaScript, as well.
+//
+// Note: this proto does not carry information about the absolute color space
+// that should be used to interpret the RGB value (e.g. sRGB, Adobe RGB,
+// DCI-P3, BT.2020, etc.). By default, applications SHOULD assume the sRGB color
+// space.
+//
+// Example (Java):
+//
+// import com.google.type.Color;
+//
+// // ...
+// public static java.awt.Color fromProto(Color protocolor) {
+// float alpha = protocolor.hasAlpha()
+// ? protocolor.getAlpha().getValue()
+// : 1.0;
+//
+// return new java.awt.Color(
+// protocolor.getRed(),
+// protocolor.getGreen(),
+// protocolor.getBlue(),
+// alpha);
+// }
+//
+// public static Color toProto(java.awt.Color color) {
+// float red = (float) color.getRed();
+// float green = (float) color.getGreen();
+// float blue = (float) color.getBlue();
+// float denominator = 255.0;
+// Color.Builder resultBuilder =
+// Color
+// .newBuilder()
+// .setRed(red / denominator)
+// .setGreen(green / denominator)
+// .setBlue(blue / denominator);
+// int alpha = color.getAlpha();
+// if (alpha != 255) {
+// result.setAlpha(
+// FloatValue
+// .newBuilder()
+// .setValue(((float) alpha) / denominator)
+// .build());
+// }
+// return resultBuilder.build();
+// }
+// // ...
+//
+// Example (iOS / Obj-C):
+//
+// // ...
+// static UIColor* fromProto(Color* protocolor) {
+// float red = [protocolor red];
+// float green = [protocolor green];
+// float blue = [protocolor blue];
+// FloatValue* alpha_wrapper = [protocolor alpha];
+// float alpha = 1.0;
+// if (alpha_wrapper != nil) {
+// alpha = [alpha_wrapper value];
+// }
+// return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+// }
+//
+// static Color* toProto(UIColor* color) {
+// CGFloat red, green, blue, alpha;
+// if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+// return nil;
+// }
+// Color* result = [[Color alloc] init];
+// [result setRed:red];
+// [result setGreen:green];
+// [result setBlue:blue];
+// if (alpha <= 0.9999) {
+// [result setAlpha:floatWrapperWithValue(alpha)];
+// }
+// [result autorelease];
+// return result;
+// }
+// // ...
+//
+// Example (JavaScript):
+//
+// // ...
+//
+// var protoToCssColor = function(rgb_color) {
+// var redFrac = rgb_color.red || 0.0;
+// var greenFrac = rgb_color.green || 0.0;
+// var blueFrac = rgb_color.blue || 0.0;
+// var red = Math.floor(redFrac * 255);
+// var green = Math.floor(greenFrac * 255);
+// var blue = Math.floor(blueFrac * 255);
+//
+// if (!('alpha' in rgb_color)) {
+// return rgbToCssColor_(red, green, blue);
+// }
+//
+// var alphaFrac = rgb_color.alpha.value || 0.0;
+// var rgbParams = [red, green, blue].join(',');
+// return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+// };
+//
+// var rgbToCssColor_ = function(red, green, blue) {
+// var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+// var hexString = rgbNumber.toString(16);
+// var missingZeros = 6 - hexString.length;
+// var resultBuilder = ['#'];
+// for (var i = 0; i < missingZeros; i++) {
+// resultBuilder.push('0');
+// }
+// resultBuilder.push(hexString);
+// return resultBuilder.join('');
+// };
+//
+// // ...
+message Color {
+ // The amount of red in the color as a value in the interval [0, 1].
+ float red = 1;
+
+ // The amount of green in the color as a value in the interval [0, 1].
+ float green = 2;
+
+ // The amount of blue in the color as a value in the interval [0, 1].
+ float blue = 3;
+
+ // The fraction of this color that should be applied to the pixel. That is,
+ // the final pixel color is defined by the equation:
+ //
+ // pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+ //
+ // This means that a value of 1.0 corresponds to a solid color, whereas
+ // a value of 0.0 corresponds to a completely transparent color. This
+ // uses a wrapper message rather than a simple float scalar so that it is
+ // possible to distinguish between a default value and the value being unset.
+ // If omitted, this color object is to be rendered as a solid color
+ // (as if the alpha value had been explicitly given with a value of 1.0).
+ google.protobuf.FloatValue alpha = 4;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/type/date.proto b/contrib/libs/googleapis-common-protos/google/type/date.proto
new file mode 100644
index 0000000000..b958feeba5
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/type/date.proto
@@ -0,0 +1,50 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.type;
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/type/date;date";
+option java_multiple_files = true;
+option java_outer_classname = "DateProto";
+option java_package = "com.google.type";
+option objc_class_prefix = "GTP";
+
+// Represents a whole or partial calendar date, e.g. a birthday. The time of day
+// and time zone are either specified elsewhere or are not significant. The date
+// is relative to the Proleptic Gregorian Calendar. This can represent:
+//
+// * A full date, with non-zero year, month and day values
+// * A month and day value, with a zero year, e.g. an anniversary
+// * A year on its own, with zero month and day values
+// * A year and month value, with a zero day, e.g. a credit card expiration date
+//
+// Related types are [google.type.TimeOfDay][google.type.TimeOfDay] and `google.protobuf.Timestamp`.
+message Date {
+ // Year of date. Must be from 1 to 9999, or 0 if specifying a date without
+ // a year.
+ int32 year = 1;
+
+ // Month of year. Must be from 1 to 12, or 0 if specifying a year without a
+ // month and day.
+ int32 month = 2;
+
+ // Day of month. Must be from 1 to 31 and valid for the year and month, or 0
+ // if specifying a year by itself or a year and month where the day is not
+ // significant.
+ int32 day = 3;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/type/datetime.proto b/contrib/libs/googleapis-common-protos/google/type/datetime.proto
new file mode 100644
index 0000000000..5aebc4b97f
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/type/datetime.proto
@@ -0,0 +1,97 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.type;
+
+import "google/protobuf/duration.proto";
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/type/datetime;datetime";
+option java_multiple_files = true;
+option java_outer_classname = "DateTimeProto";
+option java_package = "com.google.type";
+option objc_class_prefix = "GTP";
+
+// Represents civil time in one of a few possible ways:
+//
+// * When utc_offset is set and time_zone is unset: a civil time on a calendar
+// day with a particular offset from UTC.
+// * When time_zone is set and utc_offset is unset: a civil time on a calendar
+// day in a particular time zone.
+// * When neither time_zone nor utc_offset is set: a civil time on a calendar
+// day in local time.
+//
+// The date is relative to the Proleptic Gregorian Calendar.
+//
+// If year is 0, the DateTime is considered not to have a specific year. month
+// and day must have valid, non-zero values.
+//
+// This type is more flexible than some applications may want. Make sure to
+// document and validate your application's limitations.
+message DateTime {
+ // Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a
+ // datetime without a year.
+ int32 year = 1;
+
+ // Required. Month of year. Must be from 1 to 12.
+ int32 month = 2;
+
+ // Required. Day of month. Must be from 1 to 31 and valid for the year and
+ // month.
+ int32 day = 3;
+
+ // Required. Hours of day in 24 hour format. Should be from 0 to 23. An API
+ // may choose to allow the value "24:00:00" for scenarios like business
+ // closing time.
+ int32 hours = 4;
+
+ // Required. Minutes of hour of day. Must be from 0 to 59.
+ int32 minutes = 5;
+
+ // Required. Seconds of minutes of the time. Must normally be from 0 to 59. An
+ // API may allow the value 60 if it allows leap-seconds.
+ int32 seconds = 6;
+
+ // Required. Fractions of seconds in nanoseconds. Must be from 0 to
+ // 999,999,999.
+ int32 nanos = 7;
+
+ // Optional. Specifies either the UTC offset or the time zone of the DateTime.
+ // Choose carefully between them, considering that time zone data may change
+ // in the future (for example, a country modifies their DST start/end dates,
+ // and future DateTimes in the affected range had already been stored).
+ // If omitted, the DateTime is considered to be in local time.
+ oneof time_offset {
+ // UTC offset. Must be whole seconds, between -18 hours and +18 hours.
+ // For example, a UTC offset of -4:00 would be represented as
+ // { seconds: -14400 }.
+ google.protobuf.Duration utc_offset = 8;
+
+ // Time zone.
+ TimeZone time_zone = 9;
+ }
+}
+
+// Represents a time zone from the
+// [IANA Time Zone Database](https://www.iana.org/time-zones).
+message TimeZone {
+ // IANA Time Zone Database time zone, e.g. "America/New_York".
+ string id = 1;
+
+ // Optional. IANA Time Zone Database version number, e.g. "2019a".
+ string version = 2;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/type/dayofweek.proto b/contrib/libs/googleapis-common-protos/google/type/dayofweek.proto
new file mode 100644
index 0000000000..7544e15161
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/type/dayofweek.proto
@@ -0,0 +1,51 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.type;
+
+option go_package = "google.golang.org/genproto/googleapis/type/dayofweek;dayofweek";
+option java_multiple_files = true;
+option java_outer_classname = "DayOfWeekProto";
+option java_package = "com.google.type";
+option objc_class_prefix = "GTP";
+
+// Represents a day of week.
+enum DayOfWeek {
+ // The unspecified day-of-week.
+ DAY_OF_WEEK_UNSPECIFIED = 0;
+
+ // The day-of-week of Monday.
+ MONDAY = 1;
+
+ // The day-of-week of Tuesday.
+ TUESDAY = 2;
+
+ // The day-of-week of Wednesday.
+ WEDNESDAY = 3;
+
+ // The day-of-week of Thursday.
+ THURSDAY = 4;
+
+ // The day-of-week of Friday.
+ FRIDAY = 5;
+
+ // The day-of-week of Saturday.
+ SATURDAY = 6;
+
+ // The day-of-week of Sunday.
+ SUNDAY = 7;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/type/expr.proto b/contrib/libs/googleapis-common-protos/google/type/expr.proto
new file mode 100644
index 0000000000..5d4f2f71b2
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/type/expr.proto
@@ -0,0 +1,51 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.type;
+
+option go_package = "google.golang.org/genproto/googleapis/type/expr;expr";
+option java_multiple_files = true;
+option java_outer_classname = "ExprProto";
+option java_package = "com.google.type";
+option objc_class_prefix = "GTP";
+
+// Represents an expression text. Example:
+//
+// title: "User account presence"
+// description: "Determines whether the request has a user account"
+// expression: "size(request.user) > 0"
+message Expr {
+ // Textual representation of an expression in
+ // Common Expression Language syntax.
+ //
+ // The application context of the containing message determines which
+ // well-known feature set of CEL is supported.
+ string expression = 1;
+
+ // An optional title for the expression, i.e. a short string describing
+ // its purpose. This can be used e.g. in UIs which allow to enter the
+ // expression.
+ string title = 2;
+
+ // An optional description of the expression. This is a longer text which
+ // describes the expression, e.g. when hovered over it in a UI.
+ string description = 3;
+
+ // An optional string indicating the location of the expression for error
+ // reporting, e.g. a file name and a position in the file.
+ string location = 4;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/type/fraction.proto b/contrib/libs/googleapis-common-protos/google/type/fraction.proto
new file mode 100644
index 0000000000..8ad008dda2
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/type/fraction.proto
@@ -0,0 +1,34 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.type;
+
+option go_package = "google.golang.org/genproto/googleapis/type/fraction;fraction";
+option java_multiple_files = true;
+option java_outer_classname = "FractionProto";
+option java_package = "com.google.type";
+option objc_class_prefix = "GTP";
+
+// Represents a fraction in terms of a numerator divided by a denominator.
+message Fraction {
+ // The portion of the denominator in the faction, e.g. 2 in 2/3.
+ int64 numerator = 1;
+
+ // The value by which the numerator is divided, e.g. 3 in 2/3. Must be
+ // positive.
+ int64 denominator = 2;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/type/latlng.proto b/contrib/libs/googleapis-common-protos/google/type/latlng.proto
new file mode 100644
index 0000000000..a90b7c23d0
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/type/latlng.proto
@@ -0,0 +1,37 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package google.type;
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/type/latlng;latlng";
+option java_multiple_files = true;
+option java_outer_classname = "LatLngProto";
+option java_package = "com.google.type";
+option objc_class_prefix = "GTP";
+
+// An object that represents a latitude/longitude pair. This is expressed as a
+// pair of doubles to represent degrees latitude and degrees longitude. Unless
+// specified otherwise, this must conform to the
+// <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+// standard</a>. Values must be within normalized ranges.
+message LatLng {
+ // The latitude in degrees. It must be in the range [-90.0, +90.0].
+ double latitude = 1;
+
+ // The longitude in degrees. It must be in the range [-180.0, +180.0].
+ double longitude = 2;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/type/money.proto b/contrib/libs/googleapis-common-protos/google/type/money.proto
new file mode 100644
index 0000000000..ef41f1089a
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/type/money.proto
@@ -0,0 +1,43 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.type;
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/type/money;money";
+option java_multiple_files = true;
+option java_outer_classname = "MoneyProto";
+option java_package = "com.google.type";
+option objc_class_prefix = "GTP";
+
+// Represents an amount of money with its currency type.
+message Money {
+ // The 3-letter currency code defined in ISO 4217.
+ string currency_code = 1;
+
+ // The whole units of the amount.
+ // For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
+ int64 units = 2;
+
+ // Number of nano (10^-9) units of the amount.
+ // The value must be between -999,999,999 and +999,999,999 inclusive.
+ // If `units` is positive, `nanos` must be positive or zero.
+ // If `units` is zero, `nanos` can be positive, zero, or negative.
+ // If `units` is negative, `nanos` must be negative or zero.
+ // For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
+ int32 nanos = 3;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/type/month.proto b/contrib/libs/googleapis-common-protos/google/type/month.proto
new file mode 100644
index 0000000000..54b7865f4b
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/type/month.proto
@@ -0,0 +1,66 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.type;
+
+option go_package = "google.golang.org/genproto/googleapis/type/month;month";
+option java_multiple_files = true;
+option java_outer_classname = "MonthProto";
+option java_package = "com.google.type";
+option objc_class_prefix = "GTP";
+
+// Represents a month in the Gregorian calendar.
+enum Month {
+ // The unspecifed month.
+ MONTH_UNSPECIFIED = 0;
+
+ // The month of January.
+ JANUARY = 1;
+
+ // The month of February.
+ FEBRUARY = 2;
+
+ // The month of March.
+ MARCH = 3;
+
+ // The month of April.
+ APRIL = 4;
+
+ // The month of May.
+ MAY = 5;
+
+ // The month of June.
+ JUNE = 6;
+
+ // The month of July.
+ JULY = 7;
+
+ // The month of August.
+ AUGUST = 8;
+
+ // The month of September.
+ SEPTEMBER = 9;
+
+ // The month of October.
+ OCTOBER = 10;
+
+ // The month of November.
+ NOVEMBER = 11;
+
+ // The month of December.
+ DECEMBER = 12;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/type/postal_address.proto b/contrib/libs/googleapis-common-protos/google/type/postal_address.proto
new file mode 100644
index 0000000000..688af8a1bc
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/type/postal_address.proto
@@ -0,0 +1,135 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.type;
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/type/postaladdress;postaladdress";
+option java_multiple_files = true;
+option java_outer_classname = "PostalAddressProto";
+option java_package = "com.google.type";
+option objc_class_prefix = "GTP";
+
+// Represents a postal address, e.g. for postal delivery or payments addresses.
+// Given a postal address, a postal service can deliver items to a premise, P.O.
+// Box or similar.
+// It is not intended to model geographical locations (roads, towns,
+// mountains).
+//
+// In typical usage an address would be created via user input or from importing
+// existing data, depending on the type of process.
+//
+// Advice on address input / editing:
+// - Use an i18n-ready address widget such as
+// https://github.com/google/libaddressinput)
+// - Users should not be presented with UI elements for input or editing of
+// fields outside countries where that field is used.
+//
+// For more guidance on how to use this schema, please see:
+// https://support.google.com/business/answer/6397478
+message PostalAddress {
+ // The schema revision of the `PostalAddress`. This must be set to 0, which is
+ // the latest revision.
+ //
+ // All new revisions **must** be backward compatible with old revisions.
+ int32 revision = 1;
+
+ // Required. CLDR region code of the country/region of the address. This
+ // is never inferred and it is up to the user to ensure the value is
+ // correct. See http://cldr.unicode.org/ and
+ // http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
+ // for details. Example: "CH" for Switzerland.
+ string region_code = 2;
+
+ // Optional. BCP-47 language code of the contents of this address (if
+ // known). This is often the UI language of the input form or is expected
+ // to match one of the languages used in the address' country/region, or their
+ // transliterated equivalents.
+ // This can affect formatting in certain countries, but is not critical
+ // to the correctness of the data and will never affect any validation or
+ // other non-formatting related operations.
+ //
+ // If this value is not known, it should be omitted (rather than specifying a
+ // possibly incorrect default).
+ //
+ // Examples: "zh-Hant", "ja", "ja-Latn", "en".
+ string language_code = 3;
+
+ // Optional. Postal code of the address. Not all countries use or require
+ // postal codes to be present, but where they are used, they may trigger
+ // additional validation with other parts of the address (e.g. state/zip
+ // validation in the U.S.A.).
+ string postal_code = 4;
+
+ // Optional. Additional, country-specific, sorting code. This is not used
+ // in most regions. Where it is used, the value is either a string like
+ // "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number
+ // alone, representing the "sector code" (Jamaica), "delivery area indicator"
+ // (Malawi) or "post office indicator" (e.g. Côte d'Ivoire).
+ string sorting_code = 5;
+
+ // Optional. Highest administrative subdivision which is used for postal
+ // addresses of a country or region.
+ // For example, this can be a state, a province, an oblast, or a prefecture.
+ // Specifically, for Spain this is the province and not the autonomous
+ // community (e.g. "Barcelona" and not "Catalonia").
+ // Many countries don't use an administrative area in postal addresses. E.g.
+ // in Switzerland this should be left unpopulated.
+ string administrative_area = 6;
+
+ // Optional. Generally refers to the city/town portion of the address.
+ // Examples: US city, IT comune, UK post town.
+ // In regions of the world where localities are not well defined or do not fit
+ // into this structure well, leave locality empty and use address_lines.
+ string locality = 7;
+
+ // Optional. Sublocality of the address.
+ // For example, this can be neighborhoods, boroughs, districts.
+ string sublocality = 8;
+
+ // Unstructured address lines describing the lower levels of an address.
+ //
+ // Because values in address_lines do not have type information and may
+ // sometimes contain multiple values in a single field (e.g.
+ // "Austin, TX"), it is important that the line order is clear. The order of
+ // address lines should be "envelope order" for the country/region of the
+ // address. In places where this can vary (e.g. Japan), address_language is
+ // used to make it explicit (e.g. "ja" for large-to-small ordering and
+ // "ja-Latn" or "en" for small-to-large). This way, the most specific line of
+ // an address can be selected based on the language.
+ //
+ // The minimum permitted structural representation of an address consists
+ // of a region_code with all remaining information placed in the
+ // address_lines. It would be possible to format such an address very
+ // approximately without geocoding, but no semantic reasoning could be
+ // made about any of the address components until it was at least
+ // partially resolved.
+ //
+ // Creating an address only containing a region_code and address_lines, and
+ // then geocoding is the recommended way to handle completely unstructured
+ // addresses (as opposed to guessing which parts of the address should be
+ // localities or administrative areas).
+ repeated string address_lines = 9;
+
+ // Optional. The recipient at the address.
+ // This field may, under certain circumstances, contain multiline information.
+ // For example, it might contain "care of" information.
+ repeated string recipients = 10;
+
+ // Optional. The name of the organization at the address.
+ string organization = 11;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/type/quaternion.proto b/contrib/libs/googleapis-common-protos/google/type/quaternion.proto
new file mode 100644
index 0000000000..7ab5dc7283
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/type/quaternion.proto
@@ -0,0 +1,95 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.type;
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/type/quaternion;quaternion";
+option java_multiple_files = true;
+option java_outer_classname = "QuaternionProto";
+option java_package = "com.google.type";
+option objc_class_prefix = "GTP";
+
+// A quaternion is defined as the quotient of two directed lines in a
+// three-dimensional space or equivalently as the quotient of two Euclidean
+// vectors (https://en.wikipedia.org/wiki/Quaternion).
+//
+// Quaternions are often used in calculations involving three-dimensional
+// rotations (https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation),
+// as they provide greater mathematical robustness by avoiding the gimbal lock
+// problems that can be encountered when using Euler angles
+// (https://en.wikipedia.org/wiki/Gimbal_lock).
+//
+// Quaternions are generally represented in this form:
+//
+// w + xi + yj + zk
+//
+// where x, y, z, and w are real numbers, and i, j, and k are three imaginary
+// numbers.
+//
+// Our naming choice `(x, y, z, w)` comes from the desire to avoid confusion for
+// those interested in the geometric properties of the quaternion in the 3D
+// Cartesian space. Other texts often use alternative names or subscripts, such
+// as `(a, b, c, d)`, `(1, i, j, k)`, or `(0, 1, 2, 3)`, which are perhaps
+// better suited for mathematical interpretations.
+//
+// To avoid any confusion, as well as to maintain compatibility with a large
+// number of software libraries, the quaternions represented using the protocol
+// buffer below *must* follow the Hamilton convention, which defines `ij = k`
+// (i.e. a right-handed algebra), and therefore:
+//
+// i^2 = j^2 = k^2 = ijk = −1
+// ij = −ji = k
+// jk = −kj = i
+// ki = −ik = j
+//
+// Please DO NOT use this to represent quaternions that follow the JPL
+// convention, or any of the other quaternion flavors out there.
+//
+// Definitions:
+//
+// - Quaternion norm (or magnitude): `sqrt(x^2 + y^2 + z^2 + w^2)`.
+// - Unit (or normalized) quaternion: a quaternion whose norm is 1.
+// - Pure quaternion: a quaternion whose scalar component (`w`) is 0.
+// - Rotation quaternion: a unit quaternion used to represent rotation.
+// - Orientation quaternion: a unit quaternion used to represent orientation.
+//
+// A quaternion can be normalized by dividing it by its norm. The resulting
+// quaternion maintains the same direction, but has a norm of 1, i.e. it moves
+// on the unit sphere. This is generally necessary for rotation and orientation
+// quaternions, to avoid rounding errors:
+// https://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions
+//
+// Note that `(x, y, z, w)` and `(-x, -y, -z, -w)` represent the same rotation,
+// but normalization would be even more useful, e.g. for comparison purposes, if
+// it would produce a unique representation. It is thus recommended that `w` be
+// kept positive, which can be achieved by changing all the signs when `w` is
+// negative.
+//
+message Quaternion {
+ // The x component.
+ double x = 1;
+
+ // The y component.
+ double y = 2;
+
+ // The z component.
+ double z = 3;
+
+ // The scalar component.
+ double w = 4;
+}
diff --git a/contrib/libs/googleapis-common-protos/google/type/timeofday.proto b/contrib/libs/googleapis-common-protos/google/type/timeofday.proto
new file mode 100644
index 0000000000..b609a48798
--- /dev/null
+++ b/contrib/libs/googleapis-common-protos/google/type/timeofday.proto
@@ -0,0 +1,44 @@
+// Copyright 2019 Google LLC.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+syntax = "proto3";
+
+package google.type;
+
+option cc_enable_arenas = true;
+option go_package = "google.golang.org/genproto/googleapis/type/timeofday;timeofday";
+option java_multiple_files = true;
+option java_outer_classname = "TimeOfDayProto";
+option java_package = "com.google.type";
+option objc_class_prefix = "GTP";
+
+// Represents a time of day. The date and time zone are either not significant
+// or are specified elsewhere. An API may choose to allow leap seconds. Related
+// types are [google.type.Date][google.type.Date] and `google.protobuf.Timestamp`.
+message TimeOfDay {
+ // Hours of day in 24 hour format. Should be from 0 to 23. An API may choose
+ // to allow the value "24:00:00" for scenarios like business closing time.
+ int32 hours = 1;
+
+ // Minutes of hour of day. Must be from 0 to 59.
+ int32 minutes = 2;
+
+ // Seconds of minutes of the time. Must normally be from 0 to 59. An API may
+ // allow the value 60 if it allows leap-seconds.
+ int32 seconds = 3;
+
+ // Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
+ int32 nanos = 4;
+}
diff --git a/ydb/library/yql/providers/cloud_function/gateway/CMakeLists.txt b/ydb/library/yql/providers/cloud_function/gateway/CMakeLists.txt
new file mode 100644
index 0000000000..ea2aa7b71c
--- /dev/null
+++ b/ydb/library/yql/providers/cloud_function/gateway/CMakeLists.txt
@@ -0,0 +1,27 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(providers-cloud_function-gateway)
+target_compile_options(providers-cloud_function-gateway PRIVATE
+ -DUSE_CURRENT_UDF_ABI_VERSION
+)
+target_link_libraries(providers-cloud_function-gateway PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ common-token_accessor-client
+ client-ydb_types-credentials
+ cpp-string_utils-quote
+ cpp-threading-future
+ cpp-grpc-client
+ contrib-libs-fmt
+ serverless-functions-v1
+)
+target_sources(providers-cloud_function-gateway PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/providers/cloud_function/gateway/cloud_function_gateway.cpp
+)
diff --git a/ydb/library/yql/providers/cloud_function/gateway/cloud_function_gateway.cpp b/ydb/library/yql/providers/cloud_function/gateway/cloud_function_gateway.cpp
new file mode 100644
index 0000000000..f784af39d9
--- /dev/null
+++ b/ydb/library/yql/providers/cloud_function/gateway/cloud_function_gateway.cpp
@@ -0,0 +1,115 @@
+#include "cloud_function_gateway.h"
+
+#include <library/cpp/string_utils/quote/quote.h>
+#include <util/string/builder.h>
+#include <util/generic/hash.h>
+
+#include <cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function_service.pb.h>
+#include <cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function_service.grpc.pb.h>
+#include <cloud/bitbucket/private-api/yandex/cloud/priv/serverless/functions/v1/function.pb.h>
+
+#include <library/cpp/grpc/client/grpc_client_low.h>
+#include <exception>
+#include <fmt/format.h>
+
+namespace NYql::NDq {
+namespace NCloudFunction {
+
+using namespace yandex::cloud::priv::serverless::functions::v1;
+
+class TCloudFunctionGateway : public ICloudFunctionGateway {
+public:
+ using TPtr = std::shared_ptr<TCloudFunctionGateway>;
+
+private:
+ static constexpr TDuration TIMEOUT = TDuration::MilliSeconds(300);
+
+ class TImpl : public std::enable_shared_from_this<TImpl> {
+ public:
+ TImpl(const TString& apiEndpoint, const TString& sslCaCert, NYdb::TCredentialsProviderPtr credentialsProvider)
+ : Client(std::make_unique<NGrpc::TGRpcClientLow>())
+ , CredentialsProvider(std::move(credentialsProvider))
+ {
+ NGrpc::TGRpcClientConfig grpcConf;
+ grpcConf.Locator = apiEndpoint;
+ grpcConf.EnableSsl = true;
+ grpcConf.SslCaCert = sslCaCert;
+ Connection = Client->CreateGRpcServiceConnection<FunctionService>(grpcConf);
+ }
+
+ NThreading::TFuture<ListFunctionsResponse> List(const TString& folderId, const TString& functionName) {
+ auto promise = NThreading::NewPromise<ListFunctionsResponse>();
+ auto callback = [promise, folderId, functionName](NGrpc::TGrpcStatus&& status, ListFunctionsResponse&& resp) mutable {
+ if (status.Ok()) {
+ promise.SetValue(std::move(resp));
+ } else {
+ const TString exception = fmt::format("Failed to find cloud function '{}' at folder '{}'. Grpc status: {} ({})",
+ functionName, folderId, status.GRpcStatusCode, status.Msg);
+ promise.SetException(exception);
+ }
+ };
+
+ NGrpc::TCallMeta meta;
+ meta.Timeout = TIMEOUT;
+ meta.Aux.emplace_back("authorization", CredentialsProvider->GetAuthInfo());
+
+ ListFunctionsRequest req;
+ req.set_folder_id(folderId);
+ req.set_filter(TString{"name=\""} + UrlEscapeRet(functionName, true) + "\"");
+ Connection->DoRequest<ListFunctionsRequest, ListFunctionsResponse>(
+ std::move(req), std::move(callback),
+ &FunctionService::Stub::AsyncList,
+ meta
+ );
+ return promise.GetFuture();
+ }
+
+ void Stop() {
+ Client.reset();
+ }
+ private:
+ std::unique_ptr<NGrpc::TGRpcClientLow> Client;
+ std::unique_ptr<NGrpc::TServiceConnection<FunctionService>> Connection;
+ NYdb::TCredentialsProviderPtr CredentialsProvider;
+ };
+
+public:
+ TCloudFunctionGateway(const TString& apiEndpoint, const TString& sslCaCert, NYdb::TCredentialsProviderPtr credentialsProvider)
+ : Impl(std::make_shared<TImpl>(apiEndpoint, sslCaCert, credentialsProvider))
+ {
+ }
+
+ NThreading::TFuture<Function> ResolveFunction(const TString& folderId, const TString& functionName) {
+ auto listResponse = Impl->List(folderId, functionName);
+ return listResponse.Apply([folderId, functionName](const NThreading::TFuture<ListFunctionsResponse>& future) -> Function {
+ auto functions = future.GetValue().Getfunctions();
+ if (!functions.empty()) {
+ return functions.at(0);
+ }
+ throw yexception() << fmt::format("Failed to find cloud function '{}' at folder '{}'", functionName, folderId);
+ });
+ }
+
+ ~TCloudFunctionGateway() {
+ Impl->Stop();
+ }
+
+private:
+ std::shared_ptr<TImpl> Impl;
+};
+
+ICloudFunctionGateway::TPtr CreateCloudFunctionGateway(
+ const TString& apiEndpoint, const TString& sslCaCert,
+ const THashMap<TString, TString>& secureParams, const TString& connectionName,
+ ISecuredServiceAccountCredentialsFactory::TPtr credentialsFactory) {
+
+ const auto token = secureParams.find(connectionName);
+ if (token == secureParams.end()) {
+ throw yexception() << fmt::format("Can't find token by connection name '{}'", connectionName);
+ }
+ auto credProviderFactory = CreateCredentialsProviderFactoryForStructuredToken(credentialsFactory, token->second, true)->CreateProvider();
+ return std::make_shared<TCloudFunctionGateway>(apiEndpoint, sslCaCert, credProviderFactory);
+}
+
+} // namespace NCloudFunction
+} \ No newline at end of file
diff --git a/ydb/library/yql/providers/cloud_function/gateway/cloud_function_gateway.h b/ydb/library/yql/providers/cloud_function/gateway/cloud_function_gateway.h
new file mode 100644
index 0000000000..867a78b392
--- /dev/null
+++ b/ydb/library/yql/providers/cloud_function/gateway/cloud_function_gateway.h
@@ -0,0 +1,27 @@
+#pragma once
+
+#include <ydb/library/yql/providers/common/token_accessor/client/factory.h>
+#include <ydb/public/sdk/cpp/client/ydb_types/credentials/credentials.h>
+#include <library/cpp/threading/future/future.h>
+
+namespace yandex::cloud::priv::serverless::functions::v1 {
+ class Function;
+}
+
+namespace NYql::NDq {
+namespace NCloudFunction {
+
+class ICloudFunctionGateway {
+public:
+ using TPtr = std::shared_ptr<ICloudFunctionGateway>;
+ virtual NThreading::TFuture<yandex::cloud::priv::serverless::functions::v1::Function> ResolveFunction(const TString& folderId, const TString& functionName) = 0;
+ virtual ~ICloudFunctionGateway() = default;
+};
+
+ICloudFunctionGateway::TPtr CreateCloudFunctionGateway(
+ const TString& apiEndpoint, const TString& sslCaCert,
+ const THashMap<TString, TString>& secureParams, const TString& connectionName,
+ ISecuredServiceAccountCredentialsFactory::TPtr credentialsFactory);
+
+}
+} \ No newline at end of file