diff --git a/cloud/api/scripts/regenerate-proto-bindings.sh b/cloud/api/scripts/regenerate-proto-bindings.sh index b90f8f3416..a84242a119 100755 --- a/cloud/api/scripts/regenerate-proto-bindings.sh +++ b/cloud/api/scripts/regenerate-proto-bindings.sh @@ -19,15 +19,38 @@ api_golang_proto_generated_rel_dir="golang" api_go_mod_rel_file="golang/go.mod" # Typescript -#api_typescript_proto_generated_rel_dir="typescript/src/generated" +api_typescript_rel_dir="typescript" + +NODE_ES_TOOLS_PROTOC_BIN_FILENAME="protoc-gen-es" + +NODE_CONNECT_ES_TOOLS_PROTOC_BIN_FILENAME="protoc-gen-connect-es" # ================================================================================================== # Main Logic # ================================================================================================== +if ! node_es_protoc_bin_filepath="$(which "${NODE_ES_TOOLS_PROTOC_BIN_FILENAME}")"; then + echo "Error: Couldn't find Node gRPC tools protoc plugin binary '${NODE_ES_TOOLS_PROTOC_BIN_FILENAME}' on the PATH" >&2 + return 1 +fi +if [ -z "${node_es_protoc_bin_filepath}" ]; then + echo "Error: Got an empty filepath when looking for the Node gRPC tools protoc plugin binary '${NODE_ES_TOOLS_PROTOC_BIN_FILENAME}'" >&2 + return 1 +fi + +if ! node_connect_es_protoc_bin_filepath="$(which "${NODE_CONNECT_ES_TOOLS_PROTOC_BIN_FILENAME}")"; then + echo "Error: Couldn't find Node gRPC tools protoc plugin binary '${NODE_CONNECT_ES_TOOLS_PROTOC_BIN_FILENAME}' on the PATH" >&2 + return 1 +fi +if [ -z "${node_connect_es_protoc_bin_filepath}" ]; then + echo "Error: Got an empty filepath when looking for the Node gRPC tools protoc plugin binary '${NODE_CONNECT_ES_TOOLS_PROTOC_BIN_FILENAME}'" >&2 + return 1 +fi + api_proto_abs_dir="${root_dirpath}/${api_proto_rel_dir}" api_google_dependency_abs_dir="${api_proto_abs_dir}/google" +api_typescript_abs_dir="${root_dirpath}/${api_typescript_rel_dir}" api_golang_proto_generated_abs_dir="${root_dirpath}/${api_golang_proto_generated_rel_dir}" api_go_mod_abs_file="${root_dirpath}/${api_go_mod_rel_file}" api_golang_module="$(grep "^${GO_MOD_FILE_MODULE_KEYWORD}" "${api_go_mod_abs_file}" | awk '{print $2}')" @@ -47,6 +70,12 @@ protoc \ --go-grpc_opt=require_unimplemented_servers=false \ --connect-go_out="${api_golang_proto_generated_abs_dir}" \ --connect-go_opt=module="${api_golang_module}" \ + --plugin=protoc-gen-es="${node_es_protoc_bin_filepath}" \ + --es_out="${api_typescript_abs_dir}/src/" \ + --es_opt=target=ts \ + --plugin=protoc-gen-connect-es="${node_connect_es_protoc_bin_filepath}" \ + --connect-es_out="${api_typescript_abs_dir}/src/" \ + --connect-es_opt=target=ts \ "${api_proto_abs_dir}"/*.proto diff --git a/cloud/api/typescript/package.json b/cloud/api/typescript/package.json new file mode 100644 index 0000000000..76f8f8f6e7 --- /dev/null +++ b/cloud/api/typescript/package.json @@ -0,0 +1,46 @@ +{ + "version": "0.0.0", + "name": "kurtosis-cloud-sdk", + "main": "./build/index", + "description": "This repo contains a Typescript client for communicating with the Kurtosis cloud backend.", + "types": "./build/index", + "scripts": { + "clean": "rm -rf build", + "build": "tsc", + "test": "jest" + }, + "files": [ + "build" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/kurtosis-tech/kurtosis-cloud-sdk.git" + }, + "keywords": [ + "kurtosis", + "cloud" + ], + "author": "Kurtosis Technologies Inc (https://www.kurtosistech.com/)", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/kurtosis-tech/kurtosis-cloud-sdk/issues" + }, + "homepage": "https://github.com/kurtosis-tech/kurtosis-cloud-sdk#readme", + "engines": { + "node": ">=16.13.0" + }, + "dependencies": { + "@bufbuild/protobuf": "^1.3.3", + "@connectrpc/connect": "^0.13.0", + "@connectrpc/connect-web": "^0.13.0" + }, + "devDependencies": { + "@babel/core": "^7.23.2", + "@babel/preset-env": "^7.23.2", + "@bufbuild/protoc-gen-es": "^1.3.3", + "@connectrpc/protoc-gen-connect-es": "^0.13.0", + "@types/jest": "^29.5.6", + "jest": "^29.7.0", + "typescript": "^4.3.5" + } +} diff --git a/cloud/api/typescript/src/kurtosis_backend_server_api_connect.ts b/cloud/api/typescript/src/kurtosis_backend_server_api_connect.ts new file mode 100644 index 0000000000..0da59e7994 --- /dev/null +++ b/cloud/api/typescript/src/kurtosis_backend_server_api_connect.ts @@ -0,0 +1,91 @@ +// @generated by protoc-gen-connect-es v0.13.0 with parameter "target=ts" +// @generated from file kurtosis_backend_server_api.proto (package kurtosis_cloud, syntax proto3) +/* eslint-disable */ +// @ts-nocheck + +import { Empty, MethodIdempotency, MethodKind } from "@bufbuild/protobuf"; +import { CancelPaymentSubscriptionArgs, GetCloudInstanceConfigArgs, GetCloudInstanceConfigResponse, GetOrCreateApiKeyRequest, GetOrCreateApiKeyResponse, GetOrCreateInstanceRequest, GetOrCreateInstanceResponse, GetOrCreatePaymentConfigArgs, GetOrCreatePaymentConfigResponse, RefreshDefaultPaymentMethodArgs, UpdateAddressArgs } from "./kurtosis_backend_server_api_pb.js"; + +/** + * @generated from service kurtosis_cloud.KurtosisCloudBackendServer + */ +export const KurtosisCloudBackendServer = { + typeName: "kurtosis_cloud.KurtosisCloudBackendServer", + methods: { + /** + * @generated from rpc kurtosis_cloud.KurtosisCloudBackendServer.IsAvailable + */ + isAvailable: { + name: "IsAvailable", + I: Empty, + O: Empty, + kind: MethodKind.Unary, + idempotency: MethodIdempotency.NoSideEffects, + }, + /** + * @generated from rpc kurtosis_cloud.KurtosisCloudBackendServer.GetCloudInstanceConfig + */ + getCloudInstanceConfig: { + name: "GetCloudInstanceConfig", + I: GetCloudInstanceConfigArgs, + O: GetCloudInstanceConfigResponse, + kind: MethodKind.Unary, + idempotency: MethodIdempotency.NoSideEffects, + }, + /** + * @generated from rpc kurtosis_cloud.KurtosisCloudBackendServer.GetOrCreateApiKey + */ + getOrCreateApiKey: { + name: "GetOrCreateApiKey", + I: GetOrCreateApiKeyRequest, + O: GetOrCreateApiKeyResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc kurtosis_cloud.KurtosisCloudBackendServer.GetOrCreateInstance + */ + getOrCreateInstance: { + name: "GetOrCreateInstance", + I: GetOrCreateInstanceRequest, + O: GetOrCreateInstanceResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc kurtosis_cloud.KurtosisCloudBackendServer.GetOrCreatePaymentConfig + */ + getOrCreatePaymentConfig: { + name: "GetOrCreatePaymentConfig", + I: GetOrCreatePaymentConfigArgs, + O: GetOrCreatePaymentConfigResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc kurtosis_cloud.KurtosisCloudBackendServer.RefreshDefaultPaymentMethod + */ + refreshDefaultPaymentMethod: { + name: "RefreshDefaultPaymentMethod", + I: RefreshDefaultPaymentMethodArgs, + O: Empty, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc kurtosis_cloud.KurtosisCloudBackendServer.CancelPaymentSubscription + */ + cancelPaymentSubscription: { + name: "CancelPaymentSubscription", + I: CancelPaymentSubscriptionArgs, + O: Empty, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc kurtosis_cloud.KurtosisCloudBackendServer.UpdateAddress + */ + updateAddress: { + name: "UpdateAddress", + I: UpdateAddressArgs, + O: Empty, + kind: MethodKind.Unary, + }, + } +} as const; + diff --git a/cloud/api/typescript/src/kurtosis_backend_server_api_pb.ts b/cloud/api/typescript/src/kurtosis_backend_server_api_pb.ts new file mode 100644 index 0000000000..b55fd6150a --- /dev/null +++ b/cloud/api/typescript/src/kurtosis_backend_server_api_pb.ts @@ -0,0 +1,902 @@ +// @generated by protoc-gen-es v1.8.0 with parameter "target=ts" +// @generated from file kurtosis_backend_server_api.proto (package kurtosis_cloud, syntax proto3) +/* eslint-disable */ +// @ts-nocheck + +import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; +import { Message, proto3 } from "@bufbuild/protobuf"; + +/** + * @generated from message kurtosis_cloud.GetOrCreateApiKeyRequest + */ +export class GetOrCreateApiKeyRequest extends Message { + /** + * @generated from field: string access_token = 1; + */ + accessToken = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.GetOrCreateApiKeyRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "access_token", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetOrCreateApiKeyRequest { + return new GetOrCreateApiKeyRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetOrCreateApiKeyRequest { + return new GetOrCreateApiKeyRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetOrCreateApiKeyRequest { + return new GetOrCreateApiKeyRequest().fromJsonString(jsonString, options); + } + + static equals(a: GetOrCreateApiKeyRequest | PlainMessage | undefined, b: GetOrCreateApiKeyRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(GetOrCreateApiKeyRequest, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.GetOrCreateApiKeyResponse + */ +export class GetOrCreateApiKeyResponse extends Message { + /** + * @generated from field: string api_key = 1; + */ + apiKey = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.GetOrCreateApiKeyResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "api_key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetOrCreateApiKeyResponse { + return new GetOrCreateApiKeyResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetOrCreateApiKeyResponse { + return new GetOrCreateApiKeyResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetOrCreateApiKeyResponse { + return new GetOrCreateApiKeyResponse().fromJsonString(jsonString, options); + } + + static equals(a: GetOrCreateApiKeyResponse | PlainMessage | undefined, b: GetOrCreateApiKeyResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(GetOrCreateApiKeyResponse, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.GetOrCreateInstanceRequest + */ +export class GetOrCreateInstanceRequest extends Message { + /** + * @generated from field: string api_key = 1; + */ + apiKey = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.GetOrCreateInstanceRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "api_key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetOrCreateInstanceRequest { + return new GetOrCreateInstanceRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetOrCreateInstanceRequest { + return new GetOrCreateInstanceRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetOrCreateInstanceRequest { + return new GetOrCreateInstanceRequest().fromJsonString(jsonString, options); + } + + static equals(a: GetOrCreateInstanceRequest | PlainMessage | undefined, b: GetOrCreateInstanceRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(GetOrCreateInstanceRequest, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.GetOrCreateInstanceResponse + */ +export class GetOrCreateInstanceResponse extends Message { + /** + * @generated from field: string instance_id = 1; + */ + instanceId = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.GetOrCreateInstanceResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "instance_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetOrCreateInstanceResponse { + return new GetOrCreateInstanceResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetOrCreateInstanceResponse { + return new GetOrCreateInstanceResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetOrCreateInstanceResponse { + return new GetOrCreateInstanceResponse().fromJsonString(jsonString, options); + } + + static equals(a: GetOrCreateInstanceResponse | PlainMessage | undefined, b: GetOrCreateInstanceResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(GetOrCreateInstanceResponse, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.GetCloudInstanceConfigArgs + */ +export class GetCloudInstanceConfigArgs extends Message { + /** + * @generated from field: optional string api_key = 1; + */ + apiKey?: string; + + /** + * @generated from field: optional string instance_id = 2; + */ + instanceId?: string; + + /** + * @generated from field: optional string instance_short_id = 3; + */ + instanceShortId?: string; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.GetCloudInstanceConfigArgs"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "api_key", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 2, name: "instance_id", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 3, name: "instance_short_id", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetCloudInstanceConfigArgs { + return new GetCloudInstanceConfigArgs().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetCloudInstanceConfigArgs { + return new GetCloudInstanceConfigArgs().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetCloudInstanceConfigArgs { + return new GetCloudInstanceConfigArgs().fromJsonString(jsonString, options); + } + + static equals(a: GetCloudInstanceConfigArgs | PlainMessage | undefined, b: GetCloudInstanceConfigArgs | PlainMessage | undefined): boolean { + return proto3.util.equals(GetCloudInstanceConfigArgs, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.LaunchResult + */ +export class LaunchResult extends Message { + /** + * @generated from field: string instance_name = 1; + */ + instanceName = ""; + + /** + * @generated from field: string instance_id = 2; + */ + instanceId = ""; + + /** + * @generated from field: string public_dns = 3; + */ + publicDns = ""; + + /** + * @generated from field: string ip_address = 4; + */ + ipAddress = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.LaunchResult"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "instance_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "instance_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "public_dns", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "ip_address", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): LaunchResult { + return new LaunchResult().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): LaunchResult { + return new LaunchResult().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): LaunchResult { + return new LaunchResult().fromJsonString(jsonString, options); + } + + static equals(a: LaunchResult | PlainMessage | undefined, b: LaunchResult | PlainMessage | undefined): boolean { + return proto3.util.equals(LaunchResult, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.GetCloudInstanceConfigResponse + */ +export class GetCloudInstanceConfigResponse extends Message { + /** + * @generated from field: string user_id = 1; + */ + userId = ""; + + /** + * @generated from field: string instance_id = 2; + */ + instanceId = ""; + + /** + * @generated from field: string context_config = 3; + */ + contextConfig = ""; + + /** + * @generated from field: kurtosis_cloud.LaunchResult launch_result = 4; + */ + launchResult?: LaunchResult; + + /** + * @generated from field: string status = 5; + */ + status = ""; + + /** + * @generated from field: string created = 6; + */ + created = ""; + + /** + * @generated from field: string updated = 7; + */ + updated = ""; + + /** + * deprecated in favor of aws_environment + * TODO: remove it once this is released and the cloud BE is upgraded + * + * @generated from field: optional kurtosis_cloud.AwsKey user_key = 8; + */ + userKey?: AwsKey; + + /** + * TODO: remove the optional once this is released and the cloud BE is upgraded + * + * @generated from field: optional kurtosis_cloud.AwsEnvironment aws_environment = 9; + */ + awsEnvironment?: AwsEnvironment; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.GetCloudInstanceConfigResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "user_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "instance_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "context_config", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "launch_result", kind: "message", T: LaunchResult }, + { no: 5, name: "status", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 6, name: "created", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 7, name: "updated", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 8, name: "user_key", kind: "message", T: AwsKey, opt: true }, + { no: 9, name: "aws_environment", kind: "message", T: AwsEnvironment, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetCloudInstanceConfigResponse { + return new GetCloudInstanceConfigResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetCloudInstanceConfigResponse { + return new GetCloudInstanceConfigResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetCloudInstanceConfigResponse { + return new GetCloudInstanceConfigResponse().fromJsonString(jsonString, options); + } + + static equals(a: GetCloudInstanceConfigResponse | PlainMessage | undefined, b: GetCloudInstanceConfigResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(GetCloudInstanceConfigResponse, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.GetOrCreatePaymentConfigArgs + */ +export class GetOrCreatePaymentConfigArgs extends Message { + /** + * @generated from field: string access_token = 1; + */ + accessToken = ""; + + /** + * @generated from field: bool setup_intent = 2; + */ + setupIntent = false; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.GetOrCreatePaymentConfigArgs"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "access_token", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "setup_intent", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetOrCreatePaymentConfigArgs { + return new GetOrCreatePaymentConfigArgs().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetOrCreatePaymentConfigArgs { + return new GetOrCreatePaymentConfigArgs().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetOrCreatePaymentConfigArgs { + return new GetOrCreatePaymentConfigArgs().fromJsonString(jsonString, options); + } + + static equals(a: GetOrCreatePaymentConfigArgs | PlainMessage | undefined, b: GetOrCreatePaymentConfigArgs | PlainMessage | undefined): boolean { + return proto3.util.equals(GetOrCreatePaymentConfigArgs, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.PaymentMethod + */ +export class PaymentMethod extends Message { + /** + * @generated from field: int32 exp_month = 1; + */ + expMonth = 0; + + /** + * @generated from field: int32 exp_year = 2; + */ + expYear = 0; + + /** + * @generated from field: string last_four = 3; + */ + lastFour = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.PaymentMethod"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "exp_month", kind: "scalar", T: 5 /* ScalarType.INT32 */ }, + { no: 2, name: "exp_year", kind: "scalar", T: 5 /* ScalarType.INT32 */ }, + { no: 3, name: "last_four", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PaymentMethod { + return new PaymentMethod().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PaymentMethod { + return new PaymentMethod().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PaymentMethod { + return new PaymentMethod().fromJsonString(jsonString, options); + } + + static equals(a: PaymentMethod | PlainMessage | undefined, b: PaymentMethod | PlainMessage | undefined): boolean { + return proto3.util.equals(PaymentMethod, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.PaymentProduct + */ +export class PaymentProduct extends Message { + /** + * @generated from field: string name = 1; + */ + name = ""; + + /** + * @generated from field: int32 price_unit_amount = 2; + */ + priceUnitAmount = 0; + + /** + * @generated from field: string price_currency = 3; + */ + priceCurrency = ""; + + /** + * @generated from field: string tax_code_name = 4; + */ + taxCodeName = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.PaymentProduct"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "price_unit_amount", kind: "scalar", T: 5 /* ScalarType.INT32 */ }, + { no: 3, name: "price_currency", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "tax_code_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PaymentProduct { + return new PaymentProduct().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PaymentProduct { + return new PaymentProduct().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PaymentProduct { + return new PaymentProduct().fromJsonString(jsonString, options); + } + + static equals(a: PaymentProduct | PlainMessage | undefined, b: PaymentProduct | PlainMessage | undefined): boolean { + return proto3.util.equals(PaymentProduct, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.PaymentSubscription + */ +export class PaymentSubscription extends Message { + /** + * @generated from field: kurtosis_cloud.PaymentProduct product = 1; + */ + product?: PaymentProduct; + + /** + * @generated from field: kurtosis_cloud.PaymentSubscription.Status status = 2; + */ + status = PaymentSubscription_Status.ACTIVE; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.PaymentSubscription"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "product", kind: "message", T: PaymentProduct }, + { no: 2, name: "status", kind: "enum", T: proto3.getEnumType(PaymentSubscription_Status) }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PaymentSubscription { + return new PaymentSubscription().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PaymentSubscription { + return new PaymentSubscription().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PaymentSubscription { + return new PaymentSubscription().fromJsonString(jsonString, options); + } + + static equals(a: PaymentSubscription | PlainMessage | undefined, b: PaymentSubscription | PlainMessage | undefined): boolean { + return proto3.util.equals(PaymentSubscription, a, b); + } +} + +/** + * @generated from enum kurtosis_cloud.PaymentSubscription.Status + */ +export enum PaymentSubscription_Status { + /** + * @generated from enum value: ACTIVE = 0; + */ + ACTIVE = 0, + + /** + * @generated from enum value: CANCELLED = 1; + */ + CANCELLED = 1, + + /** + * @generated from enum value: UNKNOWN = 2; + */ + UNKNOWN = 2, + + /** + * @generated from enum value: ACTIVE_CANCEL_AT_PERIOD_END = 3; + */ + ACTIVE_CANCEL_AT_PERIOD_END = 3, +} +// Retrieve enum metadata with: proto3.getEnumType(PaymentSubscription_Status) +proto3.util.setEnumType(PaymentSubscription_Status, "kurtosis_cloud.PaymentSubscription.Status", [ + { no: 0, name: "ACTIVE" }, + { no: 1, name: "CANCELLED" }, + { no: 2, name: "UNKNOWN" }, + { no: 3, name: "ACTIVE_CANCEL_AT_PERIOD_END" }, +]); + +/** + * @generated from message kurtosis_cloud.GetOrCreatePaymentConfigResponse + */ +export class GetOrCreatePaymentConfigResponse extends Message { + /** + * @generated from field: string user_id = 1; + */ + userId = ""; + + /** + * @generated from field: optional string client_secret = 2; + */ + clientSecret?: string; + + /** + * @generated from field: optional kurtosis_cloud.PaymentMethod payment_method = 3; + */ + paymentMethod?: PaymentMethod; + + /** + * @generated from field: kurtosis_cloud.PaymentProduct product = 4; + */ + product?: PaymentProduct; + + /** + * @generated from field: optional kurtosis_cloud.PaymentSubscription subscription = 5; + */ + subscription?: PaymentSubscription; + + /** + * @generated from field: int32 trial_end = 6; + */ + trialEnd = 0; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.GetOrCreatePaymentConfigResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "user_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "client_secret", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 3, name: "payment_method", kind: "message", T: PaymentMethod, opt: true }, + { no: 4, name: "product", kind: "message", T: PaymentProduct }, + { no: 5, name: "subscription", kind: "message", T: PaymentSubscription, opt: true }, + { no: 6, name: "trial_end", kind: "scalar", T: 5 /* ScalarType.INT32 */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetOrCreatePaymentConfigResponse { + return new GetOrCreatePaymentConfigResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetOrCreatePaymentConfigResponse { + return new GetOrCreatePaymentConfigResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetOrCreatePaymentConfigResponse { + return new GetOrCreatePaymentConfigResponse().fromJsonString(jsonString, options); + } + + static equals(a: GetOrCreatePaymentConfigResponse | PlainMessage | undefined, b: GetOrCreatePaymentConfigResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(GetOrCreatePaymentConfigResponse, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.RefreshDefaultPaymentMethodArgs + */ +export class RefreshDefaultPaymentMethodArgs extends Message { + /** + * @generated from field: string access_token = 1; + */ + accessToken = ""; + + /** + * @generated from field: string payment_method_id = 2; + */ + paymentMethodId = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.RefreshDefaultPaymentMethodArgs"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "access_token", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "payment_method_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RefreshDefaultPaymentMethodArgs { + return new RefreshDefaultPaymentMethodArgs().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RefreshDefaultPaymentMethodArgs { + return new RefreshDefaultPaymentMethodArgs().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RefreshDefaultPaymentMethodArgs { + return new RefreshDefaultPaymentMethodArgs().fromJsonString(jsonString, options); + } + + static equals(a: RefreshDefaultPaymentMethodArgs | PlainMessage | undefined, b: RefreshDefaultPaymentMethodArgs | PlainMessage | undefined): boolean { + return proto3.util.equals(RefreshDefaultPaymentMethodArgs, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.CancelPaymentSubscriptionArgs + */ +export class CancelPaymentSubscriptionArgs extends Message { + /** + * @generated from field: string access_token = 1; + */ + accessToken = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.CancelPaymentSubscriptionArgs"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "access_token", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CancelPaymentSubscriptionArgs { + return new CancelPaymentSubscriptionArgs().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CancelPaymentSubscriptionArgs { + return new CancelPaymentSubscriptionArgs().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CancelPaymentSubscriptionArgs { + return new CancelPaymentSubscriptionArgs().fromJsonString(jsonString, options); + } + + static equals(a: CancelPaymentSubscriptionArgs | PlainMessage | undefined, b: CancelPaymentSubscriptionArgs | PlainMessage | undefined): boolean { + return proto3.util.equals(CancelPaymentSubscriptionArgs, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.AwsKey + */ +export class AwsKey extends Message { + /** + * @generated from field: string id = 1; + */ + id = ""; + + /** + * @generated from field: string secret = 2; + */ + secret = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.AwsKey"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "secret", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AwsKey { + return new AwsKey().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AwsKey { + return new AwsKey().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AwsKey { + return new AwsKey().fromJsonString(jsonString, options); + } + + static equals(a: AwsKey | PlainMessage | undefined, b: AwsKey | PlainMessage | undefined): boolean { + return proto3.util.equals(AwsKey, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.AwsEnvironment + */ +export class AwsEnvironment extends Message { + /** + * @generated from field: string access_key_id = 1; + */ + accessKeyId = ""; + + /** + * @generated from field: string secret_access_key = 2; + */ + secretAccessKey = ""; + + /** + * @generated from field: string bucket_region = 3; + */ + bucketRegion = ""; + + /** + * @generated from field: string bucket_name = 4; + */ + bucketName = ""; + + /** + * @generated from field: string bucket_user_folder = 5; + */ + bucketUserFolder = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.AwsEnvironment"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "access_key_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "secret_access_key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "bucket_region", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "bucket_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 5, name: "bucket_user_folder", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AwsEnvironment { + return new AwsEnvironment().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AwsEnvironment { + return new AwsEnvironment().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AwsEnvironment { + return new AwsEnvironment().fromJsonString(jsonString, options); + } + + static equals(a: AwsEnvironment | PlainMessage | undefined, b: AwsEnvironment | PlainMessage | undefined): boolean { + return proto3.util.equals(AwsEnvironment, a, b); + } +} + +/** + * @generated from message kurtosis_cloud.UpdateAddressArgs + */ +export class UpdateAddressArgs extends Message { + /** + * @generated from field: string access_token = 1; + */ + accessToken = ""; + + /** + * @generated from field: string name = 2; + */ + name = ""; + + /** + * @generated from field: string line_1 = 3; + */ + line1 = ""; + + /** + * @generated from field: optional string line_2 = 4; + */ + line2?: string; + + /** + * @generated from field: string city = 5; + */ + city = ""; + + /** + * @generated from field: string state = 6; + */ + state = ""; + + /** + * @generated from field: string postal_code = 7; + */ + postalCode = ""; + + /** + * @generated from field: string country = 8; + */ + country = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "kurtosis_cloud.UpdateAddressArgs"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "access_token", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "line_1", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "line_2", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 5, name: "city", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 6, name: "state", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 7, name: "postal_code", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 8, name: "country", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UpdateAddressArgs { + return new UpdateAddressArgs().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UpdateAddressArgs { + return new UpdateAddressArgs().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UpdateAddressArgs { + return new UpdateAddressArgs().fromJsonString(jsonString, options); + } + + static equals(a: UpdateAddressArgs | PlainMessage | undefined, b: UpdateAddressArgs | PlainMessage | undefined): boolean { + return proto3.util.equals(UpdateAddressArgs, a, b); + } +} + diff --git a/cloud/api/typescript/tsconfig.json b/cloud/api/typescript/tsconfig.json new file mode 100644 index 0000000000..4e7c0732ff --- /dev/null +++ b/cloud/api/typescript/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "module": "commonjs", + "outDir": "build", + "downlevelIteration": true, + "declaration": true, + "strict": true, + "target": "es2018" + }, + "include": [ + "src/**/*" + ] +} diff --git a/enclave-manager/api/golang/go.mod b/enclave-manager/api/golang/go.mod index 9d39588954..15f8520afa 100644 --- a/enclave-manager/api/golang/go.mod +++ b/enclave-manager/api/golang/go.mod @@ -5,6 +5,7 @@ go 1.20 require ( connectrpc.com/connect v1.11.1 github.com/kurtosis-tech/kurtosis/api/golang v0.81.9 + github.com/kurtosis-tech/kurtosis/cloud/api/golang v0.88.12 google.golang.org/grpc v1.57.1 google.golang.org/protobuf v1.33.0 ) diff --git a/enclave-manager/api/golang/go.sum b/enclave-manager/api/golang/go.sum index 3d0c572289..4b201b27ca 100644 --- a/enclave-manager/api/golang/go.sum +++ b/enclave-manager/api/golang/go.sum @@ -8,6 +8,8 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/kurtosis-tech/kurtosis/api/golang v0.81.9 h1:h8Vy4YCVG7jcciApvkYSjZbgZ+orpa3t5ZcXa+J5HW0= github.com/kurtosis-tech/kurtosis/api/golang v0.81.9/go.mod h1:WsTKD0wMI2iPp4dBwXVP10rTgXPnYnFBULL53TYOXfA= +github.com/kurtosis-tech/kurtosis/cloud/api/golang v0.0.0-20240329165104-1c0750607211 h1:w3tooHx8YuQ3r1KH0P2cIfNwAtUymc2ag+H1j4HwOmE= +github.com/kurtosis-tech/kurtosis/cloud/api/golang v0.0.0-20240329165104-1c0750607211/go.mod h1:mQgIR2ICoqXuZoYZt2TaPIgIS6lBh5ocFHSQwJo2Xa8= golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= diff --git a/enclave-manager/api/golang/kurtosis_enclave_manager_api_bindings/kurtosis_enclave_manager_api.pb.go b/enclave-manager/api/golang/kurtosis_enclave_manager_api_bindings/kurtosis_enclave_manager_api.pb.go index e7965dc9b3..1156416793 100644 --- a/enclave-manager/api/golang/kurtosis_enclave_manager_api_bindings/kurtosis_enclave_manager_api.pb.go +++ b/enclave-manager/api/golang/kurtosis_enclave_manager_api_bindings/kurtosis_enclave_manager_api.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.31.0 -// protoc v4.24.4 +// protoc v4.23.4 // source: kurtosis_enclave_manager_api.proto package kurtosis_enclave_manager_api_bindings @@ -9,6 +9,7 @@ package kurtosis_enclave_manager_api_bindings import ( kurtosis_core_rpc_api_bindings "github.com/kurtosis-tech/kurtosis/api/golang/core/kurtosis_core_rpc_api_bindings" kurtosis_engine_rpc_api_bindings "github.com/kurtosis-tech/kurtosis/api/golang/engine/kurtosis_engine_rpc_api_bindings" + kurtosis_backend_server_rpc_api_bindings "github.com/kurtosis-tech/kurtosis/cloud/api/golang/kurtosis_backend_server_rpc_api_bindings" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" emptypb "google.golang.org/protobuf/types/known/emptypb" @@ -775,236 +776,244 @@ var file_kurtosis_enclave_manager_api_proto_rawDesc = []byte{ 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2e, - 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0xbb, - 0x01, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, - 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x4f, 0x0a, 0x0d, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x45, 0x52, - 0x56, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x45, 0x52, 0x56, 0x49, - 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x22, 0x59, 0x0a, 0x12, - 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, - 0x63, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, - 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, - 0x70, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x6f, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x4c, 0x69, - 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x55, 0x75, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x70, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, - 0x69, 0x63, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, - 0x70, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x61, 0x70, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xc3, 0x01, 0x0a, 0x19, 0x52, 0x75, 0x6e, - 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, + 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x2e, 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x22, 0xbb, 0x01, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x6b, 0x75, 0x72, 0x74, + 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x4f, + 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, + 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x54, + 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x45, + 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x22, + 0x59, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x70, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x61, 0x70, 0x69, 0x63, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, + 0x09, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x61, 0x70, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x6f, 0x0a, 0x28, 0x47, 0x65, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x55, 0x75, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x63, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x61, 0x70, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x61, 0x0a, 0x16, 0x52, - 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x41, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x70, - 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, + 0x05, 0x52, 0x08, 0x61, 0x70, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xc3, 0x01, 0x0a, 0x19, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x41, 0x72, 0x67, 0x73, 0x52, 0x16, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, - 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x41, 0x72, 0x67, 0x73, 0x22, 0xbf, - 0x01, 0x0a, 0x18, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x53, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x70, 0x69, + 0x63, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x63, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x70, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x61, + 0x0a, 0x16, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x41, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, + 0x70, 0x69, 0x2e, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x41, 0x72, 0x67, 0x73, 0x52, 0x16, 0x52, 0x75, 0x6e, 0x53, 0x74, + 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x41, 0x72, 0x67, + 0x73, 0x22, 0xbf, 0x01, 0x0a, 0x18, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, + 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, + 0x0a, 0x0f, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x63, 0x49, 0x70, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x70, + 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x70, 0x69, 0x63, 0x50, + 0x6f, 0x72, 0x74, 0x12, 0x5e, 0x0a, 0x15, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, + 0x72, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x41, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, + 0x72, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x41, 0x72, 0x67, 0x73, 0x52, 0x15, 0x52, 0x75, + 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x41, + 0x72, 0x67, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x23, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x63, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x70, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, - 0x12, 0x5e, 0x0a, 0x15, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x53, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x41, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, - 0x61, 0x70, 0x69, 0x2e, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x53, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x41, 0x72, 0x67, 0x73, 0x52, 0x15, 0x52, 0x75, 0x6e, 0x53, 0x74, - 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x41, 0x72, 0x67, 0x73, - 0x22, 0xc6, 0x01, 0x0a, 0x23, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x70, 0x69, 0x63, - 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x63, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x70, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x5a, 0x0a, - 0x13, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x61, 0x6e, 0x64, 0x5f, - 0x75, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x69, - 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x41, 0x6e, 0x64, 0x55, 0x75, 0x69, 0x64, 0x52, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x41, 0x6e, 0x64, 0x55, 0x75, 0x69, 0x64, 0x22, 0xd4, 0x01, 0x0a, 0x1c, 0x44, 0x6f, + 0x12, 0x5a, 0x0a, 0x13, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x61, + 0x6e, 0x64, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, + 0x69, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x41, 0x6e, 0x64, 0x55, 0x75, 0x69, 0x64, 0x52, 0x10, 0x66, 0x69, 0x6c, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x55, 0x75, 0x69, 0x64, 0x22, 0xd4, 0x01, 0x0a, + 0x1c, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, + 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, + 0x0f, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x63, 0x49, 0x70, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x70, 0x6f, + 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x70, 0x69, 0x63, 0x50, 0x6f, + 0x72, 0x74, 0x12, 0x6f, 0x0a, 0x1d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x5f, 0x61, + 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x5f, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x70, - 0x69, 0x63, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x63, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x70, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x12, - 0x6f, 0x0a, 0x1d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x5f, 0x61, 0x72, 0x67, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x41, 0x72, 0x67, 0x73, 0x52, 0x1a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x41, 0x72, 0x67, 0x73, - 0x22, 0x5c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x52, - 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x70, 0x69, + 0x61, 0x63, 0x74, 0x41, 0x72, 0x67, 0x73, 0x52, 0x1a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x41, + 0x72, 0x67, 0x73, 0x22, 0x5c, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, + 0x72, 0x6b, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, + 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x63, 0x49, 0x70, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x70, 0x69, 0x63, 0x50, 0x6f, 0x72, + 0x74, 0x22, 0x3f, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x22, 0xd4, 0x01, 0x0a, 0x1a, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x53, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x59, 0x61, 0x6d, 0x6c, 0x41, 0x72, 0x67, + 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x63, + 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, + 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x70, + 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x71, 0x0a, 0x1e, 0x73, 0x74, 0x61, 0x72, 0x6c, 0x61, + 0x72, 0x6b, 0x5f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x79, + 0x61, 0x6d, 0x6c, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, + 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x59, 0x61, 0x6d, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x52, 0x1a, 0x73, + 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x6c, 0x61, + 0x6e, 0x59, 0x61, 0x6d, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x22, 0xd8, 0x01, 0x0a, 0x1b, 0x53, 0x74, + 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x50, 0x6c, 0x61, + 0x6e, 0x59, 0x61, 0x6d, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x63, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x70, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x3f, - 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x64, 0x22, - 0xd4, 0x01, 0x0a, 0x1a, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x53, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x59, 0x61, 0x6d, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x12, 0x26, - 0x0a, 0x0f, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x69, 0x63, 0x49, 0x70, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x70, 0x69, 0x63, 0x50, - 0x6f, 0x72, 0x74, 0x12, 0x71, 0x0a, 0x1e, 0x73, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x5f, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x79, 0x61, 0x6d, 0x6c, - 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x61, 0x70, - 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x6c, - 0x61, 0x6e, 0x59, 0x61, 0x6d, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x52, 0x1a, 0x73, 0x74, 0x61, 0x72, - 0x6c, 0x61, 0x72, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x59, 0x61, - 0x6d, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x22, 0xd8, 0x01, 0x0a, 0x1b, 0x53, 0x74, 0x61, 0x72, 0x6c, - 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x59, 0x61, - 0x6d, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, - 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x61, 0x70, 0x69, 0x63, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1b, - 0x0a, 0x09, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x61, 0x70, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x74, 0x0a, 0x1f, 0x73, - 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, - 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x79, 0x61, 0x6d, 0x6c, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x61, 0x70, 0x69, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x74, + 0x0a, 0x1f, 0x73, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x79, 0x61, 0x6d, 0x6c, 0x5f, 0x61, 0x72, 0x67, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, + 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x59, + 0x61, 0x6d, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x52, 0x1b, 0x73, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x59, 0x61, 0x6d, 0x6c, - 0x41, 0x72, 0x67, 0x73, 0x52, 0x1b, 0x73, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x59, 0x61, 0x6d, 0x6c, 0x41, 0x72, 0x67, - 0x73, 0x32, 0xa3, 0x0d, 0x0a, 0x1c, 0x4b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x45, 0x6e, - 0x63, 0x6c, 0x61, 0x76, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x12, 0x64, 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x2c, 0x2e, 0x6b, 0x75, - 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6b, 0x75, 0x72, 0x74, + 0x41, 0x72, 0x67, 0x73, 0x32, 0x87, 0x0e, 0x0a, 0x1c, 0x4b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, + 0x73, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x64, 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x2c, + 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, + 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6b, + 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x47, + 0x65, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x1f, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x2e, + 0x47, 0x65, 0x74, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x65, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, + 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, + 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0e, + 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x1e, + 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x22, + 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0xa1, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x41, 0x6e, 0x64, 0x55, 0x75, 0x69, 0x64, 0x73, 0x12, 0x42, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x45, - 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x1f, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, - 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x65, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x12, 0x2c, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, - 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0e, 0x47, 0x65, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x1e, 0x2e, 0x65, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x22, 0x2e, 0x65, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x30, 0x01, 0x12, 0xa1, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, + 0x61, 0x67, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x41, 0x6e, - 0x64, 0x55, 0x75, 0x69, 0x64, 0x73, 0x12, 0x42, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, - 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x55, 0x75, - 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x70, 0x69, - 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x55, 0x75, 0x69, 0x64, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x12, 0x52, 0x75, 0x6e, 0x53, 0x74, - 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x33, 0x2e, - 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, - 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, - 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x52, - 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6e, 0x65, 0x22, 0x00, - 0x30, 0x01, 0x12, 0x77, 0x0a, 0x11, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, - 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x32, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, + 0x64, 0x55, 0x75, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, + 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, + 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x55, 0x75, 0x69, 0x64, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x12, 0x52, 0x75, + 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x12, 0x33, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, + 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x52, 0x75, 0x6e, 0x53, + 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, + 0x72, 0x6b, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6e, + 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x77, 0x0a, 0x11, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, + 0x6c, 0x61, 0x72, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x32, 0x2e, 0x6b, 0x75, 0x72, + 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, + 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, + 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x52, 0x75, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6e, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x53, + 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x12, + 0x1d, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x21, + 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x98, 0x01, 0x0a, 0x1c, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3d, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, + 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, + 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, + 0x0a, 0x15, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x36, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, + 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x72, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, + 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, + 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4a, 0x0a, 0x0e, 0x44, 0x65, 0x73, + 0x74, 0x72, 0x6f, 0x79, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x12, 0x1e, 0x2e, 0x65, 0x6e, + 0x67, 0x69, 0x6e, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, + 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x6e, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, + 0x6c, 0x61, 0x72, 0x6b, 0x52, 0x75, 0x6e, 0x12, 0x2f, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x2e, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x53, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, - 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, + 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x52, 0x75, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6e, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x53, 0x0a, 0x0d, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x12, 0x1d, 0x2e, 0x65, - 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x21, 0x2e, 0x65, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, - 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x98, 0x01, 0x0a, 0x1c, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x3d, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x37, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x15, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x12, 0x36, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, - 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, - 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x43, 0x68, 0x75, - 0x6e, 0x6b, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4a, 0x0a, 0x0e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, - 0x79, 0x45, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x12, 0x1e, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, - 0x65, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x45, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x12, 0x6e, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, - 0x6b, 0x52, 0x75, 0x6e, 0x12, 0x2f, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, - 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x52, 0x75, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, - 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, - 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x59, 0x61, 0x6d, 0x6c, 0x12, - 0x34, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, - 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, - 0x61, 0x72, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x59, 0x61, 0x6d, - 0x6c, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x59, 0x61, - 0x6d, 0x6c, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x6c, - 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x59, 0x61, - 0x6d, 0x6c, 0x12, 0x35, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, + 0x6c, 0x61, 0x72, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x59, 0x61, + 0x6d, 0x6c, 0x12, 0x34, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x53, 0x74, + 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x50, 0x6c, 0x61, 0x6e, + 0x59, 0x61, 0x6d, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x6c, 0x61, + 0x6e, 0x59, 0x61, 0x6d, 0x6c, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x50, 0x6c, 0x61, - 0x6e, 0x59, 0x61, 0x6d, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x5f, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x6c, - 0x61, 0x6e, 0x59, 0x61, 0x6d, 0x6c, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x57, 0x65, 0x62, 0x68, - 0x6f, 0x6f, 0x6b, 0x12, 0x38, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, - 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x57, - 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0x64, 0x5a, 0x62, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x2d, 0x74, - 0x65, 0x63, 0x68, 0x2f, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x2f, 0x65, 0x6e, 0x63, - 0x6c, 0x61, 0x76, 0x65, 0x2d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, + 0x6e, 0x59, 0x61, 0x6d, 0x6c, 0x12, 0x35, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x50, 0x6c, 0x61, 0x6e, 0x59, 0x61, 0x6d, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x1b, 0x2e, 0x61, + 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, + 0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x59, 0x61, 0x6d, 0x6c, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x17, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x57, + 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x38, 0x2e, 0x6b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, + 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x16, 0x47, 0x65, + 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2e, 0x2e, 0x6b, + 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x64, + 0x5a, 0x62, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x72, + 0x74, 0x6f, 0x73, 0x69, 0x73, 0x2d, 0x74, 0x65, 0x63, 0x68, 0x2f, 0x6b, 0x75, 0x72, 0x74, 0x6f, + 0x73, 0x69, 0x73, 0x2f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x2d, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x6b, + 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x6c, 0x61, 0x76, 0x65, 0x5f, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x62, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1022,39 +1031,40 @@ func file_kurtosis_enclave_manager_api_proto_rawDescGZIP() []byte { var file_kurtosis_enclave_manager_api_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_kurtosis_enclave_manager_api_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_kurtosis_enclave_manager_api_proto_goTypes = []interface{}{ - (HealthCheckResponse_ServingStatus)(0), // 0: kurtosis_enclave_manager.HealthCheckResponse.ServingStatus - (*HealthCheckRequest)(nil), // 1: kurtosis_enclave_manager.HealthCheckRequest - (*HealthCheckResponse)(nil), // 2: kurtosis_enclave_manager.HealthCheckResponse - (*GetServicesRequest)(nil), // 3: kurtosis_enclave_manager.GetServicesRequest - (*GetListFilesArtifactNamesAndUuidsRequest)(nil), // 4: kurtosis_enclave_manager.GetListFilesArtifactNamesAndUuidsRequest - (*RunStarlarkPackageRequest)(nil), // 5: kurtosis_enclave_manager.RunStarlarkPackageRequest - (*RunStarlarkScriptRequest)(nil), // 6: kurtosis_enclave_manager.RunStarlarkScriptRequest - (*InspectFilesArtifactContentsRequest)(nil), // 7: kurtosis_enclave_manager.InspectFilesArtifactContentsRequest - (*DownloadFilesArtifactRequest)(nil), // 8: kurtosis_enclave_manager.DownloadFilesArtifactRequest - (*GetStarlarkRunRequest)(nil), // 9: kurtosis_enclave_manager.GetStarlarkRunRequest - (*CreateRepositoryWebhookRequest)(nil), // 10: kurtosis_enclave_manager.CreateRepositoryWebhookRequest - (*StarlarkScriptPlanYamlArgs)(nil), // 11: kurtosis_enclave_manager.StarlarkScriptPlanYamlArgs - (*StarlarkPackagePlanYamlArgs)(nil), // 12: kurtosis_enclave_manager.StarlarkPackagePlanYamlArgs - (*kurtosis_core_rpc_api_bindings.RunStarlarkPackageArgs)(nil), // 13: api_container_api.RunStarlarkPackageArgs - (*kurtosis_core_rpc_api_bindings.RunStarlarkScriptArgs)(nil), // 14: api_container_api.RunStarlarkScriptArgs - (*kurtosis_core_rpc_api_bindings.FilesArtifactNameAndUuid)(nil), // 15: api_container_api.FilesArtifactNameAndUuid - (*kurtosis_core_rpc_api_bindings.DownloadFilesArtifactArgs)(nil), // 16: api_container_api.DownloadFilesArtifactArgs - (*kurtosis_core_rpc_api_bindings.StarlarkScriptPlanYamlArgs)(nil), // 17: api_container_api.StarlarkScriptPlanYamlArgs - (*kurtosis_core_rpc_api_bindings.StarlarkPackagePlanYamlArgs)(nil), // 18: api_container_api.StarlarkPackagePlanYamlArgs - (*emptypb.Empty)(nil), // 19: google.protobuf.Empty - (*kurtosis_engine_rpc_api_bindings.GetServiceLogsArgs)(nil), // 20: engine_api.GetServiceLogsArgs - (*kurtosis_engine_rpc_api_bindings.CreateEnclaveArgs)(nil), // 21: engine_api.CreateEnclaveArgs - (*kurtosis_engine_rpc_api_bindings.DestroyEnclaveArgs)(nil), // 22: engine_api.DestroyEnclaveArgs - (*kurtosis_engine_rpc_api_bindings.GetEnclavesResponse)(nil), // 23: engine_api.GetEnclavesResponse - (*kurtosis_core_rpc_api_bindings.GetServicesResponse)(nil), // 24: api_container_api.GetServicesResponse - (*kurtosis_engine_rpc_api_bindings.GetServiceLogsResponse)(nil), // 25: engine_api.GetServiceLogsResponse - (*kurtosis_core_rpc_api_bindings.ListFilesArtifactNamesAndUuidsResponse)(nil), // 26: api_container_api.ListFilesArtifactNamesAndUuidsResponse - (*kurtosis_core_rpc_api_bindings.StarlarkRunResponseLine)(nil), // 27: api_container_api.StarlarkRunResponseLine - (*kurtosis_engine_rpc_api_bindings.CreateEnclaveResponse)(nil), // 28: engine_api.CreateEnclaveResponse - (*kurtosis_core_rpc_api_bindings.InspectFilesArtifactContentsResponse)(nil), // 29: api_container_api.InspectFilesArtifactContentsResponse - (*kurtosis_core_rpc_api_bindings.StreamedDataChunk)(nil), // 30: api_container_api.StreamedDataChunk - (*kurtosis_core_rpc_api_bindings.GetStarlarkRunResponse)(nil), // 31: api_container_api.GetStarlarkRunResponse - (*kurtosis_core_rpc_api_bindings.PlanYaml)(nil), // 32: api_container_api.PlanYaml + (HealthCheckResponse_ServingStatus)(0), // 0: kurtosis_enclave_manager.HealthCheckResponse.ServingStatus + (*HealthCheckRequest)(nil), // 1: kurtosis_enclave_manager.HealthCheckRequest + (*HealthCheckResponse)(nil), // 2: kurtosis_enclave_manager.HealthCheckResponse + (*GetServicesRequest)(nil), // 3: kurtosis_enclave_manager.GetServicesRequest + (*GetListFilesArtifactNamesAndUuidsRequest)(nil), // 4: kurtosis_enclave_manager.GetListFilesArtifactNamesAndUuidsRequest + (*RunStarlarkPackageRequest)(nil), // 5: kurtosis_enclave_manager.RunStarlarkPackageRequest + (*RunStarlarkScriptRequest)(nil), // 6: kurtosis_enclave_manager.RunStarlarkScriptRequest + (*InspectFilesArtifactContentsRequest)(nil), // 7: kurtosis_enclave_manager.InspectFilesArtifactContentsRequest + (*DownloadFilesArtifactRequest)(nil), // 8: kurtosis_enclave_manager.DownloadFilesArtifactRequest + (*GetStarlarkRunRequest)(nil), // 9: kurtosis_enclave_manager.GetStarlarkRunRequest + (*CreateRepositoryWebhookRequest)(nil), // 10: kurtosis_enclave_manager.CreateRepositoryWebhookRequest + (*StarlarkScriptPlanYamlArgs)(nil), // 11: kurtosis_enclave_manager.StarlarkScriptPlanYamlArgs + (*StarlarkPackagePlanYamlArgs)(nil), // 12: kurtosis_enclave_manager.StarlarkPackagePlanYamlArgs + (*kurtosis_core_rpc_api_bindings.RunStarlarkPackageArgs)(nil), // 13: api_container_api.RunStarlarkPackageArgs + (*kurtosis_core_rpc_api_bindings.RunStarlarkScriptArgs)(nil), // 14: api_container_api.RunStarlarkScriptArgs + (*kurtosis_core_rpc_api_bindings.FilesArtifactNameAndUuid)(nil), // 15: api_container_api.FilesArtifactNameAndUuid + (*kurtosis_core_rpc_api_bindings.DownloadFilesArtifactArgs)(nil), // 16: api_container_api.DownloadFilesArtifactArgs + (*kurtosis_core_rpc_api_bindings.StarlarkScriptPlanYamlArgs)(nil), // 17: api_container_api.StarlarkScriptPlanYamlArgs + (*kurtosis_core_rpc_api_bindings.StarlarkPackagePlanYamlArgs)(nil), // 18: api_container_api.StarlarkPackagePlanYamlArgs + (*emptypb.Empty)(nil), // 19: google.protobuf.Empty + (*kurtosis_engine_rpc_api_bindings.GetServiceLogsArgs)(nil), // 20: engine_api.GetServiceLogsArgs + (*kurtosis_engine_rpc_api_bindings.CreateEnclaveArgs)(nil), // 21: engine_api.CreateEnclaveArgs + (*kurtosis_engine_rpc_api_bindings.DestroyEnclaveArgs)(nil), // 22: engine_api.DestroyEnclaveArgs + (*kurtosis_engine_rpc_api_bindings.GetEnclavesResponse)(nil), // 23: engine_api.GetEnclavesResponse + (*kurtosis_core_rpc_api_bindings.GetServicesResponse)(nil), // 24: api_container_api.GetServicesResponse + (*kurtosis_engine_rpc_api_bindings.GetServiceLogsResponse)(nil), // 25: engine_api.GetServiceLogsResponse + (*kurtosis_core_rpc_api_bindings.ListFilesArtifactNamesAndUuidsResponse)(nil), // 26: api_container_api.ListFilesArtifactNamesAndUuidsResponse + (*kurtosis_core_rpc_api_bindings.StarlarkRunResponseLine)(nil), // 27: api_container_api.StarlarkRunResponseLine + (*kurtosis_engine_rpc_api_bindings.CreateEnclaveResponse)(nil), // 28: engine_api.CreateEnclaveResponse + (*kurtosis_core_rpc_api_bindings.InspectFilesArtifactContentsResponse)(nil), // 29: api_container_api.InspectFilesArtifactContentsResponse + (*kurtosis_core_rpc_api_bindings.StreamedDataChunk)(nil), // 30: api_container_api.StreamedDataChunk + (*kurtosis_core_rpc_api_bindings.GetStarlarkRunResponse)(nil), // 31: api_container_api.GetStarlarkRunResponse + (*kurtosis_core_rpc_api_bindings.PlanYaml)(nil), // 32: api_container_api.PlanYaml + (*kurtosis_backend_server_rpc_api_bindings.GetCloudInstanceConfigResponse)(nil), // 33: kurtosis_cloud.GetCloudInstanceConfigResponse } var file_kurtosis_enclave_manager_api_proto_depIdxs = []int32{ 0, // 0: kurtosis_enclave_manager.HealthCheckResponse.status:type_name -> kurtosis_enclave_manager.HealthCheckResponse.ServingStatus @@ -1079,23 +1089,25 @@ var file_kurtosis_enclave_manager_api_proto_depIdxs = []int32{ 11, // 19: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetStarlarkScriptPlanYaml:input_type -> kurtosis_enclave_manager.StarlarkScriptPlanYamlArgs 12, // 20: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetStarlarkPackagePlanYaml:input_type -> kurtosis_enclave_manager.StarlarkPackagePlanYamlArgs 10, // 21: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.CreateRepositoryWebhook:input_type -> kurtosis_enclave_manager.CreateRepositoryWebhookRequest - 2, // 22: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.Check:output_type -> kurtosis_enclave_manager.HealthCheckResponse - 23, // 23: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetEnclaves:output_type -> engine_api.GetEnclavesResponse - 24, // 24: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetServices:output_type -> api_container_api.GetServicesResponse - 25, // 25: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetServiceLogs:output_type -> engine_api.GetServiceLogsResponse - 26, // 26: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.ListFilesArtifactNamesAndUuids:output_type -> api_container_api.ListFilesArtifactNamesAndUuidsResponse - 27, // 27: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.RunStarlarkPackage:output_type -> api_container_api.StarlarkRunResponseLine - 27, // 28: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.RunStarlarkScript:output_type -> api_container_api.StarlarkRunResponseLine - 28, // 29: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.CreateEnclave:output_type -> engine_api.CreateEnclaveResponse - 29, // 30: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.InspectFilesArtifactContents:output_type -> api_container_api.InspectFilesArtifactContentsResponse - 30, // 31: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.DownloadFilesArtifact:output_type -> api_container_api.StreamedDataChunk - 19, // 32: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.DestroyEnclave:output_type -> google.protobuf.Empty - 31, // 33: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetStarlarkRun:output_type -> api_container_api.GetStarlarkRunResponse - 32, // 34: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetStarlarkScriptPlanYaml:output_type -> api_container_api.PlanYaml - 32, // 35: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetStarlarkPackagePlanYaml:output_type -> api_container_api.PlanYaml - 19, // 36: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.CreateRepositoryWebhook:output_type -> google.protobuf.Empty - 22, // [22:37] is the sub-list for method output_type - 7, // [7:22] is the sub-list for method input_type + 19, // 22: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetCloudInstanceConfig:input_type -> google.protobuf.Empty + 2, // 23: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.Check:output_type -> kurtosis_enclave_manager.HealthCheckResponse + 23, // 24: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetEnclaves:output_type -> engine_api.GetEnclavesResponse + 24, // 25: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetServices:output_type -> api_container_api.GetServicesResponse + 25, // 26: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetServiceLogs:output_type -> engine_api.GetServiceLogsResponse + 26, // 27: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.ListFilesArtifactNamesAndUuids:output_type -> api_container_api.ListFilesArtifactNamesAndUuidsResponse + 27, // 28: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.RunStarlarkPackage:output_type -> api_container_api.StarlarkRunResponseLine + 27, // 29: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.RunStarlarkScript:output_type -> api_container_api.StarlarkRunResponseLine + 28, // 30: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.CreateEnclave:output_type -> engine_api.CreateEnclaveResponse + 29, // 31: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.InspectFilesArtifactContents:output_type -> api_container_api.InspectFilesArtifactContentsResponse + 30, // 32: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.DownloadFilesArtifact:output_type -> api_container_api.StreamedDataChunk + 19, // 33: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.DestroyEnclave:output_type -> google.protobuf.Empty + 31, // 34: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetStarlarkRun:output_type -> api_container_api.GetStarlarkRunResponse + 32, // 35: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetStarlarkScriptPlanYaml:output_type -> api_container_api.PlanYaml + 32, // 36: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetStarlarkPackagePlanYaml:output_type -> api_container_api.PlanYaml + 19, // 37: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.CreateRepositoryWebhook:output_type -> google.protobuf.Empty + 33, // 38: kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetCloudInstanceConfig:output_type -> kurtosis_cloud.GetCloudInstanceConfigResponse + 23, // [23:39] is the sub-list for method output_type + 7, // [7:23] is the sub-list for method input_type 7, // [7:7] is the sub-list for extension type_name 7, // [7:7] is the sub-list for extension extendee 0, // [0:7] is the sub-list for field type_name diff --git a/enclave-manager/api/golang/kurtosis_enclave_manager_api_bindings/kurtosis_enclave_manager_api_bindingsconnect/kurtosis_enclave_manager_api.connect.go b/enclave-manager/api/golang/kurtosis_enclave_manager_api_bindings/kurtosis_enclave_manager_api_bindingsconnect/kurtosis_enclave_manager_api.connect.go index c1fdb89941..df7da37084 100644 --- a/enclave-manager/api/golang/kurtosis_enclave_manager_api_bindings/kurtosis_enclave_manager_api_bindingsconnect/kurtosis_enclave_manager_api.connect.go +++ b/enclave-manager/api/golang/kurtosis_enclave_manager_api_bindings/kurtosis_enclave_manager_api_bindingsconnect/kurtosis_enclave_manager_api.connect.go @@ -10,6 +10,7 @@ import ( errors "errors" kurtosis_core_rpc_api_bindings "github.com/kurtosis-tech/kurtosis/api/golang/core/kurtosis_core_rpc_api_bindings" kurtosis_engine_rpc_api_bindings "github.com/kurtosis-tech/kurtosis/api/golang/engine/kurtosis_engine_rpc_api_bindings" + kurtosis_backend_server_rpc_api_bindings "github.com/kurtosis-tech/kurtosis/cloud/api/golang/kurtosis_backend_server_rpc_api_bindings" kurtosis_enclave_manager_api_bindings "github.com/kurtosis-tech/kurtosis/enclave-manager/api/golang/kurtosis_enclave_manager_api_bindings" emptypb "google.golang.org/protobuf/types/known/emptypb" http "net/http" @@ -82,6 +83,9 @@ const ( // KurtosisEnclaveManagerServerCreateRepositoryWebhookProcedure is the fully-qualified name of the // KurtosisEnclaveManagerServer's CreateRepositoryWebhook RPC. KurtosisEnclaveManagerServerCreateRepositoryWebhookProcedure = "/kurtosis_enclave_manager.KurtosisEnclaveManagerServer/CreateRepositoryWebhook" + // KurtosisEnclaveManagerServerGetCloudInstanceConfigProcedure is the fully-qualified name of the + // KurtosisEnclaveManagerServer's GetCloudInstanceConfig RPC. + KurtosisEnclaveManagerServerGetCloudInstanceConfigProcedure = "/kurtosis_enclave_manager.KurtosisEnclaveManagerServer/GetCloudInstanceConfig" ) // KurtosisEnclaveManagerServerClient is a client for the @@ -102,6 +106,7 @@ type KurtosisEnclaveManagerServerClient interface { GetStarlarkScriptPlanYaml(context.Context, *connect.Request[kurtosis_enclave_manager_api_bindings.StarlarkScriptPlanYamlArgs]) (*connect.Response[kurtosis_core_rpc_api_bindings.PlanYaml], error) GetStarlarkPackagePlanYaml(context.Context, *connect.Request[kurtosis_enclave_manager_api_bindings.StarlarkPackagePlanYamlArgs]) (*connect.Response[kurtosis_core_rpc_api_bindings.PlanYaml], error) CreateRepositoryWebhook(context.Context, *connect.Request[kurtosis_enclave_manager_api_bindings.CreateRepositoryWebhookRequest]) (*connect.Response[emptypb.Empty], error) + GetCloudInstanceConfig(context.Context, *connect.Request[emptypb.Empty]) (*connect.Response[kurtosis_backend_server_rpc_api_bindings.GetCloudInstanceConfigResponse], error) } // NewKurtosisEnclaveManagerServerClient constructs a client for the @@ -190,6 +195,11 @@ func NewKurtosisEnclaveManagerServerClient(httpClient connect.HTTPClient, baseUR baseURL+KurtosisEnclaveManagerServerCreateRepositoryWebhookProcedure, opts..., ), + getCloudInstanceConfig: connect.NewClient[emptypb.Empty, kurtosis_backend_server_rpc_api_bindings.GetCloudInstanceConfigResponse]( + httpClient, + baseURL+KurtosisEnclaveManagerServerGetCloudInstanceConfigProcedure, + opts..., + ), } } @@ -210,6 +220,7 @@ type kurtosisEnclaveManagerServerClient struct { getStarlarkScriptPlanYaml *connect.Client[kurtosis_enclave_manager_api_bindings.StarlarkScriptPlanYamlArgs, kurtosis_core_rpc_api_bindings.PlanYaml] getStarlarkPackagePlanYaml *connect.Client[kurtosis_enclave_manager_api_bindings.StarlarkPackagePlanYamlArgs, kurtosis_core_rpc_api_bindings.PlanYaml] createRepositoryWebhook *connect.Client[kurtosis_enclave_manager_api_bindings.CreateRepositoryWebhookRequest, emptypb.Empty] + getCloudInstanceConfig *connect.Client[emptypb.Empty, kurtosis_backend_server_rpc_api_bindings.GetCloudInstanceConfigResponse] } // Check calls kurtosis_enclave_manager.KurtosisEnclaveManagerServer.Check. @@ -294,6 +305,12 @@ func (c *kurtosisEnclaveManagerServerClient) CreateRepositoryWebhook(ctx context return c.createRepositoryWebhook.CallUnary(ctx, req) } +// GetCloudInstanceConfig calls +// kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetCloudInstanceConfig. +func (c *kurtosisEnclaveManagerServerClient) GetCloudInstanceConfig(ctx context.Context, req *connect.Request[emptypb.Empty]) (*connect.Response[kurtosis_backend_server_rpc_api_bindings.GetCloudInstanceConfigResponse], error) { + return c.getCloudInstanceConfig.CallUnary(ctx, req) +} + // KurtosisEnclaveManagerServerHandler is an implementation of the // kurtosis_enclave_manager.KurtosisEnclaveManagerServer service. type KurtosisEnclaveManagerServerHandler interface { @@ -312,6 +329,7 @@ type KurtosisEnclaveManagerServerHandler interface { GetStarlarkScriptPlanYaml(context.Context, *connect.Request[kurtosis_enclave_manager_api_bindings.StarlarkScriptPlanYamlArgs]) (*connect.Response[kurtosis_core_rpc_api_bindings.PlanYaml], error) GetStarlarkPackagePlanYaml(context.Context, *connect.Request[kurtosis_enclave_manager_api_bindings.StarlarkPackagePlanYamlArgs]) (*connect.Response[kurtosis_core_rpc_api_bindings.PlanYaml], error) CreateRepositoryWebhook(context.Context, *connect.Request[kurtosis_enclave_manager_api_bindings.CreateRepositoryWebhookRequest]) (*connect.Response[emptypb.Empty], error) + GetCloudInstanceConfig(context.Context, *connect.Request[emptypb.Empty]) (*connect.Response[kurtosis_backend_server_rpc_api_bindings.GetCloudInstanceConfigResponse], error) } // NewKurtosisEnclaveManagerServerHandler builds an HTTP handler from the service implementation. It @@ -395,6 +413,11 @@ func NewKurtosisEnclaveManagerServerHandler(svc KurtosisEnclaveManagerServerHand svc.CreateRepositoryWebhook, opts..., ) + kurtosisEnclaveManagerServerGetCloudInstanceConfigHandler := connect.NewUnaryHandler( + KurtosisEnclaveManagerServerGetCloudInstanceConfigProcedure, + svc.GetCloudInstanceConfig, + opts..., + ) return "/kurtosis_enclave_manager.KurtosisEnclaveManagerServer/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case KurtosisEnclaveManagerServerCheckProcedure: @@ -427,6 +450,8 @@ func NewKurtosisEnclaveManagerServerHandler(svc KurtosisEnclaveManagerServerHand kurtosisEnclaveManagerServerGetStarlarkPackagePlanYamlHandler.ServeHTTP(w, r) case KurtosisEnclaveManagerServerCreateRepositoryWebhookProcedure: kurtosisEnclaveManagerServerCreateRepositoryWebhookHandler.ServeHTTP(w, r) + case KurtosisEnclaveManagerServerGetCloudInstanceConfigProcedure: + kurtosisEnclaveManagerServerGetCloudInstanceConfigHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -495,3 +520,7 @@ func (UnimplementedKurtosisEnclaveManagerServerHandler) GetStarlarkPackagePlanYa func (UnimplementedKurtosisEnclaveManagerServerHandler) CreateRepositoryWebhook(context.Context, *connect.Request[kurtosis_enclave_manager_api_bindings.CreateRepositoryWebhookRequest]) (*connect.Response[emptypb.Empty], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("kurtosis_enclave_manager.KurtosisEnclaveManagerServer.CreateRepositoryWebhook is not implemented")) } + +func (UnimplementedKurtosisEnclaveManagerServerHandler) GetCloudInstanceConfig(context.Context, *connect.Request[emptypb.Empty]) (*connect.Response[kurtosis_backend_server_rpc_api_bindings.GetCloudInstanceConfigResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetCloudInstanceConfig is not implemented")) +} diff --git a/enclave-manager/api/golang/kurtosis_enclave_manager_api_bindings/kurtosis_enclave_manager_api_grpc.pb.go b/enclave-manager/api/golang/kurtosis_enclave_manager_api_bindings/kurtosis_enclave_manager_api_grpc.pb.go index efc0ba76ed..854fe9c4e8 100644 --- a/enclave-manager/api/golang/kurtosis_enclave_manager_api_bindings/kurtosis_enclave_manager_api_grpc.pb.go +++ b/enclave-manager/api/golang/kurtosis_enclave_manager_api_bindings/kurtosis_enclave_manager_api_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.24.4 +// - protoc v4.23.4 // source: kurtosis_enclave_manager_api.proto package kurtosis_enclave_manager_api_bindings @@ -10,6 +10,7 @@ import ( context "context" kurtosis_core_rpc_api_bindings "github.com/kurtosis-tech/kurtosis/api/golang/core/kurtosis_core_rpc_api_bindings" kurtosis_engine_rpc_api_bindings "github.com/kurtosis-tech/kurtosis/api/golang/engine/kurtosis_engine_rpc_api_bindings" + kurtosis_backend_server_rpc_api_bindings "github.com/kurtosis-tech/kurtosis/cloud/api/golang/kurtosis_backend_server_rpc_api_bindings" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -37,6 +38,7 @@ const ( KurtosisEnclaveManagerServer_GetStarlarkScriptPlanYaml_FullMethodName = "/kurtosis_enclave_manager.KurtosisEnclaveManagerServer/GetStarlarkScriptPlanYaml" KurtosisEnclaveManagerServer_GetStarlarkPackagePlanYaml_FullMethodName = "/kurtosis_enclave_manager.KurtosisEnclaveManagerServer/GetStarlarkPackagePlanYaml" KurtosisEnclaveManagerServer_CreateRepositoryWebhook_FullMethodName = "/kurtosis_enclave_manager.KurtosisEnclaveManagerServer/CreateRepositoryWebhook" + KurtosisEnclaveManagerServer_GetCloudInstanceConfig_FullMethodName = "/kurtosis_enclave_manager.KurtosisEnclaveManagerServer/GetCloudInstanceConfig" ) // KurtosisEnclaveManagerServerClient is the client API for KurtosisEnclaveManagerServer service. @@ -58,6 +60,7 @@ type KurtosisEnclaveManagerServerClient interface { GetStarlarkScriptPlanYaml(ctx context.Context, in *StarlarkScriptPlanYamlArgs, opts ...grpc.CallOption) (*kurtosis_core_rpc_api_bindings.PlanYaml, error) GetStarlarkPackagePlanYaml(ctx context.Context, in *StarlarkPackagePlanYamlArgs, opts ...grpc.CallOption) (*kurtosis_core_rpc_api_bindings.PlanYaml, error) CreateRepositoryWebhook(ctx context.Context, in *CreateRepositoryWebhookRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + GetCloudInstanceConfig(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*kurtosis_backend_server_rpc_api_bindings.GetCloudInstanceConfigResponse, error) } type kurtosisEnclaveManagerServerClient struct { @@ -295,6 +298,15 @@ func (c *kurtosisEnclaveManagerServerClient) CreateRepositoryWebhook(ctx context return out, nil } +func (c *kurtosisEnclaveManagerServerClient) GetCloudInstanceConfig(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*kurtosis_backend_server_rpc_api_bindings.GetCloudInstanceConfigResponse, error) { + out := new(kurtosis_backend_server_rpc_api_bindings.GetCloudInstanceConfigResponse) + err := c.cc.Invoke(ctx, KurtosisEnclaveManagerServer_GetCloudInstanceConfig_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // KurtosisEnclaveManagerServerServer is the server API for KurtosisEnclaveManagerServer service. // All implementations should embed UnimplementedKurtosisEnclaveManagerServerServer // for forward compatibility @@ -314,6 +326,7 @@ type KurtosisEnclaveManagerServerServer interface { GetStarlarkScriptPlanYaml(context.Context, *StarlarkScriptPlanYamlArgs) (*kurtosis_core_rpc_api_bindings.PlanYaml, error) GetStarlarkPackagePlanYaml(context.Context, *StarlarkPackagePlanYamlArgs) (*kurtosis_core_rpc_api_bindings.PlanYaml, error) CreateRepositoryWebhook(context.Context, *CreateRepositoryWebhookRequest) (*emptypb.Empty, error) + GetCloudInstanceConfig(context.Context, *emptypb.Empty) (*kurtosis_backend_server_rpc_api_bindings.GetCloudInstanceConfigResponse, error) } // UnimplementedKurtosisEnclaveManagerServerServer should be embedded to have forward compatible implementations. @@ -365,6 +378,9 @@ func (UnimplementedKurtosisEnclaveManagerServerServer) GetStarlarkPackagePlanYam func (UnimplementedKurtosisEnclaveManagerServerServer) CreateRepositoryWebhook(context.Context, *CreateRepositoryWebhookRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateRepositoryWebhook not implemented") } +func (UnimplementedKurtosisEnclaveManagerServerServer) GetCloudInstanceConfig(context.Context, *emptypb.Empty) (*kurtosis_backend_server_rpc_api_bindings.GetCloudInstanceConfigResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetCloudInstanceConfig not implemented") +} // UnsafeKurtosisEnclaveManagerServerServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to KurtosisEnclaveManagerServerServer will @@ -659,6 +675,24 @@ func _KurtosisEnclaveManagerServer_CreateRepositoryWebhook_Handler(srv interface return interceptor(ctx, in, info, handler) } +func _KurtosisEnclaveManagerServer_GetCloudInstanceConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(emptypb.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(KurtosisEnclaveManagerServerServer).GetCloudInstanceConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: KurtosisEnclaveManagerServer_GetCloudInstanceConfig_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(KurtosisEnclaveManagerServerServer).GetCloudInstanceConfig(ctx, req.(*emptypb.Empty)) + } + return interceptor(ctx, in, info, handler) +} + // KurtosisEnclaveManagerServer_ServiceDesc is the grpc.ServiceDesc for KurtosisEnclaveManagerServer service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -710,6 +744,10 @@ var KurtosisEnclaveManagerServer_ServiceDesc = grpc.ServiceDesc{ MethodName: "CreateRepositoryWebhook", Handler: _KurtosisEnclaveManagerServer_CreateRepositoryWebhook_Handler, }, + { + MethodName: "GetCloudInstanceConfig", + Handler: _KurtosisEnclaveManagerServer_GetCloudInstanceConfig_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/enclave-manager/api/protobuf/kurtosis_enclave_manager_api.proto b/enclave-manager/api/protobuf/kurtosis_enclave_manager_api.proto index 058d90109f..e34ea0b0c0 100644 --- a/enclave-manager/api/protobuf/kurtosis_enclave_manager_api.proto +++ b/enclave-manager/api/protobuf/kurtosis_enclave_manager_api.proto @@ -7,6 +7,7 @@ option go_package = "github.com/kurtosis-tech/kurtosis/enclave-manager/api/golan import "google/protobuf/empty.proto"; import "engine_service.proto"; import "api_container_service.proto"; +import "kurtosis_backend_server_api.proto"; service KurtosisEnclaveManagerServer { rpc Check(HealthCheckRequest) returns (HealthCheckResponse); @@ -23,7 +24,8 @@ service KurtosisEnclaveManagerServer { rpc GetStarlarkRun(GetStarlarkRunRequest) returns (api_container_api.GetStarlarkRunResponse) {}; rpc GetStarlarkScriptPlanYaml(StarlarkScriptPlanYamlArgs) returns (api_container_api.PlanYaml) {}; rpc GetStarlarkPackagePlanYaml(StarlarkPackagePlanYamlArgs) returns (api_container_api.PlanYaml) {}; - rpc CreateRepositoryWebhook(CreateRepositoryWebhookRequest) returns (google.protobuf.Empty) {} + rpc CreateRepositoryWebhook(CreateRepositoryWebhookRequest) returns (google.protobuf.Empty) {}; + rpc GetCloudInstanceConfig(google.protobuf.Empty) returns (kurtosis_cloud.GetCloudInstanceConfigResponse) {}; } message HealthCheckRequest { @@ -98,4 +100,4 @@ message StarlarkPackagePlanYamlArgs { string apic_ip_address = 1; int32 apic_port = 2; api_container_api.StarlarkPackagePlanYamlArgs starlark_package_plan_yaml_args = 3; -} \ No newline at end of file +} diff --git a/enclave-manager/api/scripts/regenerate-proto-bindings.sh b/enclave-manager/api/scripts/regenerate-proto-bindings.sh index 7c74cbc9c5..59fc03060a 100755 --- a/enclave-manager/api/scripts/regenerate-proto-bindings.sh +++ b/enclave-manager/api/scripts/regenerate-proto-bindings.sh @@ -49,6 +49,7 @@ fi # Dependencies from other modules api_golang_engine="${repo_root_dirpath}/api/protobuf/engine" api_golang_core="${repo_root_dirpath}/api/protobuf/core" +cloud_api_golang="${repo_root_dirpath}/cloud/api/protobuf" api_typescript_abs_dir="${root_dirpath}/${api_typescript_rel_dir}" api_proto_abs_dir="${root_dirpath}/${api_proto_rel_dir}" @@ -61,6 +62,7 @@ protoc \ -I="${api_proto_abs_dir}" \ -I="${api_golang_engine}" \ -I="${api_golang_core}" \ + -I="${cloud_api_golang}" \ --go_out="${api_golang_proto_generated_abs_dir}" \ --go-grpc_out="${api_golang_proto_generated_abs_dir}" \ --go_opt=module="${api_golang_module}" \ @@ -74,4 +76,4 @@ protoc \ --plugin=protoc-gen-connect-es="${node_connect_es_protoc_bin_filepath}" \ --connect-es_out="${api_typescript_abs_dir}/src/" \ --connect-es_opt=target=ts \ - "${api_proto_abs_dir}"/*.proto \ No newline at end of file + "${api_proto_abs_dir}"/*.proto diff --git a/enclave-manager/api/typescript/package.json b/enclave-manager/api/typescript/package.json index 2f4d289378..c7bb52b204 100644 --- a/enclave-manager/api/typescript/package.json +++ b/enclave-manager/api/typescript/package.json @@ -6,9 +6,9 @@ "types": "./build/index", "scripts": { "clean": "rm -rf build src/api_container* src/engine_service*", - "prebuild": "cp -R ../../../api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/* ../../../api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/* ./src", + "prebuild": "cp -R ../../../api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/* ../../../api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/* ../../../cloud/api/typescript/src/* ./src", "build": "tsc", - "postbuild": "cp -R ../../../api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/* ../../../api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/* ./build/ && rm src/api_container* src/engine_service*", + "postbuild": "cp -R ../../../api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/* ../../../api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/* ../../../cloud/api/typescript/src/* ./build/ && rm src/api_container* src/engine_service* src/kurtosis_backend_server_*", "test": "jest" }, "files": [ diff --git a/enclave-manager/api/typescript/src/kurtosis_enclave_manager_api_connect.ts b/enclave-manager/api/typescript/src/kurtosis_enclave_manager_api_connect.ts index a8c73df9d6..fe70f42ccf 100644 --- a/enclave-manager/api/typescript/src/kurtosis_enclave_manager_api_connect.ts +++ b/enclave-manager/api/typescript/src/kurtosis_enclave_manager_api_connect.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-connect-es v0.13.2 with parameter "target=ts" +// @generated by protoc-gen-connect-es v0.13.0 with parameter "target=ts" // @generated from file kurtosis_enclave_manager_api.proto (package kurtosis_enclave_manager, syntax proto3) /* eslint-disable */ // @ts-nocheck @@ -7,6 +7,7 @@ import { CreateRepositoryWebhookRequest, DownloadFilesArtifactRequest, GetListFi import { Empty, MethodKind } from "@bufbuild/protobuf"; import { CreateEnclaveArgs, CreateEnclaveResponse, DestroyEnclaveArgs, GetEnclavesResponse, GetServiceLogsArgs, GetServiceLogsResponse } from "./engine_service_pb.js"; import { GetServicesResponse, GetStarlarkRunResponse, InspectFilesArtifactContentsResponse, ListFilesArtifactNamesAndUuidsResponse, PlanYaml, StarlarkRunResponseLine, StreamedDataChunk } from "./api_container_service_pb.js"; +import { GetCloudInstanceConfigResponse } from "./kurtosis_backend_server_api_pb.js"; /** * @generated from service kurtosis_enclave_manager.KurtosisEnclaveManagerServer @@ -149,6 +150,15 @@ export const KurtosisEnclaveManagerServer = { O: Empty, kind: MethodKind.Unary, }, + /** + * @generated from rpc kurtosis_enclave_manager.KurtosisEnclaveManagerServer.GetCloudInstanceConfig + */ + getCloudInstanceConfig: { + name: "GetCloudInstanceConfig", + I: Empty, + O: GetCloudInstanceConfigResponse, + kind: MethodKind.Unary, + }, } } as const; diff --git a/enclave-manager/api/typescript/src/kurtosis_enclave_manager_api_pb.ts b/enclave-manager/api/typescript/src/kurtosis_enclave_manager_api_pb.ts index b648455323..a2993c5082 100644 --- a/enclave-manager/api/typescript/src/kurtosis_enclave_manager_api_pb.ts +++ b/enclave-manager/api/typescript/src/kurtosis_enclave_manager_api_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.5.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.8.0 with parameter "target=ts" // @generated from file kurtosis_enclave_manager_api.proto (package kurtosis_enclave_manager, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/enclave-manager/server/server.go b/enclave-manager/server/server.go index ab5ca7fa02..d3adbc5c07 100644 --- a/enclave-manager/server/server.go +++ b/enclave-manager/server/server.go @@ -149,7 +149,7 @@ func (c *WebServer) ValidateRequestAuthorization( return false, stacktrace.NewError("An internal error has occurred. An empty API key was found") } - instanceConfig, err := c.GetCloudInstanceConfig(ctx, reqToken, auth.ApiKey) + instanceConfig, err := c.getCloudInstanceConfig(ctx, reqToken, auth.ApiKey) if err != nil { return false, stacktrace.Propagate(err, "Failed to retrieve the instance config") } @@ -168,6 +168,33 @@ func (c *WebServer) ValidateRequestAuthorization( return true, nil } +func (c *WebServer) GetCloudInstanceConfig(ctx context.Context, req *connect.Request[emptypb.Empty]) (*connect.Response[kurtosis_backend_server_rpc_api_bindings.GetCloudInstanceConfigResponse], error) { + reqToken := req.Header().Get("Authorization") + splitToken := strings.Split(reqToken, "Bearer") + if len(splitToken) != numberOfElementsAuthHeader { + return nil, stacktrace.NewError("Authorization token malformed. Bearer token format required") + } + reqToken = strings.TrimSpace(splitToken[1]) + auth, err := c.ConvertJwtTokenToApiKey(ctx, reqToken) + if err != nil { + return nil, stacktrace.Propagate(err, "Failed to convert jwt token to API key") + } + if auth == nil || len(auth.ApiKey) == 0 { + return nil, stacktrace.NewError("An internal error has occurred. An empty API key was found") + } + + instanceConfig, err := c.getCloudInstanceConfig(ctx, reqToken, auth.ApiKey) + if err != nil { + return nil, stacktrace.Propagate(err, "Failed to retrieve the instance config") + } + + resp := &connect.Response[kurtosis_backend_server_rpc_api_bindings.GetCloudInstanceConfigResponse]{ + Msg: instanceConfig, + } + + return resp, nil +} + func (c *WebServer) GetEnclaves(ctx context.Context, req *connect.Request[emptypb.Empty]) (*connect.Response[kurtosis_engine_rpc_api_bindings.GetEnclavesResponse], error) { auth, err := c.ValidateRequestAuthorization(ctx, c.enforceAuth, req.Header()) if err != nil { @@ -580,7 +607,7 @@ func (c *WebServer) createKurtosisCloudBackendClient( return &client, nil } -func (c *WebServer) GetCloudInstanceConfig( +func (c *WebServer) getCloudInstanceConfig( ctx context.Context, jwtToken string, apiKey string,