diff options
author | hrustyashko <hrustyashko@yandex-team.ru> | 2022-03-30 15:41:09 +0300 |
---|---|---|
committer | hrustyashko <hrustyashko@yandex-team.ru> | 2022-03-30 15:41:09 +0300 |
commit | c44713288efab2c63aa923e108538419aef28629 (patch) | |
tree | c2bdd9b79dafd379841b17b83c5d6d0f014ad78f | |
parent | f4544ae2d0880767e93f79031ad40202749cbb5f (diff) | |
download | ydb-c44713288efab2c63aa923e108538419aef28629.tar.gz |
Cloud Function gateway
ref:f6ff1d18198749d377882291ee9ef9c4330b708d
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: (== include google/foo/overview.md ==) +// - name: Tutorial +// content: (== include google/foo/tutorial.md ==) +// subpages; +// - name: Java +// content: (== include google/foo/tutorial_java.md ==) +// 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>[fully.qualified.proto.name][]</code></pre> +// To override the display text used for the link, this can be used: +// <pre><code>[display text][fully.qualified.proto.name]</code></pre> +// Text can be excluded from doc using the following notation: +// <pre><code>(-- internal comment --)</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>(== include path/to/file ==)</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>(== resource_for v1.shelves.books ==)</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: (== include overview.md ==) + // </code></pre> + // This is a shortcut for the following declaration (using pages style): + // <pre><code>documentation: + // summary: ... + // pages: + // - name: Overview + // content: (== include overview.md ==) + // </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: (== include tutorial.md ==) + // subpages: + // - name: Java + // content: (== include tutorial_java.md ==) + // </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>(== include {path} ==)</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¶m=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 |