From 9297acc3f3969a97d7b434b635a620511475bc10 Mon Sep 17 00:00:00 2001 From: Timur Sultanov Date: Wed, 22 Feb 2023 18:54:16 +0400 Subject: [PATCH 01/26] Add stubs for GetMetadata endpoint --- playground/api/v1/api.proto | 13 + playground/backend/internal/api/v1/api.pb.go | 506 +++++++++++------ .../backend/internal/api/v1/api_grpc.pb.go | 38 ++ .../lib/src/api/v1/api.pb.dart | 104 ++++ .../lib/src/api/v1/api.pbgrpc.dart | 28 + .../lib/src/api/v1/api.pbjson.dart | 19 + playground/infrastructure/api/v1/api_pb2.py | 211 +++---- playground/infrastructure/api/v1/api_pb2.pyi | 516 ++++++++++-------- .../infrastructure/api/v1/api_pb2_grpc.py | 34 ++ 9 files changed, 949 insertions(+), 520 deletions(-) diff --git a/playground/api/v1/api.proto b/playground/api/v1/api.proto index 3a62329fdb09..01aee9594e66 100644 --- a/playground/api/v1/api.proto +++ b/playground/api/v1/api.proto @@ -314,6 +314,16 @@ message GetSnippetResponse { Complexity complexity = 4; } +// GetMetadataRequest represents request for runner metadata +message GetMetadataRequest {} + +// GetMetadataResponse contains metadata about the runner +message GetMetadataResponse { + string runner_sdk = 1; + string build_commit_hash = 2; + string beam_sdk_version = 3; +} + service PlaygroundService { // Submit the job for an execution and get the pipeline uuid. @@ -372,4 +382,7 @@ service PlaygroundService { // Get the snippet of playground. rpc GetSnippet(GetSnippetRequest) returns (GetSnippetResponse); + + // Get the runner metadata. + rpc GetMetadata(GetMetadataRequest) returns (GetMetadataResponse); } diff --git a/playground/backend/internal/api/v1/api.pb.go b/playground/backend/internal/api/v1/api.pb.go index a3d7e3cd2678..8db68ad99c33 100644 --- a/playground/backend/internal/api/v1/api.pb.go +++ b/playground/backend/internal/api/v1/api.pb.go @@ -2588,6 +2588,109 @@ func (x *GetSnippetResponse) GetComplexity() Complexity { return Complexity_COMPLEXITY_UNSPECIFIED } +// GetMetadataRequest represents request for runner metadata +type GetMetadataRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetMetadataRequest) Reset() { + *x = GetMetadataRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_api_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMetadataRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMetadataRequest) ProtoMessage() {} + +func (x *GetMetadataRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_api_proto_msgTypes[42] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMetadataRequest.ProtoReflect.Descriptor instead. +func (*GetMetadataRequest) Descriptor() ([]byte, []int) { + return file_api_v1_api_proto_rawDescGZIP(), []int{42} +} + +// GetMetadataResponse contains metadata about the runner +type GetMetadataResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RunnerSdk string `protobuf:"bytes,1,opt,name=runner_sdk,json=runnerSdk,proto3" json:"runner_sdk,omitempty"` + BuildCommitHash string `protobuf:"bytes,2,opt,name=build_commit_hash,json=buildCommitHash,proto3" json:"build_commit_hash,omitempty"` + BeamSdkVersion string `protobuf:"bytes,3,opt,name=beam_sdk_version,json=beamSdkVersion,proto3" json:"beam_sdk_version,omitempty"` +} + +func (x *GetMetadataResponse) Reset() { + *x = GetMetadataResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_api_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMetadataResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMetadataResponse) ProtoMessage() {} + +func (x *GetMetadataResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_api_proto_msgTypes[43] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMetadataResponse.ProtoReflect.Descriptor instead. +func (*GetMetadataResponse) Descriptor() ([]byte, []int) { + return file_api_v1_api_proto_rawDescGZIP(), []int{43} +} + +func (x *GetMetadataResponse) GetRunnerSdk() string { + if x != nil { + return x.RunnerSdk + } + return "" +} + +func (x *GetMetadataResponse) GetBuildCommitHash() string { + if x != nil { + return x.BuildCommitHash + } + return "" +} + +func (x *GetMetadataResponse) GetBeamSdkVersion() string { + if x != nil { + return x.BeamSdkVersion + } + return "" +} + type Categories_Category struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2600,7 +2703,7 @@ type Categories_Category struct { func (x *Categories_Category) Reset() { *x = Categories_Category{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_api_proto_msgTypes[43] + mi := &file_api_v1_api_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2613,7 +2716,7 @@ func (x *Categories_Category) String() string { func (*Categories_Category) ProtoMessage() {} func (x *Categories_Category) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_api_proto_msgTypes[43] + mi := &file_api_v1_api_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2889,163 +2992,178 @@ var file_api_v1_api_proto_rawDesc = []byte{ 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, - 0x2a, 0x52, 0x0a, 0x03, 0x53, 0x64, 0x6b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x44, 0x4b, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, - 0x53, 0x44, 0x4b, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x44, - 0x4b, 0x5f, 0x47, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x44, 0x4b, 0x5f, 0x50, 0x59, - 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x53, 0x43, - 0x49, 0x4f, 0x10, 0x04, 0x2a, 0xb8, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1b, - 0x0a, 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, - 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, - 0x41, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, - 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, - 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x12, - 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, - 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x09, - 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, - 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, - 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0c, 0x2a, - 0xae, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x45, - 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, + 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x12, 0x2a, 0x0a, + 0x11, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x68, 0x61, + 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x65, 0x61, + 0x6d, 0x5f, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x65, 0x61, 0x6d, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x2a, 0x52, 0x0a, 0x03, 0x53, 0x64, 0x6b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x44, + 0x4b, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, + 0x06, 0x53, 0x44, 0x4b, 0x5f, 0x47, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x44, 0x4b, + 0x5f, 0x50, 0x59, 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, + 0x5f, 0x53, 0x43, 0x49, 0x4f, 0x10, 0x04, 0x2a, 0xb8, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, + 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, + 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x14, + 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, + 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, + 0x52, 0x45, 0x50, 0x41, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, + 0x50, 0x49, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x45, + 0x43, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x08, 0x12, 0x14, 0x0a, + 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, + 0x52, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, + 0x52, 0x4f, 0x52, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x52, 0x55, 0x4e, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, + 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, + 0x10, 0x0c, 0x2a, 0xae, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x23, + 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, + 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, + 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x52, + 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x54, 0x41, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, + 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, + 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x5f, 0x54, 0x45, 0x53, + 0x54, 0x10, 0x03, 0x2a, 0x6e, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, + 0x79, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, + 0x10, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x42, 0x41, 0x53, 0x49, + 0x43, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, + 0x59, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, + 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x41, 0x44, 0x56, 0x41, 0x4e, 0x43, 0x45, + 0x44, 0x10, 0x03, 0x2a, 0x46, 0x0a, 0x0c, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, - 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, - 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x52, 0x45, 0x43, 0x4f, - 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x54, 0x41, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x45, - 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x10, 0x03, - 0x2a, 0x6e, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x12, 0x1a, - 0x0a, 0x16, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, - 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, - 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x4d, - 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x50, 0x4c, - 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x41, 0x44, 0x56, 0x41, 0x4e, 0x43, 0x45, 0x44, 0x10, 0x03, - 0x2a, 0x46, 0x0a, 0x0c, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x17, 0x0a, 0x13, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x4b, 0x41, 0x46, 0x4b, 0x41, 0x10, 0x01, 0x32, 0x8b, 0x0d, 0x0a, 0x11, 0x50, 0x6c, 0x61, - 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, - 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, - 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, - 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, - 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x5e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, + 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x46, 0x4b, 0x41, 0x10, 0x01, 0x32, 0xd3, 0x0d, 0x0a, 0x11, + 0x50, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, + 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, + 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, + 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, + 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, + 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, + 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, - 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, - 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x1a, 0x47, + 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, + 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, + 0x06, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, + 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, - 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, + 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x61, + 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, + 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, - 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x28, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x76, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, - 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x61, 0x76, - 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, - 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, - 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, - 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, 0x36, 0x62, 0x65, 0x61, 0x6d, 0x2e, 0x61, - 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, + 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, + 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, + 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, + 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, + 0x65, 0x74, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x42, 0x38, 0x5a, 0x36, 0x62, 0x65, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, + 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x3b, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -3061,7 +3179,7 @@ func file_api_v1_api_proto_rawDescGZIP() []byte { } var file_api_v1_api_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_api_v1_api_proto_msgTypes = make([]protoimpl.MessageInfo, 44) +var file_api_v1_api_proto_msgTypes = make([]protoimpl.MessageInfo, 46) var file_api_v1_api_proto_goTypes = []interface{}{ (Sdk)(0), // 0: api.v1.Sdk (Status)(0), // 1: api.v1.Status @@ -3110,12 +3228,14 @@ var file_api_v1_api_proto_goTypes = []interface{}{ (*SaveSnippetResponse)(nil), // 44: api.v1.SaveSnippetResponse (*GetSnippetRequest)(nil), // 45: api.v1.GetSnippetRequest (*GetSnippetResponse)(nil), // 46: api.v1.GetSnippetResponse - nil, // 47: api.v1.Dataset.OptionsEntry - (*Categories_Category)(nil), // 48: api.v1.Categories.Category + (*GetMetadataRequest)(nil), // 47: api.v1.GetMetadataRequest + (*GetMetadataResponse)(nil), // 48: api.v1.GetMetadataResponse + nil, // 49: api.v1.Dataset.OptionsEntry + (*Categories_Category)(nil), // 50: api.v1.Categories.Category } var file_api_v1_api_proto_depIdxs = []int32{ 4, // 0: api.v1.Dataset.type:type_name -> api.v1.EmulatorType - 47, // 1: api.v1.Dataset.options:type_name -> api.v1.Dataset.OptionsEntry + 49, // 1: api.v1.Dataset.options:type_name -> api.v1.Dataset.OptionsEntry 0, // 2: api.v1.RunCodeRequest.sdk:type_name -> api.v1.Sdk 5, // 3: api.v1.RunCodeRequest.datasets:type_name -> api.v1.Dataset 42, // 4: api.v1.RunCodeRequest.files:type_name -> api.v1.SnippetFile @@ -3125,7 +3245,7 @@ var file_api_v1_api_proto_depIdxs = []int32{ 3, // 8: api.v1.PrecompiledObject.complexity:type_name -> api.v1.Complexity 5, // 9: api.v1.PrecompiledObject.datasets:type_name -> api.v1.Dataset 0, // 10: api.v1.Categories.sdk:type_name -> api.v1.Sdk - 48, // 11: api.v1.Categories.categories:type_name -> api.v1.Categories.Category + 50, // 11: api.v1.Categories.categories:type_name -> api.v1.Categories.Category 0, // 12: api.v1.GetPrecompiledObjectsRequest.sdk:type_name -> api.v1.Sdk 0, // 13: api.v1.GetDefaultPrecompiledObjectRequest.sdk:type_name -> api.v1.Sdk 27, // 14: api.v1.GetPrecompiledObjectsResponse.sdk_categories:type_name -> api.v1.Categories @@ -3158,27 +3278,29 @@ var file_api_v1_api_proto_depIdxs = []int32{ 34, // 41: api.v1.PlaygroundService.GetDefaultPrecompiledObject:input_type -> api.v1.GetDefaultPrecompiledObjectRequest 43, // 42: api.v1.PlaygroundService.SaveSnippet:input_type -> api.v1.SaveSnippetRequest 45, // 43: api.v1.PlaygroundService.GetSnippet:input_type -> api.v1.GetSnippetRequest - 7, // 44: api.v1.PlaygroundService.RunCode:output_type -> api.v1.RunCodeResponse - 9, // 45: api.v1.PlaygroundService.CheckStatus:output_type -> api.v1.CheckStatusResponse - 17, // 46: api.v1.PlaygroundService.GetRunOutput:output_type -> api.v1.GetRunOutputResponse - 21, // 47: api.v1.PlaygroundService.GetLogs:output_type -> api.v1.GetLogsResponse - 23, // 48: api.v1.PlaygroundService.GetGraph:output_type -> api.v1.GetGraphResponse - 19, // 49: api.v1.PlaygroundService.GetRunError:output_type -> api.v1.GetRunErrorResponse - 11, // 50: api.v1.PlaygroundService.GetValidationOutput:output_type -> api.v1.GetValidationOutputResponse - 13, // 51: api.v1.PlaygroundService.GetPreparationOutput:output_type -> api.v1.GetPreparationOutputResponse - 15, // 52: api.v1.PlaygroundService.GetCompileOutput:output_type -> api.v1.GetCompileOutputResponse - 25, // 53: api.v1.PlaygroundService.Cancel:output_type -> api.v1.CancelResponse - 35, // 54: api.v1.PlaygroundService.GetPrecompiledObjects:output_type -> api.v1.GetPrecompiledObjectsResponse - 36, // 55: api.v1.PlaygroundService.GetPrecompiledObject:output_type -> api.v1.GetPrecompiledObjectResponse - 37, // 56: api.v1.PlaygroundService.GetPrecompiledObjectCode:output_type -> api.v1.GetPrecompiledObjectCodeResponse - 38, // 57: api.v1.PlaygroundService.GetPrecompiledObjectOutput:output_type -> api.v1.GetPrecompiledObjectOutputResponse - 39, // 58: api.v1.PlaygroundService.GetPrecompiledObjectLogs:output_type -> api.v1.GetPrecompiledObjectLogsResponse - 40, // 59: api.v1.PlaygroundService.GetPrecompiledObjectGraph:output_type -> api.v1.GetPrecompiledObjectGraphResponse - 41, // 60: api.v1.PlaygroundService.GetDefaultPrecompiledObject:output_type -> api.v1.GetDefaultPrecompiledObjectResponse - 44, // 61: api.v1.PlaygroundService.SaveSnippet:output_type -> api.v1.SaveSnippetResponse - 46, // 62: api.v1.PlaygroundService.GetSnippet:output_type -> api.v1.GetSnippetResponse - 44, // [44:63] is the sub-list for method output_type - 25, // [25:44] is the sub-list for method input_type + 47, // 44: api.v1.PlaygroundService.GetMetadata:input_type -> api.v1.GetMetadataRequest + 7, // 45: api.v1.PlaygroundService.RunCode:output_type -> api.v1.RunCodeResponse + 9, // 46: api.v1.PlaygroundService.CheckStatus:output_type -> api.v1.CheckStatusResponse + 17, // 47: api.v1.PlaygroundService.GetRunOutput:output_type -> api.v1.GetRunOutputResponse + 21, // 48: api.v1.PlaygroundService.GetLogs:output_type -> api.v1.GetLogsResponse + 23, // 49: api.v1.PlaygroundService.GetGraph:output_type -> api.v1.GetGraphResponse + 19, // 50: api.v1.PlaygroundService.GetRunError:output_type -> api.v1.GetRunErrorResponse + 11, // 51: api.v1.PlaygroundService.GetValidationOutput:output_type -> api.v1.GetValidationOutputResponse + 13, // 52: api.v1.PlaygroundService.GetPreparationOutput:output_type -> api.v1.GetPreparationOutputResponse + 15, // 53: api.v1.PlaygroundService.GetCompileOutput:output_type -> api.v1.GetCompileOutputResponse + 25, // 54: api.v1.PlaygroundService.Cancel:output_type -> api.v1.CancelResponse + 35, // 55: api.v1.PlaygroundService.GetPrecompiledObjects:output_type -> api.v1.GetPrecompiledObjectsResponse + 36, // 56: api.v1.PlaygroundService.GetPrecompiledObject:output_type -> api.v1.GetPrecompiledObjectResponse + 37, // 57: api.v1.PlaygroundService.GetPrecompiledObjectCode:output_type -> api.v1.GetPrecompiledObjectCodeResponse + 38, // 58: api.v1.PlaygroundService.GetPrecompiledObjectOutput:output_type -> api.v1.GetPrecompiledObjectOutputResponse + 39, // 59: api.v1.PlaygroundService.GetPrecompiledObjectLogs:output_type -> api.v1.GetPrecompiledObjectLogsResponse + 40, // 60: api.v1.PlaygroundService.GetPrecompiledObjectGraph:output_type -> api.v1.GetPrecompiledObjectGraphResponse + 41, // 61: api.v1.PlaygroundService.GetDefaultPrecompiledObject:output_type -> api.v1.GetDefaultPrecompiledObjectResponse + 44, // 62: api.v1.PlaygroundService.SaveSnippet:output_type -> api.v1.SaveSnippetResponse + 46, // 63: api.v1.PlaygroundService.GetSnippet:output_type -> api.v1.GetSnippetResponse + 48, // 64: api.v1.PlaygroundService.GetMetadata:output_type -> api.v1.GetMetadataResponse + 45, // [45:65] is the sub-list for method output_type + 25, // [25:45] is the sub-list for method input_type 25, // [25:25] is the sub-list for extension type_name 25, // [25:25] is the sub-list for extension extendee 0, // [0:25] is the sub-list for field type_name @@ -3694,7 +3816,31 @@ func file_api_v1_api_proto_init() { return nil } } + file_api_v1_api_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMetadataRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } file_api_v1_api_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMetadataResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_api_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Categories_Category); i { case 0: return &v.state @@ -3713,7 +3859,7 @@ func file_api_v1_api_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_v1_api_proto_rawDesc, NumEnums: 5, - NumMessages: 44, + NumMessages: 46, NumExtensions: 0, NumServices: 1, }, diff --git a/playground/backend/internal/api/v1/api_grpc.pb.go b/playground/backend/internal/api/v1/api_grpc.pb.go index 2894e8f4ef6a..e6798717e04a 100644 --- a/playground/backend/internal/api/v1/api_grpc.pb.go +++ b/playground/backend/internal/api/v1/api_grpc.pb.go @@ -60,6 +60,8 @@ type PlaygroundServiceClient interface { SaveSnippet(ctx context.Context, in *SaveSnippetRequest, opts ...grpc.CallOption) (*SaveSnippetResponse, error) // Get the snippet of playground. GetSnippet(ctx context.Context, in *GetSnippetRequest, opts ...grpc.CallOption) (*GetSnippetResponse, error) + // Get the runner metadata. + GetMetadata(ctx context.Context, in *GetMetadataRequest, opts ...grpc.CallOption) (*GetMetadataResponse, error) } type playgroundServiceClient struct { @@ -241,6 +243,15 @@ func (c *playgroundServiceClient) GetSnippet(ctx context.Context, in *GetSnippet return out, nil } +func (c *playgroundServiceClient) GetMetadata(ctx context.Context, in *GetMetadataRequest, opts ...grpc.CallOption) (*GetMetadataResponse, error) { + out := new(GetMetadataResponse) + err := c.cc.Invoke(ctx, "/api.v1.PlaygroundService/GetMetadata", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // PlaygroundServiceServer is the server API for PlaygroundService service. // All implementations should embed UnimplementedPlaygroundServiceServer // for forward compatibility @@ -283,6 +294,8 @@ type PlaygroundServiceServer interface { SaveSnippet(context.Context, *SaveSnippetRequest) (*SaveSnippetResponse, error) // Get the snippet of playground. GetSnippet(context.Context, *GetSnippetRequest) (*GetSnippetResponse, error) + // Get the runner metadata. + GetMetadata(context.Context, *GetMetadataRequest) (*GetMetadataResponse, error) } // UnimplementedPlaygroundServiceServer should be embedded to have forward compatible implementations. @@ -346,6 +359,9 @@ func (UnimplementedPlaygroundServiceServer) SaveSnippet(context.Context, *SaveSn func (UnimplementedPlaygroundServiceServer) GetSnippet(context.Context, *GetSnippetRequest) (*GetSnippetResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetSnippet not implemented") } +func (UnimplementedPlaygroundServiceServer) GetMetadata(context.Context, *GetMetadataRequest) (*GetMetadataResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMetadata not implemented") +} // UnsafePlaygroundServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to PlaygroundServiceServer will @@ -700,6 +716,24 @@ func _PlaygroundService_GetSnippet_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _PlaygroundService_GetMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMetadataRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PlaygroundServiceServer).GetMetadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.v1.PlaygroundService/GetMetadata", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PlaygroundServiceServer).GetMetadata(ctx, req.(*GetMetadataRequest)) + } + return interceptor(ctx, in, info, handler) +} + // PlaygroundService_ServiceDesc is the grpc.ServiceDesc for PlaygroundService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -783,6 +817,10 @@ var PlaygroundService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetSnippet", Handler: _PlaygroundService_GetSnippet_Handler, }, + { + MethodName: "GetMetadata", + Handler: _PlaygroundService_GetMetadata_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "api/v1/api.proto", diff --git a/playground/frontend/playground_components/lib/src/api/v1/api.pb.dart b/playground/frontend/playground_components/lib/src/api/v1/api.pb.dart index 2b855ff5de6f..2066a64da6de 100644 --- a/playground/frontend/playground_components/lib/src/api/v1/api.pb.dart +++ b/playground/frontend/playground_components/lib/src/api/v1/api.pb.dart @@ -2416,3 +2416,107 @@ class GetSnippetResponse extends $pb.GeneratedMessage { void clearComplexity() => clearField(4); } +class GetMetadataRequest extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GetMetadataRequest', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'api.v1'), createEmptyInstance: create) + ..hasRequiredFields = false + ; + + GetMetadataRequest._() : super(); + factory GetMetadataRequest() => create(); + factory GetMetadataRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GetMetadataRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + GetMetadataRequest clone() => GetMetadataRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GetMetadataRequest copyWith(void Function(GetMetadataRequest) updates) => super.copyWith((message) => updates(message as GetMetadataRequest)) as GetMetadataRequest; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GetMetadataRequest create() => GetMetadataRequest._(); + GetMetadataRequest createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GetMetadataRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GetMetadataRequest? _defaultInstance; +} + +class GetMetadataResponse extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GetMetadataResponse', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'api.v1'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'runnerSdk') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'buildCommitHash') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'beamSdkVersion') + ..hasRequiredFields = false + ; + + GetMetadataResponse._() : super(); + factory GetMetadataResponse({ + $core.String? runnerSdk, + $core.String? buildCommitHash, + $core.String? beamSdkVersion, + }) { + final _result = create(); + if (runnerSdk != null) { + _result.runnerSdk = runnerSdk; + } + if (buildCommitHash != null) { + _result.buildCommitHash = buildCommitHash; + } + if (beamSdkVersion != null) { + _result.beamSdkVersion = beamSdkVersion; + } + return _result; + } + factory GetMetadataResponse.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GetMetadataResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + GetMetadataResponse clone() => GetMetadataResponse()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GetMetadataResponse copyWith(void Function(GetMetadataResponse) updates) => super.copyWith((message) => updates(message as GetMetadataResponse)) as GetMetadataResponse; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GetMetadataResponse create() => GetMetadataResponse._(); + GetMetadataResponse createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GetMetadataResponse getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GetMetadataResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get runnerSdk => $_getSZ(0); + @$pb.TagNumber(1) + set runnerSdk($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasRunnerSdk() => $_has(0); + @$pb.TagNumber(1) + void clearRunnerSdk() => clearField(1); + + @$pb.TagNumber(2) + $core.String get buildCommitHash => $_getSZ(1); + @$pb.TagNumber(2) + set buildCommitHash($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasBuildCommitHash() => $_has(1); + @$pb.TagNumber(2) + void clearBuildCommitHash() => clearField(2); + + @$pb.TagNumber(3) + $core.String get beamSdkVersion => $_getSZ(2); + @$pb.TagNumber(3) + set beamSdkVersion($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasBeamSdkVersion() => $_has(2); + @$pb.TagNumber(3) + void clearBeamSdkVersion() => clearField(3); +} + diff --git a/playground/frontend/playground_components/lib/src/api/v1/api.pbgrpc.dart b/playground/frontend/playground_components/lib/src/api/v1/api.pbgrpc.dart index ee779bca39ca..2e54bbcb7294 100644 --- a/playground/frontend/playground_components/lib/src/api/v1/api.pbgrpc.dart +++ b/playground/frontend/playground_components/lib/src/api/v1/api.pbgrpc.dart @@ -132,6 +132,12 @@ class PlaygroundServiceClient extends $grpc.Client { ($0.GetSnippetRequest value) => value.writeToBuffer(), ($core.List<$core.int> value) => $0.GetSnippetResponse.fromBuffer(value)); + static final _$getMetadata = + $grpc.ClientMethod<$0.GetMetadataRequest, $0.GetMetadataResponse>( + '/api.v1.PlaygroundService/GetMetadata', + ($0.GetMetadataRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => + $0.GetMetadataResponse.fromBuffer(value)); PlaygroundServiceClient($grpc.ClientChannel channel, {$grpc.CallOptions? options, @@ -252,6 +258,12 @@ class PlaygroundServiceClient extends $grpc.Client { {$grpc.CallOptions? options}) { return $createUnaryCall(_$getSnippet, request, options: options); } + + $grpc.ResponseFuture<$0.GetMetadataResponse> getMetadata( + $0.GetMetadataRequest request, + {$grpc.CallOptions? options}) { + return $createUnaryCall(_$getMetadata, request, options: options); + } } abstract class PlaygroundServiceBase extends $grpc.Service { @@ -421,6 +433,15 @@ abstract class PlaygroundServiceBase extends $grpc.Service { false, ($core.List<$core.int> value) => $0.GetSnippetRequest.fromBuffer(value), ($0.GetSnippetResponse value) => value.writeToBuffer())); + $addMethod( + $grpc.ServiceMethod<$0.GetMetadataRequest, $0.GetMetadataResponse>( + 'GetMetadata', + getMetadata_Pre, + false, + false, + ($core.List<$core.int> value) => + $0.GetMetadataRequest.fromBuffer(value), + ($0.GetMetadataResponse value) => value.writeToBuffer())); } $async.Future<$0.RunCodeResponse> runCode_Pre( @@ -529,6 +550,11 @@ abstract class PlaygroundServiceBase extends $grpc.Service { return getSnippet(call, await request); } + $async.Future<$0.GetMetadataResponse> getMetadata_Pre($grpc.ServiceCall call, + $async.Future<$0.GetMetadataRequest> request) async { + return getMetadata(call, await request); + } + $async.Future<$0.RunCodeResponse> runCode( $grpc.ServiceCall call, $0.RunCodeRequest request); $async.Future<$0.CheckStatusResponse> checkStatus( @@ -569,4 +595,6 @@ abstract class PlaygroundServiceBase extends $grpc.Service { $grpc.ServiceCall call, $0.SaveSnippetRequest request); $async.Future<$0.GetSnippetResponse> getSnippet( $grpc.ServiceCall call, $0.GetSnippetRequest request); + $async.Future<$0.GetMetadataResponse> getMetadata( + $grpc.ServiceCall call, $0.GetMetadataRequest request); } diff --git a/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart b/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart index 92082673e66e..b30c5d745404 100644 --- a/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart +++ b/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart @@ -551,3 +551,22 @@ const GetSnippetResponse$json = const { /// Descriptor for `GetSnippetResponse`. Decode as a `google.protobuf.DescriptorProto`. final $typed_data.Uint8List getSnippetResponseDescriptor = $convert.base64Decode('ChJHZXRTbmlwcGV0UmVzcG9uc2USKQoFZmlsZXMYASADKAsyEy5hcGkudjEuU25pcHBldEZpbGVSBWZpbGVzEh0KA3NkaxgCIAEoDjILLmFwaS52MS5TZGtSA3NkaxIpChBwaXBlbGluZV9vcHRpb25zGAMgASgJUg9waXBlbGluZU9wdGlvbnMSMgoKY29tcGxleGl0eRgEIAEoDjISLmFwaS52MS5Db21wbGV4aXR5Ugpjb21wbGV4aXR5'); +@$core.Deprecated('Use getMetadataRequestDescriptor instead') +const GetMetadataRequest$json = const { + '1': 'GetMetadataRequest', +}; + +/// Descriptor for `GetMetadataRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getMetadataRequestDescriptor = $convert.base64Decode('ChJHZXRNZXRhZGF0YVJlcXVlc3Q='); +@$core.Deprecated('Use getMetadataResponseDescriptor instead') +const GetMetadataResponse$json = const { + '1': 'GetMetadataResponse', + '2': const [ + const {'1': 'runner_sdk', '3': 1, '4': 1, '5': 9, '10': 'runnerSdk'}, + const {'1': 'build_commit_hash', '3': 2, '4': 1, '5': 9, '10': 'buildCommitHash'}, + const {'1': 'beam_sdk_version', '3': 3, '4': 1, '5': 9, '10': 'beamSdkVersion'}, + ], +}; + +/// Descriptor for `GetMetadataResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List getMetadataResponseDescriptor = $convert.base64Decode('ChNHZXRNZXRhZGF0YVJlc3BvbnNlEh0KCnJ1bm5lcl9zZGsYASABKAlSCXJ1bm5lclNkaxIqChFidWlsZF9jb21taXRfaGFzaBgCIAEoCVIPYnVpbGRDb21taXRIYXNoEigKEGJlYW1fc2RrX3ZlcnNpb24YAyABKAlSDmJlYW1TZGtWZXJzaW9u'); diff --git a/playground/infrastructure/api/v1/api_pb2.py b/playground/infrastructure/api/v1/api_pb2.py index aaf5ceab13a4..4e7eaf583997 100644 --- a/playground/infrastructure/api/v1/api_pb2.py +++ b/playground/infrastructure/api/v1/api_pb2.py @@ -13,114 +13,119 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x61pi/v1/api.proto\x12\x06\x61pi.v1\"\xca\x01\n\x07\x44\x61taset\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x14.api.v1.EmulatorTypeR\x04type\x12\x36\n\x07options\x18\x02 \x03(\x0b\x32\x1c.api.v1.Dataset.OptionsEntryR\x07options\x12!\n\x0c\x64\x61taset_path\x18\x03 \x01(\tR\x0b\x64\x61tasetPath\x1a:\n\x0cOptionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xc6\x01\n\x0eRunCodeRequest\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12+\n\x08\x64\x61tasets\x18\x04 \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12)\n\x05\x66iles\x18\x05 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"6\n\x0fRunCodeResponse\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"9\n\x12\x43heckStatusRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"=\n\x13\x43heckStatusResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x0e.api.v1.StatusR\x06status\"A\n\x1aGetValidationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"5\n\x1bGetValidationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"B\n\x1bGetPreparationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"6\n\x1cGetPreparationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\">\n\x17GetCompileOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"2\n\x18GetCompileOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n\x13GetRunOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\".\n\x14GetRunOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n\x12GetRunErrorRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"-\n\x13GetRunErrorResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"5\n\x0eGetLogsRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\")\n\x0fGetLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"6\n\x0fGetGraphRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"(\n\x10GetGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"4\n\rCancelRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"\x10\n\x0e\x43\x61ncelResponse\"\x94\x04\n\x11PrecompiledObject\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x04type\x18\x04 \x01(\x0e\x32\x1d.api.v1.PrecompiledObjectTypeR\x04type\x12)\n\x10pipeline_options\x18\x05 \x01(\tR\x0fpipelineOptions\x12\x12\n\x04link\x18\x06 \x01(\tR\x04link\x12\x1c\n\tmultifile\x18\x07 \x01(\x08R\tmultifile\x12!\n\x0c\x63ontext_line\x18\x08 \x01(\x05R\x0b\x63ontextLine\x12\'\n\x0f\x64\x65\x66\x61ult_example\x18\t \x01(\x08R\x0e\x64\x65\x66\x61ultExample\x12\x1d\n\x03sdk\x18\n \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x32\n\ncomplexity\x18\x0b \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\x12\n\x04tags\x18\x0c \x03(\tR\x04tags\x12+\n\x08\x64\x61tasets\x18\r \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12\x17\n\x07url_vcs\x18\x0e \x01(\tR\x06urlVcs\x12!\n\x0curl_notebook\x18\x0f \x01(\tR\x0burlNotebook\"\xe5\x01\n\nCategories\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12;\n\ncategories\x18\x02 \x03(\x0b\x32\x1b.api.v1.Categories.CategoryR\ncategories\x1a{\n\x08\x43\x61tegory\x12#\n\rcategory_name\x18\x01 \x01(\tR\x0c\x63\x61tegoryName\x12J\n\x13precompiled_objects\x18\x02 \x03(\x0b\x32\x19.api.v1.PrecompiledObjectR\x12precompiledObjects\"Y\n\x1cGetPrecompiledObjectsRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x1a\n\x08\x63\x61tegory\x18\x02 \x01(\tR\x08\x63\x61tegory\"<\n\x1bGetPrecompiledObjectRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectCodeRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"B\n!GetPrecompiledObjectOutputRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectLogsRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"A\n GetPrecompiledObjectGraphRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"C\n\"GetDefaultPrecompiledObjectRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\"Z\n\x1dGetPrecompiledObjectsResponse\x12\x39\n\x0esdk_categories\x18\x01 \x03(\x0b\x32\x12.api.v1.CategoriesR\rsdkCategories\"h\n\x1cGetPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"a\n GetPrecompiledObjectCodeResponse\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12)\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"<\n\"GetPrecompiledObjectOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n GetPrecompiledObjectLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n!GetPrecompiledObjectGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"o\n#GetDefaultPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"T\n\x0bSnippetFile\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x63ontent\x18\x02 \x01(\tR\x07\x63ontent\x12\x17\n\x07is_main\x18\x03 \x01(\x08R\x06isMain\"\xe6\x01\n\x12SaveSnippetRequest\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\'\n\x0fpersistence_key\x18\x05 \x01(\tR\x0epersistenceKey\"%\n\x13SaveSnippetResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"#\n\x11GetSnippetRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"\xbd\x01\n\x12GetSnippetResponse\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity*R\n\x03Sdk\x12\x13\n\x0fSDK_UNSPECIFIED\x10\x00\x12\x0c\n\x08SDK_JAVA\x10\x01\x12\n\n\x06SDK_GO\x10\x02\x12\x0e\n\nSDK_PYTHON\x10\x03\x12\x0c\n\x08SDK_SCIO\x10\x04*\xb8\x02\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x15\n\x11STATUS_VALIDATING\x10\x01\x12\x1b\n\x17STATUS_VALIDATION_ERROR\x10\x02\x12\x14\n\x10STATUS_PREPARING\x10\x03\x12\x1c\n\x18STATUS_PREPARATION_ERROR\x10\x04\x12\x14\n\x10STATUS_COMPILING\x10\x05\x12\x18\n\x14STATUS_COMPILE_ERROR\x10\x06\x12\x14\n\x10STATUS_EXECUTING\x10\x07\x12\x13\n\x0fSTATUS_FINISHED\x10\x08\x12\x14\n\x10STATUS_RUN_ERROR\x10\t\x12\x10\n\x0cSTATUS_ERROR\x10\n\x12\x16\n\x12STATUS_RUN_TIMEOUT\x10\x0b\x12\x13\n\x0fSTATUS_CANCELED\x10\x0c*\xae\x01\n\x15PrecompiledObjectType\x12\'\n#PRECOMPILED_OBJECT_TYPE_UNSPECIFIED\x10\x00\x12#\n\x1fPRECOMPILED_OBJECT_TYPE_EXAMPLE\x10\x01\x12 \n\x1cPRECOMPILED_OBJECT_TYPE_KATA\x10\x02\x12%\n!PRECOMPILED_OBJECT_TYPE_UNIT_TEST\x10\x03*n\n\nComplexity\x12\x1a\n\x16\x43OMPLEXITY_UNSPECIFIED\x10\x00\x12\x14\n\x10\x43OMPLEXITY_BASIC\x10\x01\x12\x15\n\x11\x43OMPLEXITY_MEDIUM\x10\x02\x12\x17\n\x13\x43OMPLEXITY_ADVANCED\x10\x03*F\n\x0c\x45mulatorType\x12\x1d\n\x19\x45MULATOR_TYPE_UNSPECIFIED\x10\x00\x12\x17\n\x13\x45MULATOR_TYPE_KAFKA\x10\x01\x32\x8b\r\n\x11PlaygroundService\x12:\n\x07RunCode\x12\x16.api.v1.RunCodeRequest\x1a\x17.api.v1.RunCodeResponse\x12\x46\n\x0b\x43heckStatus\x12\x1a.api.v1.CheckStatusRequest\x1a\x1b.api.v1.CheckStatusResponse\x12I\n\x0cGetRunOutput\x12\x1b.api.v1.GetRunOutputRequest\x1a\x1c.api.v1.GetRunOutputResponse\x12:\n\x07GetLogs\x12\x16.api.v1.GetLogsRequest\x1a\x17.api.v1.GetLogsResponse\x12=\n\x08GetGraph\x12\x17.api.v1.GetGraphRequest\x1a\x18.api.v1.GetGraphResponse\x12\x46\n\x0bGetRunError\x12\x1a.api.v1.GetRunErrorRequest\x1a\x1b.api.v1.GetRunErrorResponse\x12^\n\x13GetValidationOutput\x12\".api.v1.GetValidationOutputRequest\x1a#.api.v1.GetValidationOutputResponse\x12\x61\n\x14GetPreparationOutput\x12#.api.v1.GetPreparationOutputRequest\x1a$.api.v1.GetPreparationOutputResponse\x12U\n\x10GetCompileOutput\x12\x1f.api.v1.GetCompileOutputRequest\x1a .api.v1.GetCompileOutputResponse\x12\x37\n\x06\x43\x61ncel\x12\x15.api.v1.CancelRequest\x1a\x16.api.v1.CancelResponse\x12\x64\n\x15GetPrecompiledObjects\x12$.api.v1.GetPrecompiledObjectsRequest\x1a%.api.v1.GetPrecompiledObjectsResponse\x12\x61\n\x14GetPrecompiledObject\x12#.api.v1.GetPrecompiledObjectRequest\x1a$.api.v1.GetPrecompiledObjectResponse\x12m\n\x18GetPrecompiledObjectCode\x12\'.api.v1.GetPrecompiledObjectCodeRequest\x1a(.api.v1.GetPrecompiledObjectCodeResponse\x12s\n\x1aGetPrecompiledObjectOutput\x12).api.v1.GetPrecompiledObjectOutputRequest\x1a*.api.v1.GetPrecompiledObjectOutputResponse\x12m\n\x18GetPrecompiledObjectLogs\x12\'.api.v1.GetPrecompiledObjectLogsRequest\x1a(.api.v1.GetPrecompiledObjectLogsResponse\x12p\n\x19GetPrecompiledObjectGraph\x12(.api.v1.GetPrecompiledObjectGraphRequest\x1a).api.v1.GetPrecompiledObjectGraphResponse\x12v\n\x1bGetDefaultPrecompiledObject\x12*.api.v1.GetDefaultPrecompiledObjectRequest\x1a+.api.v1.GetDefaultPrecompiledObjectResponse\x12\x46\n\x0bSaveSnippet\x12\x1a.api.v1.SaveSnippetRequest\x1a\x1b.api.v1.SaveSnippetResponse\x12\x43\n\nGetSnippet\x12\x19.api.v1.GetSnippetRequest\x1a\x1a.api.v1.GetSnippetResponseB8Z6beam.apache.org/playground/backend/internal;playgroundb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x61pi/v1/api.proto\x12\x06\x61pi.v1\"\xca\x01\n\x07\x44\x61taset\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x14.api.v1.EmulatorTypeR\x04type\x12\x36\n\x07options\x18\x02 \x03(\x0b\x32\x1c.api.v1.Dataset.OptionsEntryR\x07options\x12!\n\x0c\x64\x61taset_path\x18\x03 \x01(\tR\x0b\x64\x61tasetPath\x1a:\n\x0cOptionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xc6\x01\n\x0eRunCodeRequest\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12+\n\x08\x64\x61tasets\x18\x04 \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12)\n\x05\x66iles\x18\x05 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"6\n\x0fRunCodeResponse\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"9\n\x12\x43heckStatusRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"=\n\x13\x43heckStatusResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x0e.api.v1.StatusR\x06status\"A\n\x1aGetValidationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"5\n\x1bGetValidationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"B\n\x1bGetPreparationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"6\n\x1cGetPreparationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\">\n\x17GetCompileOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"2\n\x18GetCompileOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n\x13GetRunOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\".\n\x14GetRunOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n\x12GetRunErrorRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"-\n\x13GetRunErrorResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"5\n\x0eGetLogsRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\")\n\x0fGetLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"6\n\x0fGetGraphRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"(\n\x10GetGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"4\n\rCancelRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"\x10\n\x0e\x43\x61ncelResponse\"\x94\x04\n\x11PrecompiledObject\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x04type\x18\x04 \x01(\x0e\x32\x1d.api.v1.PrecompiledObjectTypeR\x04type\x12)\n\x10pipeline_options\x18\x05 \x01(\tR\x0fpipelineOptions\x12\x12\n\x04link\x18\x06 \x01(\tR\x04link\x12\x1c\n\tmultifile\x18\x07 \x01(\x08R\tmultifile\x12!\n\x0c\x63ontext_line\x18\x08 \x01(\x05R\x0b\x63ontextLine\x12\'\n\x0f\x64\x65\x66\x61ult_example\x18\t \x01(\x08R\x0e\x64\x65\x66\x61ultExample\x12\x1d\n\x03sdk\x18\n \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x32\n\ncomplexity\x18\x0b \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\x12\n\x04tags\x18\x0c \x03(\tR\x04tags\x12+\n\x08\x64\x61tasets\x18\r \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12\x17\n\x07url_vcs\x18\x0e \x01(\tR\x06urlVcs\x12!\n\x0curl_notebook\x18\x0f \x01(\tR\x0burlNotebook\"\xe5\x01\n\nCategories\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12;\n\ncategories\x18\x02 \x03(\x0b\x32\x1b.api.v1.Categories.CategoryR\ncategories\x1a{\n\x08\x43\x61tegory\x12#\n\rcategory_name\x18\x01 \x01(\tR\x0c\x63\x61tegoryName\x12J\n\x13precompiled_objects\x18\x02 \x03(\x0b\x32\x19.api.v1.PrecompiledObjectR\x12precompiledObjects\"Y\n\x1cGetPrecompiledObjectsRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x1a\n\x08\x63\x61tegory\x18\x02 \x01(\tR\x08\x63\x61tegory\"<\n\x1bGetPrecompiledObjectRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectCodeRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"B\n!GetPrecompiledObjectOutputRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectLogsRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"A\n GetPrecompiledObjectGraphRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"C\n\"GetDefaultPrecompiledObjectRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\"Z\n\x1dGetPrecompiledObjectsResponse\x12\x39\n\x0esdk_categories\x18\x01 \x03(\x0b\x32\x12.api.v1.CategoriesR\rsdkCategories\"h\n\x1cGetPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"a\n GetPrecompiledObjectCodeResponse\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12)\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"<\n\"GetPrecompiledObjectOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n GetPrecompiledObjectLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n!GetPrecompiledObjectGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"o\n#GetDefaultPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"T\n\x0bSnippetFile\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x63ontent\x18\x02 \x01(\tR\x07\x63ontent\x12\x17\n\x07is_main\x18\x03 \x01(\x08R\x06isMain\"\xe6\x01\n\x12SaveSnippetRequest\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\'\n\x0fpersistence_key\x18\x05 \x01(\tR\x0epersistenceKey\"%\n\x13SaveSnippetResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"#\n\x11GetSnippetRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"\xbd\x01\n\x12GetSnippetResponse\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\"\x14\n\x12GetMetadataRequest\"\x8a\x01\n\x13GetMetadataResponse\x12\x1d\n\nrunner_sdk\x18\x01 \x01(\tR\trunnerSdk\x12*\n\x11\x62uild_commit_hash\x18\x02 \x01(\tR\x0f\x62uildCommitHash\x12(\n\x10\x62\x65\x61m_sdk_version\x18\x03 \x01(\tR\x0e\x62\x65\x61mSdkVersion*R\n\x03Sdk\x12\x13\n\x0fSDK_UNSPECIFIED\x10\x00\x12\x0c\n\x08SDK_JAVA\x10\x01\x12\n\n\x06SDK_GO\x10\x02\x12\x0e\n\nSDK_PYTHON\x10\x03\x12\x0c\n\x08SDK_SCIO\x10\x04*\xb8\x02\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x15\n\x11STATUS_VALIDATING\x10\x01\x12\x1b\n\x17STATUS_VALIDATION_ERROR\x10\x02\x12\x14\n\x10STATUS_PREPARING\x10\x03\x12\x1c\n\x18STATUS_PREPARATION_ERROR\x10\x04\x12\x14\n\x10STATUS_COMPILING\x10\x05\x12\x18\n\x14STATUS_COMPILE_ERROR\x10\x06\x12\x14\n\x10STATUS_EXECUTING\x10\x07\x12\x13\n\x0fSTATUS_FINISHED\x10\x08\x12\x14\n\x10STATUS_RUN_ERROR\x10\t\x12\x10\n\x0cSTATUS_ERROR\x10\n\x12\x16\n\x12STATUS_RUN_TIMEOUT\x10\x0b\x12\x13\n\x0fSTATUS_CANCELED\x10\x0c*\xae\x01\n\x15PrecompiledObjectType\x12\'\n#PRECOMPILED_OBJECT_TYPE_UNSPECIFIED\x10\x00\x12#\n\x1fPRECOMPILED_OBJECT_TYPE_EXAMPLE\x10\x01\x12 \n\x1cPRECOMPILED_OBJECT_TYPE_KATA\x10\x02\x12%\n!PRECOMPILED_OBJECT_TYPE_UNIT_TEST\x10\x03*n\n\nComplexity\x12\x1a\n\x16\x43OMPLEXITY_UNSPECIFIED\x10\x00\x12\x14\n\x10\x43OMPLEXITY_BASIC\x10\x01\x12\x15\n\x11\x43OMPLEXITY_MEDIUM\x10\x02\x12\x17\n\x13\x43OMPLEXITY_ADVANCED\x10\x03*F\n\x0c\x45mulatorType\x12\x1d\n\x19\x45MULATOR_TYPE_UNSPECIFIED\x10\x00\x12\x17\n\x13\x45MULATOR_TYPE_KAFKA\x10\x01\x32\xd3\r\n\x11PlaygroundService\x12:\n\x07RunCode\x12\x16.api.v1.RunCodeRequest\x1a\x17.api.v1.RunCodeResponse\x12\x46\n\x0b\x43heckStatus\x12\x1a.api.v1.CheckStatusRequest\x1a\x1b.api.v1.CheckStatusResponse\x12I\n\x0cGetRunOutput\x12\x1b.api.v1.GetRunOutputRequest\x1a\x1c.api.v1.GetRunOutputResponse\x12:\n\x07GetLogs\x12\x16.api.v1.GetLogsRequest\x1a\x17.api.v1.GetLogsResponse\x12=\n\x08GetGraph\x12\x17.api.v1.GetGraphRequest\x1a\x18.api.v1.GetGraphResponse\x12\x46\n\x0bGetRunError\x12\x1a.api.v1.GetRunErrorRequest\x1a\x1b.api.v1.GetRunErrorResponse\x12^\n\x13GetValidationOutput\x12\".api.v1.GetValidationOutputRequest\x1a#.api.v1.GetValidationOutputResponse\x12\x61\n\x14GetPreparationOutput\x12#.api.v1.GetPreparationOutputRequest\x1a$.api.v1.GetPreparationOutputResponse\x12U\n\x10GetCompileOutput\x12\x1f.api.v1.GetCompileOutputRequest\x1a .api.v1.GetCompileOutputResponse\x12\x37\n\x06\x43\x61ncel\x12\x15.api.v1.CancelRequest\x1a\x16.api.v1.CancelResponse\x12\x64\n\x15GetPrecompiledObjects\x12$.api.v1.GetPrecompiledObjectsRequest\x1a%.api.v1.GetPrecompiledObjectsResponse\x12\x61\n\x14GetPrecompiledObject\x12#.api.v1.GetPrecompiledObjectRequest\x1a$.api.v1.GetPrecompiledObjectResponse\x12m\n\x18GetPrecompiledObjectCode\x12\'.api.v1.GetPrecompiledObjectCodeRequest\x1a(.api.v1.GetPrecompiledObjectCodeResponse\x12s\n\x1aGetPrecompiledObjectOutput\x12).api.v1.GetPrecompiledObjectOutputRequest\x1a*.api.v1.GetPrecompiledObjectOutputResponse\x12m\n\x18GetPrecompiledObjectLogs\x12\'.api.v1.GetPrecompiledObjectLogsRequest\x1a(.api.v1.GetPrecompiledObjectLogsResponse\x12p\n\x19GetPrecompiledObjectGraph\x12(.api.v1.GetPrecompiledObjectGraphRequest\x1a).api.v1.GetPrecompiledObjectGraphResponse\x12v\n\x1bGetDefaultPrecompiledObject\x12*.api.v1.GetDefaultPrecompiledObjectRequest\x1a+.api.v1.GetDefaultPrecompiledObjectResponse\x12\x46\n\x0bSaveSnippet\x12\x1a.api.v1.SaveSnippetRequest\x1a\x1b.api.v1.SaveSnippetResponse\x12\x43\n\nGetSnippet\x12\x19.api.v1.GetSnippetRequest\x1a\x1a.api.v1.GetSnippetResponse\x12\x46\n\x0bGetMetadata\x12\x1a.api.v1.GetMetadataRequest\x1a\x1b.api.v1.GetMetadataResponseB8Z6beam.apache.org/playground/backend/internal;playgroundb\x06proto3') -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'api.v1.api_pb2', globals()) +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'api.v1.api_pb2', _globals) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'Z6beam.apache.org/playground/backend/internal;playground' _DATASET_OPTIONSENTRY._options = None _DATASET_OPTIONSENTRY._serialized_options = b'8\001' - _SDK._serialized_start=3890 - _SDK._serialized_end=3972 - _STATUS._serialized_start=3975 - _STATUS._serialized_end=4287 - _PRECOMPILEDOBJECTTYPE._serialized_start=4290 - _PRECOMPILEDOBJECTTYPE._serialized_end=4464 - _COMPLEXITY._serialized_start=4466 - _COMPLEXITY._serialized_end=4576 - _EMULATORTYPE._serialized_start=4578 - _EMULATORTYPE._serialized_end=4648 - _DATASET._serialized_start=29 - _DATASET._serialized_end=231 - _DATASET_OPTIONSENTRY._serialized_start=173 - _DATASET_OPTIONSENTRY._serialized_end=231 - _RUNCODEREQUEST._serialized_start=234 - _RUNCODEREQUEST._serialized_end=432 - _RUNCODERESPONSE._serialized_start=434 - _RUNCODERESPONSE._serialized_end=488 - _CHECKSTATUSREQUEST._serialized_start=490 - _CHECKSTATUSREQUEST._serialized_end=547 - _CHECKSTATUSRESPONSE._serialized_start=549 - _CHECKSTATUSRESPONSE._serialized_end=610 - _GETVALIDATIONOUTPUTREQUEST._serialized_start=612 - _GETVALIDATIONOUTPUTREQUEST._serialized_end=677 - _GETVALIDATIONOUTPUTRESPONSE._serialized_start=679 - _GETVALIDATIONOUTPUTRESPONSE._serialized_end=732 - _GETPREPARATIONOUTPUTREQUEST._serialized_start=734 - _GETPREPARATIONOUTPUTREQUEST._serialized_end=800 - _GETPREPARATIONOUTPUTRESPONSE._serialized_start=802 - _GETPREPARATIONOUTPUTRESPONSE._serialized_end=856 - _GETCOMPILEOUTPUTREQUEST._serialized_start=858 - _GETCOMPILEOUTPUTREQUEST._serialized_end=920 - _GETCOMPILEOUTPUTRESPONSE._serialized_start=922 - _GETCOMPILEOUTPUTRESPONSE._serialized_end=972 - _GETRUNOUTPUTREQUEST._serialized_start=974 - _GETRUNOUTPUTREQUEST._serialized_end=1032 - _GETRUNOUTPUTRESPONSE._serialized_start=1034 - _GETRUNOUTPUTRESPONSE._serialized_end=1080 - _GETRUNERRORREQUEST._serialized_start=1082 - _GETRUNERRORREQUEST._serialized_end=1139 - _GETRUNERRORRESPONSE._serialized_start=1141 - _GETRUNERRORRESPONSE._serialized_end=1186 - _GETLOGSREQUEST._serialized_start=1188 - _GETLOGSREQUEST._serialized_end=1241 - _GETLOGSRESPONSE._serialized_start=1243 - _GETLOGSRESPONSE._serialized_end=1284 - _GETGRAPHREQUEST._serialized_start=1286 - _GETGRAPHREQUEST._serialized_end=1340 - _GETGRAPHRESPONSE._serialized_start=1342 - _GETGRAPHRESPONSE._serialized_end=1382 - _CANCELREQUEST._serialized_start=1384 - _CANCELREQUEST._serialized_end=1436 - _CANCELRESPONSE._serialized_start=1438 - _CANCELRESPONSE._serialized_end=1454 - _PRECOMPILEDOBJECT._serialized_start=1457 - _PRECOMPILEDOBJECT._serialized_end=1989 - _CATEGORIES._serialized_start=1992 - _CATEGORIES._serialized_end=2221 - _CATEGORIES_CATEGORY._serialized_start=2098 - _CATEGORIES_CATEGORY._serialized_end=2221 - _GETPRECOMPILEDOBJECTSREQUEST._serialized_start=2223 - _GETPRECOMPILEDOBJECTSREQUEST._serialized_end=2312 - _GETPRECOMPILEDOBJECTREQUEST._serialized_start=2314 - _GETPRECOMPILEDOBJECTREQUEST._serialized_end=2374 - _GETPRECOMPILEDOBJECTCODEREQUEST._serialized_start=2376 - _GETPRECOMPILEDOBJECTCODEREQUEST._serialized_end=2440 - _GETPRECOMPILEDOBJECTOUTPUTREQUEST._serialized_start=2442 - _GETPRECOMPILEDOBJECTOUTPUTREQUEST._serialized_end=2508 - _GETPRECOMPILEDOBJECTLOGSREQUEST._serialized_start=2510 - _GETPRECOMPILEDOBJECTLOGSREQUEST._serialized_end=2574 - _GETPRECOMPILEDOBJECTGRAPHREQUEST._serialized_start=2576 - _GETPRECOMPILEDOBJECTGRAPHREQUEST._serialized_end=2641 - _GETDEFAULTPRECOMPILEDOBJECTREQUEST._serialized_start=2643 - _GETDEFAULTPRECOMPILEDOBJECTREQUEST._serialized_end=2710 - _GETPRECOMPILEDOBJECTSRESPONSE._serialized_start=2712 - _GETPRECOMPILEDOBJECTSRESPONSE._serialized_end=2802 - _GETPRECOMPILEDOBJECTRESPONSE._serialized_start=2804 - _GETPRECOMPILEDOBJECTRESPONSE._serialized_end=2908 - _GETPRECOMPILEDOBJECTCODERESPONSE._serialized_start=2910 - _GETPRECOMPILEDOBJECTCODERESPONSE._serialized_end=3007 - _GETPRECOMPILEDOBJECTOUTPUTRESPONSE._serialized_start=3009 - _GETPRECOMPILEDOBJECTOUTPUTRESPONSE._serialized_end=3069 - _GETPRECOMPILEDOBJECTLOGSRESPONSE._serialized_start=3071 - _GETPRECOMPILEDOBJECTLOGSRESPONSE._serialized_end=3129 - _GETPRECOMPILEDOBJECTGRAPHRESPONSE._serialized_start=3131 - _GETPRECOMPILEDOBJECTGRAPHRESPONSE._serialized_end=3188 - _GETDEFAULTPRECOMPILEDOBJECTRESPONSE._serialized_start=3190 - _GETDEFAULTPRECOMPILEDOBJECTRESPONSE._serialized_end=3301 - _SNIPPETFILE._serialized_start=3303 - _SNIPPETFILE._serialized_end=3387 - _SAVESNIPPETREQUEST._serialized_start=3390 - _SAVESNIPPETREQUEST._serialized_end=3620 - _SAVESNIPPETRESPONSE._serialized_start=3622 - _SAVESNIPPETRESPONSE._serialized_end=3659 - _GETSNIPPETREQUEST._serialized_start=3661 - _GETSNIPPETREQUEST._serialized_end=3696 - _GETSNIPPETRESPONSE._serialized_start=3699 - _GETSNIPPETRESPONSE._serialized_end=3888 - _PLAYGROUNDSERVICE._serialized_start=4651 - _PLAYGROUNDSERVICE._serialized_end=6326 + _globals['_SDK']._serialized_start=4053 + _globals['_SDK']._serialized_end=4135 + _globals['_STATUS']._serialized_start=4138 + _globals['_STATUS']._serialized_end=4450 + _globals['_PRECOMPILEDOBJECTTYPE']._serialized_start=4453 + _globals['_PRECOMPILEDOBJECTTYPE']._serialized_end=4627 + _globals['_COMPLEXITY']._serialized_start=4629 + _globals['_COMPLEXITY']._serialized_end=4739 + _globals['_EMULATORTYPE']._serialized_start=4741 + _globals['_EMULATORTYPE']._serialized_end=4811 + _globals['_DATASET']._serialized_start=29 + _globals['_DATASET']._serialized_end=231 + _globals['_DATASET_OPTIONSENTRY']._serialized_start=173 + _globals['_DATASET_OPTIONSENTRY']._serialized_end=231 + _globals['_RUNCODEREQUEST']._serialized_start=234 + _globals['_RUNCODEREQUEST']._serialized_end=432 + _globals['_RUNCODERESPONSE']._serialized_start=434 + _globals['_RUNCODERESPONSE']._serialized_end=488 + _globals['_CHECKSTATUSREQUEST']._serialized_start=490 + _globals['_CHECKSTATUSREQUEST']._serialized_end=547 + _globals['_CHECKSTATUSRESPONSE']._serialized_start=549 + _globals['_CHECKSTATUSRESPONSE']._serialized_end=610 + _globals['_GETVALIDATIONOUTPUTREQUEST']._serialized_start=612 + _globals['_GETVALIDATIONOUTPUTREQUEST']._serialized_end=677 + _globals['_GETVALIDATIONOUTPUTRESPONSE']._serialized_start=679 + _globals['_GETVALIDATIONOUTPUTRESPONSE']._serialized_end=732 + _globals['_GETPREPARATIONOUTPUTREQUEST']._serialized_start=734 + _globals['_GETPREPARATIONOUTPUTREQUEST']._serialized_end=800 + _globals['_GETPREPARATIONOUTPUTRESPONSE']._serialized_start=802 + _globals['_GETPREPARATIONOUTPUTRESPONSE']._serialized_end=856 + _globals['_GETCOMPILEOUTPUTREQUEST']._serialized_start=858 + _globals['_GETCOMPILEOUTPUTREQUEST']._serialized_end=920 + _globals['_GETCOMPILEOUTPUTRESPONSE']._serialized_start=922 + _globals['_GETCOMPILEOUTPUTRESPONSE']._serialized_end=972 + _globals['_GETRUNOUTPUTREQUEST']._serialized_start=974 + _globals['_GETRUNOUTPUTREQUEST']._serialized_end=1032 + _globals['_GETRUNOUTPUTRESPONSE']._serialized_start=1034 + _globals['_GETRUNOUTPUTRESPONSE']._serialized_end=1080 + _globals['_GETRUNERRORREQUEST']._serialized_start=1082 + _globals['_GETRUNERRORREQUEST']._serialized_end=1139 + _globals['_GETRUNERRORRESPONSE']._serialized_start=1141 + _globals['_GETRUNERRORRESPONSE']._serialized_end=1186 + _globals['_GETLOGSREQUEST']._serialized_start=1188 + _globals['_GETLOGSREQUEST']._serialized_end=1241 + _globals['_GETLOGSRESPONSE']._serialized_start=1243 + _globals['_GETLOGSRESPONSE']._serialized_end=1284 + _globals['_GETGRAPHREQUEST']._serialized_start=1286 + _globals['_GETGRAPHREQUEST']._serialized_end=1340 + _globals['_GETGRAPHRESPONSE']._serialized_start=1342 + _globals['_GETGRAPHRESPONSE']._serialized_end=1382 + _globals['_CANCELREQUEST']._serialized_start=1384 + _globals['_CANCELREQUEST']._serialized_end=1436 + _globals['_CANCELRESPONSE']._serialized_start=1438 + _globals['_CANCELRESPONSE']._serialized_end=1454 + _globals['_PRECOMPILEDOBJECT']._serialized_start=1457 + _globals['_PRECOMPILEDOBJECT']._serialized_end=1989 + _globals['_CATEGORIES']._serialized_start=1992 + _globals['_CATEGORIES']._serialized_end=2221 + _globals['_CATEGORIES_CATEGORY']._serialized_start=2098 + _globals['_CATEGORIES_CATEGORY']._serialized_end=2221 + _globals['_GETPRECOMPILEDOBJECTSREQUEST']._serialized_start=2223 + _globals['_GETPRECOMPILEDOBJECTSREQUEST']._serialized_end=2312 + _globals['_GETPRECOMPILEDOBJECTREQUEST']._serialized_start=2314 + _globals['_GETPRECOMPILEDOBJECTREQUEST']._serialized_end=2374 + _globals['_GETPRECOMPILEDOBJECTCODEREQUEST']._serialized_start=2376 + _globals['_GETPRECOMPILEDOBJECTCODEREQUEST']._serialized_end=2440 + _globals['_GETPRECOMPILEDOBJECTOUTPUTREQUEST']._serialized_start=2442 + _globals['_GETPRECOMPILEDOBJECTOUTPUTREQUEST']._serialized_end=2508 + _globals['_GETPRECOMPILEDOBJECTLOGSREQUEST']._serialized_start=2510 + _globals['_GETPRECOMPILEDOBJECTLOGSREQUEST']._serialized_end=2574 + _globals['_GETPRECOMPILEDOBJECTGRAPHREQUEST']._serialized_start=2576 + _globals['_GETPRECOMPILEDOBJECTGRAPHREQUEST']._serialized_end=2641 + _globals['_GETDEFAULTPRECOMPILEDOBJECTREQUEST']._serialized_start=2643 + _globals['_GETDEFAULTPRECOMPILEDOBJECTREQUEST']._serialized_end=2710 + _globals['_GETPRECOMPILEDOBJECTSRESPONSE']._serialized_start=2712 + _globals['_GETPRECOMPILEDOBJECTSRESPONSE']._serialized_end=2802 + _globals['_GETPRECOMPILEDOBJECTRESPONSE']._serialized_start=2804 + _globals['_GETPRECOMPILEDOBJECTRESPONSE']._serialized_end=2908 + _globals['_GETPRECOMPILEDOBJECTCODERESPONSE']._serialized_start=2910 + _globals['_GETPRECOMPILEDOBJECTCODERESPONSE']._serialized_end=3007 + _globals['_GETPRECOMPILEDOBJECTOUTPUTRESPONSE']._serialized_start=3009 + _globals['_GETPRECOMPILEDOBJECTOUTPUTRESPONSE']._serialized_end=3069 + _globals['_GETPRECOMPILEDOBJECTLOGSRESPONSE']._serialized_start=3071 + _globals['_GETPRECOMPILEDOBJECTLOGSRESPONSE']._serialized_end=3129 + _globals['_GETPRECOMPILEDOBJECTGRAPHRESPONSE']._serialized_start=3131 + _globals['_GETPRECOMPILEDOBJECTGRAPHRESPONSE']._serialized_end=3188 + _globals['_GETDEFAULTPRECOMPILEDOBJECTRESPONSE']._serialized_start=3190 + _globals['_GETDEFAULTPRECOMPILEDOBJECTRESPONSE']._serialized_end=3301 + _globals['_SNIPPETFILE']._serialized_start=3303 + _globals['_SNIPPETFILE']._serialized_end=3387 + _globals['_SAVESNIPPETREQUEST']._serialized_start=3390 + _globals['_SAVESNIPPETREQUEST']._serialized_end=3620 + _globals['_SAVESNIPPETRESPONSE']._serialized_start=3622 + _globals['_SAVESNIPPETRESPONSE']._serialized_end=3659 + _globals['_GETSNIPPETREQUEST']._serialized_start=3661 + _globals['_GETSNIPPETREQUEST']._serialized_end=3696 + _globals['_GETSNIPPETRESPONSE']._serialized_start=3699 + _globals['_GETSNIPPETRESPONSE']._serialized_end=3888 + _globals['_GETMETADATAREQUEST']._serialized_start=3890 + _globals['_GETMETADATAREQUEST']._serialized_end=3910 + _globals['_GETMETADATARESPONSE']._serialized_start=3913 + _globals['_GETMETADATARESPONSE']._serialized_end=4051 + _globals['_PLAYGROUNDSERVICE']._serialized_start=4814 + _globals['_PLAYGROUNDSERVICE']._serialized_end=6561 # @@protoc_insertion_point(module_scope) diff --git a/playground/infrastructure/api/v1/api_pb2.pyi b/playground/infrastructure/api/v1/api_pb2.pyi index 2c4d80ab8b42..e55ff420c887 100644 --- a/playground/infrastructure/api/v1/api_pb2.pyi +++ b/playground/infrastructure/api/v1/api_pb2.pyi @@ -4,75 +4,81 @@ from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union -COMPLEXITY_ADVANCED: Complexity -COMPLEXITY_BASIC: Complexity -COMPLEXITY_MEDIUM: Complexity -COMPLEXITY_UNSPECIFIED: Complexity DESCRIPTOR: _descriptor.FileDescriptor -EMULATOR_TYPE_KAFKA: EmulatorType -EMULATOR_TYPE_UNSPECIFIED: EmulatorType -PRECOMPILED_OBJECT_TYPE_EXAMPLE: PrecompiledObjectType -PRECOMPILED_OBJECT_TYPE_KATA: PrecompiledObjectType -PRECOMPILED_OBJECT_TYPE_UNIT_TEST: PrecompiledObjectType -PRECOMPILED_OBJECT_TYPE_UNSPECIFIED: PrecompiledObjectType -SDK_GO: Sdk + +class Sdk(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + SDK_UNSPECIFIED: _ClassVar[Sdk] + SDK_JAVA: _ClassVar[Sdk] + SDK_GO: _ClassVar[Sdk] + SDK_PYTHON: _ClassVar[Sdk] + SDK_SCIO: _ClassVar[Sdk] + +class Status(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + STATUS_UNSPECIFIED: _ClassVar[Status] + STATUS_VALIDATING: _ClassVar[Status] + STATUS_VALIDATION_ERROR: _ClassVar[Status] + STATUS_PREPARING: _ClassVar[Status] + STATUS_PREPARATION_ERROR: _ClassVar[Status] + STATUS_COMPILING: _ClassVar[Status] + STATUS_COMPILE_ERROR: _ClassVar[Status] + STATUS_EXECUTING: _ClassVar[Status] + STATUS_FINISHED: _ClassVar[Status] + STATUS_RUN_ERROR: _ClassVar[Status] + STATUS_ERROR: _ClassVar[Status] + STATUS_RUN_TIMEOUT: _ClassVar[Status] + STATUS_CANCELED: _ClassVar[Status] + +class PrecompiledObjectType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + PRECOMPILED_OBJECT_TYPE_UNSPECIFIED: _ClassVar[PrecompiledObjectType] + PRECOMPILED_OBJECT_TYPE_EXAMPLE: _ClassVar[PrecompiledObjectType] + PRECOMPILED_OBJECT_TYPE_KATA: _ClassVar[PrecompiledObjectType] + PRECOMPILED_OBJECT_TYPE_UNIT_TEST: _ClassVar[PrecompiledObjectType] + +class Complexity(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + COMPLEXITY_UNSPECIFIED: _ClassVar[Complexity] + COMPLEXITY_BASIC: _ClassVar[Complexity] + COMPLEXITY_MEDIUM: _ClassVar[Complexity] + COMPLEXITY_ADVANCED: _ClassVar[Complexity] + +class EmulatorType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + EMULATOR_TYPE_UNSPECIFIED: _ClassVar[EmulatorType] + EMULATOR_TYPE_KAFKA: _ClassVar[EmulatorType] +SDK_UNSPECIFIED: Sdk SDK_JAVA: Sdk +SDK_GO: Sdk SDK_PYTHON: Sdk SDK_SCIO: Sdk -SDK_UNSPECIFIED: Sdk -STATUS_CANCELED: Status -STATUS_COMPILE_ERROR: Status +STATUS_UNSPECIFIED: Status +STATUS_VALIDATING: Status +STATUS_VALIDATION_ERROR: Status +STATUS_PREPARING: Status +STATUS_PREPARATION_ERROR: Status STATUS_COMPILING: Status -STATUS_ERROR: Status +STATUS_COMPILE_ERROR: Status STATUS_EXECUTING: Status STATUS_FINISHED: Status -STATUS_PREPARATION_ERROR: Status -STATUS_PREPARING: Status STATUS_RUN_ERROR: Status +STATUS_ERROR: Status STATUS_RUN_TIMEOUT: Status -STATUS_UNSPECIFIED: Status -STATUS_VALIDATING: Status -STATUS_VALIDATION_ERROR: Status - -class CancelRequest(_message.Message): - __slots__ = ["pipeline_uuid"] - PIPELINE_UUID_FIELD_NUMBER: _ClassVar[int] - pipeline_uuid: str - def __init__(self, pipeline_uuid: _Optional[str] = ...) -> None: ... - -class CancelResponse(_message.Message): - __slots__ = [] - def __init__(self) -> None: ... - -class Categories(_message.Message): - __slots__ = ["categories", "sdk"] - class Category(_message.Message): - __slots__ = ["category_name", "precompiled_objects"] - CATEGORY_NAME_FIELD_NUMBER: _ClassVar[int] - PRECOMPILED_OBJECTS_FIELD_NUMBER: _ClassVar[int] - category_name: str - precompiled_objects: _containers.RepeatedCompositeFieldContainer[PrecompiledObject] - def __init__(self, category_name: _Optional[str] = ..., precompiled_objects: _Optional[_Iterable[_Union[PrecompiledObject, _Mapping]]] = ...) -> None: ... - CATEGORIES_FIELD_NUMBER: _ClassVar[int] - SDK_FIELD_NUMBER: _ClassVar[int] - categories: _containers.RepeatedCompositeFieldContainer[Categories.Category] - sdk: Sdk - def __init__(self, sdk: _Optional[_Union[Sdk, str]] = ..., categories: _Optional[_Iterable[_Union[Categories.Category, _Mapping]]] = ...) -> None: ... - -class CheckStatusRequest(_message.Message): - __slots__ = ["pipeline_uuid"] - PIPELINE_UUID_FIELD_NUMBER: _ClassVar[int] - pipeline_uuid: str - def __init__(self, pipeline_uuid: _Optional[str] = ...) -> None: ... - -class CheckStatusResponse(_message.Message): - __slots__ = ["status"] - STATUS_FIELD_NUMBER: _ClassVar[int] - status: Status - def __init__(self, status: _Optional[_Union[Status, str]] = ...) -> None: ... +STATUS_CANCELED: Status +PRECOMPILED_OBJECT_TYPE_UNSPECIFIED: PrecompiledObjectType +PRECOMPILED_OBJECT_TYPE_EXAMPLE: PrecompiledObjectType +PRECOMPILED_OBJECT_TYPE_KATA: PrecompiledObjectType +PRECOMPILED_OBJECT_TYPE_UNIT_TEST: PrecompiledObjectType +COMPLEXITY_UNSPECIFIED: Complexity +COMPLEXITY_BASIC: Complexity +COMPLEXITY_MEDIUM: Complexity +COMPLEXITY_ADVANCED: Complexity +EMULATOR_TYPE_UNSPECIFIED: EmulatorType +EMULATOR_TYPE_KAFKA: EmulatorType class Dataset(_message.Message): - __slots__ = ["dataset_path", "options", "type"] + __slots__ = ["type", "options", "dataset_path"] class OptionsEntry(_message.Message): __slots__ = ["key", "value"] KEY_FIELD_NUMBER: _ClassVar[int] @@ -80,145 +86,89 @@ class Dataset(_message.Message): key: str value: str def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... - DATASET_PATH_FIELD_NUMBER: _ClassVar[int] - OPTIONS_FIELD_NUMBER: _ClassVar[int] TYPE_FIELD_NUMBER: _ClassVar[int] - dataset_path: str - options: _containers.ScalarMap[str, str] + OPTIONS_FIELD_NUMBER: _ClassVar[int] + DATASET_PATH_FIELD_NUMBER: _ClassVar[int] type: EmulatorType + options: _containers.ScalarMap[str, str] + dataset_path: str def __init__(self, type: _Optional[_Union[EmulatorType, str]] = ..., options: _Optional[_Mapping[str, str]] = ..., dataset_path: _Optional[str] = ...) -> None: ... -class GetCompileOutputRequest(_message.Message): +class RunCodeRequest(_message.Message): + __slots__ = ["code", "sdk", "pipeline_options", "datasets", "files"] + CODE_FIELD_NUMBER: _ClassVar[int] + SDK_FIELD_NUMBER: _ClassVar[int] + PIPELINE_OPTIONS_FIELD_NUMBER: _ClassVar[int] + DATASETS_FIELD_NUMBER: _ClassVar[int] + FILES_FIELD_NUMBER: _ClassVar[int] + code: str + sdk: Sdk + pipeline_options: str + datasets: _containers.RepeatedCompositeFieldContainer[Dataset] + files: _containers.RepeatedCompositeFieldContainer[SnippetFile] + def __init__(self, code: _Optional[str] = ..., sdk: _Optional[_Union[Sdk, str]] = ..., pipeline_options: _Optional[str] = ..., datasets: _Optional[_Iterable[_Union[Dataset, _Mapping]]] = ..., files: _Optional[_Iterable[_Union[SnippetFile, _Mapping]]] = ...) -> None: ... + +class RunCodeResponse(_message.Message): __slots__ = ["pipeline_uuid"] PIPELINE_UUID_FIELD_NUMBER: _ClassVar[int] pipeline_uuid: str def __init__(self, pipeline_uuid: _Optional[str] = ...) -> None: ... -class GetCompileOutputResponse(_message.Message): - __slots__ = ["output"] - OUTPUT_FIELD_NUMBER: _ClassVar[int] - output: str - def __init__(self, output: _Optional[str] = ...) -> None: ... - -class GetDefaultPrecompiledObjectRequest(_message.Message): - __slots__ = ["sdk"] - SDK_FIELD_NUMBER: _ClassVar[int] - sdk: Sdk - def __init__(self, sdk: _Optional[_Union[Sdk, str]] = ...) -> None: ... - -class GetDefaultPrecompiledObjectResponse(_message.Message): - __slots__ = ["precompiled_object"] - PRECOMPILED_OBJECT_FIELD_NUMBER: _ClassVar[int] - precompiled_object: PrecompiledObject - def __init__(self, precompiled_object: _Optional[_Union[PrecompiledObject, _Mapping]] = ...) -> None: ... - -class GetGraphRequest(_message.Message): +class CheckStatusRequest(_message.Message): __slots__ = ["pipeline_uuid"] PIPELINE_UUID_FIELD_NUMBER: _ClassVar[int] pipeline_uuid: str def __init__(self, pipeline_uuid: _Optional[str] = ...) -> None: ... -class GetGraphResponse(_message.Message): - __slots__ = ["graph"] - GRAPH_FIELD_NUMBER: _ClassVar[int] - graph: str - def __init__(self, graph: _Optional[str] = ...) -> None: ... +class CheckStatusResponse(_message.Message): + __slots__ = ["status"] + STATUS_FIELD_NUMBER: _ClassVar[int] + status: Status + def __init__(self, status: _Optional[_Union[Status, str]] = ...) -> None: ... -class GetLogsRequest(_message.Message): +class GetValidationOutputRequest(_message.Message): __slots__ = ["pipeline_uuid"] PIPELINE_UUID_FIELD_NUMBER: _ClassVar[int] pipeline_uuid: str def __init__(self, pipeline_uuid: _Optional[str] = ...) -> None: ... -class GetLogsResponse(_message.Message): +class GetValidationOutputResponse(_message.Message): __slots__ = ["output"] OUTPUT_FIELD_NUMBER: _ClassVar[int] output: str def __init__(self, output: _Optional[str] = ...) -> None: ... -class GetPrecompiledObjectCodeRequest(_message.Message): - __slots__ = ["cloud_path"] - CLOUD_PATH_FIELD_NUMBER: _ClassVar[int] - cloud_path: str - def __init__(self, cloud_path: _Optional[str] = ...) -> None: ... - -class GetPrecompiledObjectCodeResponse(_message.Message): - __slots__ = ["code", "files"] - CODE_FIELD_NUMBER: _ClassVar[int] - FILES_FIELD_NUMBER: _ClassVar[int] - code: str - files: _containers.RepeatedCompositeFieldContainer[SnippetFile] - def __init__(self, code: _Optional[str] = ..., files: _Optional[_Iterable[_Union[SnippetFile, _Mapping]]] = ...) -> None: ... - -class GetPrecompiledObjectGraphRequest(_message.Message): - __slots__ = ["cloud_path"] - CLOUD_PATH_FIELD_NUMBER: _ClassVar[int] - cloud_path: str - def __init__(self, cloud_path: _Optional[str] = ...) -> None: ... - -class GetPrecompiledObjectGraphResponse(_message.Message): - __slots__ = ["graph"] - GRAPH_FIELD_NUMBER: _ClassVar[int] - graph: str - def __init__(self, graph: _Optional[str] = ...) -> None: ... - -class GetPrecompiledObjectLogsRequest(_message.Message): - __slots__ = ["cloud_path"] - CLOUD_PATH_FIELD_NUMBER: _ClassVar[int] - cloud_path: str - def __init__(self, cloud_path: _Optional[str] = ...) -> None: ... +class GetPreparationOutputRequest(_message.Message): + __slots__ = ["pipeline_uuid"] + PIPELINE_UUID_FIELD_NUMBER: _ClassVar[int] + pipeline_uuid: str + def __init__(self, pipeline_uuid: _Optional[str] = ...) -> None: ... -class GetPrecompiledObjectLogsResponse(_message.Message): +class GetPreparationOutputResponse(_message.Message): __slots__ = ["output"] OUTPUT_FIELD_NUMBER: _ClassVar[int] output: str def __init__(self, output: _Optional[str] = ...) -> None: ... -class GetPrecompiledObjectOutputRequest(_message.Message): - __slots__ = ["cloud_path"] - CLOUD_PATH_FIELD_NUMBER: _ClassVar[int] - cloud_path: str - def __init__(self, cloud_path: _Optional[str] = ...) -> None: ... +class GetCompileOutputRequest(_message.Message): + __slots__ = ["pipeline_uuid"] + PIPELINE_UUID_FIELD_NUMBER: _ClassVar[int] + pipeline_uuid: str + def __init__(self, pipeline_uuid: _Optional[str] = ...) -> None: ... -class GetPrecompiledObjectOutputResponse(_message.Message): +class GetCompileOutputResponse(_message.Message): __slots__ = ["output"] OUTPUT_FIELD_NUMBER: _ClassVar[int] output: str def __init__(self, output: _Optional[str] = ...) -> None: ... -class GetPrecompiledObjectRequest(_message.Message): - __slots__ = ["cloud_path"] - CLOUD_PATH_FIELD_NUMBER: _ClassVar[int] - cloud_path: str - def __init__(self, cloud_path: _Optional[str] = ...) -> None: ... - -class GetPrecompiledObjectResponse(_message.Message): - __slots__ = ["precompiled_object"] - PRECOMPILED_OBJECT_FIELD_NUMBER: _ClassVar[int] - precompiled_object: PrecompiledObject - def __init__(self, precompiled_object: _Optional[_Union[PrecompiledObject, _Mapping]] = ...) -> None: ... - -class GetPrecompiledObjectsRequest(_message.Message): - __slots__ = ["category", "sdk"] - CATEGORY_FIELD_NUMBER: _ClassVar[int] - SDK_FIELD_NUMBER: _ClassVar[int] - category: str - sdk: Sdk - def __init__(self, sdk: _Optional[_Union[Sdk, str]] = ..., category: _Optional[str] = ...) -> None: ... - -class GetPrecompiledObjectsResponse(_message.Message): - __slots__ = ["sdk_categories"] - SDK_CATEGORIES_FIELD_NUMBER: _ClassVar[int] - sdk_categories: _containers.RepeatedCompositeFieldContainer[Categories] - def __init__(self, sdk_categories: _Optional[_Iterable[_Union[Categories, _Mapping]]] = ...) -> None: ... - -class GetPreparationOutputRequest(_message.Message): +class GetRunOutputRequest(_message.Message): __slots__ = ["pipeline_uuid"] PIPELINE_UUID_FIELD_NUMBER: _ClassVar[int] pipeline_uuid: str def __init__(self, pipeline_uuid: _Optional[str] = ...) -> None: ... -class GetPreparationOutputResponse(_message.Message): +class GetRunOutputResponse(_message.Message): __slots__ = ["output"] OUTPUT_FIELD_NUMBER: _ClassVar[int] output: str @@ -236,114 +186,199 @@ class GetRunErrorResponse(_message.Message): output: str def __init__(self, output: _Optional[str] = ...) -> None: ... -class GetRunOutputRequest(_message.Message): +class GetLogsRequest(_message.Message): __slots__ = ["pipeline_uuid"] PIPELINE_UUID_FIELD_NUMBER: _ClassVar[int] pipeline_uuid: str def __init__(self, pipeline_uuid: _Optional[str] = ...) -> None: ... -class GetRunOutputResponse(_message.Message): +class GetLogsResponse(_message.Message): __slots__ = ["output"] OUTPUT_FIELD_NUMBER: _ClassVar[int] output: str def __init__(self, output: _Optional[str] = ...) -> None: ... -class GetSnippetRequest(_message.Message): - __slots__ = ["id"] - ID_FIELD_NUMBER: _ClassVar[int] - id: str - def __init__(self, id: _Optional[str] = ...) -> None: ... +class GetGraphRequest(_message.Message): + __slots__ = ["pipeline_uuid"] + PIPELINE_UUID_FIELD_NUMBER: _ClassVar[int] + pipeline_uuid: str + def __init__(self, pipeline_uuid: _Optional[str] = ...) -> None: ... -class GetSnippetResponse(_message.Message): - __slots__ = ["complexity", "files", "pipeline_options", "sdk"] - COMPLEXITY_FIELD_NUMBER: _ClassVar[int] - FILES_FIELD_NUMBER: _ClassVar[int] - PIPELINE_OPTIONS_FIELD_NUMBER: _ClassVar[int] - SDK_FIELD_NUMBER: _ClassVar[int] - complexity: Complexity - files: _containers.RepeatedCompositeFieldContainer[SnippetFile] - pipeline_options: str - sdk: Sdk - def __init__(self, files: _Optional[_Iterable[_Union[SnippetFile, _Mapping]]] = ..., sdk: _Optional[_Union[Sdk, str]] = ..., pipeline_options: _Optional[str] = ..., complexity: _Optional[_Union[Complexity, str]] = ...) -> None: ... +class GetGraphResponse(_message.Message): + __slots__ = ["graph"] + GRAPH_FIELD_NUMBER: _ClassVar[int] + graph: str + def __init__(self, graph: _Optional[str] = ...) -> None: ... -class GetValidationOutputRequest(_message.Message): +class CancelRequest(_message.Message): __slots__ = ["pipeline_uuid"] PIPELINE_UUID_FIELD_NUMBER: _ClassVar[int] pipeline_uuid: str def __init__(self, pipeline_uuid: _Optional[str] = ...) -> None: ... -class GetValidationOutputResponse(_message.Message): - __slots__ = ["output"] - OUTPUT_FIELD_NUMBER: _ClassVar[int] - output: str - def __init__(self, output: _Optional[str] = ...) -> None: ... +class CancelResponse(_message.Message): + __slots__ = [] + def __init__(self) -> None: ... class PrecompiledObject(_message.Message): - __slots__ = ["cloud_path", "complexity", "context_line", "datasets", "default_example", "description", "link", "multifile", "name", "pipeline_options", "sdk", "tags", "type", "url_notebook", "url_vcs"] + __slots__ = ["cloud_path", "name", "description", "type", "pipeline_options", "link", "multifile", "context_line", "default_example", "sdk", "complexity", "tags", "datasets", "url_vcs", "url_notebook"] CLOUD_PATH_FIELD_NUMBER: _ClassVar[int] - COMPLEXITY_FIELD_NUMBER: _ClassVar[int] - CONTEXT_LINE_FIELD_NUMBER: _ClassVar[int] - DATASETS_FIELD_NUMBER: _ClassVar[int] - DEFAULT_EXAMPLE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + PIPELINE_OPTIONS_FIELD_NUMBER: _ClassVar[int] LINK_FIELD_NUMBER: _ClassVar[int] MULTIFILE_FIELD_NUMBER: _ClassVar[int] - NAME_FIELD_NUMBER: _ClassVar[int] - PIPELINE_OPTIONS_FIELD_NUMBER: _ClassVar[int] + CONTEXT_LINE_FIELD_NUMBER: _ClassVar[int] + DEFAULT_EXAMPLE_FIELD_NUMBER: _ClassVar[int] SDK_FIELD_NUMBER: _ClassVar[int] + COMPLEXITY_FIELD_NUMBER: _ClassVar[int] TAGS_FIELD_NUMBER: _ClassVar[int] - TYPE_FIELD_NUMBER: _ClassVar[int] - URL_NOTEBOOK_FIELD_NUMBER: _ClassVar[int] + DATASETS_FIELD_NUMBER: _ClassVar[int] URL_VCS_FIELD_NUMBER: _ClassVar[int] + URL_NOTEBOOK_FIELD_NUMBER: _ClassVar[int] cloud_path: str - complexity: Complexity - context_line: int - datasets: _containers.RepeatedCompositeFieldContainer[Dataset] - default_example: bool + name: str description: str + type: PrecompiledObjectType + pipeline_options: str link: str multifile: bool - name: str - pipeline_options: str + context_line: int + default_example: bool sdk: Sdk + complexity: Complexity tags: _containers.RepeatedScalarFieldContainer[str] - type: PrecompiledObjectType - url_notebook: str + datasets: _containers.RepeatedCompositeFieldContainer[Dataset] url_vcs: str + url_notebook: str def __init__(self, cloud_path: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., type: _Optional[_Union[PrecompiledObjectType, str]] = ..., pipeline_options: _Optional[str] = ..., link: _Optional[str] = ..., multifile: bool = ..., context_line: _Optional[int] = ..., default_example: bool = ..., sdk: _Optional[_Union[Sdk, str]] = ..., complexity: _Optional[_Union[Complexity, str]] = ..., tags: _Optional[_Iterable[str]] = ..., datasets: _Optional[_Iterable[_Union[Dataset, _Mapping]]] = ..., url_vcs: _Optional[str] = ..., url_notebook: _Optional[str] = ...) -> None: ... -class RunCodeRequest(_message.Message): - __slots__ = ["code", "datasets", "files", "pipeline_options", "sdk"] +class Categories(_message.Message): + __slots__ = ["sdk", "categories"] + class Category(_message.Message): + __slots__ = ["category_name", "precompiled_objects"] + CATEGORY_NAME_FIELD_NUMBER: _ClassVar[int] + PRECOMPILED_OBJECTS_FIELD_NUMBER: _ClassVar[int] + category_name: str + precompiled_objects: _containers.RepeatedCompositeFieldContainer[PrecompiledObject] + def __init__(self, category_name: _Optional[str] = ..., precompiled_objects: _Optional[_Iterable[_Union[PrecompiledObject, _Mapping]]] = ...) -> None: ... + SDK_FIELD_NUMBER: _ClassVar[int] + CATEGORIES_FIELD_NUMBER: _ClassVar[int] + sdk: Sdk + categories: _containers.RepeatedCompositeFieldContainer[Categories.Category] + def __init__(self, sdk: _Optional[_Union[Sdk, str]] = ..., categories: _Optional[_Iterable[_Union[Categories.Category, _Mapping]]] = ...) -> None: ... + +class GetPrecompiledObjectsRequest(_message.Message): + __slots__ = ["sdk", "category"] + SDK_FIELD_NUMBER: _ClassVar[int] + CATEGORY_FIELD_NUMBER: _ClassVar[int] + sdk: Sdk + category: str + def __init__(self, sdk: _Optional[_Union[Sdk, str]] = ..., category: _Optional[str] = ...) -> None: ... + +class GetPrecompiledObjectRequest(_message.Message): + __slots__ = ["cloud_path"] + CLOUD_PATH_FIELD_NUMBER: _ClassVar[int] + cloud_path: str + def __init__(self, cloud_path: _Optional[str] = ...) -> None: ... + +class GetPrecompiledObjectCodeRequest(_message.Message): + __slots__ = ["cloud_path"] + CLOUD_PATH_FIELD_NUMBER: _ClassVar[int] + cloud_path: str + def __init__(self, cloud_path: _Optional[str] = ...) -> None: ... + +class GetPrecompiledObjectOutputRequest(_message.Message): + __slots__ = ["cloud_path"] + CLOUD_PATH_FIELD_NUMBER: _ClassVar[int] + cloud_path: str + def __init__(self, cloud_path: _Optional[str] = ...) -> None: ... + +class GetPrecompiledObjectLogsRequest(_message.Message): + __slots__ = ["cloud_path"] + CLOUD_PATH_FIELD_NUMBER: _ClassVar[int] + cloud_path: str + def __init__(self, cloud_path: _Optional[str] = ...) -> None: ... + +class GetPrecompiledObjectGraphRequest(_message.Message): + __slots__ = ["cloud_path"] + CLOUD_PATH_FIELD_NUMBER: _ClassVar[int] + cloud_path: str + def __init__(self, cloud_path: _Optional[str] = ...) -> None: ... + +class GetDefaultPrecompiledObjectRequest(_message.Message): + __slots__ = ["sdk"] + SDK_FIELD_NUMBER: _ClassVar[int] + sdk: Sdk + def __init__(self, sdk: _Optional[_Union[Sdk, str]] = ...) -> None: ... + +class GetPrecompiledObjectsResponse(_message.Message): + __slots__ = ["sdk_categories"] + SDK_CATEGORIES_FIELD_NUMBER: _ClassVar[int] + sdk_categories: _containers.RepeatedCompositeFieldContainer[Categories] + def __init__(self, sdk_categories: _Optional[_Iterable[_Union[Categories, _Mapping]]] = ...) -> None: ... + +class GetPrecompiledObjectResponse(_message.Message): + __slots__ = ["precompiled_object"] + PRECOMPILED_OBJECT_FIELD_NUMBER: _ClassVar[int] + precompiled_object: PrecompiledObject + def __init__(self, precompiled_object: _Optional[_Union[PrecompiledObject, _Mapping]] = ...) -> None: ... + +class GetPrecompiledObjectCodeResponse(_message.Message): + __slots__ = ["code", "files"] CODE_FIELD_NUMBER: _ClassVar[int] - DATASETS_FIELD_NUMBER: _ClassVar[int] FILES_FIELD_NUMBER: _ClassVar[int] - PIPELINE_OPTIONS_FIELD_NUMBER: _ClassVar[int] - SDK_FIELD_NUMBER: _ClassVar[int] code: str - datasets: _containers.RepeatedCompositeFieldContainer[Dataset] files: _containers.RepeatedCompositeFieldContainer[SnippetFile] - pipeline_options: str - sdk: Sdk - def __init__(self, code: _Optional[str] = ..., sdk: _Optional[_Union[Sdk, str]] = ..., pipeline_options: _Optional[str] = ..., datasets: _Optional[_Iterable[_Union[Dataset, _Mapping]]] = ..., files: _Optional[_Iterable[_Union[SnippetFile, _Mapping]]] = ...) -> None: ... + def __init__(self, code: _Optional[str] = ..., files: _Optional[_Iterable[_Union[SnippetFile, _Mapping]]] = ...) -> None: ... -class RunCodeResponse(_message.Message): - __slots__ = ["pipeline_uuid"] - PIPELINE_UUID_FIELD_NUMBER: _ClassVar[int] - pipeline_uuid: str - def __init__(self, pipeline_uuid: _Optional[str] = ...) -> None: ... +class GetPrecompiledObjectOutputResponse(_message.Message): + __slots__ = ["output"] + OUTPUT_FIELD_NUMBER: _ClassVar[int] + output: str + def __init__(self, output: _Optional[str] = ...) -> None: ... + +class GetPrecompiledObjectLogsResponse(_message.Message): + __slots__ = ["output"] + OUTPUT_FIELD_NUMBER: _ClassVar[int] + output: str + def __init__(self, output: _Optional[str] = ...) -> None: ... + +class GetPrecompiledObjectGraphResponse(_message.Message): + __slots__ = ["graph"] + GRAPH_FIELD_NUMBER: _ClassVar[int] + graph: str + def __init__(self, graph: _Optional[str] = ...) -> None: ... + +class GetDefaultPrecompiledObjectResponse(_message.Message): + __slots__ = ["precompiled_object"] + PRECOMPILED_OBJECT_FIELD_NUMBER: _ClassVar[int] + precompiled_object: PrecompiledObject + def __init__(self, precompiled_object: _Optional[_Union[PrecompiledObject, _Mapping]] = ...) -> None: ... + +class SnippetFile(_message.Message): + __slots__ = ["name", "content", "is_main"] + NAME_FIELD_NUMBER: _ClassVar[int] + CONTENT_FIELD_NUMBER: _ClassVar[int] + IS_MAIN_FIELD_NUMBER: _ClassVar[int] + name: str + content: str + is_main: bool + def __init__(self, name: _Optional[str] = ..., content: _Optional[str] = ..., is_main: bool = ...) -> None: ... class SaveSnippetRequest(_message.Message): - __slots__ = ["complexity", "files", "persistence_key", "pipeline_options", "sdk"] - COMPLEXITY_FIELD_NUMBER: _ClassVar[int] + __slots__ = ["files", "sdk", "pipeline_options", "complexity", "persistence_key"] FILES_FIELD_NUMBER: _ClassVar[int] - PERSISTENCE_KEY_FIELD_NUMBER: _ClassVar[int] - PIPELINE_OPTIONS_FIELD_NUMBER: _ClassVar[int] SDK_FIELD_NUMBER: _ClassVar[int] - complexity: Complexity + PIPELINE_OPTIONS_FIELD_NUMBER: _ClassVar[int] + COMPLEXITY_FIELD_NUMBER: _ClassVar[int] + PERSISTENCE_KEY_FIELD_NUMBER: _ClassVar[int] files: _containers.RepeatedCompositeFieldContainer[SnippetFile] - persistence_key: str - pipeline_options: str sdk: Sdk + pipeline_options: str + complexity: Complexity + persistence_key: str def __init__(self, files: _Optional[_Iterable[_Union[SnippetFile, _Mapping]]] = ..., sdk: _Optional[_Union[Sdk, str]] = ..., pipeline_options: _Optional[str] = ..., complexity: _Optional[_Union[Complexity, str]] = ..., persistence_key: _Optional[str] = ...) -> None: ... class SaveSnippetResponse(_message.Message): @@ -352,27 +387,34 @@ class SaveSnippetResponse(_message.Message): id: str def __init__(self, id: _Optional[str] = ...) -> None: ... -class SnippetFile(_message.Message): - __slots__ = ["content", "is_main", "name"] - CONTENT_FIELD_NUMBER: _ClassVar[int] - IS_MAIN_FIELD_NUMBER: _ClassVar[int] - NAME_FIELD_NUMBER: _ClassVar[int] - content: str - is_main: bool - name: str - def __init__(self, name: _Optional[str] = ..., content: _Optional[str] = ..., is_main: bool = ...) -> None: ... - -class Sdk(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] - -class Status(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] +class GetSnippetRequest(_message.Message): + __slots__ = ["id"] + ID_FIELD_NUMBER: _ClassVar[int] + id: str + def __init__(self, id: _Optional[str] = ...) -> None: ... -class PrecompiledObjectType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] +class GetSnippetResponse(_message.Message): + __slots__ = ["files", "sdk", "pipeline_options", "complexity"] + FILES_FIELD_NUMBER: _ClassVar[int] + SDK_FIELD_NUMBER: _ClassVar[int] + PIPELINE_OPTIONS_FIELD_NUMBER: _ClassVar[int] + COMPLEXITY_FIELD_NUMBER: _ClassVar[int] + files: _containers.RepeatedCompositeFieldContainer[SnippetFile] + sdk: Sdk + pipeline_options: str + complexity: Complexity + def __init__(self, files: _Optional[_Iterable[_Union[SnippetFile, _Mapping]]] = ..., sdk: _Optional[_Union[Sdk, str]] = ..., pipeline_options: _Optional[str] = ..., complexity: _Optional[_Union[Complexity, str]] = ...) -> None: ... -class Complexity(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): +class GetMetadataRequest(_message.Message): __slots__ = [] + def __init__(self) -> None: ... -class EmulatorType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] +class GetMetadataResponse(_message.Message): + __slots__ = ["runner_sdk", "build_commit_hash", "beam_sdk_version"] + RUNNER_SDK_FIELD_NUMBER: _ClassVar[int] + BUILD_COMMIT_HASH_FIELD_NUMBER: _ClassVar[int] + BEAM_SDK_VERSION_FIELD_NUMBER: _ClassVar[int] + runner_sdk: str + build_commit_hash: str + beam_sdk_version: str + def __init__(self, runner_sdk: _Optional[str] = ..., build_commit_hash: _Optional[str] = ..., beam_sdk_version: _Optional[str] = ...) -> None: ... diff --git a/playground/infrastructure/api/v1/api_pb2_grpc.py b/playground/infrastructure/api/v1/api_pb2_grpc.py index 108d5b45e7c6..91c33e3611ba 100644 --- a/playground/infrastructure/api/v1/api_pb2_grpc.py +++ b/playground/infrastructure/api/v1/api_pb2_grpc.py @@ -109,6 +109,11 @@ def __init__(self, channel): request_serializer=api_dot_v1_dot_api__pb2.GetSnippetRequest.SerializeToString, response_deserializer=api_dot_v1_dot_api__pb2.GetSnippetResponse.FromString, ) + self.GetMetadata = channel.unary_unary( + '/api.v1.PlaygroundService/GetMetadata', + request_serializer=api_dot_v1_dot_api__pb2.GetMetadataRequest.SerializeToString, + response_deserializer=api_dot_v1_dot_api__pb2.GetMetadataResponse.FromString, + ) class PlaygroundServiceServicer(object): @@ -247,6 +252,13 @@ def GetSnippet(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetMetadata(self, request, context): + """Get the runner metadata. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_PlaygroundServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -345,6 +357,11 @@ def add_PlaygroundServiceServicer_to_server(servicer, server): request_deserializer=api_dot_v1_dot_api__pb2.GetSnippetRequest.FromString, response_serializer=api_dot_v1_dot_api__pb2.GetSnippetResponse.SerializeToString, ), + 'GetMetadata': grpc.unary_unary_rpc_method_handler( + servicer.GetMetadata, + request_deserializer=api_dot_v1_dot_api__pb2.GetMetadataRequest.FromString, + response_serializer=api_dot_v1_dot_api__pb2.GetMetadataResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'api.v1.PlaygroundService', rpc_method_handlers) @@ -677,3 +694,20 @@ def GetSnippet(request, api_dot_v1_dot_api__pb2.GetSnippetResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetMetadata(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/api.v1.PlaygroundService/GetMetadata', + api_dot_v1_dot_api__pb2.GetMetadataRequest.SerializeToString, + api_dot_v1_dot_api__pb2.GetMetadataResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) From 8d9de57df4d011874039114c868149ad3b23c752 Mon Sep 17 00:00:00 2001 From: Timur Sultanov Date: Wed, 22 Feb 2023 20:10:26 +0400 Subject: [PATCH 02/26] Add GetMetadata() endpoint to controller --- playground/backend/cmd/server/controller.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/playground/backend/cmd/server/controller.go b/playground/backend/cmd/server/controller.go index 88b5cbf07500..d9262261daec 100644 --- a/playground/backend/cmd/server/controller.go +++ b/playground/backend/cmd/server/controller.go @@ -51,6 +51,8 @@ const ( userCloudConnectionErrMsg = "Cloud connection error" resourceNotFoundErrMsg = "Resource is not found" resourceInconsistentErrMsg = "Resource is not consistent" + buildCommitHash = "" + beamSdkVersion = "" ) // playgroundController processes `gRPC' requests from clients. @@ -533,3 +535,14 @@ func (controller *playgroundController) GetSnippet(ctx context.Context, info *pb } return &response, nil } + +// GetMetadata returns runner metadata +func (controller *playgroundController) GetMetadata(ctx context.Context, info *pb.GetMetadataRequest) (*pb.GetMetadataResponse, error) { + response := pb.GetMetadataResponse{ + RunnerSdk: controller.env.BeamSdkEnvs.ApacheBeamSdk.String(), + BuildCommitHash: buildCommitHash, + BeamSdkVersion: beamSdkVersion, + } + + return &response, nil +} From a9a551084aece7810ed63a6005d13db19175bc00 Mon Sep 17 00:00:00 2001 From: Timur Sultanov Date: Wed, 22 Feb 2023 20:12:51 +0400 Subject: [PATCH 03/26] Add Beam SDK version to go build --- playground/api/v1/api.proto | 3 +- playground/backend/cmd/server/build_info.go | 26 ++ playground/backend/cmd/server/controller.go | 12 +- .../backend/containers/git-functions.gradle | 42 +++ playground/backend/containers/go/Dockerfile | 5 +- playground/backend/containers/go/build.gradle | 5 +- playground/backend/containers/java/Dockerfile | 7 +- .../backend/containers/java/build.gradle | 5 +- .../backend/containers/python/Dockerfile | 6 +- .../backend/containers/python/build.gradle | 6 +- .../backend/containers/router/Dockerfile | 5 +- .../backend/containers/router/build.gradle | 5 +- playground/backend/containers/scio/Dockerfile | 4 +- .../backend/containers/scio/build.gradle | 5 +- playground/backend/internal/api/v1/api.pb.go | 343 +++++++++--------- .../backend/internal/environment/beam.go | 5 +- .../environment/environment_service.go | 8 +- .../lib/src/api/v1/api.pb.dart | 24 +- .../lib/src/api/v1/api.pbjson.dart | 5 +- playground/infrastructure/api/v1/api_pb2.py | 28 +- playground/infrastructure/api/v1/api_pb2.pyi | 6 +- 21 files changed, 341 insertions(+), 214 deletions(-) create mode 100644 playground/backend/cmd/server/build_info.go create mode 100644 playground/backend/containers/git-functions.gradle diff --git a/playground/api/v1/api.proto b/playground/api/v1/api.proto index 01aee9594e66..bbfb113eab27 100644 --- a/playground/api/v1/api.proto +++ b/playground/api/v1/api.proto @@ -321,7 +321,8 @@ message GetMetadataRequest {} message GetMetadataResponse { string runner_sdk = 1; string build_commit_hash = 2; - string beam_sdk_version = 3; + string build_commit_timestamp = 3; + string beam_sdk_version = 4; } service PlaygroundService { diff --git a/playground/backend/cmd/server/build_info.go b/playground/backend/cmd/server/build_info.go new file mode 100644 index 000000000000..323e40aa7252 --- /dev/null +++ b/playground/backend/cmd/server/build_info.go @@ -0,0 +1,26 @@ +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +// This file is intended to store build-time variables. +// To set a value to any of this variable use '-ldflags="-X main.="' +// option when invoking 'go build'. + +// BuildCommitHash will contain hash of git commit from which the application is built +var BuildCommitHash string + +// BuildCommitTimestamp will contain timestamp of git commit from which the application is built +var BuildCommitTimestamp string diff --git a/playground/backend/cmd/server/controller.go b/playground/backend/cmd/server/controller.go index d9262261daec..f667c6473ead 100644 --- a/playground/backend/cmd/server/controller.go +++ b/playground/backend/cmd/server/controller.go @@ -15,10 +15,9 @@ package main import ( + "cloud.google.com/go/datastore" "context" "errors" - - "cloud.google.com/go/datastore" "github.com/google/uuid" pb "beam.apache.org/playground/backend/internal/api/v1" @@ -51,8 +50,6 @@ const ( userCloudConnectionErrMsg = "Cloud connection error" resourceNotFoundErrMsg = "Resource is not found" resourceInconsistentErrMsg = "Resource is not consistent" - buildCommitHash = "" - beamSdkVersion = "" ) // playgroundController processes `gRPC' requests from clients. @@ -539,9 +536,10 @@ func (controller *playgroundController) GetSnippet(ctx context.Context, info *pb // GetMetadata returns runner metadata func (controller *playgroundController) GetMetadata(ctx context.Context, info *pb.GetMetadataRequest) (*pb.GetMetadataResponse, error) { response := pb.GetMetadataResponse{ - RunnerSdk: controller.env.BeamSdkEnvs.ApacheBeamSdk.String(), - BuildCommitHash: buildCommitHash, - BeamSdkVersion: beamSdkVersion, + RunnerSdk: controller.env.BeamSdkEnvs.ApacheBeamSdk.String(), + BuildCommitHash: BuildCommitHash, + BuildCommitTimestamp: BuildCommitTimestamp, + BeamSdkVersion: controller.env.BeamSdkEnvs.BeamVersion, } return &response, nil diff --git a/playground/backend/containers/git-functions.gradle b/playground/backend/containers/git-functions.gradle new file mode 100644 index 000000000000..046e1748fd2b --- /dev/null +++ b/playground/backend/containers/git-functions.gradle @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * License); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +ext.getGitCommitHash = () -> { + def stdout = new ByteArrayOutputStream() + exec { + executable 'git' + args 'rev-parse', 'HEAD' + standardOutput = stdout + } + return stdout.toString().trim() +} as Closure + +ext.getGitCommitTimestamp = () -> { + def stdout = new ByteArrayOutputStream() + exec { + executable 'git' + args 'show', '-s', '--format=%ct', 'HEAD' + standardOutput = stdout + } + return stdout.toString().trim() +} as Closure + +//ext { +// getGitCommitHash = this.&getGitCommitHash +// getGitCommitTimestamp = this.&getGitCommitTimestamp +//} \ No newline at end of file diff --git a/playground/backend/containers/go/Dockerfile b/playground/backend/containers/go/Dockerfile index b52b70a70b93..ddefaedd1c7c 100644 --- a/playground/backend/containers/go/Dockerfile +++ b/playground/backend/containers/go/Dockerfile @@ -20,6 +20,8 @@ ARG BASE_IMAGE FROM $BASE_IMAGE ARG SDK_TAG ARG SDK_TAG_LOCAL +ARG GIT_COMMIT="" +ARG GIT_TIMESTAMP="0" # Setup Go Environment ENV GOPATH /go @@ -48,8 +50,9 @@ WORKDIR /go/src/playground/backend RUN go mod download &&\ go mod tidy &&\ cd cmd/server &&\ - go build -o /opt/playground/backend/server_go_backend + go build -ldflags="-X main.BuildCommitHash=$GIT_COMMIT -X main.BuildCommitTimestamp=$GIT_TIMESTAMP" -o /opt/playground/backend/server_go_backend +ENV BEAM_VERSION=$SDK_TAG ENV SERVER_IP=0.0.0.0 ENV SERVER_PORT=8080 ENV APP_WORK_DIR=/opt/playground/backend/ diff --git a/playground/backend/containers/go/build.gradle b/playground/backend/containers/go/build.gradle index 6e9a5f40c555..7c1dfb4a20d0 100644 --- a/playground/backend/containers/go/build.gradle +++ b/playground/backend/containers/go/build.gradle @@ -19,6 +19,7 @@ apply plugin: 'org.apache.beam.module' apply plugin: 'base' +apply from: "$project.rootDir/playground/backend/containers/git-functions.gradle" applyDockerNature() def playgroundJobServerProject = "${project.path.replace('-container', '')}" @@ -87,7 +88,9 @@ docker { "golang:1.18-bullseye", 'SDK_TAG': project.rootProject.hasProperty(["sdk-tag"]) ? project.rootProject["sdk-tag"] : project.rootProject.sdk_version, - 'SDK_TAG_LOCAL': project.rootProject.sdk_version]) + 'SDK_TAG_LOCAL': project.rootProject.sdk_version, + 'GIT_COMMIT': getGitCommitHash(), + 'GIT_TIMESTAMP': getGitCommitTimestamp()]) } // Ensure that we build the required resources and copy and file dependencies from related projects diff --git a/playground/backend/containers/java/Dockerfile b/playground/backend/containers/java/Dockerfile index 759118ddb992..562452adb03f 100644 --- a/playground/backend/containers/java/Dockerfile +++ b/playground/backend/containers/java/Dockerfile @@ -18,6 +18,8 @@ ARG BEAM_VERSION=2.44.0 FROM golang:1.18-bullseye AS build ARG BEAM_VERSION +ARG GIT_COMMIT="" +ARG GIT_TIMESTAMP="0" # Setup Go Environment ENV GOPATH /go ENV PATH $GOPATH/bin:$PATH @@ -29,12 +31,12 @@ RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.1 &&\ COPY src /go/src/playground/backend #COPY playground /go/src/playground/playground WORKDIR /go/src/playground/backend -RUN ls + # Build Application RUN go mod download &&\ go mod tidy &&\ cd cmd/server &&\ - go build -o /go/bin/server_java_backend + go build -ldflags="-X main.BuildCommitHash=$GIT_COMMIT -X main.BuildCommitTimestamp=$GIT_TIMESTAMP" -o /go/bin/server_java_backend FROM maven:3.8.6-openjdk-8 as dep ARG BEAM_VERSION @@ -55,6 +57,7 @@ FROM apache/beam_java8_sdk:$BEAM_VERSION ARG BEAM_VERSION ARG SPRING_VERSION=5.3.25 ARG KAFKA_CLIENTS_VERSION=2.3.1 +ENV BEAM_VERSION=$BEAM_VERSION ENV SERVER_IP=0.0.0.0 ENV SERVER_PORT=8080 ENV APP_WORK_DIR=/opt/playground/backend/ diff --git a/playground/backend/containers/java/build.gradle b/playground/backend/containers/java/build.gradle index 3218bf17bc11..655b22c58ff9 100644 --- a/playground/backend/containers/java/build.gradle +++ b/playground/backend/containers/java/build.gradle @@ -19,6 +19,7 @@ apply plugin: 'org.apache.beam.module' apply plugin: 'base' +apply from: "$project.rootDir/playground/backend/containers/git-functions.gradle" applyDockerNature() def playgroundJobServerProject = "${project.path.replace('-container', '')}" @@ -71,7 +72,9 @@ docker { tags containerImageTags() buildArgs(['BEAM_VERSION': project.rootProject.hasProperty(["sdk-tag"]) ? project.rootProject["sdk-tag"] : - default_beam_version ]) + default_beam_version, + 'GIT_COMMIT': getGitCommitHash(), + 'GIT_TIMESTAMP': getGitCommitTimestamp()] ) } // Ensure that we build the required resources and copy and file dependencies from related projects diff --git a/playground/backend/containers/python/Dockerfile b/playground/backend/containers/python/Dockerfile index cf6d543bb303..eee9acc4d8ea 100644 --- a/playground/backend/containers/python/Dockerfile +++ b/playground/backend/containers/python/Dockerfile @@ -19,6 +19,8 @@ ARG GO_BASE_IMAGE=golang:1.18-bullseye ARG SDK_TAG ARG BASE_IMAGE=apache/beam_python3.7_sdk:$SDK_TAG FROM $GO_BASE_IMAGE AS build +ARG GIT_COMMIT="" +ARG GIT_TIMESTAMP="0" # Setup Go Environment ENV GOPATH /go @@ -36,9 +38,11 @@ RUN ls RUN go mod download &&\ go mod tidy &&\ cd cmd/server &&\ - go build -o /go/bin/server_python_backend + go build -ldflags="-X main.BuildCommitHash=$GIT_COMMIT -X main.BuildCommitTimestamp=$GIT_TIMESTAMP" -o /go/bin/server_python_backend FROM $BASE_IMAGE +ARG SDK_TAG +ENV BEAM_VERSION=$SDK_TAG ENV SERVER_IP=0.0.0.0 ENV SERVER_PORT=8080 ENV APP_WORK_DIR=/opt/playground/backend/ diff --git a/playground/backend/containers/python/build.gradle b/playground/backend/containers/python/build.gradle index a1b6688ae524..429136fa041e 100644 --- a/playground/backend/containers/python/build.gradle +++ b/playground/backend/containers/python/build.gradle @@ -19,6 +19,7 @@ apply plugin: 'org.apache.beam.module' apply plugin: 'base' +apply from: "$project.rootDir/playground/backend/containers/git-functions.gradle" applyDockerNature() def playgroundJobServerProject = "${project.path.replace('-container', '')}" @@ -73,8 +74,9 @@ docker { project.rootProject["go-base-image"] : "golang:1.18-bullseye", 'SDK_TAG': project.rootProject.hasProperty(["sdk-tag"]) ? - project.rootProject["sdk-tag"] : project.rootProject.sdk_version - ]) + project.rootProject["sdk-tag"] : project.rootProject.sdk_version, + 'GIT_COMMIT': getGitCommitHash(), + 'GIT_TIMESTAMP': getGitCommitTimestamp()]) } // Ensure that we build the required resources and copy and file dependencies from related projects diff --git a/playground/backend/containers/router/Dockerfile b/playground/backend/containers/router/Dockerfile index 9f79f3a67b31..75d123189d0a 100644 --- a/playground/backend/containers/router/Dockerfile +++ b/playground/backend/containers/router/Dockerfile @@ -19,6 +19,8 @@ ARG BASE_IMAGE=golang:1.18-bullseye #Two-stage assembly FROM $BASE_IMAGE AS build +ARG GIT_COMMIT="" +ARG GIT_TIMESTAMP="0" # Setup Go Environment ENV GOPATH /go @@ -30,13 +32,12 @@ COPY src /go/src/playground/backend # Build Application -#RUN WORKDIR /go/src/playground/backend # Build Application RUN go mod tidy -v &&\ go mod download &&\ cd cmd/server &&\ - go build -o /go/bin/server_go_backend + go build -ldflags="-X main.BuildCommitHash=$GIT_COMMIT -X main.BuildCommitTimestamp=$GIT_TIMESTAMP" -o /go/bin/server_go_backend # Null image FROM debian:stable-20221114-slim diff --git a/playground/backend/containers/router/build.gradle b/playground/backend/containers/router/build.gradle index b1161f0468e2..1dc9af6dd9f8 100644 --- a/playground/backend/containers/router/build.gradle +++ b/playground/backend/containers/router/build.gradle @@ -19,6 +19,7 @@ apply plugin: 'org.apache.beam.module' apply plugin: 'base' +apply from: "$project.rootDir/playground/backend/containers/git-functions.gradle" applyDockerNature() def playgroundJobServerProject = "${project.path.replace('-container', '')}" @@ -67,7 +68,9 @@ docker { tags containerImageTags() buildArgs(['BASE_IMAGE': project.rootProject.hasProperty(["base-image"]) ? project.rootProject["base-image"] : - "golang:1.18-bullseye" ]) + "golang:1.18-bullseye", + 'GIT_COMMIT': getGitCommitHash(), + 'GIT_TIMESTAMP': getGitCommitTimestamp()]) } task dockerComposeLocalUp() { diff --git a/playground/backend/containers/scio/Dockerfile b/playground/backend/containers/scio/Dockerfile index 6df3c0ad4b8c..8dd42513ed40 100644 --- a/playground/backend/containers/scio/Dockerfile +++ b/playground/backend/containers/scio/Dockerfile @@ -17,6 +17,8 @@ ############################################################################### ARG BASE_IMAGE=openjdk:8 FROM golang:1.18-bullseye AS build +ARG GIT_COMMIT="" +ARG GIT_TIMESTAMP="0" # Setup Go Environment ENV GOPATH /go @@ -33,7 +35,7 @@ WORKDIR /go/src/playground/backend RUN go mod download &&\ go mod tidy &&\ cd cmd/server &&\ - go build -o /go/bin/server_scio_backend + go build -ldflags="-X main.BuildCommitHash=$GIT_COMMIT -X main.BuildCommitTimestamp=$GIT_TIMESTAMP" -o /go/bin/server_scio_backend FROM $BASE_IMAGE ENV SERVER_IP=0.0.0.0 diff --git a/playground/backend/containers/scio/build.gradle b/playground/backend/containers/scio/build.gradle index 8b96f045ac99..78e7effd1405 100644 --- a/playground/backend/containers/scio/build.gradle +++ b/playground/backend/containers/scio/build.gradle @@ -19,6 +19,7 @@ apply plugin: 'org.apache.beam.module' apply plugin: 'base' +apply from: "$project.rootDir/playground/backend/containers/git-functions.gradle" applyDockerNature() def playgroundJobServerProject = "${project.path.replace('-container', '')}" @@ -67,7 +68,9 @@ docker { tags containerImageTags() buildArgs(['BASE_IMAGE': project.rootProject.hasProperty(["base-image"]) ? project.rootProject["base-image"] : - "openjdk:8" ]) + "openjdk:8", + 'GIT_COMMIT': getGitCommitHash(), + 'GIT_TIMESTAMP': getGitCommitTimestamp()]) } // Ensure that we build the required resources and copy and file dependencies from related projects diff --git a/playground/backend/internal/api/v1/api.pb.go b/playground/backend/internal/api/v1/api.pb.go index 8db68ad99c33..7c458bf39785 100644 --- a/playground/backend/internal/api/v1/api.pb.go +++ b/playground/backend/internal/api/v1/api.pb.go @@ -2633,9 +2633,10 @@ type GetMetadataResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RunnerSdk string `protobuf:"bytes,1,opt,name=runner_sdk,json=runnerSdk,proto3" json:"runner_sdk,omitempty"` - BuildCommitHash string `protobuf:"bytes,2,opt,name=build_commit_hash,json=buildCommitHash,proto3" json:"build_commit_hash,omitempty"` - BeamSdkVersion string `protobuf:"bytes,3,opt,name=beam_sdk_version,json=beamSdkVersion,proto3" json:"beam_sdk_version,omitempty"` + RunnerSdk string `protobuf:"bytes,1,opt,name=runner_sdk,json=runnerSdk,proto3" json:"runner_sdk,omitempty"` + BuildCommitHash string `protobuf:"bytes,2,opt,name=build_commit_hash,json=buildCommitHash,proto3" json:"build_commit_hash,omitempty"` + BuildCommitTimestamp string `protobuf:"bytes,3,opt,name=build_commit_timestamp,json=buildCommitTimestamp,proto3" json:"build_commit_timestamp,omitempty"` + BeamSdkVersion string `protobuf:"bytes,4,opt,name=beam_sdk_version,json=beamSdkVersion,proto3" json:"beam_sdk_version,omitempty"` } func (x *GetMetadataResponse) Reset() { @@ -2684,6 +2685,13 @@ func (x *GetMetadataResponse) GetBuildCommitHash() string { return "" } +func (x *GetMetadataResponse) GetBuildCommitTimestamp() string { + if x != nil { + return x.BuildCommitTimestamp + } + return "" +} + func (x *GetMetadataResponse) GetBeamSdkVersion() string { if x != nil { return x.BeamSdkVersion @@ -2993,177 +3001,180 @@ var file_api_v1_api_proto_rawDesc = []byte{ 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xc0, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x65, 0x61, - 0x6d, 0x5f, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x65, 0x61, 0x6d, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x2a, 0x52, 0x0a, 0x03, 0x53, 0x64, 0x6b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x44, - 0x4b, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, - 0x06, 0x53, 0x44, 0x4b, 0x5f, 0x47, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x44, 0x4b, - 0x5f, 0x50, 0x59, 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, - 0x5f, 0x53, 0x43, 0x49, 0x4f, 0x10, 0x04, 0x2a, 0xb8, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, - 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x14, - 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, - 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, - 0x52, 0x45, 0x50, 0x41, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, - 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, - 0x50, 0x49, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, - 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x45, - 0x43, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x08, 0x12, 0x14, 0x0a, - 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, - 0x52, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, - 0x52, 0x4f, 0x52, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x52, 0x55, 0x4e, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, - 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, - 0x10, 0x0c, 0x2a, 0xae, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x23, - 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, - 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, - 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x52, - 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x54, 0x41, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, - 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, - 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x5f, 0x54, 0x45, 0x53, - 0x54, 0x10, 0x03, 0x2a, 0x6e, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, - 0x79, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, - 0x10, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x42, 0x41, 0x53, 0x49, - 0x43, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, - 0x59, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, - 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x41, 0x44, 0x56, 0x41, 0x4e, 0x43, 0x45, - 0x44, 0x10, 0x03, 0x2a, 0x46, 0x0a, 0x0c, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x46, 0x4b, 0x41, 0x10, 0x01, 0x32, 0xd3, 0x0d, 0x0a, 0x11, - 0x50, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, - 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, - 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, - 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, - 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, - 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, - 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, - 0x06, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, - 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, - 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x34, 0x0a, 0x16, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x28, 0x0a, 0x10, 0x62, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x65, 0x61, 0x6d, 0x53, + 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2a, 0x52, 0x0a, 0x03, 0x53, 0x64, 0x6b, + 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x44, 0x4b, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x4a, 0x41, 0x56, + 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x44, 0x4b, 0x5f, 0x47, 0x4f, 0x10, 0x02, 0x12, + 0x0e, 0x0a, 0x0a, 0x53, 0x44, 0x4b, 0x5f, 0x50, 0x59, 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x03, 0x12, + 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x53, 0x43, 0x49, 0x4f, 0x10, 0x04, 0x2a, 0xb8, 0x02, + 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, + 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, + 0x4f, 0x52, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, + 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x18, + 0x0a, 0x14, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, + 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x13, + 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, + 0x44, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, + 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, + 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, + 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0c, 0x2a, 0xae, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, + 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x50, + 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, + 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, + 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, + 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x54, 0x41, + 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, + 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, + 0x49, 0x54, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x10, 0x03, 0x2a, 0x6e, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4d, 0x50, 0x4c, + 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, + 0x59, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4d, + 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, + 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x41, + 0x44, 0x56, 0x41, 0x4e, 0x43, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x46, 0x0a, 0x0c, 0x45, 0x6d, 0x75, + 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x4d, 0x55, + 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4d, 0x55, 0x4c, + 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x46, 0x4b, 0x41, 0x10, + 0x01, 0x32, 0xd3, 0x0d, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, + 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, + 0x73, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, + 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x17, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x13, 0x47, 0x65, 0x74, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, + 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x15, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, + 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, - 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, - 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, - 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, - 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x29, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, - 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, - 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, - 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, - 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, - 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, - 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, + 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, - 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, - 0x65, 0x74, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, - 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0x38, 0x5a, 0x36, 0x62, 0x65, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, - 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, - 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x3b, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, + 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, + 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, + 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, + 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, + 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x1b, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, + 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, + 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, + 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, + 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, + 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, 0x36, 0x62, 0x65, 0x61, 0x6d, 0x2e, + 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x6c, 0x61, 0x79, 0x67, + 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/playground/backend/internal/environment/beam.go b/playground/backend/internal/environment/beam.go index c40d86e15e5e..9e4574cbae27 100644 --- a/playground/backend/internal/environment/beam.go +++ b/playground/backend/internal/environment/beam.go @@ -43,14 +43,15 @@ func NewExecutorConfig(compileCmd, runCmd, testCmd string, compileArgs, runArgs, // BeamEnvs contains all environments related of ApacheBeam. These will use to run pipelines type BeamEnvs struct { ApacheBeamSdk pb.Sdk + BeamVersion string ExecutorConfig *ExecutorConfig preparedModDir string numOfParallelJobs int } // NewBeamEnvs is a BeamEnvs constructor -func NewBeamEnvs(apacheBeamSdk pb.Sdk, executorConfig *ExecutorConfig, preparedModDir string, numOfParallelJobs int) *BeamEnvs { - return &BeamEnvs{ApacheBeamSdk: apacheBeamSdk, ExecutorConfig: executorConfig, preparedModDir: preparedModDir, numOfParallelJobs: numOfParallelJobs} +func NewBeamEnvs(apacheBeamSdk pb.Sdk, beamVersion string, executorConfig *ExecutorConfig, preparedModDir string, numOfParallelJobs int) *BeamEnvs { + return &BeamEnvs{ApacheBeamSdk: apacheBeamSdk, BeamVersion: beamVersion, ExecutorConfig: executorConfig, preparedModDir: preparedModDir, numOfParallelJobs: numOfParallelJobs} } // PreparedModDir returns the path to the directory where prepared go.mod and go.sum are located diff --git a/playground/backend/internal/environment/environment_service.go b/playground/backend/internal/environment/environment_service.go index a7ddf0984c03..948b988ea1d4 100644 --- a/playground/backend/internal/environment/environment_service.go +++ b/playground/backend/internal/environment/environment_service.go @@ -35,6 +35,7 @@ const ( serverIpKey = "SERVER_IP" serverPortKey = "SERVER_PORT" beamSdkKey = "BEAM_SDK" + beamVersionKey = "BEAM_VERSION" workingDirKey = "APP_WORK_DIR" preparedModDirKey = "PREPARED_MOD_DIR" numOfParallelJobsKey = "NUM_PARALLEL_JOBS" @@ -53,6 +54,7 @@ const ( defaultIp = "localhost" defaultPort = 8080 defaultSdk = pb.Sdk_SDK_JAVA + defaultBeamVersion = "" defaultBeamJarsPath = "/opt/apache/beam/jars/*" defaultCacheType = "local" defaultCacheAddress = "localhost:6379" @@ -146,6 +148,8 @@ func ConfigureBeamEnvs(workDir string) (*BeamEnvs, error) { preparedModDir, modDirExist := os.LookupEnv(preparedModDirKey) numOfParallelJobs := getEnvAsInt(numOfParallelJobsKey, defaultNumOfParallelJobs) + beamVersion := getEnv(beamVersionKey, defaultBeamVersion) + if value, present := os.LookupEnv(beamSdkKey); present { switch value { @@ -163,14 +167,14 @@ func ConfigureBeamEnvs(workDir string) (*BeamEnvs, error) { } } if sdk == pb.Sdk_SDK_UNSPECIFIED { - return NewBeamEnvs(sdk, nil, preparedModDir, numOfParallelJobs), nil + return NewBeamEnvs(sdk, beamVersion, nil, preparedModDir, numOfParallelJobs), nil } configPath := filepath.Join(workDir, configFolderName, sdk.String()+jsonExt) executorConfig, err := createExecutorConfig(sdk, configPath) if err != nil { return nil, err } - return NewBeamEnvs(sdk, executorConfig, preparedModDir, numOfParallelJobs), nil + return NewBeamEnvs(sdk, beamVersion, executorConfig, preparedModDir, numOfParallelJobs), nil } // createExecutorConfig creates ExecutorConfig that corresponds to specific Apache Beam SDK. diff --git a/playground/frontend/playground_components/lib/src/api/v1/api.pb.dart b/playground/frontend/playground_components/lib/src/api/v1/api.pb.dart index 2066a64da6de..cc9b1608d782 100644 --- a/playground/frontend/playground_components/lib/src/api/v1/api.pb.dart +++ b/playground/frontend/playground_components/lib/src/api/v1/api.pb.dart @@ -2449,7 +2449,8 @@ class GetMetadataResponse extends $pb.GeneratedMessage { static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GetMetadataResponse', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'api.v1'), createEmptyInstance: create) ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'runnerSdk') ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'buildCommitHash') - ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'beamSdkVersion') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'buildCommitTimestamp') + ..aOS(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'beamSdkVersion') ..hasRequiredFields = false ; @@ -2457,6 +2458,7 @@ class GetMetadataResponse extends $pb.GeneratedMessage { factory GetMetadataResponse({ $core.String? runnerSdk, $core.String? buildCommitHash, + $core.String? buildCommitTimestamp, $core.String? beamSdkVersion, }) { final _result = create(); @@ -2466,6 +2468,9 @@ class GetMetadataResponse extends $pb.GeneratedMessage { if (buildCommitHash != null) { _result.buildCommitHash = buildCommitHash; } + if (buildCommitTimestamp != null) { + _result.buildCommitTimestamp = buildCommitTimestamp; + } if (beamSdkVersion != null) { _result.beamSdkVersion = beamSdkVersion; } @@ -2511,12 +2516,21 @@ class GetMetadataResponse extends $pb.GeneratedMessage { void clearBuildCommitHash() => clearField(2); @$pb.TagNumber(3) - $core.String get beamSdkVersion => $_getSZ(2); + $core.String get buildCommitTimestamp => $_getSZ(2); @$pb.TagNumber(3) - set beamSdkVersion($core.String v) { $_setString(2, v); } + set buildCommitTimestamp($core.String v) { $_setString(2, v); } @$pb.TagNumber(3) - $core.bool hasBeamSdkVersion() => $_has(2); + $core.bool hasBuildCommitTimestamp() => $_has(2); @$pb.TagNumber(3) - void clearBeamSdkVersion() => clearField(3); + void clearBuildCommitTimestamp() => clearField(3); + + @$pb.TagNumber(4) + $core.String get beamSdkVersion => $_getSZ(3); + @$pb.TagNumber(4) + set beamSdkVersion($core.String v) { $_setString(3, v); } + @$pb.TagNumber(4) + $core.bool hasBeamSdkVersion() => $_has(3); + @$pb.TagNumber(4) + void clearBeamSdkVersion() => clearField(4); } diff --git a/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart b/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart index b30c5d745404..9b981fae91a4 100644 --- a/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart +++ b/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart @@ -564,9 +564,10 @@ const GetMetadataResponse$json = const { '2': const [ const {'1': 'runner_sdk', '3': 1, '4': 1, '5': 9, '10': 'runnerSdk'}, const {'1': 'build_commit_hash', '3': 2, '4': 1, '5': 9, '10': 'buildCommitHash'}, - const {'1': 'beam_sdk_version', '3': 3, '4': 1, '5': 9, '10': 'beamSdkVersion'}, + const {'1': 'build_commit_timestamp', '3': 3, '4': 1, '5': 9, '10': 'buildCommitTimestamp'}, + const {'1': 'beam_sdk_version', '3': 4, '4': 1, '5': 9, '10': 'beamSdkVersion'}, ], }; /// Descriptor for `GetMetadataResponse`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List getMetadataResponseDescriptor = $convert.base64Decode('ChNHZXRNZXRhZGF0YVJlc3BvbnNlEh0KCnJ1bm5lcl9zZGsYASABKAlSCXJ1bm5lclNkaxIqChFidWlsZF9jb21taXRfaGFzaBgCIAEoCVIPYnVpbGRDb21taXRIYXNoEigKEGJlYW1fc2RrX3ZlcnNpb24YAyABKAlSDmJlYW1TZGtWZXJzaW9u'); +final $typed_data.Uint8List getMetadataResponseDescriptor = $convert.base64Decode('ChNHZXRNZXRhZGF0YVJlc3BvbnNlEh0KCnJ1bm5lcl9zZGsYASABKAlSCXJ1bm5lclNkaxIqChFidWlsZF9jb21taXRfaGFzaBgCIAEoCVIPYnVpbGRDb21taXRIYXNoEjQKFmJ1aWxkX2NvbW1pdF90aW1lc3RhbXAYAyABKAlSFGJ1aWxkQ29tbWl0VGltZXN0YW1wEigKEGJlYW1fc2RrX3ZlcnNpb24YBCABKAlSDmJlYW1TZGtWZXJzaW9u'); diff --git a/playground/infrastructure/api/v1/api_pb2.py b/playground/infrastructure/api/v1/api_pb2.py index 4e7eaf583997..63006512ad33 100644 --- a/playground/infrastructure/api/v1/api_pb2.py +++ b/playground/infrastructure/api/v1/api_pb2.py @@ -13,7 +13,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x61pi/v1/api.proto\x12\x06\x61pi.v1\"\xca\x01\n\x07\x44\x61taset\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x14.api.v1.EmulatorTypeR\x04type\x12\x36\n\x07options\x18\x02 \x03(\x0b\x32\x1c.api.v1.Dataset.OptionsEntryR\x07options\x12!\n\x0c\x64\x61taset_path\x18\x03 \x01(\tR\x0b\x64\x61tasetPath\x1a:\n\x0cOptionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xc6\x01\n\x0eRunCodeRequest\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12+\n\x08\x64\x61tasets\x18\x04 \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12)\n\x05\x66iles\x18\x05 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"6\n\x0fRunCodeResponse\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"9\n\x12\x43heckStatusRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"=\n\x13\x43heckStatusResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x0e.api.v1.StatusR\x06status\"A\n\x1aGetValidationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"5\n\x1bGetValidationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"B\n\x1bGetPreparationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"6\n\x1cGetPreparationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\">\n\x17GetCompileOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"2\n\x18GetCompileOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n\x13GetRunOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\".\n\x14GetRunOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n\x12GetRunErrorRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"-\n\x13GetRunErrorResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"5\n\x0eGetLogsRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\")\n\x0fGetLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"6\n\x0fGetGraphRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"(\n\x10GetGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"4\n\rCancelRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"\x10\n\x0e\x43\x61ncelResponse\"\x94\x04\n\x11PrecompiledObject\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x04type\x18\x04 \x01(\x0e\x32\x1d.api.v1.PrecompiledObjectTypeR\x04type\x12)\n\x10pipeline_options\x18\x05 \x01(\tR\x0fpipelineOptions\x12\x12\n\x04link\x18\x06 \x01(\tR\x04link\x12\x1c\n\tmultifile\x18\x07 \x01(\x08R\tmultifile\x12!\n\x0c\x63ontext_line\x18\x08 \x01(\x05R\x0b\x63ontextLine\x12\'\n\x0f\x64\x65\x66\x61ult_example\x18\t \x01(\x08R\x0e\x64\x65\x66\x61ultExample\x12\x1d\n\x03sdk\x18\n \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x32\n\ncomplexity\x18\x0b \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\x12\n\x04tags\x18\x0c \x03(\tR\x04tags\x12+\n\x08\x64\x61tasets\x18\r \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12\x17\n\x07url_vcs\x18\x0e \x01(\tR\x06urlVcs\x12!\n\x0curl_notebook\x18\x0f \x01(\tR\x0burlNotebook\"\xe5\x01\n\nCategories\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12;\n\ncategories\x18\x02 \x03(\x0b\x32\x1b.api.v1.Categories.CategoryR\ncategories\x1a{\n\x08\x43\x61tegory\x12#\n\rcategory_name\x18\x01 \x01(\tR\x0c\x63\x61tegoryName\x12J\n\x13precompiled_objects\x18\x02 \x03(\x0b\x32\x19.api.v1.PrecompiledObjectR\x12precompiledObjects\"Y\n\x1cGetPrecompiledObjectsRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x1a\n\x08\x63\x61tegory\x18\x02 \x01(\tR\x08\x63\x61tegory\"<\n\x1bGetPrecompiledObjectRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectCodeRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"B\n!GetPrecompiledObjectOutputRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectLogsRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"A\n GetPrecompiledObjectGraphRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"C\n\"GetDefaultPrecompiledObjectRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\"Z\n\x1dGetPrecompiledObjectsResponse\x12\x39\n\x0esdk_categories\x18\x01 \x03(\x0b\x32\x12.api.v1.CategoriesR\rsdkCategories\"h\n\x1cGetPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"a\n GetPrecompiledObjectCodeResponse\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12)\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"<\n\"GetPrecompiledObjectOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n GetPrecompiledObjectLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n!GetPrecompiledObjectGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"o\n#GetDefaultPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"T\n\x0bSnippetFile\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x63ontent\x18\x02 \x01(\tR\x07\x63ontent\x12\x17\n\x07is_main\x18\x03 \x01(\x08R\x06isMain\"\xe6\x01\n\x12SaveSnippetRequest\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\'\n\x0fpersistence_key\x18\x05 \x01(\tR\x0epersistenceKey\"%\n\x13SaveSnippetResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"#\n\x11GetSnippetRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"\xbd\x01\n\x12GetSnippetResponse\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\"\x14\n\x12GetMetadataRequest\"\x8a\x01\n\x13GetMetadataResponse\x12\x1d\n\nrunner_sdk\x18\x01 \x01(\tR\trunnerSdk\x12*\n\x11\x62uild_commit_hash\x18\x02 \x01(\tR\x0f\x62uildCommitHash\x12(\n\x10\x62\x65\x61m_sdk_version\x18\x03 \x01(\tR\x0e\x62\x65\x61mSdkVersion*R\n\x03Sdk\x12\x13\n\x0fSDK_UNSPECIFIED\x10\x00\x12\x0c\n\x08SDK_JAVA\x10\x01\x12\n\n\x06SDK_GO\x10\x02\x12\x0e\n\nSDK_PYTHON\x10\x03\x12\x0c\n\x08SDK_SCIO\x10\x04*\xb8\x02\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x15\n\x11STATUS_VALIDATING\x10\x01\x12\x1b\n\x17STATUS_VALIDATION_ERROR\x10\x02\x12\x14\n\x10STATUS_PREPARING\x10\x03\x12\x1c\n\x18STATUS_PREPARATION_ERROR\x10\x04\x12\x14\n\x10STATUS_COMPILING\x10\x05\x12\x18\n\x14STATUS_COMPILE_ERROR\x10\x06\x12\x14\n\x10STATUS_EXECUTING\x10\x07\x12\x13\n\x0fSTATUS_FINISHED\x10\x08\x12\x14\n\x10STATUS_RUN_ERROR\x10\t\x12\x10\n\x0cSTATUS_ERROR\x10\n\x12\x16\n\x12STATUS_RUN_TIMEOUT\x10\x0b\x12\x13\n\x0fSTATUS_CANCELED\x10\x0c*\xae\x01\n\x15PrecompiledObjectType\x12\'\n#PRECOMPILED_OBJECT_TYPE_UNSPECIFIED\x10\x00\x12#\n\x1fPRECOMPILED_OBJECT_TYPE_EXAMPLE\x10\x01\x12 \n\x1cPRECOMPILED_OBJECT_TYPE_KATA\x10\x02\x12%\n!PRECOMPILED_OBJECT_TYPE_UNIT_TEST\x10\x03*n\n\nComplexity\x12\x1a\n\x16\x43OMPLEXITY_UNSPECIFIED\x10\x00\x12\x14\n\x10\x43OMPLEXITY_BASIC\x10\x01\x12\x15\n\x11\x43OMPLEXITY_MEDIUM\x10\x02\x12\x17\n\x13\x43OMPLEXITY_ADVANCED\x10\x03*F\n\x0c\x45mulatorType\x12\x1d\n\x19\x45MULATOR_TYPE_UNSPECIFIED\x10\x00\x12\x17\n\x13\x45MULATOR_TYPE_KAFKA\x10\x01\x32\xd3\r\n\x11PlaygroundService\x12:\n\x07RunCode\x12\x16.api.v1.RunCodeRequest\x1a\x17.api.v1.RunCodeResponse\x12\x46\n\x0b\x43heckStatus\x12\x1a.api.v1.CheckStatusRequest\x1a\x1b.api.v1.CheckStatusResponse\x12I\n\x0cGetRunOutput\x12\x1b.api.v1.GetRunOutputRequest\x1a\x1c.api.v1.GetRunOutputResponse\x12:\n\x07GetLogs\x12\x16.api.v1.GetLogsRequest\x1a\x17.api.v1.GetLogsResponse\x12=\n\x08GetGraph\x12\x17.api.v1.GetGraphRequest\x1a\x18.api.v1.GetGraphResponse\x12\x46\n\x0bGetRunError\x12\x1a.api.v1.GetRunErrorRequest\x1a\x1b.api.v1.GetRunErrorResponse\x12^\n\x13GetValidationOutput\x12\".api.v1.GetValidationOutputRequest\x1a#.api.v1.GetValidationOutputResponse\x12\x61\n\x14GetPreparationOutput\x12#.api.v1.GetPreparationOutputRequest\x1a$.api.v1.GetPreparationOutputResponse\x12U\n\x10GetCompileOutput\x12\x1f.api.v1.GetCompileOutputRequest\x1a .api.v1.GetCompileOutputResponse\x12\x37\n\x06\x43\x61ncel\x12\x15.api.v1.CancelRequest\x1a\x16.api.v1.CancelResponse\x12\x64\n\x15GetPrecompiledObjects\x12$.api.v1.GetPrecompiledObjectsRequest\x1a%.api.v1.GetPrecompiledObjectsResponse\x12\x61\n\x14GetPrecompiledObject\x12#.api.v1.GetPrecompiledObjectRequest\x1a$.api.v1.GetPrecompiledObjectResponse\x12m\n\x18GetPrecompiledObjectCode\x12\'.api.v1.GetPrecompiledObjectCodeRequest\x1a(.api.v1.GetPrecompiledObjectCodeResponse\x12s\n\x1aGetPrecompiledObjectOutput\x12).api.v1.GetPrecompiledObjectOutputRequest\x1a*.api.v1.GetPrecompiledObjectOutputResponse\x12m\n\x18GetPrecompiledObjectLogs\x12\'.api.v1.GetPrecompiledObjectLogsRequest\x1a(.api.v1.GetPrecompiledObjectLogsResponse\x12p\n\x19GetPrecompiledObjectGraph\x12(.api.v1.GetPrecompiledObjectGraphRequest\x1a).api.v1.GetPrecompiledObjectGraphResponse\x12v\n\x1bGetDefaultPrecompiledObject\x12*.api.v1.GetDefaultPrecompiledObjectRequest\x1a+.api.v1.GetDefaultPrecompiledObjectResponse\x12\x46\n\x0bSaveSnippet\x12\x1a.api.v1.SaveSnippetRequest\x1a\x1b.api.v1.SaveSnippetResponse\x12\x43\n\nGetSnippet\x12\x19.api.v1.GetSnippetRequest\x1a\x1a.api.v1.GetSnippetResponse\x12\x46\n\x0bGetMetadata\x12\x1a.api.v1.GetMetadataRequest\x1a\x1b.api.v1.GetMetadataResponseB8Z6beam.apache.org/playground/backend/internal;playgroundb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x61pi/v1/api.proto\x12\x06\x61pi.v1\"\xca\x01\n\x07\x44\x61taset\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x14.api.v1.EmulatorTypeR\x04type\x12\x36\n\x07options\x18\x02 \x03(\x0b\x32\x1c.api.v1.Dataset.OptionsEntryR\x07options\x12!\n\x0c\x64\x61taset_path\x18\x03 \x01(\tR\x0b\x64\x61tasetPath\x1a:\n\x0cOptionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xc6\x01\n\x0eRunCodeRequest\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12+\n\x08\x64\x61tasets\x18\x04 \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12)\n\x05\x66iles\x18\x05 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"6\n\x0fRunCodeResponse\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"9\n\x12\x43heckStatusRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"=\n\x13\x43heckStatusResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x0e.api.v1.StatusR\x06status\"A\n\x1aGetValidationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"5\n\x1bGetValidationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"B\n\x1bGetPreparationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"6\n\x1cGetPreparationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\">\n\x17GetCompileOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"2\n\x18GetCompileOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n\x13GetRunOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\".\n\x14GetRunOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n\x12GetRunErrorRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"-\n\x13GetRunErrorResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"5\n\x0eGetLogsRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\")\n\x0fGetLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"6\n\x0fGetGraphRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"(\n\x10GetGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"4\n\rCancelRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"\x10\n\x0e\x43\x61ncelResponse\"\x94\x04\n\x11PrecompiledObject\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x04type\x18\x04 \x01(\x0e\x32\x1d.api.v1.PrecompiledObjectTypeR\x04type\x12)\n\x10pipeline_options\x18\x05 \x01(\tR\x0fpipelineOptions\x12\x12\n\x04link\x18\x06 \x01(\tR\x04link\x12\x1c\n\tmultifile\x18\x07 \x01(\x08R\tmultifile\x12!\n\x0c\x63ontext_line\x18\x08 \x01(\x05R\x0b\x63ontextLine\x12\'\n\x0f\x64\x65\x66\x61ult_example\x18\t \x01(\x08R\x0e\x64\x65\x66\x61ultExample\x12\x1d\n\x03sdk\x18\n \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x32\n\ncomplexity\x18\x0b \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\x12\n\x04tags\x18\x0c \x03(\tR\x04tags\x12+\n\x08\x64\x61tasets\x18\r \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12\x17\n\x07url_vcs\x18\x0e \x01(\tR\x06urlVcs\x12!\n\x0curl_notebook\x18\x0f \x01(\tR\x0burlNotebook\"\xe5\x01\n\nCategories\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12;\n\ncategories\x18\x02 \x03(\x0b\x32\x1b.api.v1.Categories.CategoryR\ncategories\x1a{\n\x08\x43\x61tegory\x12#\n\rcategory_name\x18\x01 \x01(\tR\x0c\x63\x61tegoryName\x12J\n\x13precompiled_objects\x18\x02 \x03(\x0b\x32\x19.api.v1.PrecompiledObjectR\x12precompiledObjects\"Y\n\x1cGetPrecompiledObjectsRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x1a\n\x08\x63\x61tegory\x18\x02 \x01(\tR\x08\x63\x61tegory\"<\n\x1bGetPrecompiledObjectRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectCodeRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"B\n!GetPrecompiledObjectOutputRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectLogsRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"A\n GetPrecompiledObjectGraphRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"C\n\"GetDefaultPrecompiledObjectRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\"Z\n\x1dGetPrecompiledObjectsResponse\x12\x39\n\x0esdk_categories\x18\x01 \x03(\x0b\x32\x12.api.v1.CategoriesR\rsdkCategories\"h\n\x1cGetPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"a\n GetPrecompiledObjectCodeResponse\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12)\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"<\n\"GetPrecompiledObjectOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n GetPrecompiledObjectLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n!GetPrecompiledObjectGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"o\n#GetDefaultPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"T\n\x0bSnippetFile\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x63ontent\x18\x02 \x01(\tR\x07\x63ontent\x12\x17\n\x07is_main\x18\x03 \x01(\x08R\x06isMain\"\xe6\x01\n\x12SaveSnippetRequest\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\'\n\x0fpersistence_key\x18\x05 \x01(\tR\x0epersistenceKey\"%\n\x13SaveSnippetResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"#\n\x11GetSnippetRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"\xbd\x01\n\x12GetSnippetResponse\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\"\x14\n\x12GetMetadataRequest\"\xc0\x01\n\x13GetMetadataResponse\x12\x1d\n\nrunner_sdk\x18\x01 \x01(\tR\trunnerSdk\x12*\n\x11\x62uild_commit_hash\x18\x02 \x01(\tR\x0f\x62uildCommitHash\x12\x34\n\x16\x62uild_commit_timestamp\x18\x03 \x01(\tR\x14\x62uildCommitTimestamp\x12(\n\x10\x62\x65\x61m_sdk_version\x18\x04 \x01(\tR\x0e\x62\x65\x61mSdkVersion*R\n\x03Sdk\x12\x13\n\x0fSDK_UNSPECIFIED\x10\x00\x12\x0c\n\x08SDK_JAVA\x10\x01\x12\n\n\x06SDK_GO\x10\x02\x12\x0e\n\nSDK_PYTHON\x10\x03\x12\x0c\n\x08SDK_SCIO\x10\x04*\xb8\x02\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x15\n\x11STATUS_VALIDATING\x10\x01\x12\x1b\n\x17STATUS_VALIDATION_ERROR\x10\x02\x12\x14\n\x10STATUS_PREPARING\x10\x03\x12\x1c\n\x18STATUS_PREPARATION_ERROR\x10\x04\x12\x14\n\x10STATUS_COMPILING\x10\x05\x12\x18\n\x14STATUS_COMPILE_ERROR\x10\x06\x12\x14\n\x10STATUS_EXECUTING\x10\x07\x12\x13\n\x0fSTATUS_FINISHED\x10\x08\x12\x14\n\x10STATUS_RUN_ERROR\x10\t\x12\x10\n\x0cSTATUS_ERROR\x10\n\x12\x16\n\x12STATUS_RUN_TIMEOUT\x10\x0b\x12\x13\n\x0fSTATUS_CANCELED\x10\x0c*\xae\x01\n\x15PrecompiledObjectType\x12\'\n#PRECOMPILED_OBJECT_TYPE_UNSPECIFIED\x10\x00\x12#\n\x1fPRECOMPILED_OBJECT_TYPE_EXAMPLE\x10\x01\x12 \n\x1cPRECOMPILED_OBJECT_TYPE_KATA\x10\x02\x12%\n!PRECOMPILED_OBJECT_TYPE_UNIT_TEST\x10\x03*n\n\nComplexity\x12\x1a\n\x16\x43OMPLEXITY_UNSPECIFIED\x10\x00\x12\x14\n\x10\x43OMPLEXITY_BASIC\x10\x01\x12\x15\n\x11\x43OMPLEXITY_MEDIUM\x10\x02\x12\x17\n\x13\x43OMPLEXITY_ADVANCED\x10\x03*F\n\x0c\x45mulatorType\x12\x1d\n\x19\x45MULATOR_TYPE_UNSPECIFIED\x10\x00\x12\x17\n\x13\x45MULATOR_TYPE_KAFKA\x10\x01\x32\xd3\r\n\x11PlaygroundService\x12:\n\x07RunCode\x12\x16.api.v1.RunCodeRequest\x1a\x17.api.v1.RunCodeResponse\x12\x46\n\x0b\x43heckStatus\x12\x1a.api.v1.CheckStatusRequest\x1a\x1b.api.v1.CheckStatusResponse\x12I\n\x0cGetRunOutput\x12\x1b.api.v1.GetRunOutputRequest\x1a\x1c.api.v1.GetRunOutputResponse\x12:\n\x07GetLogs\x12\x16.api.v1.GetLogsRequest\x1a\x17.api.v1.GetLogsResponse\x12=\n\x08GetGraph\x12\x17.api.v1.GetGraphRequest\x1a\x18.api.v1.GetGraphResponse\x12\x46\n\x0bGetRunError\x12\x1a.api.v1.GetRunErrorRequest\x1a\x1b.api.v1.GetRunErrorResponse\x12^\n\x13GetValidationOutput\x12\".api.v1.GetValidationOutputRequest\x1a#.api.v1.GetValidationOutputResponse\x12\x61\n\x14GetPreparationOutput\x12#.api.v1.GetPreparationOutputRequest\x1a$.api.v1.GetPreparationOutputResponse\x12U\n\x10GetCompileOutput\x12\x1f.api.v1.GetCompileOutputRequest\x1a .api.v1.GetCompileOutputResponse\x12\x37\n\x06\x43\x61ncel\x12\x15.api.v1.CancelRequest\x1a\x16.api.v1.CancelResponse\x12\x64\n\x15GetPrecompiledObjects\x12$.api.v1.GetPrecompiledObjectsRequest\x1a%.api.v1.GetPrecompiledObjectsResponse\x12\x61\n\x14GetPrecompiledObject\x12#.api.v1.GetPrecompiledObjectRequest\x1a$.api.v1.GetPrecompiledObjectResponse\x12m\n\x18GetPrecompiledObjectCode\x12\'.api.v1.GetPrecompiledObjectCodeRequest\x1a(.api.v1.GetPrecompiledObjectCodeResponse\x12s\n\x1aGetPrecompiledObjectOutput\x12).api.v1.GetPrecompiledObjectOutputRequest\x1a*.api.v1.GetPrecompiledObjectOutputResponse\x12m\n\x18GetPrecompiledObjectLogs\x12\'.api.v1.GetPrecompiledObjectLogsRequest\x1a(.api.v1.GetPrecompiledObjectLogsResponse\x12p\n\x19GetPrecompiledObjectGraph\x12(.api.v1.GetPrecompiledObjectGraphRequest\x1a).api.v1.GetPrecompiledObjectGraphResponse\x12v\n\x1bGetDefaultPrecompiledObject\x12*.api.v1.GetDefaultPrecompiledObjectRequest\x1a+.api.v1.GetDefaultPrecompiledObjectResponse\x12\x46\n\x0bSaveSnippet\x12\x1a.api.v1.SaveSnippetRequest\x1a\x1b.api.v1.SaveSnippetResponse\x12\x43\n\nGetSnippet\x12\x19.api.v1.GetSnippetRequest\x1a\x1a.api.v1.GetSnippetResponse\x12\x46\n\x0bGetMetadata\x12\x1a.api.v1.GetMetadataRequest\x1a\x1b.api.v1.GetMetadataResponseB8Z6beam.apache.org/playground/backend/internal;playgroundb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -24,16 +24,16 @@ DESCRIPTOR._serialized_options = b'Z6beam.apache.org/playground/backend/internal;playground' _DATASET_OPTIONSENTRY._options = None _DATASET_OPTIONSENTRY._serialized_options = b'8\001' - _globals['_SDK']._serialized_start=4053 - _globals['_SDK']._serialized_end=4135 - _globals['_STATUS']._serialized_start=4138 - _globals['_STATUS']._serialized_end=4450 - _globals['_PRECOMPILEDOBJECTTYPE']._serialized_start=4453 - _globals['_PRECOMPILEDOBJECTTYPE']._serialized_end=4627 - _globals['_COMPLEXITY']._serialized_start=4629 - _globals['_COMPLEXITY']._serialized_end=4739 - _globals['_EMULATORTYPE']._serialized_start=4741 - _globals['_EMULATORTYPE']._serialized_end=4811 + _globals['_SDK']._serialized_start=4107 + _globals['_SDK']._serialized_end=4189 + _globals['_STATUS']._serialized_start=4192 + _globals['_STATUS']._serialized_end=4504 + _globals['_PRECOMPILEDOBJECTTYPE']._serialized_start=4507 + _globals['_PRECOMPILEDOBJECTTYPE']._serialized_end=4681 + _globals['_COMPLEXITY']._serialized_start=4683 + _globals['_COMPLEXITY']._serialized_end=4793 + _globals['_EMULATORTYPE']._serialized_start=4795 + _globals['_EMULATORTYPE']._serialized_end=4865 _globals['_DATASET']._serialized_start=29 _globals['_DATASET']._serialized_end=231 _globals['_DATASET_OPTIONSENTRY']._serialized_start=173 @@ -125,7 +125,7 @@ _globals['_GETMETADATAREQUEST']._serialized_start=3890 _globals['_GETMETADATAREQUEST']._serialized_end=3910 _globals['_GETMETADATARESPONSE']._serialized_start=3913 - _globals['_GETMETADATARESPONSE']._serialized_end=4051 - _globals['_PLAYGROUNDSERVICE']._serialized_start=4814 - _globals['_PLAYGROUNDSERVICE']._serialized_end=6561 + _globals['_GETMETADATARESPONSE']._serialized_end=4105 + _globals['_PLAYGROUNDSERVICE']._serialized_start=4868 + _globals['_PLAYGROUNDSERVICE']._serialized_end=6615 # @@protoc_insertion_point(module_scope) diff --git a/playground/infrastructure/api/v1/api_pb2.pyi b/playground/infrastructure/api/v1/api_pb2.pyi index e55ff420c887..0c5ea6de7ac8 100644 --- a/playground/infrastructure/api/v1/api_pb2.pyi +++ b/playground/infrastructure/api/v1/api_pb2.pyi @@ -410,11 +410,13 @@ class GetMetadataRequest(_message.Message): def __init__(self) -> None: ... class GetMetadataResponse(_message.Message): - __slots__ = ["runner_sdk", "build_commit_hash", "beam_sdk_version"] + __slots__ = ["runner_sdk", "build_commit_hash", "build_commit_timestamp", "beam_sdk_version"] RUNNER_SDK_FIELD_NUMBER: _ClassVar[int] BUILD_COMMIT_HASH_FIELD_NUMBER: _ClassVar[int] + BUILD_COMMIT_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] BEAM_SDK_VERSION_FIELD_NUMBER: _ClassVar[int] runner_sdk: str build_commit_hash: str + build_commit_timestamp: str beam_sdk_version: str - def __init__(self, runner_sdk: _Optional[str] = ..., build_commit_hash: _Optional[str] = ..., beam_sdk_version: _Optional[str] = ...) -> None: ... + def __init__(self, runner_sdk: _Optional[str] = ..., build_commit_hash: _Optional[str] = ..., build_commit_timestamp: _Optional[str] = ..., beam_sdk_version: _Optional[str] = ...) -> None: ... From 42b5dbaaace66e13ee36067a587f23514c5d7b34 Mon Sep 17 00:00:00 2001 From: Timur Sultanov Date: Thu, 23 Feb 2023 19:17:53 +0400 Subject: [PATCH 04/26] Remove commented out code --- playground/backend/containers/git-functions.gradle | 5 ----- 1 file changed, 5 deletions(-) diff --git a/playground/backend/containers/git-functions.gradle b/playground/backend/containers/git-functions.gradle index 046e1748fd2b..e1f5d95cb8ce 100644 --- a/playground/backend/containers/git-functions.gradle +++ b/playground/backend/containers/git-functions.gradle @@ -35,8 +35,3 @@ ext.getGitCommitTimestamp = () -> { } return stdout.toString().trim() } as Closure - -//ext { -// getGitCommitHash = this.&getGitCommitHash -// getGitCommitTimestamp = this.&getGitCommitTimestamp -//} \ No newline at end of file From 4fd3753f961c57247397300966592f508dde2111 Mon Sep 17 00:00:00 2001 From: Timur Sultanov Date: Fri, 24 Feb 2023 14:06:28 +0400 Subject: [PATCH 05/26] Change BuildCommitTimestamp type to int64 --- playground/api/v1/api.proto | 2 +- playground/backend/cmd/server/controller.go | 16 +- playground/backend/internal/api/v1/api.pb.go | 338 +++++++++--------- .../lib/src/api/v1/api.pb.dart | 17 +- .../lib/src/api/v1/api.pbjson.dart | 4 +- playground/infrastructure/api/v1/api_pb2.py | 28 +- playground/infrastructure/api/v1/api_pb2.pyi | 8 +- 7 files changed, 211 insertions(+), 202 deletions(-) diff --git a/playground/api/v1/api.proto b/playground/api/v1/api.proto index bbfb113eab27..52473e4f0e02 100644 --- a/playground/api/v1/api.proto +++ b/playground/api/v1/api.proto @@ -321,7 +321,7 @@ message GetMetadataRequest {} message GetMetadataResponse { string runner_sdk = 1; string build_commit_hash = 2; - string build_commit_timestamp = 3; + int64 build_commit_timestamp_seconds_since_epoch = 3; string beam_sdk_version = 4; } diff --git a/playground/backend/cmd/server/controller.go b/playground/backend/cmd/server/controller.go index f667c6473ead..f20e201e68e3 100644 --- a/playground/backend/cmd/server/controller.go +++ b/playground/backend/cmd/server/controller.go @@ -19,6 +19,7 @@ import ( "context" "errors" "github.com/google/uuid" + "strconv" pb "beam.apache.org/playground/backend/internal/api/v1" "beam.apache.org/playground/backend/internal/cache" @@ -534,12 +535,17 @@ func (controller *playgroundController) GetSnippet(ctx context.Context, info *pb } // GetMetadata returns runner metadata -func (controller *playgroundController) GetMetadata(ctx context.Context, info *pb.GetMetadataRequest) (*pb.GetMetadataResponse, error) { +func (controller *playgroundController) GetMetadata(_ context.Context, _ *pb.GetMetadataRequest) (*pb.GetMetadataResponse, error) { + commitTimestampInteger, err := strconv.ParseInt(BuildCommitTimestamp, 10, 64) + if err != nil { + logger.Errorf("GetMetadata(): failed to parse BuildCommitTimestamp (\"%s\"): %s", BuildCommitTimestamp, err.Error()) + commitTimestampInteger = -1 + } response := pb.GetMetadataResponse{ - RunnerSdk: controller.env.BeamSdkEnvs.ApacheBeamSdk.String(), - BuildCommitHash: BuildCommitHash, - BuildCommitTimestamp: BuildCommitTimestamp, - BeamSdkVersion: controller.env.BeamSdkEnvs.BeamVersion, + RunnerSdk: controller.env.BeamSdkEnvs.ApacheBeamSdk.String(), + BuildCommitHash: BuildCommitHash, + BuildCommitTimestampSecondsSinceEpoch: commitTimestampInteger, + BeamSdkVersion: controller.env.BeamSdkEnvs.BeamVersion, } return &response, nil diff --git a/playground/backend/internal/api/v1/api.pb.go b/playground/backend/internal/api/v1/api.pb.go index 7c458bf39785..2df53df2bf04 100644 --- a/playground/backend/internal/api/v1/api.pb.go +++ b/playground/backend/internal/api/v1/api.pb.go @@ -2633,10 +2633,10 @@ type GetMetadataResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RunnerSdk string `protobuf:"bytes,1,opt,name=runner_sdk,json=runnerSdk,proto3" json:"runner_sdk,omitempty"` - BuildCommitHash string `protobuf:"bytes,2,opt,name=build_commit_hash,json=buildCommitHash,proto3" json:"build_commit_hash,omitempty"` - BuildCommitTimestamp string `protobuf:"bytes,3,opt,name=build_commit_timestamp,json=buildCommitTimestamp,proto3" json:"build_commit_timestamp,omitempty"` - BeamSdkVersion string `protobuf:"bytes,4,opt,name=beam_sdk_version,json=beamSdkVersion,proto3" json:"beam_sdk_version,omitempty"` + RunnerSdk string `protobuf:"bytes,1,opt,name=runner_sdk,json=runnerSdk,proto3" json:"runner_sdk,omitempty"` + BuildCommitHash string `protobuf:"bytes,2,opt,name=build_commit_hash,json=buildCommitHash,proto3" json:"build_commit_hash,omitempty"` + BuildCommitTimestampSecondsSinceEpoch int64 `protobuf:"varint,3,opt,name=build_commit_timestamp_seconds_since_epoch,json=buildCommitTimestampSecondsSinceEpoch,proto3" json:"build_commit_timestamp_seconds_since_epoch,omitempty"` + BeamSdkVersion string `protobuf:"bytes,4,opt,name=beam_sdk_version,json=beamSdkVersion,proto3" json:"beam_sdk_version,omitempty"` } func (x *GetMetadataResponse) Reset() { @@ -2685,11 +2685,11 @@ func (x *GetMetadataResponse) GetBuildCommitHash() string { return "" } -func (x *GetMetadataResponse) GetBuildCommitTimestamp() string { +func (x *GetMetadataResponse) GetBuildCommitTimestampSecondsSinceEpoch() int64 { if x != nil { - return x.BuildCommitTimestamp + return x.BuildCommitTimestampSecondsSinceEpoch } - return "" + return 0 } func (x *GetMetadataResponse) GetBeamSdkVersion() string { @@ -3001,180 +3001,182 @@ var file_api_v1_api_proto_rawDesc = []byte{ 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xc0, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xe5, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x34, 0x0a, 0x16, 0x62, 0x75, 0x69, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x59, 0x0a, 0x2a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x28, 0x0a, 0x10, 0x62, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x65, 0x61, 0x6d, 0x53, - 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2a, 0x52, 0x0a, 0x03, 0x53, 0x64, 0x6b, - 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x44, 0x4b, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x4a, 0x41, 0x56, - 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x44, 0x4b, 0x5f, 0x47, 0x4f, 0x10, 0x02, 0x12, - 0x0e, 0x0a, 0x0a, 0x53, 0x44, 0x4b, 0x5f, 0x50, 0x59, 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x03, 0x12, - 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x53, 0x43, 0x49, 0x4f, 0x10, 0x04, 0x2a, 0xb8, 0x02, - 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, - 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, - 0x4f, 0x52, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, - 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x18, - 0x0a, 0x14, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, - 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x13, - 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, - 0x44, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, - 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, - 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, - 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0c, 0x2a, 0xae, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, - 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x50, - 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, - 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, - 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, - 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x54, 0x41, - 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, - 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, - 0x49, 0x54, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x10, 0x03, 0x2a, 0x6e, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4d, 0x50, 0x4c, - 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, - 0x59, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4d, - 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, - 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x41, - 0x44, 0x56, 0x41, 0x4e, 0x43, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x46, 0x0a, 0x0c, 0x45, 0x6d, 0x75, - 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x4d, 0x55, - 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4d, 0x55, 0x4c, - 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x46, 0x4b, 0x41, 0x10, - 0x01, 0x32, 0xd3, 0x0d, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, - 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, - 0x73, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, - 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x17, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x13, 0x47, 0x65, 0x74, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, - 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x61, 0x6d, 0x70, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, + 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x25, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x64, 0x6b, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x62, 0x65, 0x61, 0x6d, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2a, 0x52, + 0x0a, 0x03, 0x53, 0x64, 0x6b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x44, 0x4b, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, + 0x4b, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x44, 0x4b, 0x5f, + 0x47, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x44, 0x4b, 0x5f, 0x50, 0x59, 0x54, 0x48, + 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x53, 0x43, 0x49, 0x4f, + 0x10, 0x04, 0x2a, 0xb8, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, + 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, + 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x14, 0x0a, + 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x49, 0x4e, + 0x47, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, + 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x12, 0x14, 0x0a, + 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4e, + 0x47, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, + 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x09, 0x12, 0x10, + 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x0a, + 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x54, + 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0c, 0x2a, 0xae, 0x01, + 0x0a, 0x15, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x45, 0x43, 0x4f, + 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, + 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x41, 0x4d, + 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, + 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x4b, 0x41, 0x54, 0x41, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x45, 0x43, 0x4f, + 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x10, 0x03, 0x2a, 0x6e, + 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, + 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4d, 0x50, + 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x15, + 0x0a, 0x11, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x45, 0x44, + 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, + 0x49, 0x54, 0x59, 0x5f, 0x41, 0x44, 0x56, 0x41, 0x4e, 0x43, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x46, + 0x0a, 0x0c, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, + 0x0a, 0x19, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, + 0x13, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, + 0x41, 0x46, 0x4b, 0x41, 0x10, 0x01, 0x32, 0xd3, 0x0d, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x67, + 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x07, + 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, + 0x61, 0x70, 0x68, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, + 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, + 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, + 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x15, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x15, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, - 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x63, + 0x65, 0x6c, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, + 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, + 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, - 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, - 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, - 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, - 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, + 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, - 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, - 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x1b, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, - 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, - 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, - 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, - 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, + 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, + 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x76, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x65, 0x53, + 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, 0x36, 0x62, 0x65, 0x61, 0x6d, 0x2e, - 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x6c, 0x61, 0x79, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x19, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, 0x36, + 0x62, 0x65, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, + 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x70, 0x6c, 0x61, 0x79, + 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/playground/frontend/playground_components/lib/src/api/v1/api.pb.dart b/playground/frontend/playground_components/lib/src/api/v1/api.pb.dart index cc9b1608d782..43f485839e89 100644 --- a/playground/frontend/playground_components/lib/src/api/v1/api.pb.dart +++ b/playground/frontend/playground_components/lib/src/api/v1/api.pb.dart @@ -7,6 +7,7 @@ import 'dart:core' as $core; +import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; import 'api.pbenum.dart'; @@ -2449,7 +2450,7 @@ class GetMetadataResponse extends $pb.GeneratedMessage { static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GetMetadataResponse', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'api.v1'), createEmptyInstance: create) ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'runnerSdk') ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'buildCommitHash') - ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'buildCommitTimestamp') + ..aInt64(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'buildCommitTimestampSecondsSinceEpoch') ..aOS(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'beamSdkVersion') ..hasRequiredFields = false ; @@ -2458,7 +2459,7 @@ class GetMetadataResponse extends $pb.GeneratedMessage { factory GetMetadataResponse({ $core.String? runnerSdk, $core.String? buildCommitHash, - $core.String? buildCommitTimestamp, + $fixnum.Int64? buildCommitTimestampSecondsSinceEpoch, $core.String? beamSdkVersion, }) { final _result = create(); @@ -2468,8 +2469,8 @@ class GetMetadataResponse extends $pb.GeneratedMessage { if (buildCommitHash != null) { _result.buildCommitHash = buildCommitHash; } - if (buildCommitTimestamp != null) { - _result.buildCommitTimestamp = buildCommitTimestamp; + if (buildCommitTimestampSecondsSinceEpoch != null) { + _result.buildCommitTimestampSecondsSinceEpoch = buildCommitTimestampSecondsSinceEpoch; } if (beamSdkVersion != null) { _result.beamSdkVersion = beamSdkVersion; @@ -2516,13 +2517,13 @@ class GetMetadataResponse extends $pb.GeneratedMessage { void clearBuildCommitHash() => clearField(2); @$pb.TagNumber(3) - $core.String get buildCommitTimestamp => $_getSZ(2); + $fixnum.Int64 get buildCommitTimestampSecondsSinceEpoch => $_getI64(2); @$pb.TagNumber(3) - set buildCommitTimestamp($core.String v) { $_setString(2, v); } + set buildCommitTimestampSecondsSinceEpoch($fixnum.Int64 v) { $_setInt64(2, v); } @$pb.TagNumber(3) - $core.bool hasBuildCommitTimestamp() => $_has(2); + $core.bool hasBuildCommitTimestampSecondsSinceEpoch() => $_has(2); @$pb.TagNumber(3) - void clearBuildCommitTimestamp() => clearField(3); + void clearBuildCommitTimestampSecondsSinceEpoch() => clearField(3); @$pb.TagNumber(4) $core.String get beamSdkVersion => $_getSZ(3); diff --git a/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart b/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart index 9b981fae91a4..d61d6c2096fd 100644 --- a/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart +++ b/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart @@ -564,10 +564,10 @@ const GetMetadataResponse$json = const { '2': const [ const {'1': 'runner_sdk', '3': 1, '4': 1, '5': 9, '10': 'runnerSdk'}, const {'1': 'build_commit_hash', '3': 2, '4': 1, '5': 9, '10': 'buildCommitHash'}, - const {'1': 'build_commit_timestamp', '3': 3, '4': 1, '5': 9, '10': 'buildCommitTimestamp'}, + const {'1': 'build_commit_timestamp_seconds_since_epoch', '3': 3, '4': 1, '5': 3, '10': 'buildCommitTimestampSecondsSinceEpoch'}, const {'1': 'beam_sdk_version', '3': 4, '4': 1, '5': 9, '10': 'beamSdkVersion'}, ], }; /// Descriptor for `GetMetadataResponse`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List getMetadataResponseDescriptor = $convert.base64Decode('ChNHZXRNZXRhZGF0YVJlc3BvbnNlEh0KCnJ1bm5lcl9zZGsYASABKAlSCXJ1bm5lclNkaxIqChFidWlsZF9jb21taXRfaGFzaBgCIAEoCVIPYnVpbGRDb21taXRIYXNoEjQKFmJ1aWxkX2NvbW1pdF90aW1lc3RhbXAYAyABKAlSFGJ1aWxkQ29tbWl0VGltZXN0YW1wEigKEGJlYW1fc2RrX3ZlcnNpb24YBCABKAlSDmJlYW1TZGtWZXJzaW9u'); +final $typed_data.Uint8List getMetadataResponseDescriptor = $convert.base64Decode('ChNHZXRNZXRhZGF0YVJlc3BvbnNlEh0KCnJ1bm5lcl9zZGsYASABKAlSCXJ1bm5lclNkaxIqChFidWlsZF9jb21taXRfaGFzaBgCIAEoCVIPYnVpbGRDb21taXRIYXNoElkKKmJ1aWxkX2NvbW1pdF90aW1lc3RhbXBfc2Vjb25kc19zaW5jZV9lcG9jaBgDIAEoA1IlYnVpbGRDb21taXRUaW1lc3RhbXBTZWNvbmRzU2luY2VFcG9jaBIoChBiZWFtX3Nka192ZXJzaW9uGAQgASgJUg5iZWFtU2RrVmVyc2lvbg=='); diff --git a/playground/infrastructure/api/v1/api_pb2.py b/playground/infrastructure/api/v1/api_pb2.py index 63006512ad33..2df020a3517a 100644 --- a/playground/infrastructure/api/v1/api_pb2.py +++ b/playground/infrastructure/api/v1/api_pb2.py @@ -13,7 +13,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x61pi/v1/api.proto\x12\x06\x61pi.v1\"\xca\x01\n\x07\x44\x61taset\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x14.api.v1.EmulatorTypeR\x04type\x12\x36\n\x07options\x18\x02 \x03(\x0b\x32\x1c.api.v1.Dataset.OptionsEntryR\x07options\x12!\n\x0c\x64\x61taset_path\x18\x03 \x01(\tR\x0b\x64\x61tasetPath\x1a:\n\x0cOptionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xc6\x01\n\x0eRunCodeRequest\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12+\n\x08\x64\x61tasets\x18\x04 \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12)\n\x05\x66iles\x18\x05 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"6\n\x0fRunCodeResponse\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"9\n\x12\x43heckStatusRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"=\n\x13\x43heckStatusResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x0e.api.v1.StatusR\x06status\"A\n\x1aGetValidationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"5\n\x1bGetValidationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"B\n\x1bGetPreparationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"6\n\x1cGetPreparationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\">\n\x17GetCompileOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"2\n\x18GetCompileOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n\x13GetRunOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\".\n\x14GetRunOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n\x12GetRunErrorRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"-\n\x13GetRunErrorResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"5\n\x0eGetLogsRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\")\n\x0fGetLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"6\n\x0fGetGraphRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"(\n\x10GetGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"4\n\rCancelRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"\x10\n\x0e\x43\x61ncelResponse\"\x94\x04\n\x11PrecompiledObject\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x04type\x18\x04 \x01(\x0e\x32\x1d.api.v1.PrecompiledObjectTypeR\x04type\x12)\n\x10pipeline_options\x18\x05 \x01(\tR\x0fpipelineOptions\x12\x12\n\x04link\x18\x06 \x01(\tR\x04link\x12\x1c\n\tmultifile\x18\x07 \x01(\x08R\tmultifile\x12!\n\x0c\x63ontext_line\x18\x08 \x01(\x05R\x0b\x63ontextLine\x12\'\n\x0f\x64\x65\x66\x61ult_example\x18\t \x01(\x08R\x0e\x64\x65\x66\x61ultExample\x12\x1d\n\x03sdk\x18\n \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x32\n\ncomplexity\x18\x0b \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\x12\n\x04tags\x18\x0c \x03(\tR\x04tags\x12+\n\x08\x64\x61tasets\x18\r \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12\x17\n\x07url_vcs\x18\x0e \x01(\tR\x06urlVcs\x12!\n\x0curl_notebook\x18\x0f \x01(\tR\x0burlNotebook\"\xe5\x01\n\nCategories\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12;\n\ncategories\x18\x02 \x03(\x0b\x32\x1b.api.v1.Categories.CategoryR\ncategories\x1a{\n\x08\x43\x61tegory\x12#\n\rcategory_name\x18\x01 \x01(\tR\x0c\x63\x61tegoryName\x12J\n\x13precompiled_objects\x18\x02 \x03(\x0b\x32\x19.api.v1.PrecompiledObjectR\x12precompiledObjects\"Y\n\x1cGetPrecompiledObjectsRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x1a\n\x08\x63\x61tegory\x18\x02 \x01(\tR\x08\x63\x61tegory\"<\n\x1bGetPrecompiledObjectRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectCodeRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"B\n!GetPrecompiledObjectOutputRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectLogsRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"A\n GetPrecompiledObjectGraphRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"C\n\"GetDefaultPrecompiledObjectRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\"Z\n\x1dGetPrecompiledObjectsResponse\x12\x39\n\x0esdk_categories\x18\x01 \x03(\x0b\x32\x12.api.v1.CategoriesR\rsdkCategories\"h\n\x1cGetPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"a\n GetPrecompiledObjectCodeResponse\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12)\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"<\n\"GetPrecompiledObjectOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n GetPrecompiledObjectLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n!GetPrecompiledObjectGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"o\n#GetDefaultPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"T\n\x0bSnippetFile\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x63ontent\x18\x02 \x01(\tR\x07\x63ontent\x12\x17\n\x07is_main\x18\x03 \x01(\x08R\x06isMain\"\xe6\x01\n\x12SaveSnippetRequest\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\'\n\x0fpersistence_key\x18\x05 \x01(\tR\x0epersistenceKey\"%\n\x13SaveSnippetResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"#\n\x11GetSnippetRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"\xbd\x01\n\x12GetSnippetResponse\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\"\x14\n\x12GetMetadataRequest\"\xc0\x01\n\x13GetMetadataResponse\x12\x1d\n\nrunner_sdk\x18\x01 \x01(\tR\trunnerSdk\x12*\n\x11\x62uild_commit_hash\x18\x02 \x01(\tR\x0f\x62uildCommitHash\x12\x34\n\x16\x62uild_commit_timestamp\x18\x03 \x01(\tR\x14\x62uildCommitTimestamp\x12(\n\x10\x62\x65\x61m_sdk_version\x18\x04 \x01(\tR\x0e\x62\x65\x61mSdkVersion*R\n\x03Sdk\x12\x13\n\x0fSDK_UNSPECIFIED\x10\x00\x12\x0c\n\x08SDK_JAVA\x10\x01\x12\n\n\x06SDK_GO\x10\x02\x12\x0e\n\nSDK_PYTHON\x10\x03\x12\x0c\n\x08SDK_SCIO\x10\x04*\xb8\x02\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x15\n\x11STATUS_VALIDATING\x10\x01\x12\x1b\n\x17STATUS_VALIDATION_ERROR\x10\x02\x12\x14\n\x10STATUS_PREPARING\x10\x03\x12\x1c\n\x18STATUS_PREPARATION_ERROR\x10\x04\x12\x14\n\x10STATUS_COMPILING\x10\x05\x12\x18\n\x14STATUS_COMPILE_ERROR\x10\x06\x12\x14\n\x10STATUS_EXECUTING\x10\x07\x12\x13\n\x0fSTATUS_FINISHED\x10\x08\x12\x14\n\x10STATUS_RUN_ERROR\x10\t\x12\x10\n\x0cSTATUS_ERROR\x10\n\x12\x16\n\x12STATUS_RUN_TIMEOUT\x10\x0b\x12\x13\n\x0fSTATUS_CANCELED\x10\x0c*\xae\x01\n\x15PrecompiledObjectType\x12\'\n#PRECOMPILED_OBJECT_TYPE_UNSPECIFIED\x10\x00\x12#\n\x1fPRECOMPILED_OBJECT_TYPE_EXAMPLE\x10\x01\x12 \n\x1cPRECOMPILED_OBJECT_TYPE_KATA\x10\x02\x12%\n!PRECOMPILED_OBJECT_TYPE_UNIT_TEST\x10\x03*n\n\nComplexity\x12\x1a\n\x16\x43OMPLEXITY_UNSPECIFIED\x10\x00\x12\x14\n\x10\x43OMPLEXITY_BASIC\x10\x01\x12\x15\n\x11\x43OMPLEXITY_MEDIUM\x10\x02\x12\x17\n\x13\x43OMPLEXITY_ADVANCED\x10\x03*F\n\x0c\x45mulatorType\x12\x1d\n\x19\x45MULATOR_TYPE_UNSPECIFIED\x10\x00\x12\x17\n\x13\x45MULATOR_TYPE_KAFKA\x10\x01\x32\xd3\r\n\x11PlaygroundService\x12:\n\x07RunCode\x12\x16.api.v1.RunCodeRequest\x1a\x17.api.v1.RunCodeResponse\x12\x46\n\x0b\x43heckStatus\x12\x1a.api.v1.CheckStatusRequest\x1a\x1b.api.v1.CheckStatusResponse\x12I\n\x0cGetRunOutput\x12\x1b.api.v1.GetRunOutputRequest\x1a\x1c.api.v1.GetRunOutputResponse\x12:\n\x07GetLogs\x12\x16.api.v1.GetLogsRequest\x1a\x17.api.v1.GetLogsResponse\x12=\n\x08GetGraph\x12\x17.api.v1.GetGraphRequest\x1a\x18.api.v1.GetGraphResponse\x12\x46\n\x0bGetRunError\x12\x1a.api.v1.GetRunErrorRequest\x1a\x1b.api.v1.GetRunErrorResponse\x12^\n\x13GetValidationOutput\x12\".api.v1.GetValidationOutputRequest\x1a#.api.v1.GetValidationOutputResponse\x12\x61\n\x14GetPreparationOutput\x12#.api.v1.GetPreparationOutputRequest\x1a$.api.v1.GetPreparationOutputResponse\x12U\n\x10GetCompileOutput\x12\x1f.api.v1.GetCompileOutputRequest\x1a .api.v1.GetCompileOutputResponse\x12\x37\n\x06\x43\x61ncel\x12\x15.api.v1.CancelRequest\x1a\x16.api.v1.CancelResponse\x12\x64\n\x15GetPrecompiledObjects\x12$.api.v1.GetPrecompiledObjectsRequest\x1a%.api.v1.GetPrecompiledObjectsResponse\x12\x61\n\x14GetPrecompiledObject\x12#.api.v1.GetPrecompiledObjectRequest\x1a$.api.v1.GetPrecompiledObjectResponse\x12m\n\x18GetPrecompiledObjectCode\x12\'.api.v1.GetPrecompiledObjectCodeRequest\x1a(.api.v1.GetPrecompiledObjectCodeResponse\x12s\n\x1aGetPrecompiledObjectOutput\x12).api.v1.GetPrecompiledObjectOutputRequest\x1a*.api.v1.GetPrecompiledObjectOutputResponse\x12m\n\x18GetPrecompiledObjectLogs\x12\'.api.v1.GetPrecompiledObjectLogsRequest\x1a(.api.v1.GetPrecompiledObjectLogsResponse\x12p\n\x19GetPrecompiledObjectGraph\x12(.api.v1.GetPrecompiledObjectGraphRequest\x1a).api.v1.GetPrecompiledObjectGraphResponse\x12v\n\x1bGetDefaultPrecompiledObject\x12*.api.v1.GetDefaultPrecompiledObjectRequest\x1a+.api.v1.GetDefaultPrecompiledObjectResponse\x12\x46\n\x0bSaveSnippet\x12\x1a.api.v1.SaveSnippetRequest\x1a\x1b.api.v1.SaveSnippetResponse\x12\x43\n\nGetSnippet\x12\x19.api.v1.GetSnippetRequest\x1a\x1a.api.v1.GetSnippetResponse\x12\x46\n\x0bGetMetadata\x12\x1a.api.v1.GetMetadataRequest\x1a\x1b.api.v1.GetMetadataResponseB8Z6beam.apache.org/playground/backend/internal;playgroundb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x61pi/v1/api.proto\x12\x06\x61pi.v1\"\xca\x01\n\x07\x44\x61taset\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x14.api.v1.EmulatorTypeR\x04type\x12\x36\n\x07options\x18\x02 \x03(\x0b\x32\x1c.api.v1.Dataset.OptionsEntryR\x07options\x12!\n\x0c\x64\x61taset_path\x18\x03 \x01(\tR\x0b\x64\x61tasetPath\x1a:\n\x0cOptionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xc6\x01\n\x0eRunCodeRequest\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12+\n\x08\x64\x61tasets\x18\x04 \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12)\n\x05\x66iles\x18\x05 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"6\n\x0fRunCodeResponse\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"9\n\x12\x43heckStatusRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"=\n\x13\x43heckStatusResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x0e.api.v1.StatusR\x06status\"A\n\x1aGetValidationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"5\n\x1bGetValidationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"B\n\x1bGetPreparationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"6\n\x1cGetPreparationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\">\n\x17GetCompileOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"2\n\x18GetCompileOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n\x13GetRunOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\".\n\x14GetRunOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n\x12GetRunErrorRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"-\n\x13GetRunErrorResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"5\n\x0eGetLogsRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\")\n\x0fGetLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"6\n\x0fGetGraphRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"(\n\x10GetGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"4\n\rCancelRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"\x10\n\x0e\x43\x61ncelResponse\"\x94\x04\n\x11PrecompiledObject\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x04type\x18\x04 \x01(\x0e\x32\x1d.api.v1.PrecompiledObjectTypeR\x04type\x12)\n\x10pipeline_options\x18\x05 \x01(\tR\x0fpipelineOptions\x12\x12\n\x04link\x18\x06 \x01(\tR\x04link\x12\x1c\n\tmultifile\x18\x07 \x01(\x08R\tmultifile\x12!\n\x0c\x63ontext_line\x18\x08 \x01(\x05R\x0b\x63ontextLine\x12\'\n\x0f\x64\x65\x66\x61ult_example\x18\t \x01(\x08R\x0e\x64\x65\x66\x61ultExample\x12\x1d\n\x03sdk\x18\n \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x32\n\ncomplexity\x18\x0b \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\x12\n\x04tags\x18\x0c \x03(\tR\x04tags\x12+\n\x08\x64\x61tasets\x18\r \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12\x17\n\x07url_vcs\x18\x0e \x01(\tR\x06urlVcs\x12!\n\x0curl_notebook\x18\x0f \x01(\tR\x0burlNotebook\"\xe5\x01\n\nCategories\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12;\n\ncategories\x18\x02 \x03(\x0b\x32\x1b.api.v1.Categories.CategoryR\ncategories\x1a{\n\x08\x43\x61tegory\x12#\n\rcategory_name\x18\x01 \x01(\tR\x0c\x63\x61tegoryName\x12J\n\x13precompiled_objects\x18\x02 \x03(\x0b\x32\x19.api.v1.PrecompiledObjectR\x12precompiledObjects\"Y\n\x1cGetPrecompiledObjectsRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x1a\n\x08\x63\x61tegory\x18\x02 \x01(\tR\x08\x63\x61tegory\"<\n\x1bGetPrecompiledObjectRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectCodeRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"B\n!GetPrecompiledObjectOutputRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectLogsRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"A\n GetPrecompiledObjectGraphRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"C\n\"GetDefaultPrecompiledObjectRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\"Z\n\x1dGetPrecompiledObjectsResponse\x12\x39\n\x0esdk_categories\x18\x01 \x03(\x0b\x32\x12.api.v1.CategoriesR\rsdkCategories\"h\n\x1cGetPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"a\n GetPrecompiledObjectCodeResponse\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12)\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"<\n\"GetPrecompiledObjectOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n GetPrecompiledObjectLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n!GetPrecompiledObjectGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"o\n#GetDefaultPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"T\n\x0bSnippetFile\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x63ontent\x18\x02 \x01(\tR\x07\x63ontent\x12\x17\n\x07is_main\x18\x03 \x01(\x08R\x06isMain\"\xe6\x01\n\x12SaveSnippetRequest\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\'\n\x0fpersistence_key\x18\x05 \x01(\tR\x0epersistenceKey\"%\n\x13SaveSnippetResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"#\n\x11GetSnippetRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"\xbd\x01\n\x12GetSnippetResponse\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\"\x14\n\x12GetMetadataRequest\"\xe5\x01\n\x13GetMetadataResponse\x12\x1d\n\nrunner_sdk\x18\x01 \x01(\tR\trunnerSdk\x12*\n\x11\x62uild_commit_hash\x18\x02 \x01(\tR\x0f\x62uildCommitHash\x12Y\n*build_commit_timestamp_seconds_since_epoch\x18\x03 \x01(\x03R%buildCommitTimestampSecondsSinceEpoch\x12(\n\x10\x62\x65\x61m_sdk_version\x18\x04 \x01(\tR\x0e\x62\x65\x61mSdkVersion*R\n\x03Sdk\x12\x13\n\x0fSDK_UNSPECIFIED\x10\x00\x12\x0c\n\x08SDK_JAVA\x10\x01\x12\n\n\x06SDK_GO\x10\x02\x12\x0e\n\nSDK_PYTHON\x10\x03\x12\x0c\n\x08SDK_SCIO\x10\x04*\xb8\x02\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x15\n\x11STATUS_VALIDATING\x10\x01\x12\x1b\n\x17STATUS_VALIDATION_ERROR\x10\x02\x12\x14\n\x10STATUS_PREPARING\x10\x03\x12\x1c\n\x18STATUS_PREPARATION_ERROR\x10\x04\x12\x14\n\x10STATUS_COMPILING\x10\x05\x12\x18\n\x14STATUS_COMPILE_ERROR\x10\x06\x12\x14\n\x10STATUS_EXECUTING\x10\x07\x12\x13\n\x0fSTATUS_FINISHED\x10\x08\x12\x14\n\x10STATUS_RUN_ERROR\x10\t\x12\x10\n\x0cSTATUS_ERROR\x10\n\x12\x16\n\x12STATUS_RUN_TIMEOUT\x10\x0b\x12\x13\n\x0fSTATUS_CANCELED\x10\x0c*\xae\x01\n\x15PrecompiledObjectType\x12\'\n#PRECOMPILED_OBJECT_TYPE_UNSPECIFIED\x10\x00\x12#\n\x1fPRECOMPILED_OBJECT_TYPE_EXAMPLE\x10\x01\x12 \n\x1cPRECOMPILED_OBJECT_TYPE_KATA\x10\x02\x12%\n!PRECOMPILED_OBJECT_TYPE_UNIT_TEST\x10\x03*n\n\nComplexity\x12\x1a\n\x16\x43OMPLEXITY_UNSPECIFIED\x10\x00\x12\x14\n\x10\x43OMPLEXITY_BASIC\x10\x01\x12\x15\n\x11\x43OMPLEXITY_MEDIUM\x10\x02\x12\x17\n\x13\x43OMPLEXITY_ADVANCED\x10\x03*F\n\x0c\x45mulatorType\x12\x1d\n\x19\x45MULATOR_TYPE_UNSPECIFIED\x10\x00\x12\x17\n\x13\x45MULATOR_TYPE_KAFKA\x10\x01\x32\xd3\r\n\x11PlaygroundService\x12:\n\x07RunCode\x12\x16.api.v1.RunCodeRequest\x1a\x17.api.v1.RunCodeResponse\x12\x46\n\x0b\x43heckStatus\x12\x1a.api.v1.CheckStatusRequest\x1a\x1b.api.v1.CheckStatusResponse\x12I\n\x0cGetRunOutput\x12\x1b.api.v1.GetRunOutputRequest\x1a\x1c.api.v1.GetRunOutputResponse\x12:\n\x07GetLogs\x12\x16.api.v1.GetLogsRequest\x1a\x17.api.v1.GetLogsResponse\x12=\n\x08GetGraph\x12\x17.api.v1.GetGraphRequest\x1a\x18.api.v1.GetGraphResponse\x12\x46\n\x0bGetRunError\x12\x1a.api.v1.GetRunErrorRequest\x1a\x1b.api.v1.GetRunErrorResponse\x12^\n\x13GetValidationOutput\x12\".api.v1.GetValidationOutputRequest\x1a#.api.v1.GetValidationOutputResponse\x12\x61\n\x14GetPreparationOutput\x12#.api.v1.GetPreparationOutputRequest\x1a$.api.v1.GetPreparationOutputResponse\x12U\n\x10GetCompileOutput\x12\x1f.api.v1.GetCompileOutputRequest\x1a .api.v1.GetCompileOutputResponse\x12\x37\n\x06\x43\x61ncel\x12\x15.api.v1.CancelRequest\x1a\x16.api.v1.CancelResponse\x12\x64\n\x15GetPrecompiledObjects\x12$.api.v1.GetPrecompiledObjectsRequest\x1a%.api.v1.GetPrecompiledObjectsResponse\x12\x61\n\x14GetPrecompiledObject\x12#.api.v1.GetPrecompiledObjectRequest\x1a$.api.v1.GetPrecompiledObjectResponse\x12m\n\x18GetPrecompiledObjectCode\x12\'.api.v1.GetPrecompiledObjectCodeRequest\x1a(.api.v1.GetPrecompiledObjectCodeResponse\x12s\n\x1aGetPrecompiledObjectOutput\x12).api.v1.GetPrecompiledObjectOutputRequest\x1a*.api.v1.GetPrecompiledObjectOutputResponse\x12m\n\x18GetPrecompiledObjectLogs\x12\'.api.v1.GetPrecompiledObjectLogsRequest\x1a(.api.v1.GetPrecompiledObjectLogsResponse\x12p\n\x19GetPrecompiledObjectGraph\x12(.api.v1.GetPrecompiledObjectGraphRequest\x1a).api.v1.GetPrecompiledObjectGraphResponse\x12v\n\x1bGetDefaultPrecompiledObject\x12*.api.v1.GetDefaultPrecompiledObjectRequest\x1a+.api.v1.GetDefaultPrecompiledObjectResponse\x12\x46\n\x0bSaveSnippet\x12\x1a.api.v1.SaveSnippetRequest\x1a\x1b.api.v1.SaveSnippetResponse\x12\x43\n\nGetSnippet\x12\x19.api.v1.GetSnippetRequest\x1a\x1a.api.v1.GetSnippetResponse\x12\x46\n\x0bGetMetadata\x12\x1a.api.v1.GetMetadataRequest\x1a\x1b.api.v1.GetMetadataResponseB8Z6beam.apache.org/playground/backend/internal;playgroundb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -24,16 +24,16 @@ DESCRIPTOR._serialized_options = b'Z6beam.apache.org/playground/backend/internal;playground' _DATASET_OPTIONSENTRY._options = None _DATASET_OPTIONSENTRY._serialized_options = b'8\001' - _globals['_SDK']._serialized_start=4107 - _globals['_SDK']._serialized_end=4189 - _globals['_STATUS']._serialized_start=4192 - _globals['_STATUS']._serialized_end=4504 - _globals['_PRECOMPILEDOBJECTTYPE']._serialized_start=4507 - _globals['_PRECOMPILEDOBJECTTYPE']._serialized_end=4681 - _globals['_COMPLEXITY']._serialized_start=4683 - _globals['_COMPLEXITY']._serialized_end=4793 - _globals['_EMULATORTYPE']._serialized_start=4795 - _globals['_EMULATORTYPE']._serialized_end=4865 + _globals['_SDK']._serialized_start=4144 + _globals['_SDK']._serialized_end=4226 + _globals['_STATUS']._serialized_start=4229 + _globals['_STATUS']._serialized_end=4541 + _globals['_PRECOMPILEDOBJECTTYPE']._serialized_start=4544 + _globals['_PRECOMPILEDOBJECTTYPE']._serialized_end=4718 + _globals['_COMPLEXITY']._serialized_start=4720 + _globals['_COMPLEXITY']._serialized_end=4830 + _globals['_EMULATORTYPE']._serialized_start=4832 + _globals['_EMULATORTYPE']._serialized_end=4902 _globals['_DATASET']._serialized_start=29 _globals['_DATASET']._serialized_end=231 _globals['_DATASET_OPTIONSENTRY']._serialized_start=173 @@ -125,7 +125,7 @@ _globals['_GETMETADATAREQUEST']._serialized_start=3890 _globals['_GETMETADATAREQUEST']._serialized_end=3910 _globals['_GETMETADATARESPONSE']._serialized_start=3913 - _globals['_GETMETADATARESPONSE']._serialized_end=4105 - _globals['_PLAYGROUNDSERVICE']._serialized_start=4868 - _globals['_PLAYGROUNDSERVICE']._serialized_end=6615 + _globals['_GETMETADATARESPONSE']._serialized_end=4142 + _globals['_PLAYGROUNDSERVICE']._serialized_start=4905 + _globals['_PLAYGROUNDSERVICE']._serialized_end=6652 # @@protoc_insertion_point(module_scope) diff --git a/playground/infrastructure/api/v1/api_pb2.pyi b/playground/infrastructure/api/v1/api_pb2.pyi index 0c5ea6de7ac8..cab03195c6a2 100644 --- a/playground/infrastructure/api/v1/api_pb2.pyi +++ b/playground/infrastructure/api/v1/api_pb2.pyi @@ -410,13 +410,13 @@ class GetMetadataRequest(_message.Message): def __init__(self) -> None: ... class GetMetadataResponse(_message.Message): - __slots__ = ["runner_sdk", "build_commit_hash", "build_commit_timestamp", "beam_sdk_version"] + __slots__ = ["runner_sdk", "build_commit_hash", "build_commit_timestamp_seconds_since_epoch", "beam_sdk_version"] RUNNER_SDK_FIELD_NUMBER: _ClassVar[int] BUILD_COMMIT_HASH_FIELD_NUMBER: _ClassVar[int] - BUILD_COMMIT_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + BUILD_COMMIT_TIMESTAMP_SECONDS_SINCE_EPOCH_FIELD_NUMBER: _ClassVar[int] BEAM_SDK_VERSION_FIELD_NUMBER: _ClassVar[int] runner_sdk: str build_commit_hash: str - build_commit_timestamp: str + build_commit_timestamp_seconds_since_epoch: int beam_sdk_version: str - def __init__(self, runner_sdk: _Optional[str] = ..., build_commit_hash: _Optional[str] = ..., build_commit_timestamp: _Optional[str] = ..., beam_sdk_version: _Optional[str] = ...) -> None: ... + def __init__(self, runner_sdk: _Optional[str] = ..., build_commit_hash: _Optional[str] = ..., build_commit_timestamp_seconds_since_epoch: _Optional[int] = ..., beam_sdk_version: _Optional[str] = ...) -> None: ... From ecd840af7ca5e4e19a0e11fab244219ceced0d0e Mon Sep 17 00:00:00 2001 From: Timur Sultanov Date: Fri, 24 Feb 2023 14:11:23 +0400 Subject: [PATCH 06/26] Reformat containers build.gradle --- playground/backend/containers/go/build.gradle | 35 ++++++++++--------- .../backend/containers/java/build.gradle | 29 +++++++-------- .../backend/containers/python/build.gradle | 33 ++++++++--------- .../backend/containers/scio/build.gradle | 29 +++++++-------- 4 files changed, 65 insertions(+), 61 deletions(-) diff --git a/playground/backend/containers/go/build.gradle b/playground/backend/containers/go/build.gradle index 7c1dfb4a20d0..72b6f998b0f5 100644 --- a/playground/backend/containers/go/build.gradle +++ b/playground/backend/containers/go/build.gradle @@ -27,11 +27,11 @@ def playgroundJobServerProject = "${project.path.replace('-container', '')}" description = project(playgroundJobServerProject).description + " :: Container" configurations { - dockerDependency + dockerDependency } dependencies { - dockerDependency project(path: playgroundJobServerProject, configuration: "shadow") + dockerDependency project(path: playgroundJobServerProject, configuration: "shadow") } task copyDockerfileDependencies(type: Copy) { @@ -76,21 +76,22 @@ task copyDockerfileDependencies(type: Copy) { } docker { - name containerImageName( - name: project.docker_image_default_repo_prefix + "playground-backend-go", - root: project.rootProject.hasProperty(["docker-repository-root"]) ? - project.rootProject["docker-repository-root"] : - project.docker_image_default_repo_root) - files "./build/" - tags containerImageTags() - buildArgs(['BASE_IMAGE': project.rootProject.hasProperty(["base-image"]) ? - project.rootProject["base-image"] : - "golang:1.18-bullseye", - 'SDK_TAG': project.rootProject.hasProperty(["sdk-tag"]) ? - project.rootProject["sdk-tag"] : project.rootProject.sdk_version, - 'SDK_TAG_LOCAL': project.rootProject.sdk_version, - 'GIT_COMMIT': getGitCommitHash(), - 'GIT_TIMESTAMP': getGitCommitTimestamp()]) + name containerImageName( + name: project.docker_image_default_repo_prefix + "playground-backend-go", + root: project.rootProject.hasProperty(["docker-repository-root"]) ? + project.rootProject["docker-repository-root"] : + project.docker_image_default_repo_root) + files "./build/" + tags containerImageTags() + buildArgs( + ['BASE_IMAGE' : project.rootProject.hasProperty(["base-image"]) ? + project.rootProject["base-image"] : + "golang:1.18-bullseye", + 'SDK_TAG' : project.rootProject.hasProperty(["sdk-tag"]) ? + project.rootProject["sdk-tag"] : project.rootProject.sdk_version, + 'SDK_TAG_LOCAL': project.rootProject.sdk_version, + 'GIT_COMMIT' : getGitCommitHash(), + 'GIT_TIMESTAMP': getGitCommitTimestamp()]) } // Ensure that we build the required resources and copy and file dependencies from related projects diff --git a/playground/backend/containers/java/build.gradle b/playground/backend/containers/java/build.gradle index 655b22c58ff9..ab0f2b93fca2 100644 --- a/playground/backend/containers/java/build.gradle +++ b/playground/backend/containers/java/build.gradle @@ -27,11 +27,11 @@ def default_beam_version = "2.44.0" description = project(playgroundJobServerProject).description + " :: Container" configurations { - dockerDependency + dockerDependency } dependencies { - dockerDependency project(path: playgroundJobServerProject, configuration: "shadow") + dockerDependency project(path: playgroundJobServerProject, configuration: "shadow") } task copyDockerfileDependencies(type: Copy) { @@ -63,18 +63,19 @@ task copyDockerfileDependencies(type: Copy) { } docker { - name containerImageName( - name: project.docker_image_default_repo_prefix + "playground-backend-java", - root: project.rootProject.hasProperty(["docker-repository-root"]) ? - project.rootProject["docker-repository-root"] : - project.docker_image_default_repo_root) - files "./build/" - tags containerImageTags() - buildArgs(['BEAM_VERSION': project.rootProject.hasProperty(["sdk-tag"]) ? - project.rootProject["sdk-tag"] : - default_beam_version, - 'GIT_COMMIT': getGitCommitHash(), - 'GIT_TIMESTAMP': getGitCommitTimestamp()] ) + name containerImageName( + name: project.docker_image_default_repo_prefix + "playground-backend-java", + root: project.rootProject.hasProperty(["docker-repository-root"]) ? + project.rootProject["docker-repository-root"] : + project.docker_image_default_repo_root) + files "./build/" + tags containerImageTags() + buildArgs( + ['BEAM_VERSION' : project.rootProject.hasProperty(["sdk-tag"]) ? + project.rootProject["sdk-tag"] : + default_beam_version, + 'GIT_COMMIT' : getGitCommitHash(), + 'GIT_TIMESTAMP': getGitCommitTimestamp()]) } // Ensure that we build the required resources and copy and file dependencies from related projects diff --git a/playground/backend/containers/python/build.gradle b/playground/backend/containers/python/build.gradle index 429136fa041e..3923c80b7db0 100644 --- a/playground/backend/containers/python/build.gradle +++ b/playground/backend/containers/python/build.gradle @@ -27,11 +27,11 @@ def playgroundJobServerProject = "${project.path.replace('-container', '')}" description = project(playgroundJobServerProject).description + " :: Container" configurations { - dockerDependency + dockerDependency } dependencies { - dockerDependency project(path: playgroundJobServerProject, configuration: "shadow") + dockerDependency project(path: playgroundJobServerProject, configuration: "shadow") } task copyDockerfileDependencies(type: Copy) { @@ -63,20 +63,21 @@ task copyDockerfileDependencies(type: Copy) { } docker { - name containerImageName( - name: project.docker_image_default_repo_prefix + "playground-backend-python", - root: project.rootProject.hasProperty(["docker-repository-root"]) ? - project.rootProject["docker-repository-root"] : - project.docker_image_default_repo_root) - files "./build/" - tags containerImageTags() - buildArgs(['GO_BASE_IMAGE': project.rootProject.hasProperty(["go-base-image"]) ? - project.rootProject["go-base-image"] : - "golang:1.18-bullseye", - 'SDK_TAG': project.rootProject.hasProperty(["sdk-tag"]) ? - project.rootProject["sdk-tag"] : project.rootProject.sdk_version, - 'GIT_COMMIT': getGitCommitHash(), - 'GIT_TIMESTAMP': getGitCommitTimestamp()]) + name containerImageName( + name: project.docker_image_default_repo_prefix + "playground-backend-python", + root: project.rootProject.hasProperty(["docker-repository-root"]) ? + project.rootProject["docker-repository-root"] : + project.docker_image_default_repo_root) + files "./build/" + tags containerImageTags() + buildArgs( + ['GO_BASE_IMAGE': project.rootProject.hasProperty(["go-base-image"]) ? + project.rootProject["go-base-image"] : + "golang:1.18-bullseye", + 'SDK_TAG' : project.rootProject.hasProperty(["sdk-tag"]) ? + project.rootProject["sdk-tag"] : project.rootProject.sdk_version, + 'GIT_COMMIT' : getGitCommitHash(), + 'GIT_TIMESTAMP': getGitCommitTimestamp()]) } // Ensure that we build the required resources and copy and file dependencies from related projects diff --git a/playground/backend/containers/scio/build.gradle b/playground/backend/containers/scio/build.gradle index 78e7effd1405..f9fd91a8d62b 100644 --- a/playground/backend/containers/scio/build.gradle +++ b/playground/backend/containers/scio/build.gradle @@ -27,11 +27,11 @@ def playgroundJobServerProject = "${project.path.replace('-container', '')}" description = project(playgroundJobServerProject).description + " :: Container" configurations { - dockerDependency + dockerDependency } dependencies { - dockerDependency project(path: playgroundJobServerProject, configuration: "shadow") + dockerDependency project(path: playgroundJobServerProject, configuration: "shadow") } task copyDockerfileDependencies(type: Copy) { @@ -59,18 +59,19 @@ task copyDockerfileDependencies(type: Copy) { } docker { - name containerImageName( - name: project.docker_image_default_repo_prefix + "playground-backend-scio", - root: project.rootProject.hasProperty(["docker-repository-root"]) ? - project.rootProject["docker-repository-root"] : - project.docker_image_default_repo_root) - files "./build/" - tags containerImageTags() - buildArgs(['BASE_IMAGE': project.rootProject.hasProperty(["base-image"]) ? - project.rootProject["base-image"] : - "openjdk:8", - 'GIT_COMMIT': getGitCommitHash(), - 'GIT_TIMESTAMP': getGitCommitTimestamp()]) + name containerImageName( + name: project.docker_image_default_repo_prefix + "playground-backend-scio", + root: project.rootProject.hasProperty(["docker-repository-root"]) ? + project.rootProject["docker-repository-root"] : + project.docker_image_default_repo_root) + files "./build/" + tags containerImageTags() + buildArgs( + ['BASE_IMAGE' : project.rootProject.hasProperty(["base-image"]) ? + project.rootProject["base-image"] : + "openjdk:8", + 'GIT_COMMIT' : getGitCommitHash(), + 'GIT_TIMESTAMP': getGitCommitTimestamp()]) } // Ensure that we build the required resources and copy and file dependencies from related projects From 587745196eefae2436396bd33178ef924efba0cf Mon Sep 17 00:00:00 2001 From: Timur Sultanov Date: Fri, 24 Feb 2023 14:21:20 +0400 Subject: [PATCH 07/26] Change syntax in git-functions.gradle --- playground/backend/containers/git-functions.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/playground/backend/containers/git-functions.gradle b/playground/backend/containers/git-functions.gradle index e1f5d95cb8ce..9f5eb39eb0a8 100644 --- a/playground/backend/containers/git-functions.gradle +++ b/playground/backend/containers/git-functions.gradle @@ -19,8 +19,8 @@ ext.getGitCommitHash = () -> { def stdout = new ByteArrayOutputStream() exec { - executable 'git' - args 'rev-parse', 'HEAD' + executable('git') + args('rev-parse', 'HEAD') standardOutput = stdout } return stdout.toString().trim() @@ -29,8 +29,8 @@ ext.getGitCommitHash = () -> { ext.getGitCommitTimestamp = () -> { def stdout = new ByteArrayOutputStream() exec { - executable 'git' - args 'show', '-s', '--format=%ct', 'HEAD' + executable('git') + args('show', '-s', '--format=%ct', 'HEAD') standardOutput = stdout } return stdout.toString().trim() From 92fe2b4689de2d3dba0574dffc144fa84531a657 Mon Sep 17 00:00:00 2001 From: Timur Sultanov Date: Fri, 24 Feb 2023 17:40:50 +0400 Subject: [PATCH 08/26] Make build_commit and beam_sdk fields optional --- playground/api/v1/api.proto | 6 +- playground/backend/cmd/server/controller.go | 23 +- playground/backend/internal/api/v1/api.pb.go | 360 +++++++++--------- .../backend/internal/environment/beam.go | 4 +- .../environment/environment_service.go | 21 +- .../lib/src/api/v1/api.pbjson.dart | 13 +- playground/infrastructure/api/v1/api_pb2.py | 28 +- 7 files changed, 242 insertions(+), 213 deletions(-) diff --git a/playground/api/v1/api.proto b/playground/api/v1/api.proto index 52473e4f0e02..0cc1347a1f21 100644 --- a/playground/api/v1/api.proto +++ b/playground/api/v1/api.proto @@ -320,9 +320,9 @@ message GetMetadataRequest {} // GetMetadataResponse contains metadata about the runner message GetMetadataResponse { string runner_sdk = 1; - string build_commit_hash = 2; - int64 build_commit_timestamp_seconds_since_epoch = 3; - string beam_sdk_version = 4; + optional string build_commit_hash = 2; + optional int64 build_commit_timestamp_seconds_since_epoch = 3; + optional string beam_sdk_version = 4; } service PlaygroundService { diff --git a/playground/backend/cmd/server/controller.go b/playground/backend/cmd/server/controller.go index f20e201e68e3..41b41cf8e75e 100644 --- a/playground/backend/cmd/server/controller.go +++ b/playground/backend/cmd/server/controller.go @@ -536,14 +536,25 @@ func (controller *playgroundController) GetSnippet(ctx context.Context, info *pb // GetMetadata returns runner metadata func (controller *playgroundController) GetMetadata(_ context.Context, _ *pb.GetMetadataRequest) (*pb.GetMetadataResponse, error) { - commitTimestampInteger, err := strconv.ParseInt(BuildCommitTimestamp, 10, 64) - if err != nil { - logger.Errorf("GetMetadata(): failed to parse BuildCommitTimestamp (\"%s\"): %s", BuildCommitTimestamp, err.Error()) - commitTimestampInteger = -1 - } + commitTimestampInteger := func() *int64 { + timestamp, err := strconv.ParseInt(BuildCommitTimestamp, 10, 64) + if err != nil { + logger.Errorf("GetMetadata(): failed to parse BuildCommitTimestamp (\"%s\"): %s", BuildCommitTimestamp, err.Error()) + return nil + } + return ×tamp + }() + + buildCommitHash := func() *string { + if BuildCommitHash == "" { + return nil + } + return &BuildCommitHash + }() + response := pb.GetMetadataResponse{ RunnerSdk: controller.env.BeamSdkEnvs.ApacheBeamSdk.String(), - BuildCommitHash: BuildCommitHash, + BuildCommitHash: buildCommitHash, BuildCommitTimestampSecondsSinceEpoch: commitTimestampInteger, BeamSdkVersion: controller.env.BeamSdkEnvs.BeamVersion, } diff --git a/playground/backend/internal/api/v1/api.pb.go b/playground/backend/internal/api/v1/api.pb.go index 2df53df2bf04..7049141ddc7b 100644 --- a/playground/backend/internal/api/v1/api.pb.go +++ b/playground/backend/internal/api/v1/api.pb.go @@ -2633,10 +2633,10 @@ type GetMetadataResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RunnerSdk string `protobuf:"bytes,1,opt,name=runner_sdk,json=runnerSdk,proto3" json:"runner_sdk,omitempty"` - BuildCommitHash string `protobuf:"bytes,2,opt,name=build_commit_hash,json=buildCommitHash,proto3" json:"build_commit_hash,omitempty"` - BuildCommitTimestampSecondsSinceEpoch int64 `protobuf:"varint,3,opt,name=build_commit_timestamp_seconds_since_epoch,json=buildCommitTimestampSecondsSinceEpoch,proto3" json:"build_commit_timestamp_seconds_since_epoch,omitempty"` - BeamSdkVersion string `protobuf:"bytes,4,opt,name=beam_sdk_version,json=beamSdkVersion,proto3" json:"beam_sdk_version,omitempty"` + RunnerSdk string `protobuf:"bytes,1,opt,name=runner_sdk,json=runnerSdk,proto3" json:"runner_sdk,omitempty"` + BuildCommitHash *string `protobuf:"bytes,2,opt,name=build_commit_hash,json=buildCommitHash,proto3,oneof" json:"build_commit_hash,omitempty"` + BuildCommitTimestampSecondsSinceEpoch *int64 `protobuf:"varint,3,opt,name=build_commit_timestamp_seconds_since_epoch,json=buildCommitTimestampSecondsSinceEpoch,proto3,oneof" json:"build_commit_timestamp_seconds_since_epoch,omitempty"` + BeamSdkVersion *string `protobuf:"bytes,4,opt,name=beam_sdk_version,json=beamSdkVersion,proto3,oneof" json:"beam_sdk_version,omitempty"` } func (x *GetMetadataResponse) Reset() { @@ -2679,22 +2679,22 @@ func (x *GetMetadataResponse) GetRunnerSdk() string { } func (x *GetMetadataResponse) GetBuildCommitHash() string { - if x != nil { - return x.BuildCommitHash + if x != nil && x.BuildCommitHash != nil { + return *x.BuildCommitHash } return "" } func (x *GetMetadataResponse) GetBuildCommitTimestampSecondsSinceEpoch() int64 { - if x != nil { - return x.BuildCommitTimestampSecondsSinceEpoch + if x != nil && x.BuildCommitTimestampSecondsSinceEpoch != nil { + return *x.BuildCommitTimestampSecondsSinceEpoch } return 0 } func (x *GetMetadataResponse) GetBeamSdkVersion() string { - if x != nil { - return x.BeamSdkVersion + if x != nil && x.BeamSdkVersion != nil { + return *x.BeamSdkVersion } return "" } @@ -3001,182 +3001,189 @@ var file_api_v1_api_proto_rawDesc = []byte{ 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xe5, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xce, 0x02, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x12, 0x2a, 0x0a, + 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x12, 0x2f, 0x0a, 0x11, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x68, 0x61, - 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x59, 0x0a, 0x2a, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, - 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x25, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x45, - 0x70, 0x6f, 0x63, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x64, 0x6b, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x62, 0x65, 0x61, 0x6d, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2a, 0x52, - 0x0a, 0x03, 0x53, 0x64, 0x6b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x44, 0x4b, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, - 0x4b, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x44, 0x4b, 0x5f, - 0x47, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x44, 0x4b, 0x5f, 0x50, 0x59, 0x54, 0x48, - 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x53, 0x43, 0x49, 0x4f, - 0x10, 0x04, 0x2a, 0xb8, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, - 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, - 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x14, 0x0a, - 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x49, 0x4e, - 0x47, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, - 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x12, 0x14, 0x0a, - 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4e, - 0x47, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, - 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x09, 0x12, 0x10, - 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x0a, - 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x54, - 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0c, 0x2a, 0xae, 0x01, - 0x0a, 0x15, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x45, 0x43, 0x4f, - 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, - 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x41, 0x4d, - 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, - 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x4b, 0x41, 0x54, 0x41, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x45, 0x43, 0x4f, - 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x10, 0x03, 0x2a, 0x6e, - 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, - 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4d, 0x50, - 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x15, - 0x0a, 0x11, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x45, 0x44, - 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, - 0x49, 0x54, 0x59, 0x5f, 0x41, 0x44, 0x56, 0x41, 0x4e, 0x43, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x46, - 0x0a, 0x0c, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, - 0x0a, 0x19, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, - 0x13, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, - 0x41, 0x46, 0x4b, 0x41, 0x10, 0x01, 0x32, 0xd3, 0x0d, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x07, - 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x47, - 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, - 0x61, 0x70, 0x68, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, + 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x48, 0x61, 0x73, 0x68, 0x88, 0x01, 0x01, 0x12, 0x5e, + 0x0a, 0x2a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, + 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x48, 0x01, 0x52, 0x25, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x2d, + 0x0a, 0x10, 0x62, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0e, 0x62, 0x65, 0x61, 0x6d, + 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x14, 0x0a, + 0x12, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x68, + 0x61, 0x73, 0x68, 0x42, 0x2d, 0x0a, 0x2b, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x70, 0x6f, + 0x63, 0x68, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x62, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x64, 0x6b, 0x5f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2a, 0x52, 0x0a, 0x03, 0x53, 0x64, 0x6b, 0x12, 0x13, + 0x0a, 0x0f, 0x53, 0x44, 0x4b, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x10, + 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x44, 0x4b, 0x5f, 0x47, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, + 0x0a, 0x53, 0x44, 0x4b, 0x5f, 0x50, 0x59, 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, + 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x53, 0x43, 0x49, 0x4f, 0x10, 0x04, 0x2a, 0xb8, 0x02, 0x0a, 0x06, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, + 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, + 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, + 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, + 0x08, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, + 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, + 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0c, 0x2a, 0xae, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x63, 0x6f, + 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, + 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x45, + 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x20, + 0x0a, 0x1c, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, + 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x54, 0x41, 0x10, 0x02, + 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, + 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, + 0x5f, 0x54, 0x45, 0x53, 0x54, 0x10, 0x03, 0x2a, 0x6e, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x78, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, + 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, + 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4d, 0x50, 0x4c, + 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x17, + 0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x41, 0x44, 0x56, + 0x41, 0x4e, 0x43, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x46, 0x0a, 0x0c, 0x45, 0x6d, 0x75, 0x6c, 0x61, + 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x4d, 0x55, 0x4c, 0x41, + 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, + 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x46, 0x4b, 0x41, 0x10, 0x01, 0x32, + 0xd3, 0x0d, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, + 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, + 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, - 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, - 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, - 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, - 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x22, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, - 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, + 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, + 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, + 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, + 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, + 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x15, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, + 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, + 0x63, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x1a, 0x47, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x73, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, + 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, + 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, + 0x6f, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, - 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, - 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, + 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, + 0x61, 0x70, 0x68, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, - 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x76, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, - 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x65, 0x53, - 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, - 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x19, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, 0x36, - 0x62, 0x65, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, - 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, - 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x70, 0x6c, 0x61, 0x79, - 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, + 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, + 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, + 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, + 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, + 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, + 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, 0x36, 0x62, 0x65, 0x61, 0x6d, 0x2e, 0x61, 0x70, + 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, + 0x75, 0x6e, 0x64, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3866,6 +3873,7 @@ func file_api_v1_api_proto_init() { } } } + file_api_v1_api_proto_msgTypes[43].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/playground/backend/internal/environment/beam.go b/playground/backend/internal/environment/beam.go index 9e4574cbae27..ba634f3ee027 100644 --- a/playground/backend/internal/environment/beam.go +++ b/playground/backend/internal/environment/beam.go @@ -43,14 +43,14 @@ func NewExecutorConfig(compileCmd, runCmd, testCmd string, compileArgs, runArgs, // BeamEnvs contains all environments related of ApacheBeam. These will use to run pipelines type BeamEnvs struct { ApacheBeamSdk pb.Sdk - BeamVersion string + BeamVersion *string ExecutorConfig *ExecutorConfig preparedModDir string numOfParallelJobs int } // NewBeamEnvs is a BeamEnvs constructor -func NewBeamEnvs(apacheBeamSdk pb.Sdk, beamVersion string, executorConfig *ExecutorConfig, preparedModDir string, numOfParallelJobs int) *BeamEnvs { +func NewBeamEnvs(apacheBeamSdk pb.Sdk, beamVersion *string, executorConfig *ExecutorConfig, preparedModDir string, numOfParallelJobs int) *BeamEnvs { return &BeamEnvs{ApacheBeamSdk: apacheBeamSdk, BeamVersion: beamVersion, ExecutorConfig: executorConfig, preparedModDir: preparedModDir, numOfParallelJobs: numOfParallelJobs} } diff --git a/playground/backend/internal/environment/environment_service.go b/playground/backend/internal/environment/environment_service.go index 948b988ea1d4..7cc29aaac3de 100644 --- a/playground/backend/internal/environment/environment_service.go +++ b/playground/backend/internal/environment/environment_service.go @@ -54,7 +54,6 @@ const ( defaultIp = "localhost" defaultPort = 8080 defaultSdk = pb.Sdk_SDK_JAVA - defaultBeamVersion = "" defaultBeamJarsPath = "/opt/apache/beam/jars/*" defaultCacheType = "local" defaultCacheAddress = "localhost:6379" @@ -97,10 +96,11 @@ func NewEnvironment(networkEnvs NetworkEnvs, beamEnvs BeamEnvs, appEnvs Applicat // GetApplicationEnvsFromOsEnvs returns ApplicationEnvs. // Lookups in os environment variables and tries to take values for all (exclude working dir) ApplicationEnvs parameters. // In case some value doesn't exist sets default values: -// - pipeline execution timeout: 10 minutes -// - cache expiration time: 15 minutes -// - type of cache: local -// - cache address: localhost:6379 +// - pipeline execution timeout: 10 minutes +// - cache expiration time: 15 minutes +// - type of cache: local +// - cache address: localhost:6379 +// // If os environment variables don't contain a value for app working dir - returns error. func GetApplicationEnvsFromOsEnvs() (*ApplicationEnvs, error) { pipelineExecuteTimeout := getEnvAsDuration(pipelineExecuteTimeoutKey, defaultPipelineExecuteTimeout, "couldn't convert provided pipeline execute timeout. Using default %s\n") @@ -123,8 +123,8 @@ func GetApplicationEnvsFromOsEnvs() (*ApplicationEnvs, error) { // GetNetworkEnvsFromOsEnvs returns NetworkEnvs. // Lookups in os environment variables and takes values for ip and port. // In case some value doesn't exist sets default values: -// - ip: localhost -// - port: 8080 +// - ip: localhost +// - port: 8080 func GetNetworkEnvsFromOsEnvs() (*NetworkEnvs, error) { ip := getEnv(serverIpKey, defaultIp) port := defaultPort @@ -148,7 +148,12 @@ func ConfigureBeamEnvs(workDir string) (*BeamEnvs, error) { preparedModDir, modDirExist := os.LookupEnv(preparedModDirKey) numOfParallelJobs := getEnvAsInt(numOfParallelJobsKey, defaultNumOfParallelJobs) - beamVersion := getEnv(beamVersionKey, defaultBeamVersion) + beamVersion := func() *string { + if version, ok := os.LookupEnv(beamVersionKey); ok { + return &version + } + return nil + }() if value, present := os.LookupEnv(beamSdkKey); present { diff --git a/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart b/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart index d61d6c2096fd..e87052a6bb67 100644 --- a/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart +++ b/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart @@ -563,11 +563,16 @@ const GetMetadataResponse$json = const { '1': 'GetMetadataResponse', '2': const [ const {'1': 'runner_sdk', '3': 1, '4': 1, '5': 9, '10': 'runnerSdk'}, - const {'1': 'build_commit_hash', '3': 2, '4': 1, '5': 9, '10': 'buildCommitHash'}, - const {'1': 'build_commit_timestamp_seconds_since_epoch', '3': 3, '4': 1, '5': 3, '10': 'buildCommitTimestampSecondsSinceEpoch'}, - const {'1': 'beam_sdk_version', '3': 4, '4': 1, '5': 9, '10': 'beamSdkVersion'}, + const {'1': 'build_commit_hash', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'buildCommitHash', '17': true}, + const {'1': 'build_commit_timestamp_seconds_since_epoch', '3': 3, '4': 1, '5': 3, '9': 1, '10': 'buildCommitTimestampSecondsSinceEpoch', '17': true}, + const {'1': 'beam_sdk_version', '3': 4, '4': 1, '5': 9, '9': 2, '10': 'beamSdkVersion', '17': true}, + ], + '8': const [ + const {'1': '_build_commit_hash'}, + const {'1': '_build_commit_timestamp_seconds_since_epoch'}, + const {'1': '_beam_sdk_version'}, ], }; /// Descriptor for `GetMetadataResponse`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List getMetadataResponseDescriptor = $convert.base64Decode('ChNHZXRNZXRhZGF0YVJlc3BvbnNlEh0KCnJ1bm5lcl9zZGsYASABKAlSCXJ1bm5lclNkaxIqChFidWlsZF9jb21taXRfaGFzaBgCIAEoCVIPYnVpbGRDb21taXRIYXNoElkKKmJ1aWxkX2NvbW1pdF90aW1lc3RhbXBfc2Vjb25kc19zaW5jZV9lcG9jaBgDIAEoA1IlYnVpbGRDb21taXRUaW1lc3RhbXBTZWNvbmRzU2luY2VFcG9jaBIoChBiZWFtX3Nka192ZXJzaW9uGAQgASgJUg5iZWFtU2RrVmVyc2lvbg=='); +final $typed_data.Uint8List getMetadataResponseDescriptor = $convert.base64Decode('ChNHZXRNZXRhZGF0YVJlc3BvbnNlEh0KCnJ1bm5lcl9zZGsYASABKAlSCXJ1bm5lclNkaxIvChFidWlsZF9jb21taXRfaGFzaBgCIAEoCUgAUg9idWlsZENvbW1pdEhhc2iIAQESXgoqYnVpbGRfY29tbWl0X3RpbWVzdGFtcF9zZWNvbmRzX3NpbmNlX2Vwb2NoGAMgASgDSAFSJWJ1aWxkQ29tbWl0VGltZXN0YW1wU2Vjb25kc1NpbmNlRXBvY2iIAQESLQoQYmVhbV9zZGtfdmVyc2lvbhgEIAEoCUgCUg5iZWFtU2RrVmVyc2lvbogBAUIUChJfYnVpbGRfY29tbWl0X2hhc2hCLQorX2J1aWxkX2NvbW1pdF90aW1lc3RhbXBfc2Vjb25kc19zaW5jZV9lcG9jaEITChFfYmVhbV9zZGtfdmVyc2lvbg=='); diff --git a/playground/infrastructure/api/v1/api_pb2.py b/playground/infrastructure/api/v1/api_pb2.py index 2df020a3517a..ff58aa2c3697 100644 --- a/playground/infrastructure/api/v1/api_pb2.py +++ b/playground/infrastructure/api/v1/api_pb2.py @@ -13,7 +13,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x61pi/v1/api.proto\x12\x06\x61pi.v1\"\xca\x01\n\x07\x44\x61taset\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x14.api.v1.EmulatorTypeR\x04type\x12\x36\n\x07options\x18\x02 \x03(\x0b\x32\x1c.api.v1.Dataset.OptionsEntryR\x07options\x12!\n\x0c\x64\x61taset_path\x18\x03 \x01(\tR\x0b\x64\x61tasetPath\x1a:\n\x0cOptionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xc6\x01\n\x0eRunCodeRequest\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12+\n\x08\x64\x61tasets\x18\x04 \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12)\n\x05\x66iles\x18\x05 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"6\n\x0fRunCodeResponse\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"9\n\x12\x43heckStatusRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"=\n\x13\x43heckStatusResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x0e.api.v1.StatusR\x06status\"A\n\x1aGetValidationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"5\n\x1bGetValidationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"B\n\x1bGetPreparationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"6\n\x1cGetPreparationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\">\n\x17GetCompileOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"2\n\x18GetCompileOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n\x13GetRunOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\".\n\x14GetRunOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n\x12GetRunErrorRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"-\n\x13GetRunErrorResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"5\n\x0eGetLogsRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\")\n\x0fGetLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"6\n\x0fGetGraphRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"(\n\x10GetGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"4\n\rCancelRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"\x10\n\x0e\x43\x61ncelResponse\"\x94\x04\n\x11PrecompiledObject\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x04type\x18\x04 \x01(\x0e\x32\x1d.api.v1.PrecompiledObjectTypeR\x04type\x12)\n\x10pipeline_options\x18\x05 \x01(\tR\x0fpipelineOptions\x12\x12\n\x04link\x18\x06 \x01(\tR\x04link\x12\x1c\n\tmultifile\x18\x07 \x01(\x08R\tmultifile\x12!\n\x0c\x63ontext_line\x18\x08 \x01(\x05R\x0b\x63ontextLine\x12\'\n\x0f\x64\x65\x66\x61ult_example\x18\t \x01(\x08R\x0e\x64\x65\x66\x61ultExample\x12\x1d\n\x03sdk\x18\n \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x32\n\ncomplexity\x18\x0b \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\x12\n\x04tags\x18\x0c \x03(\tR\x04tags\x12+\n\x08\x64\x61tasets\x18\r \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12\x17\n\x07url_vcs\x18\x0e \x01(\tR\x06urlVcs\x12!\n\x0curl_notebook\x18\x0f \x01(\tR\x0burlNotebook\"\xe5\x01\n\nCategories\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12;\n\ncategories\x18\x02 \x03(\x0b\x32\x1b.api.v1.Categories.CategoryR\ncategories\x1a{\n\x08\x43\x61tegory\x12#\n\rcategory_name\x18\x01 \x01(\tR\x0c\x63\x61tegoryName\x12J\n\x13precompiled_objects\x18\x02 \x03(\x0b\x32\x19.api.v1.PrecompiledObjectR\x12precompiledObjects\"Y\n\x1cGetPrecompiledObjectsRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x1a\n\x08\x63\x61tegory\x18\x02 \x01(\tR\x08\x63\x61tegory\"<\n\x1bGetPrecompiledObjectRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectCodeRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"B\n!GetPrecompiledObjectOutputRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectLogsRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"A\n GetPrecompiledObjectGraphRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"C\n\"GetDefaultPrecompiledObjectRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\"Z\n\x1dGetPrecompiledObjectsResponse\x12\x39\n\x0esdk_categories\x18\x01 \x03(\x0b\x32\x12.api.v1.CategoriesR\rsdkCategories\"h\n\x1cGetPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"a\n GetPrecompiledObjectCodeResponse\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12)\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"<\n\"GetPrecompiledObjectOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n GetPrecompiledObjectLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n!GetPrecompiledObjectGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"o\n#GetDefaultPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"T\n\x0bSnippetFile\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x63ontent\x18\x02 \x01(\tR\x07\x63ontent\x12\x17\n\x07is_main\x18\x03 \x01(\x08R\x06isMain\"\xe6\x01\n\x12SaveSnippetRequest\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\'\n\x0fpersistence_key\x18\x05 \x01(\tR\x0epersistenceKey\"%\n\x13SaveSnippetResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"#\n\x11GetSnippetRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"\xbd\x01\n\x12GetSnippetResponse\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\"\x14\n\x12GetMetadataRequest\"\xe5\x01\n\x13GetMetadataResponse\x12\x1d\n\nrunner_sdk\x18\x01 \x01(\tR\trunnerSdk\x12*\n\x11\x62uild_commit_hash\x18\x02 \x01(\tR\x0f\x62uildCommitHash\x12Y\n*build_commit_timestamp_seconds_since_epoch\x18\x03 \x01(\x03R%buildCommitTimestampSecondsSinceEpoch\x12(\n\x10\x62\x65\x61m_sdk_version\x18\x04 \x01(\tR\x0e\x62\x65\x61mSdkVersion*R\n\x03Sdk\x12\x13\n\x0fSDK_UNSPECIFIED\x10\x00\x12\x0c\n\x08SDK_JAVA\x10\x01\x12\n\n\x06SDK_GO\x10\x02\x12\x0e\n\nSDK_PYTHON\x10\x03\x12\x0c\n\x08SDK_SCIO\x10\x04*\xb8\x02\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x15\n\x11STATUS_VALIDATING\x10\x01\x12\x1b\n\x17STATUS_VALIDATION_ERROR\x10\x02\x12\x14\n\x10STATUS_PREPARING\x10\x03\x12\x1c\n\x18STATUS_PREPARATION_ERROR\x10\x04\x12\x14\n\x10STATUS_COMPILING\x10\x05\x12\x18\n\x14STATUS_COMPILE_ERROR\x10\x06\x12\x14\n\x10STATUS_EXECUTING\x10\x07\x12\x13\n\x0fSTATUS_FINISHED\x10\x08\x12\x14\n\x10STATUS_RUN_ERROR\x10\t\x12\x10\n\x0cSTATUS_ERROR\x10\n\x12\x16\n\x12STATUS_RUN_TIMEOUT\x10\x0b\x12\x13\n\x0fSTATUS_CANCELED\x10\x0c*\xae\x01\n\x15PrecompiledObjectType\x12\'\n#PRECOMPILED_OBJECT_TYPE_UNSPECIFIED\x10\x00\x12#\n\x1fPRECOMPILED_OBJECT_TYPE_EXAMPLE\x10\x01\x12 \n\x1cPRECOMPILED_OBJECT_TYPE_KATA\x10\x02\x12%\n!PRECOMPILED_OBJECT_TYPE_UNIT_TEST\x10\x03*n\n\nComplexity\x12\x1a\n\x16\x43OMPLEXITY_UNSPECIFIED\x10\x00\x12\x14\n\x10\x43OMPLEXITY_BASIC\x10\x01\x12\x15\n\x11\x43OMPLEXITY_MEDIUM\x10\x02\x12\x17\n\x13\x43OMPLEXITY_ADVANCED\x10\x03*F\n\x0c\x45mulatorType\x12\x1d\n\x19\x45MULATOR_TYPE_UNSPECIFIED\x10\x00\x12\x17\n\x13\x45MULATOR_TYPE_KAFKA\x10\x01\x32\xd3\r\n\x11PlaygroundService\x12:\n\x07RunCode\x12\x16.api.v1.RunCodeRequest\x1a\x17.api.v1.RunCodeResponse\x12\x46\n\x0b\x43heckStatus\x12\x1a.api.v1.CheckStatusRequest\x1a\x1b.api.v1.CheckStatusResponse\x12I\n\x0cGetRunOutput\x12\x1b.api.v1.GetRunOutputRequest\x1a\x1c.api.v1.GetRunOutputResponse\x12:\n\x07GetLogs\x12\x16.api.v1.GetLogsRequest\x1a\x17.api.v1.GetLogsResponse\x12=\n\x08GetGraph\x12\x17.api.v1.GetGraphRequest\x1a\x18.api.v1.GetGraphResponse\x12\x46\n\x0bGetRunError\x12\x1a.api.v1.GetRunErrorRequest\x1a\x1b.api.v1.GetRunErrorResponse\x12^\n\x13GetValidationOutput\x12\".api.v1.GetValidationOutputRequest\x1a#.api.v1.GetValidationOutputResponse\x12\x61\n\x14GetPreparationOutput\x12#.api.v1.GetPreparationOutputRequest\x1a$.api.v1.GetPreparationOutputResponse\x12U\n\x10GetCompileOutput\x12\x1f.api.v1.GetCompileOutputRequest\x1a .api.v1.GetCompileOutputResponse\x12\x37\n\x06\x43\x61ncel\x12\x15.api.v1.CancelRequest\x1a\x16.api.v1.CancelResponse\x12\x64\n\x15GetPrecompiledObjects\x12$.api.v1.GetPrecompiledObjectsRequest\x1a%.api.v1.GetPrecompiledObjectsResponse\x12\x61\n\x14GetPrecompiledObject\x12#.api.v1.GetPrecompiledObjectRequest\x1a$.api.v1.GetPrecompiledObjectResponse\x12m\n\x18GetPrecompiledObjectCode\x12\'.api.v1.GetPrecompiledObjectCodeRequest\x1a(.api.v1.GetPrecompiledObjectCodeResponse\x12s\n\x1aGetPrecompiledObjectOutput\x12).api.v1.GetPrecompiledObjectOutputRequest\x1a*.api.v1.GetPrecompiledObjectOutputResponse\x12m\n\x18GetPrecompiledObjectLogs\x12\'.api.v1.GetPrecompiledObjectLogsRequest\x1a(.api.v1.GetPrecompiledObjectLogsResponse\x12p\n\x19GetPrecompiledObjectGraph\x12(.api.v1.GetPrecompiledObjectGraphRequest\x1a).api.v1.GetPrecompiledObjectGraphResponse\x12v\n\x1bGetDefaultPrecompiledObject\x12*.api.v1.GetDefaultPrecompiledObjectRequest\x1a+.api.v1.GetDefaultPrecompiledObjectResponse\x12\x46\n\x0bSaveSnippet\x12\x1a.api.v1.SaveSnippetRequest\x1a\x1b.api.v1.SaveSnippetResponse\x12\x43\n\nGetSnippet\x12\x19.api.v1.GetSnippetRequest\x1a\x1a.api.v1.GetSnippetResponse\x12\x46\n\x0bGetMetadata\x12\x1a.api.v1.GetMetadataRequest\x1a\x1b.api.v1.GetMetadataResponseB8Z6beam.apache.org/playground/backend/internal;playgroundb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x61pi/v1/api.proto\x12\x06\x61pi.v1\"\xca\x01\n\x07\x44\x61taset\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x14.api.v1.EmulatorTypeR\x04type\x12\x36\n\x07options\x18\x02 \x03(\x0b\x32\x1c.api.v1.Dataset.OptionsEntryR\x07options\x12!\n\x0c\x64\x61taset_path\x18\x03 \x01(\tR\x0b\x64\x61tasetPath\x1a:\n\x0cOptionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xc6\x01\n\x0eRunCodeRequest\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12+\n\x08\x64\x61tasets\x18\x04 \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12)\n\x05\x66iles\x18\x05 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"6\n\x0fRunCodeResponse\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"9\n\x12\x43heckStatusRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"=\n\x13\x43heckStatusResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x0e.api.v1.StatusR\x06status\"A\n\x1aGetValidationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"5\n\x1bGetValidationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"B\n\x1bGetPreparationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"6\n\x1cGetPreparationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\">\n\x17GetCompileOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"2\n\x18GetCompileOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n\x13GetRunOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\".\n\x14GetRunOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n\x12GetRunErrorRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"-\n\x13GetRunErrorResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"5\n\x0eGetLogsRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\")\n\x0fGetLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"6\n\x0fGetGraphRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"(\n\x10GetGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"4\n\rCancelRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"\x10\n\x0e\x43\x61ncelResponse\"\x94\x04\n\x11PrecompiledObject\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x04type\x18\x04 \x01(\x0e\x32\x1d.api.v1.PrecompiledObjectTypeR\x04type\x12)\n\x10pipeline_options\x18\x05 \x01(\tR\x0fpipelineOptions\x12\x12\n\x04link\x18\x06 \x01(\tR\x04link\x12\x1c\n\tmultifile\x18\x07 \x01(\x08R\tmultifile\x12!\n\x0c\x63ontext_line\x18\x08 \x01(\x05R\x0b\x63ontextLine\x12\'\n\x0f\x64\x65\x66\x61ult_example\x18\t \x01(\x08R\x0e\x64\x65\x66\x61ultExample\x12\x1d\n\x03sdk\x18\n \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x32\n\ncomplexity\x18\x0b \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\x12\n\x04tags\x18\x0c \x03(\tR\x04tags\x12+\n\x08\x64\x61tasets\x18\r \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12\x17\n\x07url_vcs\x18\x0e \x01(\tR\x06urlVcs\x12!\n\x0curl_notebook\x18\x0f \x01(\tR\x0burlNotebook\"\xe5\x01\n\nCategories\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12;\n\ncategories\x18\x02 \x03(\x0b\x32\x1b.api.v1.Categories.CategoryR\ncategories\x1a{\n\x08\x43\x61tegory\x12#\n\rcategory_name\x18\x01 \x01(\tR\x0c\x63\x61tegoryName\x12J\n\x13precompiled_objects\x18\x02 \x03(\x0b\x32\x19.api.v1.PrecompiledObjectR\x12precompiledObjects\"Y\n\x1cGetPrecompiledObjectsRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x1a\n\x08\x63\x61tegory\x18\x02 \x01(\tR\x08\x63\x61tegory\"<\n\x1bGetPrecompiledObjectRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectCodeRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"B\n!GetPrecompiledObjectOutputRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectLogsRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"A\n GetPrecompiledObjectGraphRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"C\n\"GetDefaultPrecompiledObjectRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\"Z\n\x1dGetPrecompiledObjectsResponse\x12\x39\n\x0esdk_categories\x18\x01 \x03(\x0b\x32\x12.api.v1.CategoriesR\rsdkCategories\"h\n\x1cGetPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"a\n GetPrecompiledObjectCodeResponse\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12)\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"<\n\"GetPrecompiledObjectOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n GetPrecompiledObjectLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n!GetPrecompiledObjectGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"o\n#GetDefaultPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"T\n\x0bSnippetFile\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x63ontent\x18\x02 \x01(\tR\x07\x63ontent\x12\x17\n\x07is_main\x18\x03 \x01(\x08R\x06isMain\"\xe6\x01\n\x12SaveSnippetRequest\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\'\n\x0fpersistence_key\x18\x05 \x01(\tR\x0epersistenceKey\"%\n\x13SaveSnippetResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"#\n\x11GetSnippetRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"\xbd\x01\n\x12GetSnippetResponse\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\"\x14\n\x12GetMetadataRequest\"\xce\x02\n\x13GetMetadataResponse\x12\x1d\n\nrunner_sdk\x18\x01 \x01(\tR\trunnerSdk\x12/\n\x11\x62uild_commit_hash\x18\x02 \x01(\tH\x00R\x0f\x62uildCommitHash\x88\x01\x01\x12^\n*build_commit_timestamp_seconds_since_epoch\x18\x03 \x01(\x03H\x01R%buildCommitTimestampSecondsSinceEpoch\x88\x01\x01\x12-\n\x10\x62\x65\x61m_sdk_version\x18\x04 \x01(\tH\x02R\x0e\x62\x65\x61mSdkVersion\x88\x01\x01\x42\x14\n\x12_build_commit_hashB-\n+_build_commit_timestamp_seconds_since_epochB\x13\n\x11_beam_sdk_version*R\n\x03Sdk\x12\x13\n\x0fSDK_UNSPECIFIED\x10\x00\x12\x0c\n\x08SDK_JAVA\x10\x01\x12\n\n\x06SDK_GO\x10\x02\x12\x0e\n\nSDK_PYTHON\x10\x03\x12\x0c\n\x08SDK_SCIO\x10\x04*\xb8\x02\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x15\n\x11STATUS_VALIDATING\x10\x01\x12\x1b\n\x17STATUS_VALIDATION_ERROR\x10\x02\x12\x14\n\x10STATUS_PREPARING\x10\x03\x12\x1c\n\x18STATUS_PREPARATION_ERROR\x10\x04\x12\x14\n\x10STATUS_COMPILING\x10\x05\x12\x18\n\x14STATUS_COMPILE_ERROR\x10\x06\x12\x14\n\x10STATUS_EXECUTING\x10\x07\x12\x13\n\x0fSTATUS_FINISHED\x10\x08\x12\x14\n\x10STATUS_RUN_ERROR\x10\t\x12\x10\n\x0cSTATUS_ERROR\x10\n\x12\x16\n\x12STATUS_RUN_TIMEOUT\x10\x0b\x12\x13\n\x0fSTATUS_CANCELED\x10\x0c*\xae\x01\n\x15PrecompiledObjectType\x12\'\n#PRECOMPILED_OBJECT_TYPE_UNSPECIFIED\x10\x00\x12#\n\x1fPRECOMPILED_OBJECT_TYPE_EXAMPLE\x10\x01\x12 \n\x1cPRECOMPILED_OBJECT_TYPE_KATA\x10\x02\x12%\n!PRECOMPILED_OBJECT_TYPE_UNIT_TEST\x10\x03*n\n\nComplexity\x12\x1a\n\x16\x43OMPLEXITY_UNSPECIFIED\x10\x00\x12\x14\n\x10\x43OMPLEXITY_BASIC\x10\x01\x12\x15\n\x11\x43OMPLEXITY_MEDIUM\x10\x02\x12\x17\n\x13\x43OMPLEXITY_ADVANCED\x10\x03*F\n\x0c\x45mulatorType\x12\x1d\n\x19\x45MULATOR_TYPE_UNSPECIFIED\x10\x00\x12\x17\n\x13\x45MULATOR_TYPE_KAFKA\x10\x01\x32\xd3\r\n\x11PlaygroundService\x12:\n\x07RunCode\x12\x16.api.v1.RunCodeRequest\x1a\x17.api.v1.RunCodeResponse\x12\x46\n\x0b\x43heckStatus\x12\x1a.api.v1.CheckStatusRequest\x1a\x1b.api.v1.CheckStatusResponse\x12I\n\x0cGetRunOutput\x12\x1b.api.v1.GetRunOutputRequest\x1a\x1c.api.v1.GetRunOutputResponse\x12:\n\x07GetLogs\x12\x16.api.v1.GetLogsRequest\x1a\x17.api.v1.GetLogsResponse\x12=\n\x08GetGraph\x12\x17.api.v1.GetGraphRequest\x1a\x18.api.v1.GetGraphResponse\x12\x46\n\x0bGetRunError\x12\x1a.api.v1.GetRunErrorRequest\x1a\x1b.api.v1.GetRunErrorResponse\x12^\n\x13GetValidationOutput\x12\".api.v1.GetValidationOutputRequest\x1a#.api.v1.GetValidationOutputResponse\x12\x61\n\x14GetPreparationOutput\x12#.api.v1.GetPreparationOutputRequest\x1a$.api.v1.GetPreparationOutputResponse\x12U\n\x10GetCompileOutput\x12\x1f.api.v1.GetCompileOutputRequest\x1a .api.v1.GetCompileOutputResponse\x12\x37\n\x06\x43\x61ncel\x12\x15.api.v1.CancelRequest\x1a\x16.api.v1.CancelResponse\x12\x64\n\x15GetPrecompiledObjects\x12$.api.v1.GetPrecompiledObjectsRequest\x1a%.api.v1.GetPrecompiledObjectsResponse\x12\x61\n\x14GetPrecompiledObject\x12#.api.v1.GetPrecompiledObjectRequest\x1a$.api.v1.GetPrecompiledObjectResponse\x12m\n\x18GetPrecompiledObjectCode\x12\'.api.v1.GetPrecompiledObjectCodeRequest\x1a(.api.v1.GetPrecompiledObjectCodeResponse\x12s\n\x1aGetPrecompiledObjectOutput\x12).api.v1.GetPrecompiledObjectOutputRequest\x1a*.api.v1.GetPrecompiledObjectOutputResponse\x12m\n\x18GetPrecompiledObjectLogs\x12\'.api.v1.GetPrecompiledObjectLogsRequest\x1a(.api.v1.GetPrecompiledObjectLogsResponse\x12p\n\x19GetPrecompiledObjectGraph\x12(.api.v1.GetPrecompiledObjectGraphRequest\x1a).api.v1.GetPrecompiledObjectGraphResponse\x12v\n\x1bGetDefaultPrecompiledObject\x12*.api.v1.GetDefaultPrecompiledObjectRequest\x1a+.api.v1.GetDefaultPrecompiledObjectResponse\x12\x46\n\x0bSaveSnippet\x12\x1a.api.v1.SaveSnippetRequest\x1a\x1b.api.v1.SaveSnippetResponse\x12\x43\n\nGetSnippet\x12\x19.api.v1.GetSnippetRequest\x1a\x1a.api.v1.GetSnippetResponse\x12\x46\n\x0bGetMetadata\x12\x1a.api.v1.GetMetadataRequest\x1a\x1b.api.v1.GetMetadataResponseB8Z6beam.apache.org/playground/backend/internal;playgroundb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -24,16 +24,16 @@ DESCRIPTOR._serialized_options = b'Z6beam.apache.org/playground/backend/internal;playground' _DATASET_OPTIONSENTRY._options = None _DATASET_OPTIONSENTRY._serialized_options = b'8\001' - _globals['_SDK']._serialized_start=4144 - _globals['_SDK']._serialized_end=4226 - _globals['_STATUS']._serialized_start=4229 - _globals['_STATUS']._serialized_end=4541 - _globals['_PRECOMPILEDOBJECTTYPE']._serialized_start=4544 - _globals['_PRECOMPILEDOBJECTTYPE']._serialized_end=4718 - _globals['_COMPLEXITY']._serialized_start=4720 - _globals['_COMPLEXITY']._serialized_end=4830 - _globals['_EMULATORTYPE']._serialized_start=4832 - _globals['_EMULATORTYPE']._serialized_end=4902 + _globals['_SDK']._serialized_start=4249 + _globals['_SDK']._serialized_end=4331 + _globals['_STATUS']._serialized_start=4334 + _globals['_STATUS']._serialized_end=4646 + _globals['_PRECOMPILEDOBJECTTYPE']._serialized_start=4649 + _globals['_PRECOMPILEDOBJECTTYPE']._serialized_end=4823 + _globals['_COMPLEXITY']._serialized_start=4825 + _globals['_COMPLEXITY']._serialized_end=4935 + _globals['_EMULATORTYPE']._serialized_start=4937 + _globals['_EMULATORTYPE']._serialized_end=5007 _globals['_DATASET']._serialized_start=29 _globals['_DATASET']._serialized_end=231 _globals['_DATASET_OPTIONSENTRY']._serialized_start=173 @@ -125,7 +125,7 @@ _globals['_GETMETADATAREQUEST']._serialized_start=3890 _globals['_GETMETADATAREQUEST']._serialized_end=3910 _globals['_GETMETADATARESPONSE']._serialized_start=3913 - _globals['_GETMETADATARESPONSE']._serialized_end=4142 - _globals['_PLAYGROUNDSERVICE']._serialized_start=4905 - _globals['_PLAYGROUNDSERVICE']._serialized_end=6652 + _globals['_GETMETADATARESPONSE']._serialized_end=4247 + _globals['_PLAYGROUNDSERVICE']._serialized_start=5010 + _globals['_PLAYGROUNDSERVICE']._serialized_end=6757 # @@protoc_insertion_point(module_scope) From 90278a39e87340295756fa1b53e17a26f291279a Mon Sep 17 00:00:00 2001 From: Timur Sultanov Date: Wed, 1 Mar 2023 15:48:28 +0400 Subject: [PATCH 09/26] Update Tour of Beam protocol definitions to reflect Playground protocol changes --- learning/tour-of-beam/backend/README.md | 1 + .../backend/playground_api/api.pb.go | 1644 ++++++++++------- .../backend/playground_api/api_grpc.pb.go | 40 +- .../backend/playground_api/mock.go | 241 ++- 4 files changed, 1209 insertions(+), 717 deletions(-) diff --git a/learning/tour-of-beam/backend/README.md b/learning/tour-of-beam/backend/README.md index a2928e1f9572..7b3fec69fa5e 100644 --- a/learning/tour-of-beam/backend/README.md +++ b/learning/tour-of-beam/backend/README.md @@ -39,6 +39,7 @@ To re-generate: $ go generate -x ./... ``` +> Note: this requires [`protoc`](https://grpc.io/docs/protoc-installation/) version `>= 3.15` and [`moq`](https://github.com/matryer/moq) tools to be installed ### Datastore schema diff --git a/learning/tour-of-beam/backend/playground_api/api.pb.go b/learning/tour-of-beam/backend/playground_api/api.pb.go index c95c91d10930..18ca3884dd24 100644 --- a/learning/tour-of-beam/backend/playground_api/api.pb.go +++ b/learning/tour-of-beam/backend/playground_api/api.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.12.4 +// protoc v3.15.8 // source: api.proto package playground @@ -275,6 +275,115 @@ func (Complexity) EnumDescriptor() ([]byte, []int) { return file_api_proto_rawDescGZIP(), []int{3} } +type EmulatorType int32 + +const ( + EmulatorType_EMULATOR_TYPE_UNSPECIFIED EmulatorType = 0 + EmulatorType_EMULATOR_TYPE_KAFKA EmulatorType = 1 +) + +// Enum value maps for EmulatorType. +var ( + EmulatorType_name = map[int32]string{ + 0: "EMULATOR_TYPE_UNSPECIFIED", + 1: "EMULATOR_TYPE_KAFKA", + } + EmulatorType_value = map[string]int32{ + "EMULATOR_TYPE_UNSPECIFIED": 0, + "EMULATOR_TYPE_KAFKA": 1, + } +) + +func (x EmulatorType) Enum() *EmulatorType { + p := new(EmulatorType) + *p = x + return p +} + +func (x EmulatorType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (EmulatorType) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[4].Descriptor() +} + +func (EmulatorType) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[4] +} + +func (x EmulatorType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use EmulatorType.Descriptor instead. +func (EmulatorType) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{4} +} + +type Dataset struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type EmulatorType `protobuf:"varint,1,opt,name=type,proto3,enum=api.v1.EmulatorType" json:"type,omitempty"` + Options map[string]string `protobuf:"bytes,2,rep,name=options,proto3" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + DatasetPath string `protobuf:"bytes,3,opt,name=dataset_path,json=datasetPath,proto3" json:"dataset_path,omitempty"` +} + +func (x *Dataset) Reset() { + *x = Dataset{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Dataset) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Dataset) ProtoMessage() {} + +func (x *Dataset) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Dataset.ProtoReflect.Descriptor instead. +func (*Dataset) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{0} +} + +func (x *Dataset) GetType() EmulatorType { + if x != nil { + return x.Type + } + return EmulatorType_EMULATOR_TYPE_UNSPECIFIED +} + +func (x *Dataset) GetOptions() map[string]string { + if x != nil { + return x.Options + } + return nil +} + +func (x *Dataset) GetDatasetPath() string { + if x != nil { + return x.DatasetPath + } + return "" +} + // RunCodeRequest represents a code text and options of SDK which executes the code. type RunCodeRequest struct { state protoimpl.MessageState @@ -284,13 +393,15 @@ type RunCodeRequest struct { Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` Sdk Sdk `protobuf:"varint,2,opt,name=sdk,proto3,enum=api.v1.Sdk" json:"sdk,omitempty"` // The pipeline options as they would be passed to the program (e.g. "--option1 value1 --option2 value2") - PipelineOptions string `protobuf:"bytes,3,opt,name=pipeline_options,json=pipelineOptions,proto3" json:"pipeline_options,omitempty"` + PipelineOptions string `protobuf:"bytes,3,opt,name=pipeline_options,json=pipelineOptions,proto3" json:"pipeline_options,omitempty"` + Datasets []*Dataset `protobuf:"bytes,4,rep,name=datasets,proto3" json:"datasets,omitempty"` + Files []*SnippetFile `protobuf:"bytes,5,rep,name=files,proto3" json:"files,omitempty"` } func (x *RunCodeRequest) Reset() { *x = RunCodeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[0] + mi := &file_api_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -303,7 +414,7 @@ func (x *RunCodeRequest) String() string { func (*RunCodeRequest) ProtoMessage() {} func (x *RunCodeRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[0] + mi := &file_api_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -316,7 +427,7 @@ func (x *RunCodeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RunCodeRequest.ProtoReflect.Descriptor instead. func (*RunCodeRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{0} + return file_api_proto_rawDescGZIP(), []int{1} } func (x *RunCodeRequest) GetCode() string { @@ -340,6 +451,20 @@ func (x *RunCodeRequest) GetPipelineOptions() string { return "" } +func (x *RunCodeRequest) GetDatasets() []*Dataset { + if x != nil { + return x.Datasets + } + return nil +} + +func (x *RunCodeRequest) GetFiles() []*SnippetFile { + if x != nil { + return x.Files + } + return nil +} + // RunCodeResponse contains information of the pipeline uuid. type RunCodeResponse struct { state protoimpl.MessageState @@ -352,7 +477,7 @@ type RunCodeResponse struct { func (x *RunCodeResponse) Reset() { *x = RunCodeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[1] + mi := &file_api_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -365,7 +490,7 @@ func (x *RunCodeResponse) String() string { func (*RunCodeResponse) ProtoMessage() {} func (x *RunCodeResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[1] + mi := &file_api_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -378,7 +503,7 @@ func (x *RunCodeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RunCodeResponse.ProtoReflect.Descriptor instead. func (*RunCodeResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{1} + return file_api_proto_rawDescGZIP(), []int{2} } func (x *RunCodeResponse) GetPipelineUuid() string { @@ -400,7 +525,7 @@ type CheckStatusRequest struct { func (x *CheckStatusRequest) Reset() { *x = CheckStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[2] + mi := &file_api_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -413,7 +538,7 @@ func (x *CheckStatusRequest) String() string { func (*CheckStatusRequest) ProtoMessage() {} func (x *CheckStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[2] + mi := &file_api_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -426,7 +551,7 @@ func (x *CheckStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckStatusRequest.ProtoReflect.Descriptor instead. func (*CheckStatusRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{2} + return file_api_proto_rawDescGZIP(), []int{3} } func (x *CheckStatusRequest) GetPipelineUuid() string { @@ -448,7 +573,7 @@ type CheckStatusResponse struct { func (x *CheckStatusResponse) Reset() { *x = CheckStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[3] + mi := &file_api_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -461,7 +586,7 @@ func (x *CheckStatusResponse) String() string { func (*CheckStatusResponse) ProtoMessage() {} func (x *CheckStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[3] + mi := &file_api_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -474,7 +599,7 @@ func (x *CheckStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckStatusResponse.ProtoReflect.Descriptor instead. func (*CheckStatusResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{3} + return file_api_proto_rawDescGZIP(), []int{4} } func (x *CheckStatusResponse) GetStatus() Status { @@ -496,7 +621,7 @@ type GetValidationOutputRequest struct { func (x *GetValidationOutputRequest) Reset() { *x = GetValidationOutputRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[4] + mi := &file_api_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -509,7 +634,7 @@ func (x *GetValidationOutputRequest) String() string { func (*GetValidationOutputRequest) ProtoMessage() {} func (x *GetValidationOutputRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[4] + mi := &file_api_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -522,7 +647,7 @@ func (x *GetValidationOutputRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetValidationOutputRequest.ProtoReflect.Descriptor instead. func (*GetValidationOutputRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{4} + return file_api_proto_rawDescGZIP(), []int{5} } func (x *GetValidationOutputRequest) GetPipelineUuid() string { @@ -544,7 +669,7 @@ type GetValidationOutputResponse struct { func (x *GetValidationOutputResponse) Reset() { *x = GetValidationOutputResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[5] + mi := &file_api_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -557,7 +682,7 @@ func (x *GetValidationOutputResponse) String() string { func (*GetValidationOutputResponse) ProtoMessage() {} func (x *GetValidationOutputResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[5] + mi := &file_api_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -570,7 +695,7 @@ func (x *GetValidationOutputResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetValidationOutputResponse.ProtoReflect.Descriptor instead. func (*GetValidationOutputResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{5} + return file_api_proto_rawDescGZIP(), []int{6} } func (x *GetValidationOutputResponse) GetOutput() string { @@ -592,7 +717,7 @@ type GetPreparationOutputRequest struct { func (x *GetPreparationOutputRequest) Reset() { *x = GetPreparationOutputRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[6] + mi := &file_api_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -605,7 +730,7 @@ func (x *GetPreparationOutputRequest) String() string { func (*GetPreparationOutputRequest) ProtoMessage() {} func (x *GetPreparationOutputRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[6] + mi := &file_api_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -618,7 +743,7 @@ func (x *GetPreparationOutputRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPreparationOutputRequest.ProtoReflect.Descriptor instead. func (*GetPreparationOutputRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{6} + return file_api_proto_rawDescGZIP(), []int{7} } func (x *GetPreparationOutputRequest) GetPipelineUuid() string { @@ -640,7 +765,7 @@ type GetPreparationOutputResponse struct { func (x *GetPreparationOutputResponse) Reset() { *x = GetPreparationOutputResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[7] + mi := &file_api_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -653,7 +778,7 @@ func (x *GetPreparationOutputResponse) String() string { func (*GetPreparationOutputResponse) ProtoMessage() {} func (x *GetPreparationOutputResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[7] + mi := &file_api_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -666,7 +791,7 @@ func (x *GetPreparationOutputResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPreparationOutputResponse.ProtoReflect.Descriptor instead. func (*GetPreparationOutputResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{7} + return file_api_proto_rawDescGZIP(), []int{8} } func (x *GetPreparationOutputResponse) GetOutput() string { @@ -688,7 +813,7 @@ type GetCompileOutputRequest struct { func (x *GetCompileOutputRequest) Reset() { *x = GetCompileOutputRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[8] + mi := &file_api_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -701,7 +826,7 @@ func (x *GetCompileOutputRequest) String() string { func (*GetCompileOutputRequest) ProtoMessage() {} func (x *GetCompileOutputRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[8] + mi := &file_api_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -714,7 +839,7 @@ func (x *GetCompileOutputRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCompileOutputRequest.ProtoReflect.Descriptor instead. func (*GetCompileOutputRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{8} + return file_api_proto_rawDescGZIP(), []int{9} } func (x *GetCompileOutputRequest) GetPipelineUuid() string { @@ -736,7 +861,7 @@ type GetCompileOutputResponse struct { func (x *GetCompileOutputResponse) Reset() { *x = GetCompileOutputResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[9] + mi := &file_api_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -749,7 +874,7 @@ func (x *GetCompileOutputResponse) String() string { func (*GetCompileOutputResponse) ProtoMessage() {} func (x *GetCompileOutputResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[9] + mi := &file_api_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -762,7 +887,7 @@ func (x *GetCompileOutputResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCompileOutputResponse.ProtoReflect.Descriptor instead. func (*GetCompileOutputResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{9} + return file_api_proto_rawDescGZIP(), []int{10} } func (x *GetCompileOutputResponse) GetOutput() string { @@ -784,7 +909,7 @@ type GetRunOutputRequest struct { func (x *GetRunOutputRequest) Reset() { *x = GetRunOutputRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[10] + mi := &file_api_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -797,7 +922,7 @@ func (x *GetRunOutputRequest) String() string { func (*GetRunOutputRequest) ProtoMessage() {} func (x *GetRunOutputRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[10] + mi := &file_api_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -810,7 +935,7 @@ func (x *GetRunOutputRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRunOutputRequest.ProtoReflect.Descriptor instead. func (*GetRunOutputRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{10} + return file_api_proto_rawDescGZIP(), []int{11} } func (x *GetRunOutputRequest) GetPipelineUuid() string { @@ -832,7 +957,7 @@ type GetRunOutputResponse struct { func (x *GetRunOutputResponse) Reset() { *x = GetRunOutputResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[11] + mi := &file_api_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -845,7 +970,7 @@ func (x *GetRunOutputResponse) String() string { func (*GetRunOutputResponse) ProtoMessage() {} func (x *GetRunOutputResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[11] + mi := &file_api_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -858,7 +983,7 @@ func (x *GetRunOutputResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRunOutputResponse.ProtoReflect.Descriptor instead. func (*GetRunOutputResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{11} + return file_api_proto_rawDescGZIP(), []int{12} } func (x *GetRunOutputResponse) GetOutput() string { @@ -880,7 +1005,7 @@ type GetRunErrorRequest struct { func (x *GetRunErrorRequest) Reset() { *x = GetRunErrorRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[12] + mi := &file_api_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -893,7 +1018,7 @@ func (x *GetRunErrorRequest) String() string { func (*GetRunErrorRequest) ProtoMessage() {} func (x *GetRunErrorRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[12] + mi := &file_api_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -906,7 +1031,7 @@ func (x *GetRunErrorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRunErrorRequest.ProtoReflect.Descriptor instead. func (*GetRunErrorRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{12} + return file_api_proto_rawDescGZIP(), []int{13} } func (x *GetRunErrorRequest) GetPipelineUuid() string { @@ -928,7 +1053,7 @@ type GetRunErrorResponse struct { func (x *GetRunErrorResponse) Reset() { *x = GetRunErrorResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[13] + mi := &file_api_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -941,7 +1066,7 @@ func (x *GetRunErrorResponse) String() string { func (*GetRunErrorResponse) ProtoMessage() {} func (x *GetRunErrorResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[13] + mi := &file_api_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -954,7 +1079,7 @@ func (x *GetRunErrorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRunErrorResponse.ProtoReflect.Descriptor instead. func (*GetRunErrorResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{13} + return file_api_proto_rawDescGZIP(), []int{14} } func (x *GetRunErrorResponse) GetOutput() string { @@ -976,7 +1101,7 @@ type GetLogsRequest struct { func (x *GetLogsRequest) Reset() { *x = GetLogsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[14] + mi := &file_api_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -989,7 +1114,7 @@ func (x *GetLogsRequest) String() string { func (*GetLogsRequest) ProtoMessage() {} func (x *GetLogsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[14] + mi := &file_api_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1002,7 +1127,7 @@ func (x *GetLogsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetLogsRequest.ProtoReflect.Descriptor instead. func (*GetLogsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{14} + return file_api_proto_rawDescGZIP(), []int{15} } func (x *GetLogsRequest) GetPipelineUuid() string { @@ -1024,7 +1149,7 @@ type GetLogsResponse struct { func (x *GetLogsResponse) Reset() { *x = GetLogsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[15] + mi := &file_api_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1037,7 +1162,7 @@ func (x *GetLogsResponse) String() string { func (*GetLogsResponse) ProtoMessage() {} func (x *GetLogsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[15] + mi := &file_api_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1050,7 +1175,7 @@ func (x *GetLogsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetLogsResponse.ProtoReflect.Descriptor instead. func (*GetLogsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{15} + return file_api_proto_rawDescGZIP(), []int{16} } func (x *GetLogsResponse) GetOutput() string { @@ -1072,7 +1197,7 @@ type GetGraphRequest struct { func (x *GetGraphRequest) Reset() { *x = GetGraphRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[16] + mi := &file_api_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1085,7 +1210,7 @@ func (x *GetGraphRequest) String() string { func (*GetGraphRequest) ProtoMessage() {} func (x *GetGraphRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[16] + mi := &file_api_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1098,7 +1223,7 @@ func (x *GetGraphRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGraphRequest.ProtoReflect.Descriptor instead. func (*GetGraphRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{16} + return file_api_proto_rawDescGZIP(), []int{17} } func (x *GetGraphRequest) GetPipelineUuid() string { @@ -1120,7 +1245,7 @@ type GetGraphResponse struct { func (x *GetGraphResponse) Reset() { *x = GetGraphResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[17] + mi := &file_api_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1133,7 +1258,7 @@ func (x *GetGraphResponse) String() string { func (*GetGraphResponse) ProtoMessage() {} func (x *GetGraphResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[17] + mi := &file_api_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1146,7 +1271,7 @@ func (x *GetGraphResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGraphResponse.ProtoReflect.Descriptor instead. func (*GetGraphResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{17} + return file_api_proto_rawDescGZIP(), []int{18} } func (x *GetGraphResponse) GetGraph() string { @@ -1168,7 +1293,7 @@ type CancelRequest struct { func (x *CancelRequest) Reset() { *x = CancelRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[18] + mi := &file_api_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1181,7 +1306,7 @@ func (x *CancelRequest) String() string { func (*CancelRequest) ProtoMessage() {} func (x *CancelRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[18] + mi := &file_api_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1194,7 +1319,7 @@ func (x *CancelRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CancelRequest.ProtoReflect.Descriptor instead. func (*CancelRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{18} + return file_api_proto_rawDescGZIP(), []int{19} } func (x *CancelRequest) GetPipelineUuid() string { @@ -1214,7 +1339,7 @@ type CancelResponse struct { func (x *CancelResponse) Reset() { *x = CancelResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[19] + mi := &file_api_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1227,7 +1352,7 @@ func (x *CancelResponse) String() string { func (*CancelResponse) ProtoMessage() {} func (x *CancelResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[19] + mi := &file_api_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1240,7 +1365,7 @@ func (x *CancelResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CancelResponse.ProtoReflect.Descriptor instead. func (*CancelResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{19} + return file_api_proto_rawDescGZIP(), []int{20} } // PrecompiledObject represents one PrecompiledObject with its information @@ -1254,7 +1379,7 @@ type PrecompiledObject struct { Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` Type PrecompiledObjectType `protobuf:"varint,4,opt,name=type,proto3,enum=api.v1.PrecompiledObjectType" json:"type,omitempty"` PipelineOptions string `protobuf:"bytes,5,opt,name=pipeline_options,json=pipelineOptions,proto3" json:"pipeline_options,omitempty"` - // Link to the example in the Beam repository + // TODO mark reserved after #24402 update sequence is done Link string `protobuf:"bytes,6,opt,name=link,proto3" json:"link,omitempty"` Multifile bool `protobuf:"varint,7,opt,name=multifile,proto3" json:"multifile,omitempty"` ContextLine int32 `protobuf:"varint,8,opt,name=context_line,json=contextLine,proto3" json:"context_line,omitempty"` @@ -1262,12 +1387,16 @@ type PrecompiledObject struct { Sdk Sdk `protobuf:"varint,10,opt,name=sdk,proto3,enum=api.v1.Sdk" json:"sdk,omitempty"` Complexity Complexity `protobuf:"varint,11,opt,name=complexity,proto3,enum=api.v1.Complexity" json:"complexity,omitempty"` Tags []string `protobuf:"bytes,12,rep,name=tags,proto3" json:"tags,omitempty"` + Datasets []*Dataset `protobuf:"bytes,13,rep,name=datasets,proto3" json:"datasets,omitempty"` + // Link to the example in the Beam repository + UrlVcs string `protobuf:"bytes,14,opt,name=url_vcs,json=urlVcs,proto3" json:"url_vcs,omitempty"` + UrlNotebook string `protobuf:"bytes,15,opt,name=url_notebook,json=urlNotebook,proto3" json:"url_notebook,omitempty"` } func (x *PrecompiledObject) Reset() { *x = PrecompiledObject{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[20] + mi := &file_api_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1280,7 +1409,7 @@ func (x *PrecompiledObject) String() string { func (*PrecompiledObject) ProtoMessage() {} func (x *PrecompiledObject) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[20] + mi := &file_api_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1293,7 +1422,7 @@ func (x *PrecompiledObject) ProtoReflect() protoreflect.Message { // Deprecated: Use PrecompiledObject.ProtoReflect.Descriptor instead. func (*PrecompiledObject) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{20} + return file_api_proto_rawDescGZIP(), []int{21} } func (x *PrecompiledObject) GetCloudPath() string { @@ -1380,6 +1509,27 @@ func (x *PrecompiledObject) GetTags() []string { return nil } +func (x *PrecompiledObject) GetDatasets() []*Dataset { + if x != nil { + return x.Datasets + } + return nil +} + +func (x *PrecompiledObject) GetUrlVcs() string { + if x != nil { + return x.UrlVcs + } + return "" +} + +func (x *PrecompiledObject) GetUrlNotebook() string { + if x != nil { + return x.UrlNotebook + } + return "" +} + // Categories represent the array of messages with sdk and categories at this sdk type Categories struct { state protoimpl.MessageState @@ -1393,7 +1543,7 @@ type Categories struct { func (x *Categories) Reset() { *x = Categories{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[21] + mi := &file_api_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1406,7 +1556,7 @@ func (x *Categories) String() string { func (*Categories) ProtoMessage() {} func (x *Categories) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[21] + mi := &file_api_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1419,7 +1569,7 @@ func (x *Categories) ProtoReflect() protoreflect.Message { // Deprecated: Use Categories.ProtoReflect.Descriptor instead. func (*Categories) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{21} + return file_api_proto_rawDescGZIP(), []int{22} } func (x *Categories) GetSdk() Sdk { @@ -1449,7 +1599,7 @@ type GetPrecompiledObjectsRequest struct { func (x *GetPrecompiledObjectsRequest) Reset() { *x = GetPrecompiledObjectsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[22] + mi := &file_api_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1462,7 +1612,7 @@ func (x *GetPrecompiledObjectsRequest) String() string { func (*GetPrecompiledObjectsRequest) ProtoMessage() {} func (x *GetPrecompiledObjectsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[22] + mi := &file_api_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1475,7 +1625,7 @@ func (x *GetPrecompiledObjectsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPrecompiledObjectsRequest.ProtoReflect.Descriptor instead. func (*GetPrecompiledObjectsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{22} + return file_api_proto_rawDescGZIP(), []int{23} } func (x *GetPrecompiledObjectsRequest) GetSdk() Sdk { @@ -1504,7 +1654,7 @@ type GetPrecompiledObjectRequest struct { func (x *GetPrecompiledObjectRequest) Reset() { *x = GetPrecompiledObjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[23] + mi := &file_api_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1517,7 +1667,7 @@ func (x *GetPrecompiledObjectRequest) String() string { func (*GetPrecompiledObjectRequest) ProtoMessage() {} func (x *GetPrecompiledObjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[23] + mi := &file_api_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1530,7 +1680,7 @@ func (x *GetPrecompiledObjectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPrecompiledObjectRequest.ProtoReflect.Descriptor instead. func (*GetPrecompiledObjectRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{23} + return file_api_proto_rawDescGZIP(), []int{24} } func (x *GetPrecompiledObjectRequest) GetCloudPath() string { @@ -1552,7 +1702,7 @@ type GetPrecompiledObjectCodeRequest struct { func (x *GetPrecompiledObjectCodeRequest) Reset() { *x = GetPrecompiledObjectCodeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[24] + mi := &file_api_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1565,7 +1715,7 @@ func (x *GetPrecompiledObjectCodeRequest) String() string { func (*GetPrecompiledObjectCodeRequest) ProtoMessage() {} func (x *GetPrecompiledObjectCodeRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[24] + mi := &file_api_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1578,7 +1728,7 @@ func (x *GetPrecompiledObjectCodeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPrecompiledObjectCodeRequest.ProtoReflect.Descriptor instead. func (*GetPrecompiledObjectCodeRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{24} + return file_api_proto_rawDescGZIP(), []int{25} } func (x *GetPrecompiledObjectCodeRequest) GetCloudPath() string { @@ -1600,7 +1750,7 @@ type GetPrecompiledObjectOutputRequest struct { func (x *GetPrecompiledObjectOutputRequest) Reset() { *x = GetPrecompiledObjectOutputRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[25] + mi := &file_api_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1613,7 +1763,7 @@ func (x *GetPrecompiledObjectOutputRequest) String() string { func (*GetPrecompiledObjectOutputRequest) ProtoMessage() {} func (x *GetPrecompiledObjectOutputRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[25] + mi := &file_api_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1626,7 +1776,7 @@ func (x *GetPrecompiledObjectOutputRequest) ProtoReflect() protoreflect.Message // Deprecated: Use GetPrecompiledObjectOutputRequest.ProtoReflect.Descriptor instead. func (*GetPrecompiledObjectOutputRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{25} + return file_api_proto_rawDescGZIP(), []int{26} } func (x *GetPrecompiledObjectOutputRequest) GetCloudPath() string { @@ -1648,7 +1798,7 @@ type GetPrecompiledObjectLogsRequest struct { func (x *GetPrecompiledObjectLogsRequest) Reset() { *x = GetPrecompiledObjectLogsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[26] + mi := &file_api_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1661,7 +1811,7 @@ func (x *GetPrecompiledObjectLogsRequest) String() string { func (*GetPrecompiledObjectLogsRequest) ProtoMessage() {} func (x *GetPrecompiledObjectLogsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[26] + mi := &file_api_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1674,7 +1824,7 @@ func (x *GetPrecompiledObjectLogsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPrecompiledObjectLogsRequest.ProtoReflect.Descriptor instead. func (*GetPrecompiledObjectLogsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{26} + return file_api_proto_rawDescGZIP(), []int{27} } func (x *GetPrecompiledObjectLogsRequest) GetCloudPath() string { @@ -1696,7 +1846,7 @@ type GetPrecompiledObjectGraphRequest struct { func (x *GetPrecompiledObjectGraphRequest) Reset() { *x = GetPrecompiledObjectGraphRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[27] + mi := &file_api_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1709,7 +1859,7 @@ func (x *GetPrecompiledObjectGraphRequest) String() string { func (*GetPrecompiledObjectGraphRequest) ProtoMessage() {} func (x *GetPrecompiledObjectGraphRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[27] + mi := &file_api_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1722,7 +1872,7 @@ func (x *GetPrecompiledObjectGraphRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPrecompiledObjectGraphRequest.ProtoReflect.Descriptor instead. func (*GetPrecompiledObjectGraphRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{27} + return file_api_proto_rawDescGZIP(), []int{28} } func (x *GetPrecompiledObjectGraphRequest) GetCloudPath() string { @@ -1744,7 +1894,7 @@ type GetDefaultPrecompiledObjectRequest struct { func (x *GetDefaultPrecompiledObjectRequest) Reset() { *x = GetDefaultPrecompiledObjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[28] + mi := &file_api_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1757,7 +1907,7 @@ func (x *GetDefaultPrecompiledObjectRequest) String() string { func (*GetDefaultPrecompiledObjectRequest) ProtoMessage() {} func (x *GetDefaultPrecompiledObjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[28] + mi := &file_api_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1770,7 +1920,7 @@ func (x *GetDefaultPrecompiledObjectRequest) ProtoReflect() protoreflect.Message // Deprecated: Use GetDefaultPrecompiledObjectRequest.ProtoReflect.Descriptor instead. func (*GetDefaultPrecompiledObjectRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{28} + return file_api_proto_rawDescGZIP(), []int{29} } func (x *GetDefaultPrecompiledObjectRequest) GetSdk() Sdk { @@ -1792,7 +1942,7 @@ type GetPrecompiledObjectsResponse struct { func (x *GetPrecompiledObjectsResponse) Reset() { *x = GetPrecompiledObjectsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[29] + mi := &file_api_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1805,7 +1955,7 @@ func (x *GetPrecompiledObjectsResponse) String() string { func (*GetPrecompiledObjectsResponse) ProtoMessage() {} func (x *GetPrecompiledObjectsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[29] + mi := &file_api_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1818,7 +1968,7 @@ func (x *GetPrecompiledObjectsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPrecompiledObjectsResponse.ProtoReflect.Descriptor instead. func (*GetPrecompiledObjectsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{29} + return file_api_proto_rawDescGZIP(), []int{30} } func (x *GetPrecompiledObjectsResponse) GetSdkCategories() []*Categories { @@ -1840,7 +1990,7 @@ type GetPrecompiledObjectResponse struct { func (x *GetPrecompiledObjectResponse) Reset() { *x = GetPrecompiledObjectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[30] + mi := &file_api_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1853,7 +2003,7 @@ func (x *GetPrecompiledObjectResponse) String() string { func (*GetPrecompiledObjectResponse) ProtoMessage() {} func (x *GetPrecompiledObjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[30] + mi := &file_api_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1866,7 +2016,7 @@ func (x *GetPrecompiledObjectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPrecompiledObjectResponse.ProtoReflect.Descriptor instead. func (*GetPrecompiledObjectResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{30} + return file_api_proto_rawDescGZIP(), []int{31} } func (x *GetPrecompiledObjectResponse) GetPrecompiledObject() *PrecompiledObject { @@ -1882,13 +2032,14 @@ type GetPrecompiledObjectCodeResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + Files []*SnippetFile `protobuf:"bytes,2,rep,name=files,proto3" json:"files,omitempty"` } func (x *GetPrecompiledObjectCodeResponse) Reset() { *x = GetPrecompiledObjectCodeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[31] + mi := &file_api_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1901,7 +2052,7 @@ func (x *GetPrecompiledObjectCodeResponse) String() string { func (*GetPrecompiledObjectCodeResponse) ProtoMessage() {} func (x *GetPrecompiledObjectCodeResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[31] + mi := &file_api_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1914,7 +2065,7 @@ func (x *GetPrecompiledObjectCodeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPrecompiledObjectCodeResponse.ProtoReflect.Descriptor instead. func (*GetPrecompiledObjectCodeResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{31} + return file_api_proto_rawDescGZIP(), []int{32} } func (x *GetPrecompiledObjectCodeResponse) GetCode() string { @@ -1924,6 +2075,13 @@ func (x *GetPrecompiledObjectCodeResponse) GetCode() string { return "" } +func (x *GetPrecompiledObjectCodeResponse) GetFiles() []*SnippetFile { + if x != nil { + return x.Files + } + return nil +} + // GetPrecompiledObjectOutputResponse represents the result of the executed code. type GetPrecompiledObjectOutputResponse struct { state protoimpl.MessageState @@ -1936,7 +2094,7 @@ type GetPrecompiledObjectOutputResponse struct { func (x *GetPrecompiledObjectOutputResponse) Reset() { *x = GetPrecompiledObjectOutputResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[32] + mi := &file_api_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1949,7 +2107,7 @@ func (x *GetPrecompiledObjectOutputResponse) String() string { func (*GetPrecompiledObjectOutputResponse) ProtoMessage() {} func (x *GetPrecompiledObjectOutputResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[32] + mi := &file_api_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1962,7 +2120,7 @@ func (x *GetPrecompiledObjectOutputResponse) ProtoReflect() protoreflect.Message // Deprecated: Use GetPrecompiledObjectOutputResponse.ProtoReflect.Descriptor instead. func (*GetPrecompiledObjectOutputResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{32} + return file_api_proto_rawDescGZIP(), []int{33} } func (x *GetPrecompiledObjectOutputResponse) GetOutput() string { @@ -1984,7 +2142,7 @@ type GetPrecompiledObjectLogsResponse struct { func (x *GetPrecompiledObjectLogsResponse) Reset() { *x = GetPrecompiledObjectLogsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[33] + mi := &file_api_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1997,7 +2155,7 @@ func (x *GetPrecompiledObjectLogsResponse) String() string { func (*GetPrecompiledObjectLogsResponse) ProtoMessage() {} func (x *GetPrecompiledObjectLogsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[33] + mi := &file_api_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2010,7 +2168,7 @@ func (x *GetPrecompiledObjectLogsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPrecompiledObjectLogsResponse.ProtoReflect.Descriptor instead. func (*GetPrecompiledObjectLogsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{33} + return file_api_proto_rawDescGZIP(), []int{34} } func (x *GetPrecompiledObjectLogsResponse) GetOutput() string { @@ -2032,7 +2190,7 @@ type GetPrecompiledObjectGraphResponse struct { func (x *GetPrecompiledObjectGraphResponse) Reset() { *x = GetPrecompiledObjectGraphResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[34] + mi := &file_api_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2045,7 +2203,7 @@ func (x *GetPrecompiledObjectGraphResponse) String() string { func (*GetPrecompiledObjectGraphResponse) ProtoMessage() {} func (x *GetPrecompiledObjectGraphResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[34] + mi := &file_api_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2058,7 +2216,7 @@ func (x *GetPrecompiledObjectGraphResponse) ProtoReflect() protoreflect.Message // Deprecated: Use GetPrecompiledObjectGraphResponse.ProtoReflect.Descriptor instead. func (*GetPrecompiledObjectGraphResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{34} + return file_api_proto_rawDescGZIP(), []int{35} } func (x *GetPrecompiledObjectGraphResponse) GetGraph() string { @@ -2080,7 +2238,7 @@ type GetDefaultPrecompiledObjectResponse struct { func (x *GetDefaultPrecompiledObjectResponse) Reset() { *x = GetDefaultPrecompiledObjectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[35] + mi := &file_api_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2093,7 +2251,7 @@ func (x *GetDefaultPrecompiledObjectResponse) String() string { func (*GetDefaultPrecompiledObjectResponse) ProtoMessage() {} func (x *GetDefaultPrecompiledObjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[35] + mi := &file_api_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2106,7 +2264,7 @@ func (x *GetDefaultPrecompiledObjectResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use GetDefaultPrecompiledObjectResponse.ProtoReflect.Descriptor instead. func (*GetDefaultPrecompiledObjectResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{35} + return file_api_proto_rawDescGZIP(), []int{36} } func (x *GetDefaultPrecompiledObjectResponse) GetPrecompiledObject() *PrecompiledObject { @@ -2130,7 +2288,7 @@ type SnippetFile struct { func (x *SnippetFile) Reset() { *x = SnippetFile{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[36] + mi := &file_api_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2143,7 +2301,7 @@ func (x *SnippetFile) String() string { func (*SnippetFile) ProtoMessage() {} func (x *SnippetFile) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[36] + mi := &file_api_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2156,7 +2314,7 @@ func (x *SnippetFile) ProtoReflect() protoreflect.Message { // Deprecated: Use SnippetFile.ProtoReflect.Descriptor instead. func (*SnippetFile) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{36} + return file_api_proto_rawDescGZIP(), []int{37} } func (x *SnippetFile) GetName() string { @@ -2197,7 +2355,7 @@ type SaveSnippetRequest struct { func (x *SaveSnippetRequest) Reset() { *x = SaveSnippetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[37] + mi := &file_api_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2210,7 +2368,7 @@ func (x *SaveSnippetRequest) String() string { func (*SaveSnippetRequest) ProtoMessage() {} func (x *SaveSnippetRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[37] + mi := &file_api_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2223,7 +2381,7 @@ func (x *SaveSnippetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SaveSnippetRequest.ProtoReflect.Descriptor instead. func (*SaveSnippetRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{37} + return file_api_proto_rawDescGZIP(), []int{38} } func (x *SaveSnippetRequest) GetFiles() []*SnippetFile { @@ -2273,7 +2431,7 @@ type SaveSnippetResponse struct { func (x *SaveSnippetResponse) Reset() { *x = SaveSnippetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[38] + mi := &file_api_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2286,7 +2444,7 @@ func (x *SaveSnippetResponse) String() string { func (*SaveSnippetResponse) ProtoMessage() {} func (x *SaveSnippetResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[38] + mi := &file_api_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2299,7 +2457,7 @@ func (x *SaveSnippetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SaveSnippetResponse.ProtoReflect.Descriptor instead. func (*SaveSnippetResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{38} + return file_api_proto_rawDescGZIP(), []int{39} } func (x *SaveSnippetResponse) GetId() string { @@ -2321,7 +2479,7 @@ type GetSnippetRequest struct { func (x *GetSnippetRequest) Reset() { *x = GetSnippetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[39] + mi := &file_api_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2334,7 +2492,7 @@ func (x *GetSnippetRequest) String() string { func (*GetSnippetRequest) ProtoMessage() {} func (x *GetSnippetRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[39] + mi := &file_api_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2347,7 +2505,7 @@ func (x *GetSnippetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSnippetRequest.ProtoReflect.Descriptor instead. func (*GetSnippetRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{39} + return file_api_proto_rawDescGZIP(), []int{40} } func (x *GetSnippetRequest) GetId() string { @@ -2373,7 +2531,7 @@ type GetSnippetResponse struct { func (x *GetSnippetResponse) Reset() { *x = GetSnippetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[40] + mi := &file_api_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2386,7 +2544,7 @@ func (x *GetSnippetResponse) String() string { func (*GetSnippetResponse) ProtoMessage() {} func (x *GetSnippetResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[40] + mi := &file_api_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2399,7 +2557,7 @@ func (x *GetSnippetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSnippetResponse.ProtoReflect.Descriptor instead. func (*GetSnippetResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{40} + return file_api_proto_rawDescGZIP(), []int{41} } func (x *GetSnippetResponse) GetFiles() []*SnippetFile { @@ -2430,6 +2588,117 @@ func (x *GetSnippetResponse) GetComplexity() Complexity { return Complexity_COMPLEXITY_UNSPECIFIED } +// GetMetadataRequest represents request for runner metadata +type GetMetadataRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetMetadataRequest) Reset() { + *x = GetMetadataRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMetadataRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMetadataRequest) ProtoMessage() {} + +func (x *GetMetadataRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[42] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMetadataRequest.ProtoReflect.Descriptor instead. +func (*GetMetadataRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{42} +} + +// GetMetadataResponse contains metadata about the runner +type GetMetadataResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RunnerSdk string `protobuf:"bytes,1,opt,name=runner_sdk,json=runnerSdk,proto3" json:"runner_sdk,omitempty"` + BuildCommitHash *string `protobuf:"bytes,2,opt,name=build_commit_hash,json=buildCommitHash,proto3,oneof" json:"build_commit_hash,omitempty"` + BuildCommitTimestampSecondsSinceEpoch *int64 `protobuf:"varint,3,opt,name=build_commit_timestamp_seconds_since_epoch,json=buildCommitTimestampSecondsSinceEpoch,proto3,oneof" json:"build_commit_timestamp_seconds_since_epoch,omitempty"` + BeamSdkVersion *string `protobuf:"bytes,4,opt,name=beam_sdk_version,json=beamSdkVersion,proto3,oneof" json:"beam_sdk_version,omitempty"` +} + +func (x *GetMetadataResponse) Reset() { + *x = GetMetadataResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMetadataResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMetadataResponse) ProtoMessage() {} + +func (x *GetMetadataResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[43] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMetadataResponse.ProtoReflect.Descriptor instead. +func (*GetMetadataResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{43} +} + +func (x *GetMetadataResponse) GetRunnerSdk() string { + if x != nil { + return x.RunnerSdk + } + return "" +} + +func (x *GetMetadataResponse) GetBuildCommitHash() string { + if x != nil && x.BuildCommitHash != nil { + return *x.BuildCommitHash + } + return "" +} + +func (x *GetMetadataResponse) GetBuildCommitTimestampSecondsSinceEpoch() int64 { + if x != nil && x.BuildCommitTimestampSecondsSinceEpoch != nil { + return *x.BuildCommitTimestampSecondsSinceEpoch + } + return 0 +} + +func (x *GetMetadataResponse) GetBeamSdkVersion() string { + if x != nil && x.BeamSdkVersion != nil { + return *x.BeamSdkVersion + } + return "" +} + type Categories_Category struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2442,7 +2711,7 @@ type Categories_Category struct { func (x *Categories_Category) Reset() { *x = Categories_Category{} if protoimpl.UnsafeEnabled { - mi := &file_api_proto_msgTypes[41] + mi := &file_api_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2455,7 +2724,7 @@ func (x *Categories_Category) String() string { func (*Categories_Category) ProtoMessage() {} func (x *Categories_Category) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[41] + mi := &file_api_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2468,7 +2737,7 @@ func (x *Categories_Category) ProtoReflect() protoreflect.Message { // Deprecated: Use Categories_Category.ProtoReflect.Descriptor instead. func (*Categories_Category) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{21, 0} + return file_api_proto_rawDescGZIP(), []int{22, 0} } func (x *Categories_Category) GetCategoryName() string { @@ -2489,372 +2758,431 @@ var File_api_proto protoreflect.FileDescriptor var file_api_proto_rawDesc = []byte{ 0x0a, 0x09, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x22, 0x6e, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x03, 0x73, 0x64, 0x6b, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x64, 0x6b, 0x52, 0x03, 0x73, 0x64, 0x6b, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x36, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0x39, 0x0a, 0x12, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0x3d, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x41, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, - 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0x35, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, - 0x42, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, - 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, - 0x75, 0x69, 0x64, 0x22, 0x36, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x3e, 0x0a, 0x17, 0x47, - 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0x32, 0x0a, 0x18, 0x47, - 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, - 0x3a, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0x2e, 0x0a, 0x14, 0x47, - 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x39, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, - 0x6e, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0x2d, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, + 0x2e, 0x76, 0x31, 0x22, 0xca, 0x01, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, + 0x28, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x2e, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, + 0x50, 0x61, 0x74, 0x68, 0x1a, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xc6, 0x01, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x03, 0x73, 0x64, 0x6b, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x64, + 0x6b, 0x52, 0x03, 0x73, 0x64, 0x6b, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, + 0x6e, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x2b, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, + 0x61, 0x73, 0x65, 0x74, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x73, 0x12, 0x29, + 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x46, 0x69, + 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0x36, 0x0a, 0x0f, 0x52, 0x75, 0x6e, + 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, + 0x64, 0x22, 0x39, 0x0a, 0x12, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, + 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0x3d, 0x0a, 0x13, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x41, 0x0a, 0x1a, 0x47, + 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0x35, + 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x35, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x42, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, + 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, + 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, + 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0x36, 0x0a, 0x1c, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x22, 0x3e, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, + 0x64, 0x22, 0x32, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x3a, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, + 0x64, 0x22, 0x2e, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x22, 0x39, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0x29, 0x0a, 0x0f, - 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x36, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x47, 0x72, - 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, - 0x28, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x22, 0x34, 0x0a, 0x0d, 0x43, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, - 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, - 0x10, 0x0a, 0x0e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xab, 0x03, 0x0a, 0x11, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, - 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x29, 0x0a, 0x10, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x69, 0x70, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, - 0x6e, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x1c, - 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4c, 0x69, 0x6e, 0x65, 0x12, - 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x03, 0x73, 0x64, 0x6b, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x64, 0x6b, 0x52, 0x03, 0x73, 0x64, 0x6b, 0x12, 0x32, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x78, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x52, - 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x61, 0x67, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, - 0xe5, 0x01, 0x0a, 0x0a, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, - 0x0a, 0x03, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x03, 0x73, 0x64, 0x6b, 0x12, 0x3b, 0x0a, - 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0a, - 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x7b, 0x0a, 0x08, 0x43, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, - 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x13, 0x70, + 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0x2d, 0x0a, 0x13, + 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x35, 0x0a, 0x0e, 0x47, + 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, + 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x55, 0x75, + 0x69, 0x64, 0x22, 0x29, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x36, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, + 0x70, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x22, + 0x34, 0x0a, 0x0d, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x75, 0x75, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x55, 0x75, 0x69, 0x64, 0x22, 0x10, 0x0a, 0x0e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x94, 0x04, 0x0a, 0x11, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x0a, + 0x0a, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x66, 0x69, 0x6c, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x66, 0x69, + 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x69, + 0x6e, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x5f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x1d, + 0x0a, 0x03, 0x73, 0x64, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x03, 0x73, 0x64, 0x6b, 0x12, 0x32, 0x0a, + 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x78, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, + 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x2b, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, + 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, + 0x74, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x72, 0x6c, 0x5f, 0x76, 0x63, 0x73, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x72, 0x6c, 0x56, 0x63, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, + 0x72, 0x6c, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x75, 0x72, 0x6c, 0x4e, 0x6f, 0x74, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0xe5, + 0x01, 0x0a, 0x0a, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x0a, + 0x03, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x03, 0x73, 0x64, 0x6b, 0x12, 0x3b, 0x0a, 0x0a, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, + 0x72, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0a, 0x63, + 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x7b, 0x0a, 0x08, 0x43, 0x61, 0x74, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, + 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x13, 0x70, 0x72, + 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x12, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0x59, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x03, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x64, 0x6b, + 0x52, 0x03, 0x73, 0x64, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x22, 0x3c, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, + 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x61, 0x74, 0x68, 0x22, + 0x40, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x61, 0x74, + 0x68, 0x22, 0x42, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, + 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x50, 0x61, 0x74, 0x68, 0x22, 0x40, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x50, 0x61, 0x74, 0x68, 0x22, 0x41, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, + 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x61, 0x74, 0x68, 0x22, 0x43, 0x0a, 0x22, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, + 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1d, 0x0a, 0x03, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x03, 0x73, 0x64, 0x6b, 0x22, + 0x5a, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x39, 0x0a, 0x0e, 0x73, 0x64, 0x6b, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x0d, 0x73, 0x64, + 0x6b, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0x68, 0x0a, 0x1c, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x12, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0x59, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x03, 0x73, 0x64, 0x6b, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x64, - 0x6b, 0x52, 0x03, 0x73, 0x64, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x22, 0x3c, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x61, 0x74, 0x68, - 0x22, 0x40, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x61, - 0x74, 0x68, 0x22, 0x42, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x50, 0x61, 0x74, 0x68, 0x22, 0x40, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x11, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x61, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, + 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x46, 0x69, 0x6c, + 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0x3c, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x50, + 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x3a, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, - 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x61, 0x74, 0x68, 0x22, 0x41, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x22, 0x39, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, + 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x22, 0x6f, 0x0a, + 0x23, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, + 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, + 0x6c, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x11, 0x70, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x54, + 0x0a, 0x0b, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x69, + 0x73, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, + 0x4d, 0x61, 0x69, 0x6e, 0x22, 0xe6, 0x01, 0x0a, 0x12, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, + 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, + 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x03, 0x73, 0x64, 0x6b, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x64, 0x6b, + 0x52, 0x03, 0x73, 0x64, 0x6b, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, + 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x32, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x78, 0x69, 0x74, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x25, 0x0a, + 0x13, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x23, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xbd, 0x01, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x29, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, + 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x03, 0x73, + 0x64, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x03, 0x73, 0x64, 0x6b, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x69, + 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x32, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, + 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x63, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0xce, 0x02, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x75, 0x6e, 0x6e, 0x65, + 0x72, 0x5f, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, + 0x6e, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x12, 0x2f, 0x0a, 0x11, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x88, 0x01, 0x01, 0x12, 0x5e, 0x0a, 0x2a, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x25, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x10, 0x62, 0x65, 0x61, 0x6d, 0x5f, + 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x02, 0x52, 0x0e, 0x62, 0x65, 0x61, 0x6d, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x42, 0x2d, 0x0a, 0x2b, + 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, + 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x42, 0x13, 0x0a, 0x11, 0x5f, + 0x62, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x2a, 0x52, 0x0a, 0x03, 0x53, 0x64, 0x6b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x44, 0x4b, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, + 0x53, 0x44, 0x4b, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x44, + 0x4b, 0x5f, 0x47, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x44, 0x4b, 0x5f, 0x50, 0x59, + 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x53, 0x43, + 0x49, 0x4f, 0x10, 0x04, 0x2a, 0xb8, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1b, + 0x0a, 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, + 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, + 0x41, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, + 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, + 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x12, + 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, + 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x09, + 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, + 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0c, 0x2a, + 0xae, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x45, + 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, + 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, + 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x52, 0x45, 0x43, 0x4f, + 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x54, 0x41, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x45, + 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x10, 0x03, + 0x2a, 0x6e, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x12, 0x1a, + 0x0a, 0x16, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, + 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, + 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x4d, + 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x50, 0x4c, + 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x41, 0x44, 0x56, 0x41, 0x4e, 0x43, 0x45, 0x44, 0x10, 0x03, + 0x2a, 0x46, 0x0a, 0x0c, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x17, 0x0a, 0x13, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x4b, 0x41, 0x46, 0x4b, 0x41, 0x10, 0x01, 0x32, 0xd3, 0x0d, 0x0a, 0x11, 0x50, 0x6c, 0x61, + 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, + 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, + 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, + 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, + 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, + 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x5e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x61, + 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, + 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, + 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x61, 0x74, 0x68, 0x22, 0x43, 0x0a, 0x22, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x03, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x03, 0x73, 0x64, 0x6b, - 0x22, 0x5a, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x39, 0x0a, 0x0e, 0x73, 0x64, 0x6b, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x0d, 0x73, - 0x64, 0x6b, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0x68, 0x0a, 0x1c, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x12, - 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x11, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x36, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3c, - 0x0a, 0x22, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x3a, 0x0a, 0x20, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x39, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x50, - 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x22, 0x6f, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x70, 0x72, - 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x11, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x22, 0x54, 0x0a, 0x0b, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x46, - 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4d, 0x61, 0x69, 0x6e, 0x22, 0xe6, 0x01, 0x0a, 0x12, 0x53, - 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x29, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, - 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x03, - 0x73, 0x64, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x03, 0x73, 0x64, 0x6b, 0x12, 0x29, 0x0a, 0x10, 0x70, - 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x32, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x78, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x52, 0x0a, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, - 0x4b, 0x65, 0x79, 0x22, 0x25, 0x0a, 0x13, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x23, 0x0a, 0x11, 0x47, 0x65, - 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, - 0xbd, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, - 0x73, 0x12, 0x1d, 0x0a, 0x03, 0x73, 0x64, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x64, 0x6b, 0x52, 0x03, 0x73, 0x64, 0x6b, - 0x12, 0x29, 0x0a, 0x10, 0x70, 0x69, 0x70, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x69, 0x70, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x32, 0x0a, 0x0a, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, - 0x69, 0x74, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x2a, - 0x52, 0x0a, 0x03, 0x53, 0x64, 0x6b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x44, 0x4b, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, - 0x44, 0x4b, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x44, 0x4b, - 0x5f, 0x47, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x44, 0x4b, 0x5f, 0x50, 0x59, 0x54, - 0x48, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x53, 0x43, 0x49, - 0x4f, 0x10, 0x04, 0x2a, 0xb8, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, - 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1b, 0x0a, - 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, - 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, - 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x14, - 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x49, - 0x4e, 0x47, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, - 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x12, 0x14, - 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, - 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x09, 0x12, - 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, - 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, - 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0c, 0x2a, 0xae, - 0x01, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x45, 0x43, - 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, - 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x41, - 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, - 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x4b, 0x41, 0x54, 0x41, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x45, 0x43, - 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x10, 0x03, 0x2a, - 0x6e, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, - 0x16, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4d, - 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, - 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x45, - 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, - 0x58, 0x49, 0x54, 0x59, 0x5f, 0x41, 0x44, 0x56, 0x41, 0x4e, 0x43, 0x45, 0x44, 0x10, 0x03, 0x32, - 0x8b, 0x0d, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, - 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, - 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x17, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x22, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, - 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, - 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, - 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x15, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, - 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, - 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x73, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, - 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, - 0x6f, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x1a, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, - 0x61, 0x70, 0x68, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x28, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, + 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x76, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, + 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, - 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, - 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, - 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, - 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, - 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, - 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, - 0x36, 0x62, 0x65, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, - 0x2f, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x62, 0x61, 0x63, 0x6b, - 0x65, 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x70, 0x6c, 0x61, - 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x61, 0x76, + 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, + 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, + 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, + 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, + 0x5a, 0x36, 0x62, 0x65, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x62, 0x61, 0x63, + 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x70, 0x6c, + 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2869,119 +3197,132 @@ func file_api_proto_rawDescGZIP() []byte { return file_api_proto_rawDescData } -var file_api_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_api_proto_msgTypes = make([]protoimpl.MessageInfo, 42) +var file_api_proto_enumTypes = make([]protoimpl.EnumInfo, 5) +var file_api_proto_msgTypes = make([]protoimpl.MessageInfo, 46) var file_api_proto_goTypes = []interface{}{ (Sdk)(0), // 0: api.v1.Sdk (Status)(0), // 1: api.v1.Status (PrecompiledObjectType)(0), // 2: api.v1.PrecompiledObjectType (Complexity)(0), // 3: api.v1.Complexity - (*RunCodeRequest)(nil), // 4: api.v1.RunCodeRequest - (*RunCodeResponse)(nil), // 5: api.v1.RunCodeResponse - (*CheckStatusRequest)(nil), // 6: api.v1.CheckStatusRequest - (*CheckStatusResponse)(nil), // 7: api.v1.CheckStatusResponse - (*GetValidationOutputRequest)(nil), // 8: api.v1.GetValidationOutputRequest - (*GetValidationOutputResponse)(nil), // 9: api.v1.GetValidationOutputResponse - (*GetPreparationOutputRequest)(nil), // 10: api.v1.GetPreparationOutputRequest - (*GetPreparationOutputResponse)(nil), // 11: api.v1.GetPreparationOutputResponse - (*GetCompileOutputRequest)(nil), // 12: api.v1.GetCompileOutputRequest - (*GetCompileOutputResponse)(nil), // 13: api.v1.GetCompileOutputResponse - (*GetRunOutputRequest)(nil), // 14: api.v1.GetRunOutputRequest - (*GetRunOutputResponse)(nil), // 15: api.v1.GetRunOutputResponse - (*GetRunErrorRequest)(nil), // 16: api.v1.GetRunErrorRequest - (*GetRunErrorResponse)(nil), // 17: api.v1.GetRunErrorResponse - (*GetLogsRequest)(nil), // 18: api.v1.GetLogsRequest - (*GetLogsResponse)(nil), // 19: api.v1.GetLogsResponse - (*GetGraphRequest)(nil), // 20: api.v1.GetGraphRequest - (*GetGraphResponse)(nil), // 21: api.v1.GetGraphResponse - (*CancelRequest)(nil), // 22: api.v1.CancelRequest - (*CancelResponse)(nil), // 23: api.v1.CancelResponse - (*PrecompiledObject)(nil), // 24: api.v1.PrecompiledObject - (*Categories)(nil), // 25: api.v1.Categories - (*GetPrecompiledObjectsRequest)(nil), // 26: api.v1.GetPrecompiledObjectsRequest - (*GetPrecompiledObjectRequest)(nil), // 27: api.v1.GetPrecompiledObjectRequest - (*GetPrecompiledObjectCodeRequest)(nil), // 28: api.v1.GetPrecompiledObjectCodeRequest - (*GetPrecompiledObjectOutputRequest)(nil), // 29: api.v1.GetPrecompiledObjectOutputRequest - (*GetPrecompiledObjectLogsRequest)(nil), // 30: api.v1.GetPrecompiledObjectLogsRequest - (*GetPrecompiledObjectGraphRequest)(nil), // 31: api.v1.GetPrecompiledObjectGraphRequest - (*GetDefaultPrecompiledObjectRequest)(nil), // 32: api.v1.GetDefaultPrecompiledObjectRequest - (*GetPrecompiledObjectsResponse)(nil), // 33: api.v1.GetPrecompiledObjectsResponse - (*GetPrecompiledObjectResponse)(nil), // 34: api.v1.GetPrecompiledObjectResponse - (*GetPrecompiledObjectCodeResponse)(nil), // 35: api.v1.GetPrecompiledObjectCodeResponse - (*GetPrecompiledObjectOutputResponse)(nil), // 36: api.v1.GetPrecompiledObjectOutputResponse - (*GetPrecompiledObjectLogsResponse)(nil), // 37: api.v1.GetPrecompiledObjectLogsResponse - (*GetPrecompiledObjectGraphResponse)(nil), // 38: api.v1.GetPrecompiledObjectGraphResponse - (*GetDefaultPrecompiledObjectResponse)(nil), // 39: api.v1.GetDefaultPrecompiledObjectResponse - (*SnippetFile)(nil), // 40: api.v1.SnippetFile - (*SaveSnippetRequest)(nil), // 41: api.v1.SaveSnippetRequest - (*SaveSnippetResponse)(nil), // 42: api.v1.SaveSnippetResponse - (*GetSnippetRequest)(nil), // 43: api.v1.GetSnippetRequest - (*GetSnippetResponse)(nil), // 44: api.v1.GetSnippetResponse - (*Categories_Category)(nil), // 45: api.v1.Categories.Category + (EmulatorType)(0), // 4: api.v1.EmulatorType + (*Dataset)(nil), // 5: api.v1.Dataset + (*RunCodeRequest)(nil), // 6: api.v1.RunCodeRequest + (*RunCodeResponse)(nil), // 7: api.v1.RunCodeResponse + (*CheckStatusRequest)(nil), // 8: api.v1.CheckStatusRequest + (*CheckStatusResponse)(nil), // 9: api.v1.CheckStatusResponse + (*GetValidationOutputRequest)(nil), // 10: api.v1.GetValidationOutputRequest + (*GetValidationOutputResponse)(nil), // 11: api.v1.GetValidationOutputResponse + (*GetPreparationOutputRequest)(nil), // 12: api.v1.GetPreparationOutputRequest + (*GetPreparationOutputResponse)(nil), // 13: api.v1.GetPreparationOutputResponse + (*GetCompileOutputRequest)(nil), // 14: api.v1.GetCompileOutputRequest + (*GetCompileOutputResponse)(nil), // 15: api.v1.GetCompileOutputResponse + (*GetRunOutputRequest)(nil), // 16: api.v1.GetRunOutputRequest + (*GetRunOutputResponse)(nil), // 17: api.v1.GetRunOutputResponse + (*GetRunErrorRequest)(nil), // 18: api.v1.GetRunErrorRequest + (*GetRunErrorResponse)(nil), // 19: api.v1.GetRunErrorResponse + (*GetLogsRequest)(nil), // 20: api.v1.GetLogsRequest + (*GetLogsResponse)(nil), // 21: api.v1.GetLogsResponse + (*GetGraphRequest)(nil), // 22: api.v1.GetGraphRequest + (*GetGraphResponse)(nil), // 23: api.v1.GetGraphResponse + (*CancelRequest)(nil), // 24: api.v1.CancelRequest + (*CancelResponse)(nil), // 25: api.v1.CancelResponse + (*PrecompiledObject)(nil), // 26: api.v1.PrecompiledObject + (*Categories)(nil), // 27: api.v1.Categories + (*GetPrecompiledObjectsRequest)(nil), // 28: api.v1.GetPrecompiledObjectsRequest + (*GetPrecompiledObjectRequest)(nil), // 29: api.v1.GetPrecompiledObjectRequest + (*GetPrecompiledObjectCodeRequest)(nil), // 30: api.v1.GetPrecompiledObjectCodeRequest + (*GetPrecompiledObjectOutputRequest)(nil), // 31: api.v1.GetPrecompiledObjectOutputRequest + (*GetPrecompiledObjectLogsRequest)(nil), // 32: api.v1.GetPrecompiledObjectLogsRequest + (*GetPrecompiledObjectGraphRequest)(nil), // 33: api.v1.GetPrecompiledObjectGraphRequest + (*GetDefaultPrecompiledObjectRequest)(nil), // 34: api.v1.GetDefaultPrecompiledObjectRequest + (*GetPrecompiledObjectsResponse)(nil), // 35: api.v1.GetPrecompiledObjectsResponse + (*GetPrecompiledObjectResponse)(nil), // 36: api.v1.GetPrecompiledObjectResponse + (*GetPrecompiledObjectCodeResponse)(nil), // 37: api.v1.GetPrecompiledObjectCodeResponse + (*GetPrecompiledObjectOutputResponse)(nil), // 38: api.v1.GetPrecompiledObjectOutputResponse + (*GetPrecompiledObjectLogsResponse)(nil), // 39: api.v1.GetPrecompiledObjectLogsResponse + (*GetPrecompiledObjectGraphResponse)(nil), // 40: api.v1.GetPrecompiledObjectGraphResponse + (*GetDefaultPrecompiledObjectResponse)(nil), // 41: api.v1.GetDefaultPrecompiledObjectResponse + (*SnippetFile)(nil), // 42: api.v1.SnippetFile + (*SaveSnippetRequest)(nil), // 43: api.v1.SaveSnippetRequest + (*SaveSnippetResponse)(nil), // 44: api.v1.SaveSnippetResponse + (*GetSnippetRequest)(nil), // 45: api.v1.GetSnippetRequest + (*GetSnippetResponse)(nil), // 46: api.v1.GetSnippetResponse + (*GetMetadataRequest)(nil), // 47: api.v1.GetMetadataRequest + (*GetMetadataResponse)(nil), // 48: api.v1.GetMetadataResponse + nil, // 49: api.v1.Dataset.OptionsEntry + (*Categories_Category)(nil), // 50: api.v1.Categories.Category } var file_api_proto_depIdxs = []int32{ - 0, // 0: api.v1.RunCodeRequest.sdk:type_name -> api.v1.Sdk - 1, // 1: api.v1.CheckStatusResponse.status:type_name -> api.v1.Status - 2, // 2: api.v1.PrecompiledObject.type:type_name -> api.v1.PrecompiledObjectType - 0, // 3: api.v1.PrecompiledObject.sdk:type_name -> api.v1.Sdk - 3, // 4: api.v1.PrecompiledObject.complexity:type_name -> api.v1.Complexity - 0, // 5: api.v1.Categories.sdk:type_name -> api.v1.Sdk - 45, // 6: api.v1.Categories.categories:type_name -> api.v1.Categories.Category - 0, // 7: api.v1.GetPrecompiledObjectsRequest.sdk:type_name -> api.v1.Sdk - 0, // 8: api.v1.GetDefaultPrecompiledObjectRequest.sdk:type_name -> api.v1.Sdk - 25, // 9: api.v1.GetPrecompiledObjectsResponse.sdk_categories:type_name -> api.v1.Categories - 24, // 10: api.v1.GetPrecompiledObjectResponse.precompiled_object:type_name -> api.v1.PrecompiledObject - 24, // 11: api.v1.GetDefaultPrecompiledObjectResponse.precompiled_object:type_name -> api.v1.PrecompiledObject - 40, // 12: api.v1.SaveSnippetRequest.files:type_name -> api.v1.SnippetFile - 0, // 13: api.v1.SaveSnippetRequest.sdk:type_name -> api.v1.Sdk - 3, // 14: api.v1.SaveSnippetRequest.complexity:type_name -> api.v1.Complexity - 40, // 15: api.v1.GetSnippetResponse.files:type_name -> api.v1.SnippetFile - 0, // 16: api.v1.GetSnippetResponse.sdk:type_name -> api.v1.Sdk - 3, // 17: api.v1.GetSnippetResponse.complexity:type_name -> api.v1.Complexity - 24, // 18: api.v1.Categories.Category.precompiled_objects:type_name -> api.v1.PrecompiledObject - 4, // 19: api.v1.PlaygroundService.RunCode:input_type -> api.v1.RunCodeRequest - 6, // 20: api.v1.PlaygroundService.CheckStatus:input_type -> api.v1.CheckStatusRequest - 14, // 21: api.v1.PlaygroundService.GetRunOutput:input_type -> api.v1.GetRunOutputRequest - 18, // 22: api.v1.PlaygroundService.GetLogs:input_type -> api.v1.GetLogsRequest - 20, // 23: api.v1.PlaygroundService.GetGraph:input_type -> api.v1.GetGraphRequest - 16, // 24: api.v1.PlaygroundService.GetRunError:input_type -> api.v1.GetRunErrorRequest - 8, // 25: api.v1.PlaygroundService.GetValidationOutput:input_type -> api.v1.GetValidationOutputRequest - 10, // 26: api.v1.PlaygroundService.GetPreparationOutput:input_type -> api.v1.GetPreparationOutputRequest - 12, // 27: api.v1.PlaygroundService.GetCompileOutput:input_type -> api.v1.GetCompileOutputRequest - 22, // 28: api.v1.PlaygroundService.Cancel:input_type -> api.v1.CancelRequest - 26, // 29: api.v1.PlaygroundService.GetPrecompiledObjects:input_type -> api.v1.GetPrecompiledObjectsRequest - 27, // 30: api.v1.PlaygroundService.GetPrecompiledObject:input_type -> api.v1.GetPrecompiledObjectRequest - 28, // 31: api.v1.PlaygroundService.GetPrecompiledObjectCode:input_type -> api.v1.GetPrecompiledObjectCodeRequest - 29, // 32: api.v1.PlaygroundService.GetPrecompiledObjectOutput:input_type -> api.v1.GetPrecompiledObjectOutputRequest - 30, // 33: api.v1.PlaygroundService.GetPrecompiledObjectLogs:input_type -> api.v1.GetPrecompiledObjectLogsRequest - 31, // 34: api.v1.PlaygroundService.GetPrecompiledObjectGraph:input_type -> api.v1.GetPrecompiledObjectGraphRequest - 32, // 35: api.v1.PlaygroundService.GetDefaultPrecompiledObject:input_type -> api.v1.GetDefaultPrecompiledObjectRequest - 41, // 36: api.v1.PlaygroundService.SaveSnippet:input_type -> api.v1.SaveSnippetRequest - 43, // 37: api.v1.PlaygroundService.GetSnippet:input_type -> api.v1.GetSnippetRequest - 5, // 38: api.v1.PlaygroundService.RunCode:output_type -> api.v1.RunCodeResponse - 7, // 39: api.v1.PlaygroundService.CheckStatus:output_type -> api.v1.CheckStatusResponse - 15, // 40: api.v1.PlaygroundService.GetRunOutput:output_type -> api.v1.GetRunOutputResponse - 19, // 41: api.v1.PlaygroundService.GetLogs:output_type -> api.v1.GetLogsResponse - 21, // 42: api.v1.PlaygroundService.GetGraph:output_type -> api.v1.GetGraphResponse - 17, // 43: api.v1.PlaygroundService.GetRunError:output_type -> api.v1.GetRunErrorResponse - 9, // 44: api.v1.PlaygroundService.GetValidationOutput:output_type -> api.v1.GetValidationOutputResponse - 11, // 45: api.v1.PlaygroundService.GetPreparationOutput:output_type -> api.v1.GetPreparationOutputResponse - 13, // 46: api.v1.PlaygroundService.GetCompileOutput:output_type -> api.v1.GetCompileOutputResponse - 23, // 47: api.v1.PlaygroundService.Cancel:output_type -> api.v1.CancelResponse - 33, // 48: api.v1.PlaygroundService.GetPrecompiledObjects:output_type -> api.v1.GetPrecompiledObjectsResponse - 34, // 49: api.v1.PlaygroundService.GetPrecompiledObject:output_type -> api.v1.GetPrecompiledObjectResponse - 35, // 50: api.v1.PlaygroundService.GetPrecompiledObjectCode:output_type -> api.v1.GetPrecompiledObjectCodeResponse - 36, // 51: api.v1.PlaygroundService.GetPrecompiledObjectOutput:output_type -> api.v1.GetPrecompiledObjectOutputResponse - 37, // 52: api.v1.PlaygroundService.GetPrecompiledObjectLogs:output_type -> api.v1.GetPrecompiledObjectLogsResponse - 38, // 53: api.v1.PlaygroundService.GetPrecompiledObjectGraph:output_type -> api.v1.GetPrecompiledObjectGraphResponse - 39, // 54: api.v1.PlaygroundService.GetDefaultPrecompiledObject:output_type -> api.v1.GetDefaultPrecompiledObjectResponse - 42, // 55: api.v1.PlaygroundService.SaveSnippet:output_type -> api.v1.SaveSnippetResponse - 44, // 56: api.v1.PlaygroundService.GetSnippet:output_type -> api.v1.GetSnippetResponse - 38, // [38:57] is the sub-list for method output_type - 19, // [19:38] is the sub-list for method input_type - 19, // [19:19] is the sub-list for extension type_name - 19, // [19:19] is the sub-list for extension extendee - 0, // [0:19] is the sub-list for field type_name + 4, // 0: api.v1.Dataset.type:type_name -> api.v1.EmulatorType + 49, // 1: api.v1.Dataset.options:type_name -> api.v1.Dataset.OptionsEntry + 0, // 2: api.v1.RunCodeRequest.sdk:type_name -> api.v1.Sdk + 5, // 3: api.v1.RunCodeRequest.datasets:type_name -> api.v1.Dataset + 42, // 4: api.v1.RunCodeRequest.files:type_name -> api.v1.SnippetFile + 1, // 5: api.v1.CheckStatusResponse.status:type_name -> api.v1.Status + 2, // 6: api.v1.PrecompiledObject.type:type_name -> api.v1.PrecompiledObjectType + 0, // 7: api.v1.PrecompiledObject.sdk:type_name -> api.v1.Sdk + 3, // 8: api.v1.PrecompiledObject.complexity:type_name -> api.v1.Complexity + 5, // 9: api.v1.PrecompiledObject.datasets:type_name -> api.v1.Dataset + 0, // 10: api.v1.Categories.sdk:type_name -> api.v1.Sdk + 50, // 11: api.v1.Categories.categories:type_name -> api.v1.Categories.Category + 0, // 12: api.v1.GetPrecompiledObjectsRequest.sdk:type_name -> api.v1.Sdk + 0, // 13: api.v1.GetDefaultPrecompiledObjectRequest.sdk:type_name -> api.v1.Sdk + 27, // 14: api.v1.GetPrecompiledObjectsResponse.sdk_categories:type_name -> api.v1.Categories + 26, // 15: api.v1.GetPrecompiledObjectResponse.precompiled_object:type_name -> api.v1.PrecompiledObject + 42, // 16: api.v1.GetPrecompiledObjectCodeResponse.files:type_name -> api.v1.SnippetFile + 26, // 17: api.v1.GetDefaultPrecompiledObjectResponse.precompiled_object:type_name -> api.v1.PrecompiledObject + 42, // 18: api.v1.SaveSnippetRequest.files:type_name -> api.v1.SnippetFile + 0, // 19: api.v1.SaveSnippetRequest.sdk:type_name -> api.v1.Sdk + 3, // 20: api.v1.SaveSnippetRequest.complexity:type_name -> api.v1.Complexity + 42, // 21: api.v1.GetSnippetResponse.files:type_name -> api.v1.SnippetFile + 0, // 22: api.v1.GetSnippetResponse.sdk:type_name -> api.v1.Sdk + 3, // 23: api.v1.GetSnippetResponse.complexity:type_name -> api.v1.Complexity + 26, // 24: api.v1.Categories.Category.precompiled_objects:type_name -> api.v1.PrecompiledObject + 6, // 25: api.v1.PlaygroundService.RunCode:input_type -> api.v1.RunCodeRequest + 8, // 26: api.v1.PlaygroundService.CheckStatus:input_type -> api.v1.CheckStatusRequest + 16, // 27: api.v1.PlaygroundService.GetRunOutput:input_type -> api.v1.GetRunOutputRequest + 20, // 28: api.v1.PlaygroundService.GetLogs:input_type -> api.v1.GetLogsRequest + 22, // 29: api.v1.PlaygroundService.GetGraph:input_type -> api.v1.GetGraphRequest + 18, // 30: api.v1.PlaygroundService.GetRunError:input_type -> api.v1.GetRunErrorRequest + 10, // 31: api.v1.PlaygroundService.GetValidationOutput:input_type -> api.v1.GetValidationOutputRequest + 12, // 32: api.v1.PlaygroundService.GetPreparationOutput:input_type -> api.v1.GetPreparationOutputRequest + 14, // 33: api.v1.PlaygroundService.GetCompileOutput:input_type -> api.v1.GetCompileOutputRequest + 24, // 34: api.v1.PlaygroundService.Cancel:input_type -> api.v1.CancelRequest + 28, // 35: api.v1.PlaygroundService.GetPrecompiledObjects:input_type -> api.v1.GetPrecompiledObjectsRequest + 29, // 36: api.v1.PlaygroundService.GetPrecompiledObject:input_type -> api.v1.GetPrecompiledObjectRequest + 30, // 37: api.v1.PlaygroundService.GetPrecompiledObjectCode:input_type -> api.v1.GetPrecompiledObjectCodeRequest + 31, // 38: api.v1.PlaygroundService.GetPrecompiledObjectOutput:input_type -> api.v1.GetPrecompiledObjectOutputRequest + 32, // 39: api.v1.PlaygroundService.GetPrecompiledObjectLogs:input_type -> api.v1.GetPrecompiledObjectLogsRequest + 33, // 40: api.v1.PlaygroundService.GetPrecompiledObjectGraph:input_type -> api.v1.GetPrecompiledObjectGraphRequest + 34, // 41: api.v1.PlaygroundService.GetDefaultPrecompiledObject:input_type -> api.v1.GetDefaultPrecompiledObjectRequest + 43, // 42: api.v1.PlaygroundService.SaveSnippet:input_type -> api.v1.SaveSnippetRequest + 45, // 43: api.v1.PlaygroundService.GetSnippet:input_type -> api.v1.GetSnippetRequest + 47, // 44: api.v1.PlaygroundService.GetMetadata:input_type -> api.v1.GetMetadataRequest + 7, // 45: api.v1.PlaygroundService.RunCode:output_type -> api.v1.RunCodeResponse + 9, // 46: api.v1.PlaygroundService.CheckStatus:output_type -> api.v1.CheckStatusResponse + 17, // 47: api.v1.PlaygroundService.GetRunOutput:output_type -> api.v1.GetRunOutputResponse + 21, // 48: api.v1.PlaygroundService.GetLogs:output_type -> api.v1.GetLogsResponse + 23, // 49: api.v1.PlaygroundService.GetGraph:output_type -> api.v1.GetGraphResponse + 19, // 50: api.v1.PlaygroundService.GetRunError:output_type -> api.v1.GetRunErrorResponse + 11, // 51: api.v1.PlaygroundService.GetValidationOutput:output_type -> api.v1.GetValidationOutputResponse + 13, // 52: api.v1.PlaygroundService.GetPreparationOutput:output_type -> api.v1.GetPreparationOutputResponse + 15, // 53: api.v1.PlaygroundService.GetCompileOutput:output_type -> api.v1.GetCompileOutputResponse + 25, // 54: api.v1.PlaygroundService.Cancel:output_type -> api.v1.CancelResponse + 35, // 55: api.v1.PlaygroundService.GetPrecompiledObjects:output_type -> api.v1.GetPrecompiledObjectsResponse + 36, // 56: api.v1.PlaygroundService.GetPrecompiledObject:output_type -> api.v1.GetPrecompiledObjectResponse + 37, // 57: api.v1.PlaygroundService.GetPrecompiledObjectCode:output_type -> api.v1.GetPrecompiledObjectCodeResponse + 38, // 58: api.v1.PlaygroundService.GetPrecompiledObjectOutput:output_type -> api.v1.GetPrecompiledObjectOutputResponse + 39, // 59: api.v1.PlaygroundService.GetPrecompiledObjectLogs:output_type -> api.v1.GetPrecompiledObjectLogsResponse + 40, // 60: api.v1.PlaygroundService.GetPrecompiledObjectGraph:output_type -> api.v1.GetPrecompiledObjectGraphResponse + 41, // 61: api.v1.PlaygroundService.GetDefaultPrecompiledObject:output_type -> api.v1.GetDefaultPrecompiledObjectResponse + 44, // 62: api.v1.PlaygroundService.SaveSnippet:output_type -> api.v1.SaveSnippetResponse + 46, // 63: api.v1.PlaygroundService.GetSnippet:output_type -> api.v1.GetSnippetResponse + 48, // 64: api.v1.PlaygroundService.GetMetadata:output_type -> api.v1.GetMetadataResponse + 45, // [45:65] is the sub-list for method output_type + 25, // [25:45] is the sub-list for method input_type + 25, // [25:25] is the sub-list for extension type_name + 25, // [25:25] is the sub-list for extension extendee + 0, // [0:25] is the sub-list for field type_name } func init() { file_api_proto_init() } @@ -2991,7 +3332,7 @@ func file_api_proto_init() { } if !protoimpl.UnsafeEnabled { file_api_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RunCodeRequest); i { + switch v := v.(*Dataset); i { case 0: return &v.state case 1: @@ -3003,7 +3344,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RunCodeResponse); i { + switch v := v.(*RunCodeRequest); i { case 0: return &v.state case 1: @@ -3015,7 +3356,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckStatusRequest); i { + switch v := v.(*RunCodeResponse); i { case 0: return &v.state case 1: @@ -3027,7 +3368,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckStatusResponse); i { + switch v := v.(*CheckStatusRequest); i { case 0: return &v.state case 1: @@ -3039,7 +3380,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetValidationOutputRequest); i { + switch v := v.(*CheckStatusResponse); i { case 0: return &v.state case 1: @@ -3051,7 +3392,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetValidationOutputResponse); i { + switch v := v.(*GetValidationOutputRequest); i { case 0: return &v.state case 1: @@ -3063,7 +3404,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPreparationOutputRequest); i { + switch v := v.(*GetValidationOutputResponse); i { case 0: return &v.state case 1: @@ -3075,7 +3416,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPreparationOutputResponse); i { + switch v := v.(*GetPreparationOutputRequest); i { case 0: return &v.state case 1: @@ -3087,7 +3428,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCompileOutputRequest); i { + switch v := v.(*GetPreparationOutputResponse); i { case 0: return &v.state case 1: @@ -3099,7 +3440,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCompileOutputResponse); i { + switch v := v.(*GetCompileOutputRequest); i { case 0: return &v.state case 1: @@ -3111,7 +3452,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRunOutputRequest); i { + switch v := v.(*GetCompileOutputResponse); i { case 0: return &v.state case 1: @@ -3123,7 +3464,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRunOutputResponse); i { + switch v := v.(*GetRunOutputRequest); i { case 0: return &v.state case 1: @@ -3135,7 +3476,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRunErrorRequest); i { + switch v := v.(*GetRunOutputResponse); i { case 0: return &v.state case 1: @@ -3147,7 +3488,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRunErrorResponse); i { + switch v := v.(*GetRunErrorRequest); i { case 0: return &v.state case 1: @@ -3159,7 +3500,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetLogsRequest); i { + switch v := v.(*GetRunErrorResponse); i { case 0: return &v.state case 1: @@ -3171,7 +3512,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetLogsResponse); i { + switch v := v.(*GetLogsRequest); i { case 0: return &v.state case 1: @@ -3183,7 +3524,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGraphRequest); i { + switch v := v.(*GetLogsResponse); i { case 0: return &v.state case 1: @@ -3195,7 +3536,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGraphResponse); i { + switch v := v.(*GetGraphRequest); i { case 0: return &v.state case 1: @@ -3207,7 +3548,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CancelRequest); i { + switch v := v.(*GetGraphResponse); i { case 0: return &v.state case 1: @@ -3219,7 +3560,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CancelResponse); i { + switch v := v.(*CancelRequest); i { case 0: return &v.state case 1: @@ -3231,7 +3572,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PrecompiledObject); i { + switch v := v.(*CancelResponse); i { case 0: return &v.state case 1: @@ -3243,7 +3584,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Categories); i { + switch v := v.(*PrecompiledObject); i { case 0: return &v.state case 1: @@ -3255,7 +3596,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPrecompiledObjectsRequest); i { + switch v := v.(*Categories); i { case 0: return &v.state case 1: @@ -3267,7 +3608,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPrecompiledObjectRequest); i { + switch v := v.(*GetPrecompiledObjectsRequest); i { case 0: return &v.state case 1: @@ -3279,7 +3620,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPrecompiledObjectCodeRequest); i { + switch v := v.(*GetPrecompiledObjectRequest); i { case 0: return &v.state case 1: @@ -3291,7 +3632,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPrecompiledObjectOutputRequest); i { + switch v := v.(*GetPrecompiledObjectCodeRequest); i { case 0: return &v.state case 1: @@ -3303,7 +3644,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPrecompiledObjectLogsRequest); i { + switch v := v.(*GetPrecompiledObjectOutputRequest); i { case 0: return &v.state case 1: @@ -3315,7 +3656,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPrecompiledObjectGraphRequest); i { + switch v := v.(*GetPrecompiledObjectLogsRequest); i { case 0: return &v.state case 1: @@ -3327,7 +3668,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDefaultPrecompiledObjectRequest); i { + switch v := v.(*GetPrecompiledObjectGraphRequest); i { case 0: return &v.state case 1: @@ -3339,7 +3680,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPrecompiledObjectsResponse); i { + switch v := v.(*GetDefaultPrecompiledObjectRequest); i { case 0: return &v.state case 1: @@ -3351,7 +3692,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPrecompiledObjectResponse); i { + switch v := v.(*GetPrecompiledObjectsResponse); i { case 0: return &v.state case 1: @@ -3363,7 +3704,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPrecompiledObjectCodeResponse); i { + switch v := v.(*GetPrecompiledObjectResponse); i { case 0: return &v.state case 1: @@ -3375,7 +3716,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPrecompiledObjectOutputResponse); i { + switch v := v.(*GetPrecompiledObjectCodeResponse); i { case 0: return &v.state case 1: @@ -3387,7 +3728,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPrecompiledObjectLogsResponse); i { + switch v := v.(*GetPrecompiledObjectOutputResponse); i { case 0: return &v.state case 1: @@ -3399,7 +3740,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPrecompiledObjectGraphResponse); i { + switch v := v.(*GetPrecompiledObjectLogsResponse); i { case 0: return &v.state case 1: @@ -3411,7 +3752,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDefaultPrecompiledObjectResponse); i { + switch v := v.(*GetPrecompiledObjectGraphResponse); i { case 0: return &v.state case 1: @@ -3423,7 +3764,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SnippetFile); i { + switch v := v.(*GetDefaultPrecompiledObjectResponse); i { case 0: return &v.state case 1: @@ -3435,7 +3776,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SaveSnippetRequest); i { + switch v := v.(*SnippetFile); i { case 0: return &v.state case 1: @@ -3447,7 +3788,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SaveSnippetResponse); i { + switch v := v.(*SaveSnippetRequest); i { case 0: return &v.state case 1: @@ -3459,7 +3800,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSnippetRequest); i { + switch v := v.(*SaveSnippetResponse); i { case 0: return &v.state case 1: @@ -3471,7 +3812,7 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSnippetResponse); i { + switch v := v.(*GetSnippetRequest); i { case 0: return &v.state case 1: @@ -3483,6 +3824,42 @@ func file_api_proto_init() { } } file_api_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetSnippetResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMetadataRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMetadataResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Categories_Category); i { case 0: return &v.state @@ -3495,13 +3872,14 @@ func file_api_proto_init() { } } } + file_api_proto_msgTypes[43].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_proto_rawDesc, - NumEnums: 4, - NumMessages: 42, + NumEnums: 5, + NumMessages: 46, NumExtensions: 0, NumServices: 1, }, diff --git a/learning/tour-of-beam/backend/playground_api/api_grpc.pb.go b/learning/tour-of-beam/backend/playground_api/api_grpc.pb.go index e50d4961adee..2274d4d43fd2 100644 --- a/learning/tour-of-beam/backend/playground_api/api_grpc.pb.go +++ b/learning/tour-of-beam/backend/playground_api/api_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.12.4 +// - protoc v3.15.8 // source: api.proto package playground @@ -60,6 +60,8 @@ type PlaygroundServiceClient interface { SaveSnippet(ctx context.Context, in *SaveSnippetRequest, opts ...grpc.CallOption) (*SaveSnippetResponse, error) // Get the snippet of playground. GetSnippet(ctx context.Context, in *GetSnippetRequest, opts ...grpc.CallOption) (*GetSnippetResponse, error) + // Get the runner metadata. + GetMetadata(ctx context.Context, in *GetMetadataRequest, opts ...grpc.CallOption) (*GetMetadataResponse, error) } type playgroundServiceClient struct { @@ -241,6 +243,15 @@ func (c *playgroundServiceClient) GetSnippet(ctx context.Context, in *GetSnippet return out, nil } +func (c *playgroundServiceClient) GetMetadata(ctx context.Context, in *GetMetadataRequest, opts ...grpc.CallOption) (*GetMetadataResponse, error) { + out := new(GetMetadataResponse) + err := c.cc.Invoke(ctx, "/api.v1.PlaygroundService/GetMetadata", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // PlaygroundServiceServer is the server API for PlaygroundService service. // All implementations must embed UnimplementedPlaygroundServiceServer // for forward compatibility @@ -283,6 +294,8 @@ type PlaygroundServiceServer interface { SaveSnippet(context.Context, *SaveSnippetRequest) (*SaveSnippetResponse, error) // Get the snippet of playground. GetSnippet(context.Context, *GetSnippetRequest) (*GetSnippetResponse, error) + // Get the runner metadata. + GetMetadata(context.Context, *GetMetadataRequest) (*GetMetadataResponse, error) mustEmbedUnimplementedPlaygroundServiceServer() } @@ -347,6 +360,9 @@ func (UnimplementedPlaygroundServiceServer) SaveSnippet(context.Context, *SaveSn func (UnimplementedPlaygroundServiceServer) GetSnippet(context.Context, *GetSnippetRequest) (*GetSnippetResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetSnippet not implemented") } +func (UnimplementedPlaygroundServiceServer) GetMetadata(context.Context, *GetMetadataRequest) (*GetMetadataResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMetadata not implemented") +} func (UnimplementedPlaygroundServiceServer) mustEmbedUnimplementedPlaygroundServiceServer() {} // UnsafePlaygroundServiceServer may be embedded to opt out of forward compatibility for this service. @@ -702,6 +718,24 @@ func _PlaygroundService_GetSnippet_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _PlaygroundService_GetMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMetadataRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PlaygroundServiceServer).GetMetadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.v1.PlaygroundService/GetMetadata", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PlaygroundServiceServer).GetMetadata(ctx, req.(*GetMetadataRequest)) + } + return interceptor(ctx, in, info, handler) +} + // PlaygroundService_ServiceDesc is the grpc.ServiceDesc for PlaygroundService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -785,6 +819,10 @@ var PlaygroundService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetSnippet", Handler: _PlaygroundService_GetSnippet_Handler, }, + { + MethodName: "GetMetadata", + Handler: _PlaygroundService_GetMetadata_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "api.proto", diff --git a/learning/tour-of-beam/backend/playground_api/mock.go b/learning/tour-of-beam/backend/playground_api/mock.go index c4dc009c1ff3..58d10e8f2fd9 100644 --- a/learning/tour-of-beam/backend/playground_api/mock.go +++ b/learning/tour-of-beam/backend/playground_api/mock.go @@ -15,73 +15,76 @@ var _ PlaygroundServiceClient = &PlaygroundServiceClientMock{} // PlaygroundServiceClientMock is a mock implementation of PlaygroundServiceClient. // -// func TestSomethingThatUsesPlaygroundServiceClient(t *testing.T) { +// func TestSomethingThatUsesPlaygroundServiceClient(t *testing.T) { // -// // make and configure a mocked PlaygroundServiceClient -// mockedPlaygroundServiceClient := &PlaygroundServiceClientMock{ -// CancelFunc: func(ctx context.Context, in *CancelRequest, opts ...grpc.CallOption) (*CancelResponse, error) { -// panic("mock out the Cancel method") -// }, -// CheckStatusFunc: func(ctx context.Context, in *CheckStatusRequest, opts ...grpc.CallOption) (*CheckStatusResponse, error) { -// panic("mock out the CheckStatus method") -// }, -// GetCompileOutputFunc: func(ctx context.Context, in *GetCompileOutputRequest, opts ...grpc.CallOption) (*GetCompileOutputResponse, error) { -// panic("mock out the GetCompileOutput method") -// }, -// GetDefaultPrecompiledObjectFunc: func(ctx context.Context, in *GetDefaultPrecompiledObjectRequest, opts ...grpc.CallOption) (*GetDefaultPrecompiledObjectResponse, error) { -// panic("mock out the GetDefaultPrecompiledObject method") -// }, -// GetGraphFunc: func(ctx context.Context, in *GetGraphRequest, opts ...grpc.CallOption) (*GetGraphResponse, error) { -// panic("mock out the GetGraph method") -// }, -// GetLogsFunc: func(ctx context.Context, in *GetLogsRequest, opts ...grpc.CallOption) (*GetLogsResponse, error) { -// panic("mock out the GetLogs method") -// }, -// GetPrecompiledObjectFunc: func(ctx context.Context, in *GetPrecompiledObjectRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectResponse, error) { -// panic("mock out the GetPrecompiledObject method") -// }, -// GetPrecompiledObjectCodeFunc: func(ctx context.Context, in *GetPrecompiledObjectCodeRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectCodeResponse, error) { -// panic("mock out the GetPrecompiledObjectCode method") -// }, -// GetPrecompiledObjectGraphFunc: func(ctx context.Context, in *GetPrecompiledObjectGraphRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectGraphResponse, error) { -// panic("mock out the GetPrecompiledObjectGraph method") -// }, -// GetPrecompiledObjectLogsFunc: func(ctx context.Context, in *GetPrecompiledObjectLogsRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectLogsResponse, error) { -// panic("mock out the GetPrecompiledObjectLogs method") -// }, -// GetPrecompiledObjectOutputFunc: func(ctx context.Context, in *GetPrecompiledObjectOutputRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectOutputResponse, error) { -// panic("mock out the GetPrecompiledObjectOutput method") -// }, -// GetPrecompiledObjectsFunc: func(ctx context.Context, in *GetPrecompiledObjectsRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectsResponse, error) { -// panic("mock out the GetPrecompiledObjects method") -// }, -// GetPreparationOutputFunc: func(ctx context.Context, in *GetPreparationOutputRequest, opts ...grpc.CallOption) (*GetPreparationOutputResponse, error) { -// panic("mock out the GetPreparationOutput method") -// }, -// GetRunErrorFunc: func(ctx context.Context, in *GetRunErrorRequest, opts ...grpc.CallOption) (*GetRunErrorResponse, error) { -// panic("mock out the GetRunError method") -// }, -// GetRunOutputFunc: func(ctx context.Context, in *GetRunOutputRequest, opts ...grpc.CallOption) (*GetRunOutputResponse, error) { -// panic("mock out the GetRunOutput method") -// }, -// GetSnippetFunc: func(ctx context.Context, in *GetSnippetRequest, opts ...grpc.CallOption) (*GetSnippetResponse, error) { -// panic("mock out the GetSnippet method") -// }, -// GetValidationOutputFunc: func(ctx context.Context, in *GetValidationOutputRequest, opts ...grpc.CallOption) (*GetValidationOutputResponse, error) { -// panic("mock out the GetValidationOutput method") -// }, -// RunCodeFunc: func(ctx context.Context, in *RunCodeRequest, opts ...grpc.CallOption) (*RunCodeResponse, error) { -// panic("mock out the RunCode method") -// }, -// SaveSnippetFunc: func(ctx context.Context, in *SaveSnippetRequest, opts ...grpc.CallOption) (*SaveSnippetResponse, error) { -// panic("mock out the SaveSnippet method") -// }, -// } +// // make and configure a mocked PlaygroundServiceClient +// mockedPlaygroundServiceClient := &PlaygroundServiceClientMock{ +// CancelFunc: func(ctx context.Context, in *CancelRequest, opts ...grpc.CallOption) (*CancelResponse, error) { +// panic("mock out the Cancel method") +// }, +// CheckStatusFunc: func(ctx context.Context, in *CheckStatusRequest, opts ...grpc.CallOption) (*CheckStatusResponse, error) { +// panic("mock out the CheckStatus method") +// }, +// GetCompileOutputFunc: func(ctx context.Context, in *GetCompileOutputRequest, opts ...grpc.CallOption) (*GetCompileOutputResponse, error) { +// panic("mock out the GetCompileOutput method") +// }, +// GetDefaultPrecompiledObjectFunc: func(ctx context.Context, in *GetDefaultPrecompiledObjectRequest, opts ...grpc.CallOption) (*GetDefaultPrecompiledObjectResponse, error) { +// panic("mock out the GetDefaultPrecompiledObject method") +// }, +// GetGraphFunc: func(ctx context.Context, in *GetGraphRequest, opts ...grpc.CallOption) (*GetGraphResponse, error) { +// panic("mock out the GetGraph method") +// }, +// GetLogsFunc: func(ctx context.Context, in *GetLogsRequest, opts ...grpc.CallOption) (*GetLogsResponse, error) { +// panic("mock out the GetLogs method") +// }, +// GetMetadataFunc: func(ctx context.Context, in *GetMetadataRequest, opts ...grpc.CallOption) (*GetMetadataResponse, error) { +// panic("mock out the GetMetadata method") +// }, +// GetPrecompiledObjectFunc: func(ctx context.Context, in *GetPrecompiledObjectRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectResponse, error) { +// panic("mock out the GetPrecompiledObject method") +// }, +// GetPrecompiledObjectCodeFunc: func(ctx context.Context, in *GetPrecompiledObjectCodeRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectCodeResponse, error) { +// panic("mock out the GetPrecompiledObjectCode method") +// }, +// GetPrecompiledObjectGraphFunc: func(ctx context.Context, in *GetPrecompiledObjectGraphRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectGraphResponse, error) { +// panic("mock out the GetPrecompiledObjectGraph method") +// }, +// GetPrecompiledObjectLogsFunc: func(ctx context.Context, in *GetPrecompiledObjectLogsRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectLogsResponse, error) { +// panic("mock out the GetPrecompiledObjectLogs method") +// }, +// GetPrecompiledObjectOutputFunc: func(ctx context.Context, in *GetPrecompiledObjectOutputRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectOutputResponse, error) { +// panic("mock out the GetPrecompiledObjectOutput method") +// }, +// GetPrecompiledObjectsFunc: func(ctx context.Context, in *GetPrecompiledObjectsRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectsResponse, error) { +// panic("mock out the GetPrecompiledObjects method") +// }, +// GetPreparationOutputFunc: func(ctx context.Context, in *GetPreparationOutputRequest, opts ...grpc.CallOption) (*GetPreparationOutputResponse, error) { +// panic("mock out the GetPreparationOutput method") +// }, +// GetRunErrorFunc: func(ctx context.Context, in *GetRunErrorRequest, opts ...grpc.CallOption) (*GetRunErrorResponse, error) { +// panic("mock out the GetRunError method") +// }, +// GetRunOutputFunc: func(ctx context.Context, in *GetRunOutputRequest, opts ...grpc.CallOption) (*GetRunOutputResponse, error) { +// panic("mock out the GetRunOutput method") +// }, +// GetSnippetFunc: func(ctx context.Context, in *GetSnippetRequest, opts ...grpc.CallOption) (*GetSnippetResponse, error) { +// panic("mock out the GetSnippet method") +// }, +// GetValidationOutputFunc: func(ctx context.Context, in *GetValidationOutputRequest, opts ...grpc.CallOption) (*GetValidationOutputResponse, error) { +// panic("mock out the GetValidationOutput method") +// }, +// RunCodeFunc: func(ctx context.Context, in *RunCodeRequest, opts ...grpc.CallOption) (*RunCodeResponse, error) { +// panic("mock out the RunCode method") +// }, +// SaveSnippetFunc: func(ctx context.Context, in *SaveSnippetRequest, opts ...grpc.CallOption) (*SaveSnippetResponse, error) { +// panic("mock out the SaveSnippet method") +// }, +// } // -// // use mockedPlaygroundServiceClient in code that requires PlaygroundServiceClient -// // and then make assertions. +// // use mockedPlaygroundServiceClient in code that requires PlaygroundServiceClient +// // and then make assertions. // -// } +// } type PlaygroundServiceClientMock struct { // CancelFunc mocks the Cancel method. CancelFunc func(ctx context.Context, in *CancelRequest, opts ...grpc.CallOption) (*CancelResponse, error) @@ -101,6 +104,9 @@ type PlaygroundServiceClientMock struct { // GetLogsFunc mocks the GetLogs method. GetLogsFunc func(ctx context.Context, in *GetLogsRequest, opts ...grpc.CallOption) (*GetLogsResponse, error) + // GetMetadataFunc mocks the GetMetadata method. + GetMetadataFunc func(ctx context.Context, in *GetMetadataRequest, opts ...grpc.CallOption) (*GetMetadataResponse, error) + // GetPrecompiledObjectFunc mocks the GetPrecompiledObject method. GetPrecompiledObjectFunc func(ctx context.Context, in *GetPrecompiledObjectRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectResponse, error) @@ -196,6 +202,15 @@ type PlaygroundServiceClientMock struct { // Opts is the opts argument value. Opts []grpc.CallOption } + // GetMetadata holds details about calls to the GetMetadata method. + GetMetadata []struct { + // Ctx is the ctx argument value. + Ctx context.Context + // In is the in argument value. + In *GetMetadataRequest + // Opts is the opts argument value. + Opts []grpc.CallOption + } // GetPrecompiledObject holds details about calls to the GetPrecompiledObject method. GetPrecompiledObject []struct { // Ctx is the ctx argument value. @@ -320,6 +335,7 @@ type PlaygroundServiceClientMock struct { lockGetDefaultPrecompiledObject sync.RWMutex lockGetGraph sync.RWMutex lockGetLogs sync.RWMutex + lockGetMetadata sync.RWMutex lockGetPrecompiledObject sync.RWMutex lockGetPrecompiledObjectCode sync.RWMutex lockGetPrecompiledObjectGraph sync.RWMutex @@ -357,7 +373,8 @@ func (mock *PlaygroundServiceClientMock) Cancel(ctx context.Context, in *CancelR // CancelCalls gets all the calls that were made to Cancel. // Check the length with: -// len(mockedPlaygroundServiceClient.CancelCalls()) +// +// len(mockedPlaygroundServiceClient.CancelCalls()) func (mock *PlaygroundServiceClientMock) CancelCalls() []struct { Ctx context.Context In *CancelRequest @@ -396,7 +413,8 @@ func (mock *PlaygroundServiceClientMock) CheckStatus(ctx context.Context, in *Ch // CheckStatusCalls gets all the calls that were made to CheckStatus. // Check the length with: -// len(mockedPlaygroundServiceClient.CheckStatusCalls()) +// +// len(mockedPlaygroundServiceClient.CheckStatusCalls()) func (mock *PlaygroundServiceClientMock) CheckStatusCalls() []struct { Ctx context.Context In *CheckStatusRequest @@ -435,7 +453,8 @@ func (mock *PlaygroundServiceClientMock) GetCompileOutput(ctx context.Context, i // GetCompileOutputCalls gets all the calls that were made to GetCompileOutput. // Check the length with: -// len(mockedPlaygroundServiceClient.GetCompileOutputCalls()) +// +// len(mockedPlaygroundServiceClient.GetCompileOutputCalls()) func (mock *PlaygroundServiceClientMock) GetCompileOutputCalls() []struct { Ctx context.Context In *GetCompileOutputRequest @@ -474,7 +493,8 @@ func (mock *PlaygroundServiceClientMock) GetDefaultPrecompiledObject(ctx context // GetDefaultPrecompiledObjectCalls gets all the calls that were made to GetDefaultPrecompiledObject. // Check the length with: -// len(mockedPlaygroundServiceClient.GetDefaultPrecompiledObjectCalls()) +// +// len(mockedPlaygroundServiceClient.GetDefaultPrecompiledObjectCalls()) func (mock *PlaygroundServiceClientMock) GetDefaultPrecompiledObjectCalls() []struct { Ctx context.Context In *GetDefaultPrecompiledObjectRequest @@ -513,7 +533,8 @@ func (mock *PlaygroundServiceClientMock) GetGraph(ctx context.Context, in *GetGr // GetGraphCalls gets all the calls that were made to GetGraph. // Check the length with: -// len(mockedPlaygroundServiceClient.GetGraphCalls()) +// +// len(mockedPlaygroundServiceClient.GetGraphCalls()) func (mock *PlaygroundServiceClientMock) GetGraphCalls() []struct { Ctx context.Context In *GetGraphRequest @@ -552,7 +573,8 @@ func (mock *PlaygroundServiceClientMock) GetLogs(ctx context.Context, in *GetLog // GetLogsCalls gets all the calls that were made to GetLogs. // Check the length with: -// len(mockedPlaygroundServiceClient.GetLogsCalls()) +// +// len(mockedPlaygroundServiceClient.GetLogsCalls()) func (mock *PlaygroundServiceClientMock) GetLogsCalls() []struct { Ctx context.Context In *GetLogsRequest @@ -569,6 +591,46 @@ func (mock *PlaygroundServiceClientMock) GetLogsCalls() []struct { return calls } +// GetMetadata calls GetMetadataFunc. +func (mock *PlaygroundServiceClientMock) GetMetadata(ctx context.Context, in *GetMetadataRequest, opts ...grpc.CallOption) (*GetMetadataResponse, error) { + if mock.GetMetadataFunc == nil { + panic("PlaygroundServiceClientMock.GetMetadataFunc: method is nil but PlaygroundServiceClient.GetMetadata was just called") + } + callInfo := struct { + Ctx context.Context + In *GetMetadataRequest + Opts []grpc.CallOption + }{ + Ctx: ctx, + In: in, + Opts: opts, + } + mock.lockGetMetadata.Lock() + mock.calls.GetMetadata = append(mock.calls.GetMetadata, callInfo) + mock.lockGetMetadata.Unlock() + return mock.GetMetadataFunc(ctx, in, opts...) +} + +// GetMetadataCalls gets all the calls that were made to GetMetadata. +// Check the length with: +// +// len(mockedPlaygroundServiceClient.GetMetadataCalls()) +func (mock *PlaygroundServiceClientMock) GetMetadataCalls() []struct { + Ctx context.Context + In *GetMetadataRequest + Opts []grpc.CallOption +} { + var calls []struct { + Ctx context.Context + In *GetMetadataRequest + Opts []grpc.CallOption + } + mock.lockGetMetadata.RLock() + calls = mock.calls.GetMetadata + mock.lockGetMetadata.RUnlock() + return calls +} + // GetPrecompiledObject calls GetPrecompiledObjectFunc. func (mock *PlaygroundServiceClientMock) GetPrecompiledObject(ctx context.Context, in *GetPrecompiledObjectRequest, opts ...grpc.CallOption) (*GetPrecompiledObjectResponse, error) { if mock.GetPrecompiledObjectFunc == nil { @@ -591,7 +653,8 @@ func (mock *PlaygroundServiceClientMock) GetPrecompiledObject(ctx context.Contex // GetPrecompiledObjectCalls gets all the calls that were made to GetPrecompiledObject. // Check the length with: -// len(mockedPlaygroundServiceClient.GetPrecompiledObjectCalls()) +// +// len(mockedPlaygroundServiceClient.GetPrecompiledObjectCalls()) func (mock *PlaygroundServiceClientMock) GetPrecompiledObjectCalls() []struct { Ctx context.Context In *GetPrecompiledObjectRequest @@ -630,7 +693,8 @@ func (mock *PlaygroundServiceClientMock) GetPrecompiledObjectCode(ctx context.Co // GetPrecompiledObjectCodeCalls gets all the calls that were made to GetPrecompiledObjectCode. // Check the length with: -// len(mockedPlaygroundServiceClient.GetPrecompiledObjectCodeCalls()) +// +// len(mockedPlaygroundServiceClient.GetPrecompiledObjectCodeCalls()) func (mock *PlaygroundServiceClientMock) GetPrecompiledObjectCodeCalls() []struct { Ctx context.Context In *GetPrecompiledObjectCodeRequest @@ -669,7 +733,8 @@ func (mock *PlaygroundServiceClientMock) GetPrecompiledObjectGraph(ctx context.C // GetPrecompiledObjectGraphCalls gets all the calls that were made to GetPrecompiledObjectGraph. // Check the length with: -// len(mockedPlaygroundServiceClient.GetPrecompiledObjectGraphCalls()) +// +// len(mockedPlaygroundServiceClient.GetPrecompiledObjectGraphCalls()) func (mock *PlaygroundServiceClientMock) GetPrecompiledObjectGraphCalls() []struct { Ctx context.Context In *GetPrecompiledObjectGraphRequest @@ -708,7 +773,8 @@ func (mock *PlaygroundServiceClientMock) GetPrecompiledObjectLogs(ctx context.Co // GetPrecompiledObjectLogsCalls gets all the calls that were made to GetPrecompiledObjectLogs. // Check the length with: -// len(mockedPlaygroundServiceClient.GetPrecompiledObjectLogsCalls()) +// +// len(mockedPlaygroundServiceClient.GetPrecompiledObjectLogsCalls()) func (mock *PlaygroundServiceClientMock) GetPrecompiledObjectLogsCalls() []struct { Ctx context.Context In *GetPrecompiledObjectLogsRequest @@ -747,7 +813,8 @@ func (mock *PlaygroundServiceClientMock) GetPrecompiledObjectOutput(ctx context. // GetPrecompiledObjectOutputCalls gets all the calls that were made to GetPrecompiledObjectOutput. // Check the length with: -// len(mockedPlaygroundServiceClient.GetPrecompiledObjectOutputCalls()) +// +// len(mockedPlaygroundServiceClient.GetPrecompiledObjectOutputCalls()) func (mock *PlaygroundServiceClientMock) GetPrecompiledObjectOutputCalls() []struct { Ctx context.Context In *GetPrecompiledObjectOutputRequest @@ -786,7 +853,8 @@ func (mock *PlaygroundServiceClientMock) GetPrecompiledObjects(ctx context.Conte // GetPrecompiledObjectsCalls gets all the calls that were made to GetPrecompiledObjects. // Check the length with: -// len(mockedPlaygroundServiceClient.GetPrecompiledObjectsCalls()) +// +// len(mockedPlaygroundServiceClient.GetPrecompiledObjectsCalls()) func (mock *PlaygroundServiceClientMock) GetPrecompiledObjectsCalls() []struct { Ctx context.Context In *GetPrecompiledObjectsRequest @@ -825,7 +893,8 @@ func (mock *PlaygroundServiceClientMock) GetPreparationOutput(ctx context.Contex // GetPreparationOutputCalls gets all the calls that were made to GetPreparationOutput. // Check the length with: -// len(mockedPlaygroundServiceClient.GetPreparationOutputCalls()) +// +// len(mockedPlaygroundServiceClient.GetPreparationOutputCalls()) func (mock *PlaygroundServiceClientMock) GetPreparationOutputCalls() []struct { Ctx context.Context In *GetPreparationOutputRequest @@ -864,7 +933,8 @@ func (mock *PlaygroundServiceClientMock) GetRunError(ctx context.Context, in *Ge // GetRunErrorCalls gets all the calls that were made to GetRunError. // Check the length with: -// len(mockedPlaygroundServiceClient.GetRunErrorCalls()) +// +// len(mockedPlaygroundServiceClient.GetRunErrorCalls()) func (mock *PlaygroundServiceClientMock) GetRunErrorCalls() []struct { Ctx context.Context In *GetRunErrorRequest @@ -903,7 +973,8 @@ func (mock *PlaygroundServiceClientMock) GetRunOutput(ctx context.Context, in *G // GetRunOutputCalls gets all the calls that were made to GetRunOutput. // Check the length with: -// len(mockedPlaygroundServiceClient.GetRunOutputCalls()) +// +// len(mockedPlaygroundServiceClient.GetRunOutputCalls()) func (mock *PlaygroundServiceClientMock) GetRunOutputCalls() []struct { Ctx context.Context In *GetRunOutputRequest @@ -942,7 +1013,8 @@ func (mock *PlaygroundServiceClientMock) GetSnippet(ctx context.Context, in *Get // GetSnippetCalls gets all the calls that were made to GetSnippet. // Check the length with: -// len(mockedPlaygroundServiceClient.GetSnippetCalls()) +// +// len(mockedPlaygroundServiceClient.GetSnippetCalls()) func (mock *PlaygroundServiceClientMock) GetSnippetCalls() []struct { Ctx context.Context In *GetSnippetRequest @@ -981,7 +1053,8 @@ func (mock *PlaygroundServiceClientMock) GetValidationOutput(ctx context.Context // GetValidationOutputCalls gets all the calls that were made to GetValidationOutput. // Check the length with: -// len(mockedPlaygroundServiceClient.GetValidationOutputCalls()) +// +// len(mockedPlaygroundServiceClient.GetValidationOutputCalls()) func (mock *PlaygroundServiceClientMock) GetValidationOutputCalls() []struct { Ctx context.Context In *GetValidationOutputRequest @@ -1020,7 +1093,8 @@ func (mock *PlaygroundServiceClientMock) RunCode(ctx context.Context, in *RunCod // RunCodeCalls gets all the calls that were made to RunCode. // Check the length with: -// len(mockedPlaygroundServiceClient.RunCodeCalls()) +// +// len(mockedPlaygroundServiceClient.RunCodeCalls()) func (mock *PlaygroundServiceClientMock) RunCodeCalls() []struct { Ctx context.Context In *RunCodeRequest @@ -1059,7 +1133,8 @@ func (mock *PlaygroundServiceClientMock) SaveSnippet(ctx context.Context, in *Sa // SaveSnippetCalls gets all the calls that were made to SaveSnippet. // Check the length with: -// len(mockedPlaygroundServiceClient.SaveSnippetCalls()) +// +// len(mockedPlaygroundServiceClient.SaveSnippetCalls()) func (mock *PlaygroundServiceClientMock) SaveSnippetCalls() []struct { Ctx context.Context In *SaveSnippetRequest From 5cf509909b376a56fdb6b4b94e482fd84d1135c9 Mon Sep 17 00:00:00 2001 From: Alexey Inkin Date: Wed, 1 Mar 2023 18:16:11 +0400 Subject: [PATCH 10/26] Show versions on the frontend (#22271) --- playground/frontend/Dockerfile | 8 +- playground/frontend/build.gradle | 20 ++- playground/frontend/lib/locator.dart | 20 +-- .../widgets/more_actions.dart | 23 +++ .../assets/translations/en.yaml | 9 ++ .../playground_components/build.gradle.kts | 10 ++ .../lib/playground_components.dart | 4 + .../lib/src/build_metadata.g.dart | 9 ++ .../lib/src/constants/backend_urls.dart | 42 ++++++ .../lib/src/controllers/build_metadata.dart | 74 +++++++++ .../lib/src/locator.dart | 2 + .../lib/src/models/component_version.dart | 39 +++++ .../lib/src/repositories/backend_urls.dart | 110 ++++++++++++++ .../repositories/code_client/code_client.dart | 4 + .../code_client/grpc_code_client.dart | 26 ++-- .../lib/src/repositories/code_repository.dart | 36 ++--- .../example_client/example_client.dart | 3 + .../example_client/grpc_example_client.dart | 15 +- .../src/repositories/example_repository.dart | 24 +-- .../get_metadata_response_grpc_extension.dart | 34 +++++ .../lib/src/util/async.dart | 23 +++ .../lib/src/widgets/dialog.dart | 51 +++++++ .../lib/src/widgets/versions/versions.dart | 140 ++++++++++++++++++ .../playground_components/pubspec.yaml | 1 + .../test/src/common/example_cache.dart | 4 +- .../tools/generate_build_metadata.sh | 39 +++++ playground/frontend/pubspec.lock | 4 +- 27 files changed, 707 insertions(+), 67 deletions(-) create mode 100644 playground/frontend/playground_components/lib/src/build_metadata.g.dart create mode 100644 playground/frontend/playground_components/lib/src/constants/backend_urls.dart create mode 100644 playground/frontend/playground_components/lib/src/controllers/build_metadata.dart create mode 100644 playground/frontend/playground_components/lib/src/models/component_version.dart create mode 100644 playground/frontend/playground_components/lib/src/repositories/backend_urls.dart create mode 100644 playground/frontend/playground_components/lib/src/repositories/get_metadata_response_grpc_extension.dart create mode 100644 playground/frontend/playground_components/lib/src/util/async.dart create mode 100644 playground/frontend/playground_components/lib/src/widgets/dialog.dart create mode 100644 playground/frontend/playground_components/lib/src/widgets/versions/versions.dart create mode 100644 playground/frontend/playground_components/tools/generate_build_metadata.sh diff --git a/playground/frontend/Dockerfile b/playground/frontend/Dockerfile index 7800159255ec..59c44637059f 100644 --- a/playground/frontend/Dockerfile +++ b/playground/frontend/Dockerfile @@ -23,8 +23,13 @@ ARG FLUTTER_VERSION=3.7.3 # Setting up. # ------------------------------------------------ +COPY . /app +WORKDIR /app + RUN apt-get update && apt-get install -y wget xz-utils git +RUN cat /app/playground_components/lib/src/build_metadata.g.dart + RUN wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_$FLUTTER_VERSION-stable.tar.xz &&\ tar -xf flutter_linux_$FLUTTER_VERSION-stable.tar.xz &&\ mv flutter /opt/ &&\ @@ -34,9 +39,6 @@ RUN wget https://storage.googleapis.com/flutter_infra_release/releases/stable/li dart pub global activate protoc_plugin &&\ ln -s /root/.pub-cache/bin/protoc-gen-dart /usr/bin/ -COPY . /app -WORKDIR /app - # ------------------------------------------------ # Building the application. # ------------------------------------------------ diff --git a/playground/frontend/build.gradle b/playground/frontend/build.gradle index 403fbf21229d..8a5a8e0daa45 100644 --- a/playground/frontend/build.gradle +++ b/playground/frontend/build.gradle @@ -227,19 +227,25 @@ void runIntegrationTest(String path, String url) { } } -task copyDockerfileDependencies(type: Copy) { - group = "build" - description = "Copy files that required to build docker container" - copy { +tasks.register("copyDockerfileDependencies") { + dependsOn(":playground:frontend:playground_components:generateBuildMetadata") + + group = "build" + description = "Copy files that required to build docker container" + + doLast { + copy { from(".") into("build/") exclude("build") exclude("Dockerfile") - } - copy { + } + + copy { from("../playground") into("build/playground") - } + } + } } docker { diff --git a/playground/frontend/lib/locator.dart b/playground/frontend/lib/locator.dart index 5e5f7ce4e50c..54905c72266f 100644 --- a/playground/frontend/lib/locator.dart +++ b/playground/frontend/lib/locator.dart @@ -26,25 +26,25 @@ import 'router/page_factory.dart'; import 'router/route_information_parser.dart'; Future initializeServiceLocator() async { - _initializeRepositories(); + await _initializeRepositories(); _initializeRouter(); } -void _initializeRepositories() { +Future _initializeRepositories() async { + final routerUrl = await getRouterUrl(); + final runnerUrls = await waitMap({ + for (final sdk in Sdk.known) sdk.id: getRunnerUrl(sdk), + }); + GetIt.instance.registerSingleton(CodeRepository( client: GrpcCodeClient( - url: kApiClientURL, - runnerUrlsById: { - Sdk.java.id: kApiJavaClientURL, - Sdk.go.id: kApiGoClientURL, - Sdk.python.id: kApiPythonClientURL, - Sdk.scio.id: kApiScioClientURL, - }, + url: routerUrl, + runnerUrlsById: runnerUrls, ), )); GetIt.instance.registerSingleton(ExampleRepository( - client: GrpcExampleClient(url: kApiClientURL), + client: GrpcExampleClient(url: routerUrl), )); } diff --git a/playground/frontend/lib/pages/standalone_playground/widgets/more_actions.dart b/playground/frontend/lib/pages/standalone_playground/widgets/more_actions.dart index f82fb93707f6..3a313ed522f1 100644 --- a/playground/frontend/lib/pages/standalone_playground/widgets/more_actions.dart +++ b/playground/frontend/lib/pages/standalone_playground/widgets/more_actions.dart @@ -16,6 +16,7 @@ * limitations under the License. */ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -28,6 +29,7 @@ import '../../../modules/shortcuts/components/shortcuts_modal.dart'; import '../../../src/assets/assets.gen.dart'; enum HeaderAction { + versions, shortcuts, beamPlaygroundGithub, apacheBeamGithub, @@ -60,6 +62,21 @@ class _MoreActionsState extends State { color: Theme.of(context).extension()?.iconColor, ), itemBuilder: (BuildContext context) => >[ + // + PopupMenuItem( + padding: EdgeInsets.zero, + value: HeaderAction.versions, + child: ListTile( + leading: const Icon(Icons.watch_later_outlined), + title: const Text('widgets.versions.title').tr(), + onTap: () => BeamDialog.show( + context: context, + title: const Text('widgets.versions.title').tr(), + child: const VersionsWidget(sdks: Sdk.known), + ), + ), + ), + PopupMenuItem( padding: EdgeInsets.zero, value: HeaderAction.shortcuts, @@ -77,6 +94,7 @@ class _MoreActionsState extends State { }, ), ), + PopupMenuItem( padding: EdgeInsets.zero, value: HeaderAction.beamPlaygroundGithub, @@ -86,6 +104,7 @@ class _MoreActionsState extends State { onTap: () => _openLink(kBeamPlaygroundGithubLink, context), ), ), + PopupMenuItem( padding: EdgeInsets.zero, value: HeaderAction.apacheBeamGithub, @@ -95,6 +114,7 @@ class _MoreActionsState extends State { onTap: () => _openLink(kApacheBeamGithubLink, context), ), ), + PopupMenuItem( padding: EdgeInsets.zero, value: HeaderAction.scioGithub, @@ -104,7 +124,9 @@ class _MoreActionsState extends State { onTap: () => _openLink(kScioGithubLink, context), ), ), + const PopupMenuDivider(height: 16.0), + PopupMenuItem( padding: EdgeInsets.zero, value: HeaderAction.beamWebsite, @@ -114,6 +136,7 @@ class _MoreActionsState extends State { onTap: () => _openLink(kBeamWebsiteLink, context), ), ), + PopupMenuItem( padding: EdgeInsets.zero, value: HeaderAction.beamWebsite, diff --git a/playground/frontend/playground_components/assets/translations/en.yaml b/playground/frontend/playground_components/assets/translations/en.yaml index 3c6b720c6941..a012de7d42fa 100644 --- a/playground/frontend/playground_components/assets/translations/en.yaml +++ b/playground/frontend/playground_components/assets/translations/en.yaml @@ -58,3 +58,12 @@ widgets: notificationTitles: run: 'Run Code' cancelExecution: 'Cancel Execution' + + versions: + beam: 'Beam {version}' + commit: 'Commit {hash} from {date}' + title: 'Versions' + titles: + frontend: 'Frontend' + router: 'Router' + runner: '{sdk} Runner' diff --git a/playground/frontend/playground_components/build.gradle.kts b/playground/frontend/playground_components/build.gradle.kts index 1af9d6053765..94cf711bdf56 100644 --- a/playground/frontend/playground_components/build.gradle.kts +++ b/playground/frontend/playground_components/build.gradle.kts @@ -21,6 +21,7 @@ import java.io.FileOutputStream description = "Apache Beam :: Playground :: playground_components Flutter Package" tasks.register("generate") { + dependsOn("generateBuildMetadata") dependsOn("generateCode") dependsOn("extractBeamSymbols") @@ -118,6 +119,15 @@ val deleteFilesByRegExp by extra( } ) +tasks.register("generateBuildMetadata") { + doLast { + exec { + executable("sh") + args("tools/generate_build_metadata.sh") + } + } +} + tasks.register("generateCode") { dependsOn("cleanFlutter") dependsOn("pubGet") diff --git a/playground/frontend/playground_components/lib/playground_components.dart b/playground/frontend/playground_components/lib/playground_components.dart index 5cc842e554af..348dda25c413 100644 --- a/playground/frontend/playground_components/lib/playground_components.dart +++ b/playground/frontend/playground_components/lib/playground_components.dart @@ -46,6 +46,7 @@ export 'src/models/snippet_file.dart'; export 'src/models/toast.dart'; export 'src/models/toast_type.dart'; export 'src/playground_components.dart'; +export 'src/repositories/backend_urls.dart'; export 'src/repositories/code_client/grpc_code_client.dart'; export 'src/repositories/code_repository.dart'; export 'src/repositories/example_client/grpc_example_client.dart'; @@ -54,12 +55,14 @@ export 'src/router/router_delegate.dart'; export 'src/services/symbols/loaders/yaml.dart'; export 'src/theme/switch_notifier.dart'; export 'src/theme/theme.dart'; +export 'src/util/async.dart'; export 'src/util/pipeline_options.dart'; export 'src/util/string.dart'; export 'src/widgets/bubble.dart'; export 'src/widgets/clickable.dart'; export 'src/widgets/complexity.dart'; +export 'src/widgets/dialog.dart'; export 'src/widgets/divider.dart'; export 'src/widgets/header_icon_button.dart'; export 'src/widgets/loading_error.dart'; @@ -82,3 +85,4 @@ export 'src/widgets/tab_header.dart'; export 'src/widgets/toasts/toast_listener.dart'; export 'src/widgets/toggle_theme_button.dart'; export 'src/widgets/toggle_theme_icon_button.dart'; +export 'src/widgets/versions/versions.dart'; diff --git a/playground/frontend/playground_components/lib/src/build_metadata.g.dart b/playground/frontend/playground_components/lib/src/build_metadata.g.dart new file mode 100644 index 000000000000..f937e63fa118 --- /dev/null +++ b/playground/frontend/playground_components/lib/src/build_metadata.g.dart @@ -0,0 +1,9 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// This file is generated during deployment to contain data about the commit. +// The copy of this file stored in the repository is for development purpose +// so the project can be started locally. +// It is safe to commit changes here everytime you run code generation. +const buildCommitHash = '92fe2b4689de2d3dba0574dffc144fa84531a657' ; +const buildCommitSecondsSinceEpoch = 1677246050 +; diff --git a/playground/frontend/playground_components/lib/src/constants/backend_urls.dart b/playground/frontend/playground_components/lib/src/constants/backend_urls.dart new file mode 100644 index 000000000000..670dfea2dad0 --- /dev/null +++ b/playground/frontend/playground_components/lib/src/constants/backend_urls.dart @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// ignore_for_file: prefer_interpolation_to_compose_strings + +/// The template for production backend URL. +const defaultBackendUrlTemplate = 'https://{node}.play-dev.beam.apache.org'; + +/// The URLs for local backend development. +const backendUrlOverrides = { + // 'router': 'https://router.play-dev.beam.apache.org', + // 'go': 'https://go.play-dev.beam.apache.org', + // 'java': 'https://java.play-dev.beam.apache.org', + // 'python': 'https://python.play-dev.beam.apache.org', + // 'scio': 'https://scio.play-dev.beam.apache.org', +}; + +/// The URL templates that will not be probed +/// if they are generated as the result of auto-composing backend URLs. +/// +/// If any new project is created that uses the Playground Backend, +/// its pattern should be added to this list. +/// Otherwise the first backend candidate will be derived from +/// such project's frontend host and will be probed in vain on every page load. +final skipBackendUrls = [ + 'tour.beam.apache.org' +].map((host) => RegExp(r'^http(s?)://(\w+)\.' + RegExp.escape(host) + r'$')); diff --git a/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart b/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart new file mode 100644 index 000000000000..94101353a01c --- /dev/null +++ b/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:get_it/get_it.dart'; + +import '../api/v1/api.pbgrpc.dart' show GetMetadataResponse; +import '../models/component_version.dart'; +import '../models/sdk.dart'; +import '../repositories/code_repository.dart'; +import '../repositories/example_repository.dart'; +import '../repositories/get_metadata_response_grpc_extension.dart'; + +/// Obtains versions from the backend. +class BuildMetadataController extends ChangeNotifier { + ComponentVersion? _routerVersion; + Future? _routerVersionFuture; + + final _runnerVersions = {}; + final _runnerVersionFutures = >{}; + + /// Returns the router version and starts loading if it is not loaded yet. + ComponentVersion? get routerVersion { + if (_routerVersionFuture == null) { + unawaited(_loadRouterVersion()); + } + + return _routerVersion; + } + + Future _loadRouterVersion() async { + final repository = GetIt.instance.get(); + _routerVersionFuture = repository.client.getMetadata(); + + final metadata = await _routerVersionFuture!; + _routerVersion = metadata.componentVersion; + notifyListeners(); + } + + /// Returns the runner version and starts loading if it is not loaded yet. + ComponentVersion? getRunnerVersion(Sdk sdk) { + if (!_runnerVersionFutures.containsKey(sdk)) { + unawaited(_loadRunnerVersion(sdk)); + } + + return _runnerVersions[sdk]; + } + + Future _loadRunnerVersion(Sdk sdk) async { + final repository = GetIt.instance.get(); + _runnerVersionFutures[sdk] = repository.client.getMetadata(sdk); + + final metadata = await _runnerVersionFutures[sdk]!; + _runnerVersions[sdk] = metadata.componentVersion; + notifyListeners(); + } +} diff --git a/playground/frontend/playground_components/lib/src/locator.dart b/playground/frontend/playground_components/lib/src/locator.dart index 004d5cc88837..c7e28bef6e67 100644 --- a/playground/frontend/playground_components/lib/src/locator.dart +++ b/playground/frontend/playground_components/lib/src/locator.dart @@ -18,10 +18,12 @@ import 'package:get_it/get_it.dart'; +import 'controllers/build_metadata.dart'; import 'services/symbols/symbols_notifier.dart'; import 'services/toast_notifier.dart'; Future initializeServiceLocator() async { + GetIt.instance.registerSingleton(BuildMetadataController()); GetIt.instance.registerSingleton(SymbolsNotifier()); GetIt.instance.registerSingleton(ToastNotifier()); } diff --git a/playground/frontend/playground_components/lib/src/models/component_version.dart b/playground/frontend/playground_components/lib/src/models/component_version.dart new file mode 100644 index 000000000000..d1c1f99fc88b --- /dev/null +++ b/playground/frontend/playground_components/lib/src/models/component_version.dart @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import '../build_metadata.g.dart' as frontend_build_metadata; + +class ComponentVersion { + const ComponentVersion({ + this.beamSdkVersion, + this.buildCommitHash, + this.dateTime, + }); + + final String? beamSdkVersion; + final String? buildCommitHash; + final DateTime? dateTime; + + /// The version of the frontend. + static final frontend = ComponentVersion( + buildCommitHash: frontend_build_metadata.buildCommitHash, + dateTime: DateTime.fromMillisecondsSinceEpoch( + frontend_build_metadata.buildCommitSecondsSinceEpoch * 1000, + ), + ); +} diff --git a/playground/frontend/playground_components/lib/src/repositories/backend_urls.dart b/playground/frontend/playground_components/lib/src/repositories/backend_urls.dart new file mode 100644 index 000000000000..179031cc3e03 --- /dev/null +++ b/playground/frontend/playground_components/lib/src/repositories/backend_urls.dart @@ -0,0 +1,110 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import '../../playground_components.dart'; +import '../constants/backend_urls.dart'; + +const _routerNode = 'router'; + +Future getRouterUrl() => _getBackendUrl(_routerNode); +Future getRunnerUrl(Sdk sdk) => _getBackendUrl(sdk.id); + +/// Returns options for backend URLs for [node]. +/// +/// If an override is given in [backendUrlOverrides], it is the only option. +/// This can be used for development if the production backend +/// must not be used. +/// +/// Otherwise there are 2 options in the following order: +/// 1. [node] is prepended to the host of the current URL. +/// 2. [node] is inserted into [defaultBackendUrlTemplate] (the production URL). +/// If the two are the same, only one is returned. +/// This results in the following when looking up "node": +/// +/// For production Playground: +/// - node.play.beam.apache.org (the production URL). +/// +/// For production Tour of Beam: +/// - node.play.beam.apache.org (as node.tour.beam.apache.org is blacklisted +/// via [skipBackendUrls]). +/// +/// For any other stage of Playground or Tour of Beam (my-stage.com): +/// - node.my-stage.com +/// - node.play.beam.apache.org +/// This means that if the stage runs its own container for the given +/// backend node, it is used. Otherwise the production backend is used. +List _getBackendUrlOptions(String node) { + final override = backendUrlOverrides[node]; + if (override != null) { + return [Uri.parse(override)]; + } + + final currentHost = Uri.base.host; + final nodeUriFromCurrentHost = Uri.base.replace( + host: '$node.$currentHost', + path: '', + queryParameters: {}, + ).removeFragment(); + + return { + nodeUriFromCurrentHost.toString(), + defaultBackendUrlTemplate.replaceAll('{node}', node), + }.where(_shouldAttemptUrl).map(Uri.parse).toList(); +} + +/// Whether [url] does not match any pattern in [skipBackendUrls]. +bool _shouldAttemptUrl(String url) { + return !skipBackendUrls.any((pattern) => pattern.allMatches(url).isNotEmpty); +} + +/// Returns the URL for the backend [node]. +/// +/// Calls [_getBackendUrlOptions] for options. +/// +/// If only one option exists, returns it. +/// This ensures fast initialization in production. +/// +/// If multiple options exist, each of them except the last one is probed +/// with getMetadata() call. This results in slower initialization for +/// custom stages but keeps the configuration simple. +Future _getBackendUrl(String node) async { + final urls = _getBackendUrlOptions(node); + + if (urls.length == 1) { + return urls.first; + } + + print('Probing multiple options for $node backend:'); // ignore: avoid_print + urls.forEach(print); // ignore: avoid_print + + final lastUrl = urls.removeLast(); + + for (final url in urls) { + try { + final client = GrpcExampleClient(url: url); + await client.getMetadata(); + print('Using $url'); // ignore: avoid_print + return url; + } catch (ex) { + print('$url failed'); // ignore: avoid_print + } + } + + print('Using $lastUrl'); // ignore: avoid_print + return lastUrl; +} diff --git a/playground/frontend/playground_components/lib/src/repositories/code_client/code_client.dart b/playground/frontend/playground_components/lib/src/repositories/code_client/code_client.dart index 2024e0aa82b8..f50a399d3c35 100644 --- a/playground/frontend/playground_components/lib/src/repositories/code_client/code_client.dart +++ b/playground/frontend/playground_components/lib/src/repositories/code_client/code_client.dart @@ -16,12 +16,16 @@ * limitations under the License. */ +import '../../api/v1/api.pb.dart' as grpc; +import '../../models/sdk.dart'; import '../models/check_status_response.dart'; import '../models/output_response.dart'; import '../models/run_code_request.dart'; import '../models/run_code_response.dart'; abstract class CodeClient { + Future getMetadata(Sdk sdk); + Future runCode(RunCodeRequest request); Future cancelExecution(String pipelineUuid); diff --git a/playground/frontend/playground_components/lib/src/repositories/code_client/grpc_code_client.dart b/playground/frontend/playground_components/lib/src/repositories/code_client/grpc_code_client.dart index bfeb517966eb..0ecd0a725832 100644 --- a/playground/frontend/playground_components/lib/src/repositories/code_client/grpc_code_client.dart +++ b/playground/frontend/playground_components/lib/src/repositories/code_client/grpc_code_client.dart @@ -37,15 +37,13 @@ const kGeneralError = 'Failed to execute code'; class GrpcCodeClient implements CodeClient { final grpc.PlaygroundServiceClient _defaultClient; - final Map _runnerUrlsById; + final Map _runnerUrlsById; factory GrpcCodeClient({ - required String url, - required Map runnerUrlsById, + required Uri url, + required Map runnerUrlsById, }) { - final channel = IisWorkaroundChannel.xhr( - Uri.parse(url), - ); + final channel = IisWorkaroundChannel.xhr(url); return GrpcCodeClient._( client: grpc.PlaygroundServiceClient(channel), @@ -55,10 +53,20 @@ class GrpcCodeClient implements CodeClient { GrpcCodeClient._({ required grpc.PlaygroundServiceClient client, - required Map runnerUrlsById, + required Map runnerUrlsById, }) : _defaultClient = client, _runnerUrlsById = runnerUrlsById; + @override + Future getMetadata(Sdk sdk) async { + final client = _createRunCodeClient(sdk); + return _runSafely( + () => client.getMetadata( + grpc.GetMetadataRequest(), + ), + ); + } + @override Future runCode(RunCodeRequest request) async { final client = _createRunCodeClient(request.sdk); @@ -208,9 +216,7 @@ class GrpcCodeClient implements CodeClient { throw Exception('Runner not found for ${sdk.id}'); } - final channel = IisWorkaroundChannel.xhr( - Uri.parse(apiClientURL), - ); + final channel = IisWorkaroundChannel.xhr(apiClientURL); return grpc.PlaygroundServiceClient(channel); } diff --git a/playground/frontend/playground_components/lib/src/repositories/code_repository.dart b/playground/frontend/playground_components/lib/src/repositories/code_repository.dart index c9efc3146c09..f7448405cde2 100644 --- a/playground/frontend/playground_components/lib/src/repositories/code_repository.dart +++ b/playground/frontend/playground_components/lib/src/repositories/code_repository.dart @@ -35,9 +35,11 @@ const kProcessingStartedText = 'The processing has started\n'; // TODO(alexeyinkin): Rename. This is not a repository but a higher level client. class CodeRepository { - final CodeClient _client; + final CodeClient client; - CodeRepository({required CodeClient client,}): _client = client; + CodeRepository({ + required this.client, + }); Stream runCode(RunCodeRequest request) async* { try { @@ -47,7 +49,7 @@ class CodeRepository { ); yield initResult; - final runCodeResponse = await _client.runCode(request); + final runCodeResponse = await client.runCode(request); final pipelineUuid = runCodeResponse.pipelineUuid; yield* _checkPipelineExecution( @@ -64,7 +66,7 @@ class CodeRepository { } Future cancelExecution(String pipelineUuid) { - return _client.cancelExecution(pipelineUuid); + return client.cancelExecution(pipelineUuid); } Stream _checkPipelineExecution( @@ -73,7 +75,7 @@ class CodeRepository { }) async* { try { final statusResponse = await runWithRetry( - () => _client.checkStatus(pipelineUuid), + () => client.checkStatus(pipelineUuid), ); final result = await _getPipelineResult( pipelineUuid, @@ -109,7 +111,7 @@ class CodeRepository { switch (status) { case RunCodeStatus.compileError: - final compileOutput = await _client.getCompileOutput(pipelineUuid); + final compileOutput = await client.getCompileOutput(pipelineUuid); return RunCodeResult( pipelineUuid: pipelineUuid, status: status, @@ -129,7 +131,7 @@ class CodeRepository { ); case RunCodeStatus.runError: - final output = await _client.getRunErrorOutput(pipelineUuid); + final output = await client.getRunErrorOutput(pipelineUuid); return RunCodeResult( pipelineUuid: pipelineUuid, status: status, @@ -139,8 +141,7 @@ class CodeRepository { ); case RunCodeStatus.validationError: - final output = - await _client.getValidationErrorOutput(pipelineUuid); + final output = await client.getValidationErrorOutput(pipelineUuid); return RunCodeResult( status: status, output: output.output, @@ -149,8 +150,7 @@ class CodeRepository { ); case RunCodeStatus.preparationError: - final output = - await _client.getPreparationErrorOutput(pipelineUuid); + final output = await client.getPreparationErrorOutput(pipelineUuid); return RunCodeResult( status: status, output: output.output, @@ -170,10 +170,10 @@ class CodeRepository { case RunCodeStatus.executing: final responses = await Future.wait([ - _client.getRunOutput(pipelineUuid), - _client.getLogOutput(pipelineUuid), + client.getRunOutput(pipelineUuid), + client.getLogOutput(pipelineUuid), prevGraph.isEmpty - ? _client.getGraphOutput(pipelineUuid) + ? client.getGraphOutput(pipelineUuid) : Future.value(OutputResponse(output: prevGraph)), ]); final output = responses[0]; @@ -189,11 +189,11 @@ class CodeRepository { case RunCodeStatus.finished: final responses = await Future.wait([ - _client.getRunOutput(pipelineUuid), - _client.getLogOutput(pipelineUuid), - _client.getRunErrorOutput(pipelineUuid), + client.getRunOutput(pipelineUuid), + client.getLogOutput(pipelineUuid), + client.getRunErrorOutput(pipelineUuid), prevGraph.isEmpty - ? _client.getGraphOutput(pipelineUuid) + ? client.getGraphOutput(pipelineUuid) : Future.value(OutputResponse(output: prevGraph)), ]); final output = responses[0]; diff --git a/playground/frontend/playground_components/lib/src/repositories/example_client/example_client.dart b/playground/frontend/playground_components/lib/src/repositories/example_client/example_client.dart index d2bc5a792a93..1987f827343e 100644 --- a/playground/frontend/playground_components/lib/src/repositories/example_client/example_client.dart +++ b/playground/frontend/playground_components/lib/src/repositories/example_client/example_client.dart @@ -16,6 +16,7 @@ * limitations under the License. */ +import '../../api/v1/api.pb.dart' as grpc; import '../models/get_default_precompiled_object_request.dart'; import '../models/get_precompiled_object_code_response.dart'; import '../models/get_precompiled_object_request.dart'; @@ -29,6 +30,8 @@ import '../models/save_snippet_request.dart'; import '../models/save_snippet_response.dart'; abstract class ExampleClient { + Future getMetadata(); + Future getPrecompiledObjects( GetPrecompiledObjectsRequest request, ); diff --git a/playground/frontend/playground_components/lib/src/repositories/example_client/grpc_example_client.dart b/playground/frontend/playground_components/lib/src/repositories/example_client/grpc_example_client.dart index a069806fac4d..c0e7a44f07d0 100644 --- a/playground/frontend/playground_components/lib/src/repositories/example_client/grpc_example_client.dart +++ b/playground/frontend/playground_components/lib/src/repositories/example_client/grpc_example_client.dart @@ -45,11 +45,9 @@ class GrpcExampleClient implements ExampleClient { final grpc.PlaygroundServiceClient _defaultClient; factory GrpcExampleClient({ - required String url, + required Uri url, }) { - final channel = IisWorkaroundChannel.xhr( - Uri.parse(url), - ); + final channel = IisWorkaroundChannel.xhr(url); return GrpcExampleClient._( client: grpc.PlaygroundServiceClient(channel), @@ -60,6 +58,15 @@ class GrpcExampleClient implements ExampleClient { required grpc.PlaygroundServiceClient client, }) : _defaultClient = client; + @override + Future getMetadata() async { + return _runSafely( + () => _defaultClient.getMetadata( + grpc.GetMetadataRequest(), + ), + ); + } + @override Future getPrecompiledObjects( GetPrecompiledObjectsRequest request, diff --git a/playground/frontend/playground_components/lib/src/repositories/example_repository.dart b/playground/frontend/playground_components/lib/src/repositories/example_repository.dart index bb35f0c7674e..8b3c37cd0b8f 100644 --- a/playground/frontend/playground_components/lib/src/repositories/example_repository.dart +++ b/playground/frontend/playground_components/lib/src/repositories/example_repository.dart @@ -29,72 +29,72 @@ import 'models/get_snippet_response.dart'; import 'models/save_snippet_request.dart'; class ExampleRepository { - final ExampleClient _client; + final ExampleClient client; ExampleRepository({ - required ExampleClient client, - }) : _client = client; + required this.client, + }); Future>> getPrecompiledObjects( GetPrecompiledObjectsRequest request, ) async { - final result = await _client.getPrecompiledObjects(request); + final result = await client.getPrecompiledObjects(request); return result.categories; } Future getDefaultPrecompiledObject( GetDefaultPrecompiledObjectRequest request, ) async { - final result = await _client.getDefaultPrecompiledObject(request); + final result = await client.getDefaultPrecompiledObject(request); return result.example; } Future> getPrecompiledObjectCode( GetPrecompiledObjectRequest request, ) async { - final result = await _client.getPrecompiledObjectCode(request); + final result = await client.getPrecompiledObjectCode(request); return result.files; } Future getPrecompiledObjectOutput( GetPrecompiledObjectRequest request, ) async { - final result = await _client.getPrecompiledObjectOutput(request); + final result = await client.getPrecompiledObjectOutput(request); return result.output; } Future getPrecompiledObjectLogs( GetPrecompiledObjectRequest request, ) async { - final result = await _client.getPrecompiledObjectLogs(request); + final result = await client.getPrecompiledObjectLogs(request); return result.output; } Future getPrecompiledObjectGraph( GetPrecompiledObjectRequest request, ) async { - final result = await _client.getPrecompiledObjectGraph(request); + final result = await client.getPrecompiledObjectGraph(request); return result.output; } Future getPrecompiledObject( GetPrecompiledObjectRequest request, ) async { - final result = await _client.getPrecompiledObject(request); + final result = await client.getPrecompiledObject(request); return result.example; } Future getSnippet( GetSnippetRequest request, ) async { - final result = await _client.getSnippet(request); + final result = await client.getSnippet(request); return result; } Future saveSnippet( SaveSnippetRequest request, ) async { - final result = await _client.saveSnippet(request); + final result = await client.saveSnippet(request); return result.id; } } diff --git a/playground/frontend/playground_components/lib/src/repositories/get_metadata_response_grpc_extension.dart b/playground/frontend/playground_components/lib/src/repositories/get_metadata_response_grpc_extension.dart new file mode 100644 index 000000000000..3886684c223f --- /dev/null +++ b/playground/frontend/playground_components/lib/src/repositories/get_metadata_response_grpc_extension.dart @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import '../api/v1/api.pb.dart'; +import '../models/component_version.dart'; + +extension MetadataResponseGrpcExtension on GetMetadataResponse { + ComponentVersion get componentVersion { + return ComponentVersion( + // If a string is optional in protobuf, for some reason it becomes + // a non-nullable Dart string with '' as the default value. + beamSdkVersion: beamSdkVersion == '' ? null : beamSdkVersion, + buildCommitHash: buildCommitHash, + dateTime: DateTime.fromMillisecondsSinceEpoch( + buildCommitTimestampSecondsSinceEpoch.toInt() * 1000, + ), + ); + } +} diff --git a/playground/frontend/playground_components/lib/src/util/async.dart b/playground/frontend/playground_components/lib/src/util/async.dart new file mode 100644 index 000000000000..50a1a5a19160 --- /dev/null +++ b/playground/frontend/playground_components/lib/src/util/async.dart @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/// Mimics [Future.wait] for maps. +Future> waitMap(Map> map) async { + final values = await Future.wait(map.values); + return Map.fromIterables(map.keys, values); +} diff --git a/playground/frontend/playground_components/lib/src/widgets/dialog.dart b/playground/frontend/playground_components/lib/src/widgets/dialog.dart new file mode 100644 index 000000000000..1a0a0c8e4d92 --- /dev/null +++ b/playground/frontend/playground_components/lib/src/widgets/dialog.dart @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import 'package:flutter/material.dart'; + +// TODO(alexeyinkin): In future convert all dialogs to this one. +class BeamDialog extends StatelessWidget { + const BeamDialog({ + required this.child, + this.title, + }); + + final Widget child; + final Widget? title; + + static Future show({ + required Widget child, + required BuildContext context, + Widget? title, + }) async { + await showDialog( + context: context, + builder: (BuildContext context) => BeamDialog( + child: AlertDialog( + title: title, + content: child, + ), + ), + ); + } + + @override + Widget build(BuildContext context) { + return child; + } +} diff --git a/playground/frontend/playground_components/lib/src/widgets/versions/versions.dart b/playground/frontend/playground_components/lib/src/widgets/versions/versions.dart new file mode 100644 index 000000000000..cea7632cc6b8 --- /dev/null +++ b/playground/frontend/playground_components/lib/src/widgets/versions/versions.dart @@ -0,0 +1,140 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:get_it/get_it.dart'; +import 'package:url_launcher/link.dart'; + +import '../../constants/sizes.dart'; +import '../../controllers/build_metadata.dart'; +import '../../models/component_version.dart'; +import '../../models/sdk.dart'; +import '../loading_indicator.dart'; + +const _commitHashLength = 8; + +/// Shows versions of frontend, router, and [sdks] runners. +class VersionsWidget extends StatelessWidget { + const VersionsWidget({ + required this.sdks, + }); + + final List sdks; + + @override + Widget build(BuildContext context) { + final controller = GetIt.instance.get(); + + return AnimatedBuilder( + animation: controller, + builder: (context, child) => Column( + mainAxisSize: MainAxisSize.min, + children: [ + // + _ComponentVersionWidget( + ComponentVersion.frontend, + title: 'widgets.versions.titles.frontend'.tr(), + ), + + const SizedBox(height: BeamSizes.size10), + _ComponentVersionWidget( + controller.routerVersion, + title: 'widgets.versions.titles.router'.tr(), + ), + + for (final sdk in sdks) ...[ + const SizedBox(height: BeamSizes.size10), + _ComponentVersionWidget( + controller.getRunnerVersion(sdk), + title: 'widgets.versions.titles.runner'.tr( + namedArgs: { + 'sdk': sdk.title, + }, + ), + ), + ], + ], + ), + ); + } +} + +/// A line in [VersionsWidget]. +class _ComponentVersionWidget extends StatelessWidget { + const _ComponentVersionWidget( + this.componentVersion, { + required this.title, + }); + + final ComponentVersion? componentVersion; + final String title; + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text(title), + ..._getContent(), + ], + ); + } + + List _getContent() { + if (componentVersion == null) { + return const [LoadingIndicator()]; + } + + return [ + // + if (componentVersion?.beamSdkVersion != null) + const Text('widgets.versions.beam').tr( + namedArgs: { + 'version': componentVersion!.beamSdkVersion!, + }, + ), + + if (componentVersion?.buildCommitHash != null) + Link( + uri: _commitHashToUri(componentVersion!.buildCommitHash!), + builder: (context, followLink) { + return TextButton( + onPressed: followLink, + child: const Text('widgets.versions.commit').tr( + namedArgs: { + 'hash': componentVersion!.buildCommitHash! + .substring(0, _commitHashLength), + 'date': _formatDate(componentVersion!.dateTime!), + }, + ), + ); + }, + ), + ]; + } + + String _formatDate(DateTime dt) { + return dt.toString().substring(0, 'YYYY-MM-DD HH:MM'.length); + } +} + +Uri _commitHashToUri(String commitHash) { + return Uri.parse('https://github.com/apache/beam/tree/$commitHash'); +} diff --git a/playground/frontend/playground_components/pubspec.yaml b/playground/frontend/playground_components/pubspec.yaml index 7a239a399af1..0bc08989e797 100644 --- a/playground/frontend/playground_components/pubspec.yaml +++ b/playground/frontend/playground_components/pubspec.yaml @@ -50,6 +50,7 @@ dependencies: provider: ^6.0.3 rxdart: ^0.27.7 shared_preferences: ^2.0.15 + url_launcher: ^6.1.10 yaml: ^3.1.1 dev_dependencies: diff --git a/playground/frontend/playground_components/test/src/common/example_cache.dart b/playground/frontend/playground_components/test/src/common/example_cache.dart index a3017598e4e8..b9cdeec866b4 100644 --- a/playground/frontend/playground_components/test/src/common/example_cache.dart +++ b/playground/frontend/playground_components/test/src/common/example_cache.dart @@ -26,6 +26,8 @@ class _C {} // ignore: unused_element /// Creates an [ExampleCache] with a broken URL so all requests fail. ExampleCache createFailingExampleCache() { return ExampleCache( - exampleRepository: ExampleRepository(client: GrpcExampleClient(url: '')), + exampleRepository: ExampleRepository( + client: GrpcExampleClient(url: Uri.parse('')), + ), ); } diff --git a/playground/frontend/playground_components/tools/generate_build_metadata.sh b/playground/frontend/playground_components/tools/generate_build_metadata.sh new file mode 100644 index 000000000000..9fd74c39c54c --- /dev/null +++ b/playground/frontend/playground_components/tools/generate_build_metadata.sh @@ -0,0 +1,39 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +# Run this from the playground_components project root +FILE='lib/src/build_metadata.g.dart' + +echo '// GENERATED CODE - DO NOT MODIFY BY HAND' > $FILE +echo '' >> $FILE + +echo '// This file is generated during deployment to contain data about the commit.' >> $FILE +echo '// The copy of this file stored in the repository is for development purpose' >> $FILE +echo '// so the project can be started locally.' >> $FILE +echo '// It is safe to commit changes here everytime you run code generation.' >> $FILE + +echo -n 'const buildCommitHash = ' >> $FILE +git rev-parse --sq HEAD >> $FILE +echo ';' >> $FILE + +echo -n 'const buildCommitSecondsSinceEpoch = ' >> $FILE +git show -s --format=%ct HEAD >> $FILE +echo ';' >> $FILE + +echo 'Written' +realpath $FILE +cat $FILE diff --git a/playground/frontend/pubspec.lock b/playground/frontend/pubspec.lock index 84e011cfcab2..e68ffd661e3e 100644 --- a/playground/frontend/pubspec.lock +++ b/playground/frontend/pubspec.lock @@ -1163,10 +1163,10 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: e8f2efc804810c0f2f5b485f49e7942179f56eabcfe81dce3387fec4bb55876b + sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e" url: "https://pub.dev" source: hosted - version: "6.1.9" + version: "6.1.10" url_launcher_android: dependency: transitive description: From 62fe1e78b182479ed3e6e8dc377bf260c98e7b32 Mon Sep 17 00:00:00 2001 From: Alexey Inkin Date: Wed, 1 Mar 2023 18:53:26 +0400 Subject: [PATCH 11/26] Remove config.g.dart generation (#22271) --- .../workflows/playground_frontend_test.yml | 1 - playground/README.md | 4 +- playground/frontend/CONTRIBUTE.md | 19 --------- playground/frontend/README.md | 10 ----- playground/frontend/lib/config.example.dart | 29 ------------- playground/frontend/lib/locator.dart | 1 - .../lib/src/controllers/build_metadata.dart | 4 +- .../lib/src/repositories/backend_urls.dart | 12 +++--- .../lib/src/util/async.dart | 2 +- .../cloudbuild/cloudbuild_pg_to_gke.yaml | 1 - playground/terraform/build.gradle.kts | 41 ------------------- 11 files changed, 12 insertions(+), 112 deletions(-) delete mode 100644 playground/frontend/lib/config.example.dart diff --git a/.github/workflows/playground_frontend_test.yml b/.github/workflows/playground_frontend_test.yml index 4813b6c69944..aefe2b7aa4d3 100644 --- a/.github/workflows/playground_frontend_test.yml +++ b/.github/workflows/playground_frontend_test.yml @@ -86,6 +86,5 @@ jobs: - name: 'Integration tests' run: | - cp playground/frontend/lib/config.example.dart playground/frontend/lib/config.g.dart chromedriver --port=4444 & ./gradlew :playground:frontend:integrationTest -PdeviceId=web-server diff --git a/playground/README.md b/playground/README.md index 958e58ce1d7f..f506070d6cd9 100644 --- a/playground/README.md +++ b/playground/README.md @@ -80,8 +80,8 @@ cd beam ### Router, runners, and frontend -1. Edit `/playground/frontend/lib/config.g.dart` to set your local backend host and ports -found in `/playground/docker-compose.local.yaml`. +1. Edit `/playground/frontend/playground_components/lib/src/constants/backend_urls.dart` +to override backend URLs with yours found in `/playground/docker-compose.local.yaml`. 2. To start, run: ```bash diff --git a/playground/frontend/CONTRIBUTE.md b/playground/frontend/CONTRIBUTE.md index b6eda60468e8..310b7c5c476e 100644 --- a/playground/frontend/CONTRIBUTE.md +++ b/playground/frontend/CONTRIBUTE.md @@ -66,25 +66,6 @@ contains decoupled playground page state and module providers like `OutputPlacem For quick start up, please take a look to [this guide](https://docs.flutter.dev/development/data-and-backend/state-mgmt/simple) -## Configuration - -The app could be configured using gradle task (e.g. api url) - -``` -cd beam -./gradlew :playground:frontend:createConfig -``` - -The command generates [./lib/config.g.dart](./lib/config.g.dart) file with constants from -gradle.properties which can be used in the app - -To add a new constant do the following steps: - -- Add a new line with const to the `:playground:frontend:createConfig` task - inside [build.gradle](./build.gradle); -- Update [gradle.properties](./gradle.properties); -- Run task to test it and commit [./lib/config.g.dart](./lib/config.g.dart) file. - ## Theming Playground app supports light and dark themes. Component themes are declared diff --git a/playground/frontend/README.md b/playground/frontend/README.md index 705e96b9d843..95c43fb09cd1 100644 --- a/playground/frontend/README.md +++ b/playground/frontend/README.md @@ -27,16 +27,6 @@ without having to install/initialize a Beam environment. ## Getting Started -### Copy the configuration file - -After checkout, run: - -```bash -cp playground/frontend/lib/config.example.dart playground/frontend/lib/config.g.dart -``` - -This is a temporarily required step. See more: https://github.com/apache/beam/issues/24200 - ### Run See [playground/README.md](../README.md) for details on requirements and setup. diff --git a/playground/frontend/lib/config.example.dart b/playground/frontend/lib/config.example.dart deleted file mode 100644 index de50eac82492..000000000000 --- a/playground/frontend/lib/config.example.dart +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// To build and run the app, copy this file to './config.g.dart' -// This is a temporary solution while we cannot have 'config.g.dart' -// in the repository. -// TODO: https://github.com/apache/beam/issues/24200 - -const String kAnalyticsUA = 'UA-73650088-2'; -const String kApiClientURL = 'https://router.play-dev.beam.apache.org'; -const String kApiJavaClientURL = 'https://java.play-dev.beam.apache.org'; -const String kApiGoClientURL = 'https://go.play-dev.beam.apache.org'; -const String kApiPythonClientURL = 'https://python.play-dev.beam.apache.org'; -const String kApiScioClientURL = 'https://scio.play-dev.beam.apache.org'; diff --git a/playground/frontend/lib/locator.dart b/playground/frontend/lib/locator.dart index 54905c72266f..f2f4c99f99de 100644 --- a/playground/frontend/lib/locator.dart +++ b/playground/frontend/lib/locator.dart @@ -20,7 +20,6 @@ import 'package:app_state/app_state.dart'; import 'package:get_it/get_it.dart'; import 'package:playground_components/playground_components.dart'; -import 'config.g.dart'; import 'pages/loading/page.dart'; import 'router/page_factory.dart'; import 'router/route_information_parser.dart'; diff --git a/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart b/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart index 94101353a01c..71a8a97f83a3 100644 --- a/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart +++ b/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart @@ -36,7 +36,7 @@ class BuildMetadataController extends ChangeNotifier { final _runnerVersions = {}; final _runnerVersionFutures = >{}; - /// Returns the router version and starts loading if it is not loaded yet. + /// Returns the router version and starts loading if it is not started yet. ComponentVersion? get routerVersion { if (_routerVersionFuture == null) { unawaited(_loadRouterVersion()); @@ -54,7 +54,7 @@ class BuildMetadataController extends ChangeNotifier { notifyListeners(); } - /// Returns the runner version and starts loading if it is not loaded yet. + /// Returns the runner version and starts loading if it is not started yet. ComponentVersion? getRunnerVersion(Sdk sdk) { if (!_runnerVersionFutures.containsKey(sdk)) { unawaited(_loadRunnerVersion(sdk)); diff --git a/playground/frontend/playground_components/lib/src/repositories/backend_urls.dart b/playground/frontend/playground_components/lib/src/repositories/backend_urls.dart index 179031cc3e03..f3548ca318a1 100644 --- a/playground/frontend/playground_components/lib/src/repositories/backend_urls.dart +++ b/playground/frontend/playground_components/lib/src/repositories/backend_urls.dart @@ -16,6 +16,8 @@ * limitations under the License. */ +// ignore_for_file: avoid_print + import '../../playground_components.dart'; import '../constants/backend_urls.dart'; @@ -89,8 +91,8 @@ Future _getBackendUrl(String node) async { return urls.first; } - print('Probing multiple options for $node backend:'); // ignore: avoid_print - urls.forEach(print); // ignore: avoid_print + print('Probing multiple options for $node backend:'); + urls.forEach(print); final lastUrl = urls.removeLast(); @@ -98,13 +100,13 @@ Future _getBackendUrl(String node) async { try { final client = GrpcExampleClient(url: url); await client.getMetadata(); - print('Using $url'); // ignore: avoid_print + print('Using $url'); return url; } catch (ex) { - print('$url failed'); // ignore: avoid_print + print('$url failed'); } } - print('Using $lastUrl'); // ignore: avoid_print + print('Using $lastUrl'); return lastUrl; } diff --git a/playground/frontend/playground_components/lib/src/util/async.dart b/playground/frontend/playground_components/lib/src/util/async.dart index 50a1a5a19160..44248eeeb67f 100644 --- a/playground/frontend/playground_components/lib/src/util/async.dart +++ b/playground/frontend/playground_components/lib/src/util/async.dart @@ -16,7 +16,7 @@ * limitations under the License. */ -/// Mimics [Future.wait] for maps. +/// Mimics [Future.wait] for a map. Future> waitMap(Map> map) async { final values = await Future.wait(map.values); return Map.fromIterables(map.keys, values); diff --git a/playground/infrastructure/cloudbuild/cloudbuild_pg_to_gke.yaml b/playground/infrastructure/cloudbuild/cloudbuild_pg_to_gke.yaml index 3d9c8d405668..fc20d1bcb035 100644 --- a/playground/infrastructure/cloudbuild/cloudbuild_pg_to_gke.yaml +++ b/playground/infrastructure/cloudbuild/cloudbuild_pg_to_gke.yaml @@ -37,7 +37,6 @@ steps: 'bucket = "$_STATE_BUCKET"'\ > playground/terraform/environment/$_ENVIRONMENT_NAME/state.tfbackend gcloud container clusters get-credentials --region '$_PLAYGROUND_ZONE' '$_GKE_NAME' --project '$PROJECT_ID' - ./gradlew playground:terraform:prepareConfig -Pdns-name="$_DNS_NAME" ./gradlew playground:terraform:gkebackend -Pdocker-repository-root="$_DOCKER_REPOSITORY_ROOT" \ -Pproject_environment="$_ENVIRONMENT_NAME" -Pdocker-tag="$_TAG" -Psdk-tag="$_SDK_TAG" -Pdns-name="$_DNS_NAME" diff --git a/playground/terraform/build.gradle.kts b/playground/terraform/build.gradle.kts index 93318d182572..dcafbbc382a8 100644 --- a/playground/terraform/build.gradle.kts +++ b/playground/terraform/build.gradle.kts @@ -285,56 +285,15 @@ tasks.register("pushFront") { dependsOn(":playground:frontend:dockerTagsPush") } -tasks.register("prepareConfig") { - group = "deploy" - doLast { - var dns_name = "" - if (project.hasProperty("dns-name")) { - dns_name = project.property("dns-name") as String - } - val configFileName = "config.g.dart" - val modulePath = project(":playground:frontend").projectDir.absolutePath - var file = File("$modulePath/lib/$configFileName") - - file.writeText( - """ -const String kAnalyticsUA = 'UA-73650088-2'; -const String kApiClientURL = - 'https://router.${dns_name}'; -const String kApiJavaClientURL = - 'https://java.${dns_name}'; -const String kApiGoClientURL = - 'https://go.${dns_name}'; -const String kApiPythonClientURL = - 'https://python.${dns_name}'; -const String kApiScioClientURL = - 'https://scio.${dns_name}'; -""" - ) - try { - var stdout = ByteArrayOutputStream() - //set Docker Registry - exec { - commandLine = listOf("terraform", "output", "docker-repository-root") - standardOutput = stdout - } - project.rootProject.extra["docker-repository-root"] = stdout.toString().trim().replace("\"", "") - } catch (e: Exception) { - } - } -} /* initialization infrastructure */ tasks.register("InitInfrastructure") { group = "deploy" description = "initialization infrastructure" val init = tasks.getByName("terraformInit") val apply = tasks.getByName("terraformApplyInf") - val prepare = tasks.getByName("prepareConfig") dependsOn(init) dependsOn(apply) - dependsOn(prepare) apply.mustRunAfter(init) - prepare.mustRunAfter(apply) } tasks.register("indexcreate") { From 0d41f157812fdc3227a6ea93429d3096aa03a850 Mon Sep 17 00:00:00 2001 From: Alexey Inkin Date: Wed, 1 Mar 2023 18:54:34 +0400 Subject: [PATCH 12/26] Add config.g.dart (#22271) --- playground/frontend/lib/config.g.dart | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 playground/frontend/lib/config.g.dart diff --git a/playground/frontend/lib/config.g.dart b/playground/frontend/lib/config.g.dart new file mode 100644 index 000000000000..a4d3b4f8c673 --- /dev/null +++ b/playground/frontend/lib/config.g.dart @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// This file was auto-generated and used to contain backend URLs. +// They are now determined automatically +// as of https://github.com/apache/beam/pull/25610 +// TODO(alexeyinkin): When it is merged, find a better place for the remaining +// constant and delete this file. + +const String kAnalyticsUA = 'G-BXFP2FNCKC'; From 2ffc78ea98203cca51ada06393a55149614eba03 Mon Sep 17 00:00:00 2001 From: Alexey Inkin Date: Thu, 2 Mar 2023 16:43:00 +0400 Subject: [PATCH 13/26] Address review comments (#22271) --- .../lib/src/build_metadata.g.dart | 6 ++--- .../tools/generate_build_metadata.sh | 24 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/playground/frontend/playground_components/lib/src/build_metadata.g.dart b/playground/frontend/playground_components/lib/src/build_metadata.g.dart index f937e63fa118..02996d4f0cf1 100644 --- a/playground/frontend/playground_components/lib/src/build_metadata.g.dart +++ b/playground/frontend/playground_components/lib/src/build_metadata.g.dart @@ -1,9 +1,9 @@ // GENERATED CODE - DO NOT MODIFY BY HAND - +// // This file is generated during deployment to contain data about the commit. // The copy of this file stored in the repository is for development purpose // so the project can be started locally. // It is safe to commit changes here everytime you run code generation. -const buildCommitHash = '92fe2b4689de2d3dba0574dffc144fa84531a657' ; -const buildCommitSecondsSinceEpoch = 1677246050 +const buildCommitHash = '0d41f157812fdc3227a6ea93429d3096aa03a850' ; +const buildCommitSecondsSinceEpoch = 1677682474 ; diff --git a/playground/frontend/playground_components/tools/generate_build_metadata.sh b/playground/frontend/playground_components/tools/generate_build_metadata.sh index 9fd74c39c54c..052b2373fac9 100644 --- a/playground/frontend/playground_components/tools/generate_build_metadata.sh +++ b/playground/frontend/playground_components/tools/generate_build_metadata.sh @@ -16,24 +16,24 @@ # under the License. # Run this from the playground_components project root -FILE='lib/src/build_metadata.g.dart' +FILE=$(realpath "$(realpath $(dirname $0))/../lib/src/build_metadata.g.dart") -echo '// GENERATED CODE - DO NOT MODIFY BY HAND' > $FILE -echo '' >> $FILE +cat > $FILE << EOF +// GENERATED CODE - DO NOT MODIFY BY HAND +// +// This file is generated during deployment to contain data about the commit. +// The copy of this file stored in the repository is for development purpose +// so the project can be started locally. +// It is safe to commit changes here everytime you run code generation. +EOF -echo '// This file is generated during deployment to contain data about the commit.' >> $FILE -echo '// The copy of this file stored in the repository is for development purpose' >> $FILE -echo '// so the project can be started locally.' >> $FILE -echo '// It is safe to commit changes here everytime you run code generation.' >> $FILE - -echo -n 'const buildCommitHash = ' >> $FILE +printf 'const buildCommitHash = ' >> $FILE git rev-parse --sq HEAD >> $FILE echo ';' >> $FILE -echo -n 'const buildCommitSecondsSinceEpoch = ' >> $FILE +printf 'const buildCommitSecondsSinceEpoch = ' >> $FILE git show -s --format=%ct HEAD >> $FILE echo ';' >> $FILE -echo 'Written' -realpath $FILE +echo "Written $FILE:" cat $FILE From ee511095d6b27821ed15e2d0e2bf5b7e25826161 Mon Sep 17 00:00:00 2001 From: Alexey Inkin Date: Thu, 2 Mar 2023 18:19:16 +0400 Subject: [PATCH 14/26] Clean up (#22271) --- playground/frontend/Dockerfile | 3 +++ playground/frontend/build.gradle | 25 +++++++++---------- .../playground_components/build.gradle.kts | 1 - .../lib/src/build_metadata.g.dart | 7 +++--- .../tools/generate_build_metadata.sh | 17 ++++++------- 5 files changed, 25 insertions(+), 28 deletions(-) mode change 100644 => 100755 playground/frontend/playground_components/tools/generate_build_metadata.sh diff --git a/playground/frontend/Dockerfile b/playground/frontend/Dockerfile index 59c44637059f..fdfa8148998f 100644 --- a/playground/frontend/Dockerfile +++ b/playground/frontend/Dockerfile @@ -18,6 +18,8 @@ FROM debian:11 as build ARG FLUTTER_VERSION=3.7.3 +ARG BUILD_COMMIT_HASH +ARG BUILD_COMMIT_SECONDS_SINCE_EPOCH # ------------------------------------------------ # Setting up. @@ -28,6 +30,7 @@ WORKDIR /app RUN apt-get update && apt-get install -y wget xz-utils git +RUN /app/playground_components/tools/generate_build_metadata.sh $BUILD_COMMIT_HASH $BUILD_COMMIT_SECONDS_SINCE_EPOCH RUN cat /app/playground_components/lib/src/build_metadata.g.dart RUN wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_$FLUTTER_VERSION-stable.tar.xz &&\ diff --git a/playground/frontend/build.gradle b/playground/frontend/build.gradle index 8a5a8e0daa45..567376cb7ea6 100644 --- a/playground/frontend/build.gradle +++ b/playground/frontend/build.gradle @@ -19,6 +19,7 @@ apply(plugin: "org.apache.beam.module") apply(plugin: "base") +apply(from: "$project.rootDir/playground/backend/containers/git-functions.gradle") applyDockerNature() def playgroundJobServerProject = "${project.path.replace("-container", "")}" @@ -227,25 +228,19 @@ void runIntegrationTest(String path, String url) { } } -tasks.register("copyDockerfileDependencies") { - dependsOn(":playground:frontend:playground_components:generateBuildMetadata") - - group = "build" - description = "Copy files that required to build docker container" - - doLast { - copy { +task copyDockerfileDependencies(type: Copy) { + group = "build" + description = "Copy files that required to build docker container" + copy { from(".") into("build/") exclude("build") exclude("Dockerfile") - } - - copy { + } + copy { from("../playground") into("build/playground") - } - } + } } docker { @@ -258,6 +253,10 @@ docker { : project.docker_image_default_repo_root ) files("./build/") + buildArgs([ + 'BUILD_COMMIT_HASH': getGitCommitHash(), + 'BUILD_COMMIT_SECONDS_SINCE_EPOCH': getGitCommitTimestamp(), + ]) tags(containerImageTags()) } diff --git a/playground/frontend/playground_components/build.gradle.kts b/playground/frontend/playground_components/build.gradle.kts index 94cf711bdf56..11b1bdf58f02 100644 --- a/playground/frontend/playground_components/build.gradle.kts +++ b/playground/frontend/playground_components/build.gradle.kts @@ -21,7 +21,6 @@ import java.io.FileOutputStream description = "Apache Beam :: Playground :: playground_components Flutter Package" tasks.register("generate") { - dependsOn("generateBuildMetadata") dependsOn("generateCode") dependsOn("extractBeamSymbols") diff --git a/playground/frontend/playground_components/lib/src/build_metadata.g.dart b/playground/frontend/playground_components/lib/src/build_metadata.g.dart index 02996d4f0cf1..a57f4cd0ba00 100644 --- a/playground/frontend/playground_components/lib/src/build_metadata.g.dart +++ b/playground/frontend/playground_components/lib/src/build_metadata.g.dart @@ -3,7 +3,6 @@ // This file is generated during deployment to contain data about the commit. // The copy of this file stored in the repository is for development purpose // so the project can be started locally. -// It is safe to commit changes here everytime you run code generation. -const buildCommitHash = '0d41f157812fdc3227a6ea93429d3096aa03a850' ; -const buildCommitSecondsSinceEpoch = 1677682474 -; +// Keep these constants in the repository. +const buildCommitHash = null; +const buildCommitSecondsSinceEpoch = null; diff --git a/playground/frontend/playground_components/tools/generate_build_metadata.sh b/playground/frontend/playground_components/tools/generate_build_metadata.sh old mode 100644 new mode 100755 index 052b2373fac9..5f2e9942f31d --- a/playground/frontend/playground_components/tools/generate_build_metadata.sh +++ b/playground/frontend/playground_components/tools/generate_build_metadata.sh @@ -15,8 +15,10 @@ # specific language governing permissions and limitations # under the License. -# Run this from the playground_components project root -FILE=$(realpath "$(realpath $(dirname $0))/../lib/src/build_metadata.g.dart") +# Usage +# ./generate_build_metadata.sh + +FILE=$(realpath "$(dirname $0)/../lib/src/build_metadata.g.dart") cat > $FILE << EOF // GENERATED CODE - DO NOT MODIFY BY HAND @@ -24,16 +26,11 @@ cat > $FILE << EOF // This file is generated during deployment to contain data about the commit. // The copy of this file stored in the repository is for development purpose // so the project can be started locally. -// It is safe to commit changes here everytime you run code generation. +// Keep these constants `null` in the repository. EOF -printf 'const buildCommitHash = ' >> $FILE -git rev-parse --sq HEAD >> $FILE -echo ';' >> $FILE - -printf 'const buildCommitSecondsSinceEpoch = ' >> $FILE -git show -s --format=%ct HEAD >> $FILE -echo ';' >> $FILE +echo "const buildCommitHash = '$1';" >> $FILE +echo "const buildCommitSecondsSinceEpoch = $2;" >> $FILE echo "Written $FILE:" cat $FILE From 097f468d892ce003067c3f353b7358c8c9224f0f Mon Sep 17 00:00:00 2001 From: Alexey Inkin Date: Thu, 2 Mar 2023 18:27:19 +0400 Subject: [PATCH 15/26] Clean up (#22271) --- playground/frontend/Dockerfile | 5 ++--- .../tools/generate_build_metadata.sh | 13 +++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/playground/frontend/Dockerfile b/playground/frontend/Dockerfile index fdfa8148998f..180d096dbefd 100644 --- a/playground/frontend/Dockerfile +++ b/playground/frontend/Dockerfile @@ -30,9 +30,6 @@ WORKDIR /app RUN apt-get update && apt-get install -y wget xz-utils git -RUN /app/playground_components/tools/generate_build_metadata.sh $BUILD_COMMIT_HASH $BUILD_COMMIT_SECONDS_SINCE_EPOCH -RUN cat /app/playground_components/lib/src/build_metadata.g.dart - RUN wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_$FLUTTER_VERSION-stable.tar.xz &&\ tar -xf flutter_linux_$FLUTTER_VERSION-stable.tar.xz &&\ mv flutter /opt/ &&\ @@ -46,6 +43,8 @@ RUN wget https://storage.googleapis.com/flutter_infra_release/releases/stable/li # Building the application. # ------------------------------------------------ +RUN /app/playground_components/tools/generate_build_metadata.sh $BUILD_COMMIT_HASH $BUILD_COMMIT_SECONDS_SINCE_EPOCH + RUN cd /app/playground_components &&\ flutter pub get -v diff --git a/playground/frontend/playground_components/tools/generate_build_metadata.sh b/playground/frontend/playground_components/tools/generate_build_metadata.sh index 5f2e9942f31d..824167fff7dc 100755 --- a/playground/frontend/playground_components/tools/generate_build_metadata.sh +++ b/playground/frontend/playground_components/tools/generate_build_metadata.sh @@ -1,3 +1,4 @@ +#!/bin/bash # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information @@ -18,19 +19,19 @@ # Usage # ./generate_build_metadata.sh -FILE=$(realpath "$(dirname $0)/../lib/src/build_metadata.g.dart") +FILE=$(realpath "$(dirname "$0")/../lib/src/build_metadata.g.dart") -cat > $FILE << EOF +cat > "$FILE" << EOF // GENERATED CODE - DO NOT MODIFY BY HAND // // This file is generated during deployment to contain data about the commit. // The copy of this file stored in the repository is for development purpose // so the project can be started locally. -// Keep these constants `null` in the repository. +// Keep these constants \`null\` in the repository. EOF -echo "const buildCommitHash = '$1';" >> $FILE -echo "const buildCommitSecondsSinceEpoch = $2;" >> $FILE +echo "const buildCommitHash = '$1';" >> "$FILE" +echo "const buildCommitSecondsSinceEpoch = $2;" >> "$FILE" echo "Written $FILE:" -cat $FILE +cat "$FILE" From 55c5c25aaa127e253c014c96eabdef965a31afb2 Mon Sep 17 00:00:00 2001 From: Alexey Inkin Date: Thu, 2 Mar 2023 19:53:31 +0400 Subject: [PATCH 16/26] Add license to build_metadata.g.dart (#22271) --- .../lib/src/build_metadata.g.dart | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/playground/frontend/playground_components/lib/src/build_metadata.g.dart b/playground/frontend/playground_components/lib/src/build_metadata.g.dart index a57f4cd0ba00..67e37f9bfdda 100644 --- a/playground/frontend/playground_components/lib/src/build_metadata.g.dart +++ b/playground/frontend/playground_components/lib/src/build_metadata.g.dart @@ -1,8 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + // GENERATED CODE - DO NOT MODIFY BY HAND // // This file is generated during deployment to contain data about the commit. // The copy of this file stored in the repository is for development purpose // so the project can be started locally. -// Keep these constants in the repository. +// Keep these constants `null` in the repository. const buildCommitHash = null; const buildCommitSecondsSinceEpoch = null; From b7b1e9ee767aeaf17eb11614c7a8977c7b391927 Mon Sep 17 00:00:00 2001 From: Alexey Inkin Date: Mon, 6 Mar 2023 13:23:02 +0400 Subject: [PATCH 17/26] Address review comments (#22271) --- .../lib/src/controllers/build_metadata.dart | 14 +- .../lib/src/repositories/backend_urls.dart | 75 ++++---- .../lib/src/widgets/versions/versions.dart | 92 +++++---- .../common/example_repository_mock.mocks.dart | 128 +++++++------ .../code_repository_test.mocks.dart | 125 ++++++++----- .../example_repository_test.mocks.dart | 176 ++++++++++-------- .../tools/generate_build_metadata.sh | 6 +- 7 files changed, 358 insertions(+), 258 deletions(-) diff --git a/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart b/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart index 71a8a97f83a3..4cb85c0021e1 100644 --- a/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart +++ b/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart @@ -36,13 +36,11 @@ class BuildMetadataController extends ChangeNotifier { final _runnerVersions = {}; final _runnerVersionFutures = >{}; - /// Returns the router version and starts loading if it is not started yet. - ComponentVersion? get routerVersion { + Future getRouterVersion() async { if (_routerVersionFuture == null) { - unawaited(_loadRouterVersion()); + await _loadRouterVersion(); } - - return _routerVersion; + return _routerVersion!; } Future _loadRouterVersion() async { @@ -55,12 +53,12 @@ class BuildMetadataController extends ChangeNotifier { } /// Returns the runner version and starts loading if it is not started yet. - ComponentVersion? getRunnerVersion(Sdk sdk) { + Future getRunnerVersion(Sdk sdk) async { if (!_runnerVersionFutures.containsKey(sdk)) { - unawaited(_loadRunnerVersion(sdk)); + await _loadRunnerVersion(sdk); } - return _runnerVersions[sdk]; + return _runnerVersions[sdk]!; } Future _loadRunnerVersion(Sdk sdk) async { diff --git a/playground/frontend/playground_components/lib/src/repositories/backend_urls.dart b/playground/frontend/playground_components/lib/src/repositories/backend_urls.dart index f3548ca318a1..7654a8afcd6a 100644 --- a/playground/frontend/playground_components/lib/src/repositories/backend_urls.dart +++ b/playground/frontend/playground_components/lib/src/repositories/backend_urls.dart @@ -26,6 +26,44 @@ const _routerNode = 'router'; Future getRouterUrl() => _getBackendUrl(_routerNode); Future getRunnerUrl(Sdk sdk) => _getBackendUrl(sdk.id); +/// Returns the URL for the backend [node]. +/// +/// Calls [_getBackendUrlOptions] for options. +/// +/// If only one option exists, returns it. +/// This ensures fast initialization in production. +/// +/// If multiple options exist, each of them except the last one is probed +/// with getMetadata() call. This results in slower initialization for +/// custom stages but keeps the configuration simple. +Future _getBackendUrl(String node) async { + final urls = _getBackendUrlOptions(node); + + if (urls.length == 1) { + return urls.first; + } + + print('Probing multiple options for $node backend:'); + urls.forEach(print); + + final lastUrl = urls.removeLast(); + + for (final url in urls) { + try { + final client = GrpcExampleClient(url: url); + await client.getMetadata(); + print('Using $url'); + return url; + } on Exception catch (ex) { + print('$url failed'); + print(ex); + } + } + + print('Using $lastUrl'); + return lastUrl; +} + /// Returns options for backend URLs for [node]. /// /// If an override is given in [backendUrlOverrides], it is the only option. @@ -73,40 +111,3 @@ List _getBackendUrlOptions(String node) { bool _shouldAttemptUrl(String url) { return !skipBackendUrls.any((pattern) => pattern.allMatches(url).isNotEmpty); } - -/// Returns the URL for the backend [node]. -/// -/// Calls [_getBackendUrlOptions] for options. -/// -/// If only one option exists, returns it. -/// This ensures fast initialization in production. -/// -/// If multiple options exist, each of them except the last one is probed -/// with getMetadata() call. This results in slower initialization for -/// custom stages but keeps the configuration simple. -Future _getBackendUrl(String node) async { - final urls = _getBackendUrlOptions(node); - - if (urls.length == 1) { - return urls.first; - } - - print('Probing multiple options for $node backend:'); - urls.forEach(print); - - final lastUrl = urls.removeLast(); - - for (final url in urls) { - try { - final client = GrpcExampleClient(url: url); - await client.getMetadata(); - print('Using $url'); - return url; - } catch (ex) { - print('$url failed'); - } - } - - print('Using $lastUrl'); - return lastUrl; -} diff --git a/playground/frontend/playground_components/lib/src/widgets/versions/versions.dart b/playground/frontend/playground_components/lib/src/widgets/versions/versions.dart index cea7632cc6b8..76a2ed69241b 100644 --- a/playground/frontend/playground_components/lib/src/widgets/versions/versions.dart +++ b/playground/frontend/playground_components/lib/src/widgets/versions/versions.dart @@ -16,6 +16,8 @@ * limitations under the License. */ +import 'dart:math'; + import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; @@ -44,24 +46,25 @@ class VersionsWidget extends StatelessWidget { return AnimatedBuilder( animation: controller, builder: (context, child) => Column( + crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ // _ComponentVersionWidget( - ComponentVersion.frontend, + Future.value(ComponentVersion.frontend), title: 'widgets.versions.titles.frontend'.tr(), ), const SizedBox(height: BeamSizes.size10), _ComponentVersionWidget( - controller.routerVersion, + controller.getRouterVersion(), // ignore: discarded_futures title: 'widgets.versions.titles.router'.tr(), ), for (final sdk in sdks) ...[ const SizedBox(height: BeamSizes.size10), _ComponentVersionWidget( - controller.getRunnerVersion(sdk), + controller.getRunnerVersion(sdk), // ignore: discarded_futures title: 'widgets.versions.titles.runner'.tr( namedArgs: { 'sdk': sdk.title, @@ -78,11 +81,11 @@ class VersionsWidget extends StatelessWidget { /// A line in [VersionsWidget]. class _ComponentVersionWidget extends StatelessWidget { const _ComponentVersionWidget( - this.componentVersion, { + this.componentVersionFuture, { required this.title, }); - final ComponentVersion? componentVersion; + final Future componentVersionFuture; final String title; @override @@ -92,42 +95,61 @@ class _ComponentVersionWidget extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ Text(title), - ..._getContent(), + _getContent(), ], ); } - List _getContent() { - if (componentVersion == null) { - return const [LoadingIndicator()]; + Widget _getContent() { + return FutureBuilder( + future: componentVersionFuture, + builder: _getContentWithSnapshot, + ); + } + + Widget _getContentWithSnapshot( + BuildContext context, + AsyncSnapshot snapshot, + ) { + final data = snapshot.data; + + if (data == null) { + return const LoadingIndicator(); } - return [ - // - if (componentVersion?.beamSdkVersion != null) - const Text('widgets.versions.beam').tr( - namedArgs: { - 'version': componentVersion!.beamSdkVersion!, - }, - ), - - if (componentVersion?.buildCommitHash != null) - Link( - uri: _commitHashToUri(componentVersion!.buildCommitHash!), - builder: (context, followLink) { - return TextButton( - onPressed: followLink, - child: const Text('widgets.versions.commit').tr( - namedArgs: { - 'hash': componentVersion!.buildCommitHash! - .substring(0, _commitHashLength), - 'date': _formatDate(componentVersion!.dateTime!), - }, - ), - ); - }, - ), - ]; + final hash = data.buildCommitHash; + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + // + if (data.beamSdkVersion != null) + const Text('widgets.versions.beam').tr( + namedArgs: { + 'version': data.beamSdkVersion!, + }, + ), + + if (hash != null) + Link( + uri: _commitHashToUri(data.buildCommitHash!), + builder: (context, followLink) { + return TextButton( + onPressed: followLink, + child: const Text('widgets.versions.commit').tr( + namedArgs: { + 'hash': hash.substring( + 0, + min(_commitHashLength, hash.length), + ), + 'date': _formatDate(data.dateTime!), + }, + ), + ); + }, + ), + ], + ); } String _formatDate(DateTime dt) { diff --git a/playground/frontend/playground_components/test/src/common/example_repository_mock.mocks.dart b/playground/frontend/playground_components/test/src/common/example_repository_mock.mocks.dart index b426f3c01502..f4c79067d5a3 100644 --- a/playground/frontend/playground_components/test/src/common/example_repository_mock.mocks.dart +++ b/playground/frontend/playground_components/test/src/common/example_repository_mock.mocks.dart @@ -3,28 +3,30 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i5; +import 'dart:async' as _i6; import 'package:mockito/mockito.dart' as _i1; import 'package:playground_components/src/models/category_with_examples.dart' - as _i7; -import 'package:playground_components/src/models/example_base.dart' as _i2; -import 'package:playground_components/src/models/sdk.dart' as _i6; -import 'package:playground_components/src/models/snippet_file.dart' as _i10; + as _i8; +import 'package:playground_components/src/models/example_base.dart' as _i3; +import 'package:playground_components/src/models/sdk.dart' as _i7; +import 'package:playground_components/src/models/snippet_file.dart' as _i11; +import 'package:playground_components/src/repositories/example_client/example_client.dart' + as _i2; import 'package:playground_components/src/repositories/example_repository.dart' - as _i4; + as _i5; import 'package:playground_components/src/repositories/models/get_default_precompiled_object_request.dart' - as _i9; + as _i10; import 'package:playground_components/src/repositories/models/get_precompiled_object_request.dart' - as _i11; + as _i12; import 'package:playground_components/src/repositories/models/get_precompiled_objects_request.dart' - as _i8; + as _i9; import 'package:playground_components/src/repositories/models/get_snippet_request.dart' - as _i12; + as _i13; import 'package:playground_components/src/repositories/models/get_snippet_response.dart' - as _i3; + as _i4; import 'package:playground_components/src/repositories/models/save_snippet_request.dart' - as _i13; + as _i14; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -37,8 +39,8 @@ import 'package:playground_components/src/repositories/models/save_snippet_reque // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeExampleBase_0 extends _i1.SmartFake implements _i2.ExampleBase { - _FakeExampleBase_0( +class _FakeExampleClient_0 extends _i1.SmartFake implements _i2.ExampleClient { + _FakeExampleClient_0( Object parent, Invocation parentInvocation, ) : super( @@ -47,9 +49,19 @@ class _FakeExampleBase_0 extends _i1.SmartFake implements _i2.ExampleBase { ); } -class _FakeGetSnippetResponse_1 extends _i1.SmartFake - implements _i3.GetSnippetResponse { - _FakeGetSnippetResponse_1( +class _FakeExampleBase_1 extends _i1.SmartFake implements _i3.ExampleBase { + _FakeExampleBase_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeGetSnippetResponse_2 extends _i1.SmartFake + implements _i4.GetSnippetResponse { + _FakeGetSnippetResponse_2( Object parent, Invocation parentInvocation, ) : super( @@ -61,120 +73,128 @@ class _FakeGetSnippetResponse_1 extends _i1.SmartFake /// A class which mocks [ExampleRepository]. /// /// See the documentation for Mockito's code generation for more information. -class MockExampleRepository extends _i1.Mock implements _i4.ExampleRepository { +class MockExampleRepository extends _i1.Mock implements _i5.ExampleRepository { MockExampleRepository() { _i1.throwOnMissingStub(this); } @override - _i5.Future>> - getPrecompiledObjects(_i8.GetPrecompiledObjectsRequest? request) => + _i2.ExampleClient get client => (super.noSuchMethod( + Invocation.getter(#client), + returnValue: _FakeExampleClient_0( + this, + Invocation.getter(#client), + ), + ) as _i2.ExampleClient); + @override + _i6.Future>> + getPrecompiledObjects(_i9.GetPrecompiledObjectsRequest? request) => (super.noSuchMethod( Invocation.method( #getPrecompiledObjects, [request], ), returnValue: - _i5.Future>>.value( - <_i6.Sdk, List<_i7.CategoryWithExamples>>{}), - ) as _i5.Future>>); + _i6.Future>>.value( + <_i7.Sdk, List<_i8.CategoryWithExamples>>{}), + ) as _i6.Future>>); @override - _i5.Future<_i2.ExampleBase> getDefaultPrecompiledObject( - _i9.GetDefaultPrecompiledObjectRequest? request) => + _i6.Future<_i3.ExampleBase> getDefaultPrecompiledObject( + _i10.GetDefaultPrecompiledObjectRequest? request) => (super.noSuchMethod( Invocation.method( #getDefaultPrecompiledObject, [request], ), - returnValue: _i5.Future<_i2.ExampleBase>.value(_FakeExampleBase_0( + returnValue: _i6.Future<_i3.ExampleBase>.value(_FakeExampleBase_1( this, Invocation.method( #getDefaultPrecompiledObject, [request], ), )), - ) as _i5.Future<_i2.ExampleBase>); + ) as _i6.Future<_i3.ExampleBase>); @override - _i5.Future> getPrecompiledObjectCode( - _i11.GetPrecompiledObjectRequest? request) => + _i6.Future> getPrecompiledObjectCode( + _i12.GetPrecompiledObjectRequest? request) => (super.noSuchMethod( Invocation.method( #getPrecompiledObjectCode, [request], ), returnValue: - _i5.Future>.value(<_i10.SnippetFile>[]), - ) as _i5.Future>); + _i6.Future>.value(<_i11.SnippetFile>[]), + ) as _i6.Future>); @override - _i5.Future getPrecompiledObjectOutput( - _i11.GetPrecompiledObjectRequest? request) => + _i6.Future getPrecompiledObjectOutput( + _i12.GetPrecompiledObjectRequest? request) => (super.noSuchMethod( Invocation.method( #getPrecompiledObjectOutput, [request], ), - returnValue: _i5.Future.value(''), - ) as _i5.Future); + returnValue: _i6.Future.value(''), + ) as _i6.Future); @override - _i5.Future getPrecompiledObjectLogs( - _i11.GetPrecompiledObjectRequest? request) => + _i6.Future getPrecompiledObjectLogs( + _i12.GetPrecompiledObjectRequest? request) => (super.noSuchMethod( Invocation.method( #getPrecompiledObjectLogs, [request], ), - returnValue: _i5.Future.value(''), - ) as _i5.Future); + returnValue: _i6.Future.value(''), + ) as _i6.Future); @override - _i5.Future getPrecompiledObjectGraph( - _i11.GetPrecompiledObjectRequest? request) => + _i6.Future getPrecompiledObjectGraph( + _i12.GetPrecompiledObjectRequest? request) => (super.noSuchMethod( Invocation.method( #getPrecompiledObjectGraph, [request], ), - returnValue: _i5.Future.value(''), - ) as _i5.Future); + returnValue: _i6.Future.value(''), + ) as _i6.Future); @override - _i5.Future<_i2.ExampleBase> getPrecompiledObject( - _i11.GetPrecompiledObjectRequest? request) => + _i6.Future<_i3.ExampleBase> getPrecompiledObject( + _i12.GetPrecompiledObjectRequest? request) => (super.noSuchMethod( Invocation.method( #getPrecompiledObject, [request], ), - returnValue: _i5.Future<_i2.ExampleBase>.value(_FakeExampleBase_0( + returnValue: _i6.Future<_i3.ExampleBase>.value(_FakeExampleBase_1( this, Invocation.method( #getPrecompiledObject, [request], ), )), - ) as _i5.Future<_i2.ExampleBase>); + ) as _i6.Future<_i3.ExampleBase>); @override - _i5.Future<_i3.GetSnippetResponse> getSnippet( - _i12.GetSnippetRequest? request) => + _i6.Future<_i4.GetSnippetResponse> getSnippet( + _i13.GetSnippetRequest? request) => (super.noSuchMethod( Invocation.method( #getSnippet, [request], ), returnValue: - _i5.Future<_i3.GetSnippetResponse>.value(_FakeGetSnippetResponse_1( + _i6.Future<_i4.GetSnippetResponse>.value(_FakeGetSnippetResponse_2( this, Invocation.method( #getSnippet, [request], ), )), - ) as _i5.Future<_i3.GetSnippetResponse>); + ) as _i6.Future<_i4.GetSnippetResponse>); @override - _i5.Future saveSnippet(_i13.SaveSnippetRequest? request) => + _i6.Future saveSnippet(_i14.SaveSnippetRequest? request) => (super.noSuchMethod( Invocation.method( #saveSnippet, [request], ), - returnValue: _i5.Future.value(''), - ) as _i5.Future); + returnValue: _i6.Future.value(''), + ) as _i6.Future); } diff --git a/playground/frontend/playground_components/test/src/repositories/code_repository_test.mocks.dart b/playground/frontend/playground_components/test/src/repositories/code_repository_test.mocks.dart index 8963431373af..c109bae2a157 100644 --- a/playground/frontend/playground_components/test/src/repositories/code_repository_test.mocks.dart +++ b/playground/frontend/playground_components/test/src/repositories/code_repository_test.mocks.dart @@ -3,19 +3,21 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i6; +import 'dart:async' as _i7; import 'package:mockito/mockito.dart' as _i1; +import 'package:playground_components/src/api/v1/api.pb.dart' as _i2; +import 'package:playground_components/src/models/sdk.dart' as _i8; import 'package:playground_components/src/repositories/code_client/code_client.dart' - as _i5; + as _i6; import 'package:playground_components/src/repositories/models/check_status_response.dart' - as _i3; -import 'package:playground_components/src/repositories/models/output_response.dart' as _i4; +import 'package:playground_components/src/repositories/models/output_response.dart' + as _i5; import 'package:playground_components/src/repositories/models/run_code_request.dart' - as _i7; + as _i9; import 'package:playground_components/src/repositories/models/run_code_response.dart' - as _i2; + as _i3; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -28,9 +30,20 @@ import 'package:playground_components/src/repositories/models/run_code_response. // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeRunCodeResponse_0 extends _i1.SmartFake - implements _i2.RunCodeResponse { - _FakeRunCodeResponse_0( +class _FakeGetMetadataResponse_0 extends _i1.SmartFake + implements _i2.GetMetadataResponse { + _FakeGetMetadataResponse_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeRunCodeResponse_1 extends _i1.SmartFake + implements _i3.RunCodeResponse { + _FakeRunCodeResponse_1( Object parent, Invocation parentInvocation, ) : super( @@ -39,9 +52,9 @@ class _FakeRunCodeResponse_0 extends _i1.SmartFake ); } -class _FakeCheckStatusResponse_1 extends _i1.SmartFake - implements _i3.CheckStatusResponse { - _FakeCheckStatusResponse_1( +class _FakeCheckStatusResponse_2 extends _i1.SmartFake + implements _i4.CheckStatusResponse { + _FakeCheckStatusResponse_2( Object parent, Invocation parentInvocation, ) : super( @@ -50,9 +63,9 @@ class _FakeCheckStatusResponse_1 extends _i1.SmartFake ); } -class _FakeOutputResponse_2 extends _i1.SmartFake - implements _i4.OutputResponse { - _FakeOutputResponse_2( +class _FakeOutputResponse_3 extends _i1.SmartFake + implements _i5.OutputResponse { + _FakeOutputResponse_3( Object parent, Invocation parentInvocation, ) : super( @@ -64,157 +77,173 @@ class _FakeOutputResponse_2 extends _i1.SmartFake /// A class which mocks [CodeClient]. /// /// See the documentation for Mockito's code generation for more information. -class MockCodeClient extends _i1.Mock implements _i5.CodeClient { +class MockCodeClient extends _i1.Mock implements _i6.CodeClient { MockCodeClient() { _i1.throwOnMissingStub(this); } @override - _i6.Future<_i2.RunCodeResponse> runCode(_i7.RunCodeRequest? request) => + _i7.Future<_i2.GetMetadataResponse> getMetadata(_i8.Sdk? sdk) => + (super.noSuchMethod( + Invocation.method( + #getMetadata, + [sdk], + ), + returnValue: _i7.Future<_i2.GetMetadataResponse>.value( + _FakeGetMetadataResponse_0( + this, + Invocation.method( + #getMetadata, + [sdk], + ), + )), + ) as _i7.Future<_i2.GetMetadataResponse>); + @override + _i7.Future<_i3.RunCodeResponse> runCode(_i9.RunCodeRequest? request) => (super.noSuchMethod( Invocation.method( #runCode, [request], ), returnValue: - _i6.Future<_i2.RunCodeResponse>.value(_FakeRunCodeResponse_0( + _i7.Future<_i3.RunCodeResponse>.value(_FakeRunCodeResponse_1( this, Invocation.method( #runCode, [request], ), )), - ) as _i6.Future<_i2.RunCodeResponse>); + ) as _i7.Future<_i3.RunCodeResponse>); @override - _i6.Future cancelExecution(String? pipelineUuid) => (super.noSuchMethod( + _i7.Future cancelExecution(String? pipelineUuid) => (super.noSuchMethod( Invocation.method( #cancelExecution, [pipelineUuid], ), - returnValue: _i6.Future.value(), - returnValueForMissingStub: _i6.Future.value(), - ) as _i6.Future); + returnValue: _i7.Future.value(), + returnValueForMissingStub: _i7.Future.value(), + ) as _i7.Future); @override - _i6.Future<_i3.CheckStatusResponse> checkStatus(String? pipelineUuid) => + _i7.Future<_i4.CheckStatusResponse> checkStatus(String? pipelineUuid) => (super.noSuchMethod( Invocation.method( #checkStatus, [pipelineUuid], ), - returnValue: _i6.Future<_i3.CheckStatusResponse>.value( - _FakeCheckStatusResponse_1( + returnValue: _i7.Future<_i4.CheckStatusResponse>.value( + _FakeCheckStatusResponse_2( this, Invocation.method( #checkStatus, [pipelineUuid], ), )), - ) as _i6.Future<_i3.CheckStatusResponse>); + ) as _i7.Future<_i4.CheckStatusResponse>); @override - _i6.Future<_i4.OutputResponse> getCompileOutput(String? pipelineUuid) => + _i7.Future<_i5.OutputResponse> getCompileOutput(String? pipelineUuid) => (super.noSuchMethod( Invocation.method( #getCompileOutput, [pipelineUuid], ), - returnValue: _i6.Future<_i4.OutputResponse>.value(_FakeOutputResponse_2( + returnValue: _i7.Future<_i5.OutputResponse>.value(_FakeOutputResponse_3( this, Invocation.method( #getCompileOutput, [pipelineUuid], ), )), - ) as _i6.Future<_i4.OutputResponse>); + ) as _i7.Future<_i5.OutputResponse>); @override - _i6.Future<_i4.OutputResponse> getRunOutput(String? pipelineUuid) => + _i7.Future<_i5.OutputResponse> getRunOutput(String? pipelineUuid) => (super.noSuchMethod( Invocation.method( #getRunOutput, [pipelineUuid], ), - returnValue: _i6.Future<_i4.OutputResponse>.value(_FakeOutputResponse_2( + returnValue: _i7.Future<_i5.OutputResponse>.value(_FakeOutputResponse_3( this, Invocation.method( #getRunOutput, [pipelineUuid], ), )), - ) as _i6.Future<_i4.OutputResponse>); + ) as _i7.Future<_i5.OutputResponse>); @override - _i6.Future<_i4.OutputResponse> getLogOutput(String? pipelineUuid) => + _i7.Future<_i5.OutputResponse> getLogOutput(String? pipelineUuid) => (super.noSuchMethod( Invocation.method( #getLogOutput, [pipelineUuid], ), - returnValue: _i6.Future<_i4.OutputResponse>.value(_FakeOutputResponse_2( + returnValue: _i7.Future<_i5.OutputResponse>.value(_FakeOutputResponse_3( this, Invocation.method( #getLogOutput, [pipelineUuid], ), )), - ) as _i6.Future<_i4.OutputResponse>); + ) as _i7.Future<_i5.OutputResponse>); @override - _i6.Future<_i4.OutputResponse> getRunErrorOutput(String? pipelineUuid) => + _i7.Future<_i5.OutputResponse> getRunErrorOutput(String? pipelineUuid) => (super.noSuchMethod( Invocation.method( #getRunErrorOutput, [pipelineUuid], ), - returnValue: _i6.Future<_i4.OutputResponse>.value(_FakeOutputResponse_2( + returnValue: _i7.Future<_i5.OutputResponse>.value(_FakeOutputResponse_3( this, Invocation.method( #getRunErrorOutput, [pipelineUuid], ), )), - ) as _i6.Future<_i4.OutputResponse>); + ) as _i7.Future<_i5.OutputResponse>); @override - _i6.Future<_i4.OutputResponse> getValidationErrorOutput( + _i7.Future<_i5.OutputResponse> getValidationErrorOutput( String? pipelineUuid) => (super.noSuchMethod( Invocation.method( #getValidationErrorOutput, [pipelineUuid], ), - returnValue: _i6.Future<_i4.OutputResponse>.value(_FakeOutputResponse_2( + returnValue: _i7.Future<_i5.OutputResponse>.value(_FakeOutputResponse_3( this, Invocation.method( #getValidationErrorOutput, [pipelineUuid], ), )), - ) as _i6.Future<_i4.OutputResponse>); + ) as _i7.Future<_i5.OutputResponse>); @override - _i6.Future<_i4.OutputResponse> getPreparationErrorOutput( + _i7.Future<_i5.OutputResponse> getPreparationErrorOutput( String? pipelineUuid) => (super.noSuchMethod( Invocation.method( #getPreparationErrorOutput, [pipelineUuid], ), - returnValue: _i6.Future<_i4.OutputResponse>.value(_FakeOutputResponse_2( + returnValue: _i7.Future<_i5.OutputResponse>.value(_FakeOutputResponse_3( this, Invocation.method( #getPreparationErrorOutput, [pipelineUuid], ), )), - ) as _i6.Future<_i4.OutputResponse>); + ) as _i7.Future<_i5.OutputResponse>); @override - _i6.Future<_i4.OutputResponse> getGraphOutput(String? pipelineUuid) => + _i7.Future<_i5.OutputResponse> getGraphOutput(String? pipelineUuid) => (super.noSuchMethod( Invocation.method( #getGraphOutput, [pipelineUuid], ), - returnValue: _i6.Future<_i4.OutputResponse>.value(_FakeOutputResponse_2( + returnValue: _i7.Future<_i5.OutputResponse>.value(_FakeOutputResponse_3( this, Invocation.method( #getGraphOutput, [pipelineUuid], ), )), - ) as _i6.Future<_i4.OutputResponse>); + ) as _i7.Future<_i5.OutputResponse>); } diff --git a/playground/frontend/playground_components/test/src/repositories/example_repository_test.mocks.dart b/playground/frontend/playground_components/test/src/repositories/example_repository_test.mocks.dart index ab944a04c75f..2a1e33bc6a77 100644 --- a/playground/frontend/playground_components/test/src/repositories/example_repository_test.mocks.dart +++ b/playground/frontend/playground_components/test/src/repositories/example_repository_test.mocks.dart @@ -3,33 +3,34 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i9; +import 'dart:async' as _i10; import 'package:mockito/mockito.dart' as _i1; +import 'package:playground_components/src/api/v1/api.pb.dart' as _i2; import 'package:playground_components/src/repositories/example_client/example_client.dart' - as _i8; + as _i9; import 'package:playground_components/src/repositories/models/get_default_precompiled_object_request.dart' - as _i12; + as _i13; import 'package:playground_components/src/repositories/models/get_precompiled_object_code_response.dart' - as _i3; + as _i4; import 'package:playground_components/src/repositories/models/get_precompiled_object_request.dart' - as _i11; + as _i12; import 'package:playground_components/src/repositories/models/get_precompiled_object_response.dart' - as _i4; + as _i5; import 'package:playground_components/src/repositories/models/get_precompiled_objects_request.dart' - as _i10; + as _i11; import 'package:playground_components/src/repositories/models/get_precompiled_objects_response.dart' - as _i2; + as _i3; import 'package:playground_components/src/repositories/models/get_snippet_request.dart' - as _i13; + as _i14; import 'package:playground_components/src/repositories/models/get_snippet_response.dart' - as _i6; + as _i7; import 'package:playground_components/src/repositories/models/output_response.dart' - as _i5; + as _i6; import 'package:playground_components/src/repositories/models/save_snippet_request.dart' - as _i14; + as _i15; import 'package:playground_components/src/repositories/models/save_snippet_response.dart' - as _i7; + as _i8; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -42,9 +43,20 @@ import 'package:playground_components/src/repositories/models/save_snippet_respo // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeGetPrecompiledObjectsResponse_0 extends _i1.SmartFake - implements _i2.GetPrecompiledObjectsResponse { - _FakeGetPrecompiledObjectsResponse_0( +class _FakeGetMetadataResponse_0 extends _i1.SmartFake + implements _i2.GetMetadataResponse { + _FakeGetMetadataResponse_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeGetPrecompiledObjectsResponse_1 extends _i1.SmartFake + implements _i3.GetPrecompiledObjectsResponse { + _FakeGetPrecompiledObjectsResponse_1( Object parent, Invocation parentInvocation, ) : super( @@ -53,9 +65,9 @@ class _FakeGetPrecompiledObjectsResponse_0 extends _i1.SmartFake ); } -class _FakeGetPrecompiledObjectCodeResponse_1 extends _i1.SmartFake - implements _i3.GetPrecompiledObjectCodeResponse { - _FakeGetPrecompiledObjectCodeResponse_1( +class _FakeGetPrecompiledObjectCodeResponse_2 extends _i1.SmartFake + implements _i4.GetPrecompiledObjectCodeResponse { + _FakeGetPrecompiledObjectCodeResponse_2( Object parent, Invocation parentInvocation, ) : super( @@ -64,9 +76,9 @@ class _FakeGetPrecompiledObjectCodeResponse_1 extends _i1.SmartFake ); } -class _FakeGetPrecompiledObjectResponse_2 extends _i1.SmartFake - implements _i4.GetPrecompiledObjectResponse { - _FakeGetPrecompiledObjectResponse_2( +class _FakeGetPrecompiledObjectResponse_3 extends _i1.SmartFake + implements _i5.GetPrecompiledObjectResponse { + _FakeGetPrecompiledObjectResponse_3( Object parent, Invocation parentInvocation, ) : super( @@ -75,9 +87,9 @@ class _FakeGetPrecompiledObjectResponse_2 extends _i1.SmartFake ); } -class _FakeOutputResponse_3 extends _i1.SmartFake - implements _i5.OutputResponse { - _FakeOutputResponse_3( +class _FakeOutputResponse_4 extends _i1.SmartFake + implements _i6.OutputResponse { + _FakeOutputResponse_4( Object parent, Invocation parentInvocation, ) : super( @@ -86,9 +98,9 @@ class _FakeOutputResponse_3 extends _i1.SmartFake ); } -class _FakeGetSnippetResponse_4 extends _i1.SmartFake - implements _i6.GetSnippetResponse { - _FakeGetSnippetResponse_4( +class _FakeGetSnippetResponse_5 extends _i1.SmartFake + implements _i7.GetSnippetResponse { + _FakeGetSnippetResponse_5( Object parent, Invocation parentInvocation, ) : super( @@ -97,9 +109,9 @@ class _FakeGetSnippetResponse_4 extends _i1.SmartFake ); } -class _FakeSaveSnippetResponse_5 extends _i1.SmartFake - implements _i7.SaveSnippetResponse { - _FakeSaveSnippetResponse_5( +class _FakeSaveSnippetResponse_6 extends _i1.SmartFake + implements _i8.SaveSnippetResponse { + _FakeSaveSnippetResponse_6( Object parent, Invocation parentInvocation, ) : super( @@ -111,159 +123,177 @@ class _FakeSaveSnippetResponse_5 extends _i1.SmartFake /// A class which mocks [ExampleClient]. /// /// See the documentation for Mockito's code generation for more information. -class MockExampleClient extends _i1.Mock implements _i8.ExampleClient { +class MockExampleClient extends _i1.Mock implements _i9.ExampleClient { MockExampleClient() { _i1.throwOnMissingStub(this); } @override - _i9.Future<_i2.GetPrecompiledObjectsResponse> getPrecompiledObjects( - _i10.GetPrecompiledObjectsRequest? request) => + _i10.Future<_i2.GetMetadataResponse> getMetadata() => (super.noSuchMethod( + Invocation.method( + #getMetadata, + [], + ), + returnValue: _i10.Future<_i2.GetMetadataResponse>.value( + _FakeGetMetadataResponse_0( + this, + Invocation.method( + #getMetadata, + [], + ), + )), + ) as _i10.Future<_i2.GetMetadataResponse>); + @override + _i10.Future<_i3.GetPrecompiledObjectsResponse> getPrecompiledObjects( + _i11.GetPrecompiledObjectsRequest? request) => (super.noSuchMethod( Invocation.method( #getPrecompiledObjects, [request], ), - returnValue: _i9.Future<_i2.GetPrecompiledObjectsResponse>.value( - _FakeGetPrecompiledObjectsResponse_0( + returnValue: _i10.Future<_i3.GetPrecompiledObjectsResponse>.value( + _FakeGetPrecompiledObjectsResponse_1( this, Invocation.method( #getPrecompiledObjects, [request], ), )), - ) as _i9.Future<_i2.GetPrecompiledObjectsResponse>); + ) as _i10.Future<_i3.GetPrecompiledObjectsResponse>); @override - _i9.Future<_i3.GetPrecompiledObjectCodeResponse> getPrecompiledObjectCode( - _i11.GetPrecompiledObjectRequest? request) => + _i10.Future<_i4.GetPrecompiledObjectCodeResponse> getPrecompiledObjectCode( + _i12.GetPrecompiledObjectRequest? request) => (super.noSuchMethod( Invocation.method( #getPrecompiledObjectCode, [request], ), - returnValue: _i9.Future<_i3.GetPrecompiledObjectCodeResponse>.value( - _FakeGetPrecompiledObjectCodeResponse_1( + returnValue: _i10.Future<_i4.GetPrecompiledObjectCodeResponse>.value( + _FakeGetPrecompiledObjectCodeResponse_2( this, Invocation.method( #getPrecompiledObjectCode, [request], ), )), - ) as _i9.Future<_i3.GetPrecompiledObjectCodeResponse>); + ) as _i10.Future<_i4.GetPrecompiledObjectCodeResponse>); @override - _i9.Future<_i4.GetPrecompiledObjectResponse> getDefaultPrecompiledObject( - _i12.GetDefaultPrecompiledObjectRequest? request) => + _i10.Future<_i5.GetPrecompiledObjectResponse> getDefaultPrecompiledObject( + _i13.GetDefaultPrecompiledObjectRequest? request) => (super.noSuchMethod( Invocation.method( #getDefaultPrecompiledObject, [request], ), - returnValue: _i9.Future<_i4.GetPrecompiledObjectResponse>.value( - _FakeGetPrecompiledObjectResponse_2( + returnValue: _i10.Future<_i5.GetPrecompiledObjectResponse>.value( + _FakeGetPrecompiledObjectResponse_3( this, Invocation.method( #getDefaultPrecompiledObject, [request], ), )), - ) as _i9.Future<_i4.GetPrecompiledObjectResponse>); + ) as _i10.Future<_i5.GetPrecompiledObjectResponse>); @override - _i9.Future<_i4.GetPrecompiledObjectResponse> getPrecompiledObject( - _i11.GetPrecompiledObjectRequest? request) => + _i10.Future<_i5.GetPrecompiledObjectResponse> getPrecompiledObject( + _i12.GetPrecompiledObjectRequest? request) => (super.noSuchMethod( Invocation.method( #getPrecompiledObject, [request], ), - returnValue: _i9.Future<_i4.GetPrecompiledObjectResponse>.value( - _FakeGetPrecompiledObjectResponse_2( + returnValue: _i10.Future<_i5.GetPrecompiledObjectResponse>.value( + _FakeGetPrecompiledObjectResponse_3( this, Invocation.method( #getPrecompiledObject, [request], ), )), - ) as _i9.Future<_i4.GetPrecompiledObjectResponse>); + ) as _i10.Future<_i5.GetPrecompiledObjectResponse>); @override - _i9.Future<_i5.OutputResponse> getPrecompiledObjectOutput( - _i11.GetPrecompiledObjectRequest? request) => + _i10.Future<_i6.OutputResponse> getPrecompiledObjectOutput( + _i12.GetPrecompiledObjectRequest? request) => (super.noSuchMethod( Invocation.method( #getPrecompiledObjectOutput, [request], ), - returnValue: _i9.Future<_i5.OutputResponse>.value(_FakeOutputResponse_3( + returnValue: + _i10.Future<_i6.OutputResponse>.value(_FakeOutputResponse_4( this, Invocation.method( #getPrecompiledObjectOutput, [request], ), )), - ) as _i9.Future<_i5.OutputResponse>); + ) as _i10.Future<_i6.OutputResponse>); @override - _i9.Future<_i5.OutputResponse> getPrecompiledObjectLogs( - _i11.GetPrecompiledObjectRequest? request) => + _i10.Future<_i6.OutputResponse> getPrecompiledObjectLogs( + _i12.GetPrecompiledObjectRequest? request) => (super.noSuchMethod( Invocation.method( #getPrecompiledObjectLogs, [request], ), - returnValue: _i9.Future<_i5.OutputResponse>.value(_FakeOutputResponse_3( + returnValue: + _i10.Future<_i6.OutputResponse>.value(_FakeOutputResponse_4( this, Invocation.method( #getPrecompiledObjectLogs, [request], ), )), - ) as _i9.Future<_i5.OutputResponse>); + ) as _i10.Future<_i6.OutputResponse>); @override - _i9.Future<_i5.OutputResponse> getPrecompiledObjectGraph( - _i11.GetPrecompiledObjectRequest? request) => + _i10.Future<_i6.OutputResponse> getPrecompiledObjectGraph( + _i12.GetPrecompiledObjectRequest? request) => (super.noSuchMethod( Invocation.method( #getPrecompiledObjectGraph, [request], ), - returnValue: _i9.Future<_i5.OutputResponse>.value(_FakeOutputResponse_3( + returnValue: + _i10.Future<_i6.OutputResponse>.value(_FakeOutputResponse_4( this, Invocation.method( #getPrecompiledObjectGraph, [request], ), )), - ) as _i9.Future<_i5.OutputResponse>); + ) as _i10.Future<_i6.OutputResponse>); @override - _i9.Future<_i6.GetSnippetResponse> getSnippet( - _i13.GetSnippetRequest? request) => + _i10.Future<_i7.GetSnippetResponse> getSnippet( + _i14.GetSnippetRequest? request) => (super.noSuchMethod( Invocation.method( #getSnippet, [request], ), returnValue: - _i9.Future<_i6.GetSnippetResponse>.value(_FakeGetSnippetResponse_4( + _i10.Future<_i7.GetSnippetResponse>.value(_FakeGetSnippetResponse_5( this, Invocation.method( #getSnippet, [request], ), )), - ) as _i9.Future<_i6.GetSnippetResponse>); + ) as _i10.Future<_i7.GetSnippetResponse>); @override - _i9.Future<_i7.SaveSnippetResponse> saveSnippet( - _i14.SaveSnippetRequest? request) => + _i10.Future<_i8.SaveSnippetResponse> saveSnippet( + _i15.SaveSnippetRequest? request) => (super.noSuchMethod( Invocation.method( #saveSnippet, [request], ), - returnValue: _i9.Future<_i7.SaveSnippetResponse>.value( - _FakeSaveSnippetResponse_5( + returnValue: _i10.Future<_i8.SaveSnippetResponse>.value( + _FakeSaveSnippetResponse_6( this, Invocation.method( #saveSnippet, [request], ), )), - ) as _i9.Future<_i7.SaveSnippetResponse>); + ) as _i10.Future<_i8.SaveSnippetResponse>); } diff --git a/playground/frontend/playground_components/tools/generate_build_metadata.sh b/playground/frontend/playground_components/tools/generate_build_metadata.sh index 824167fff7dc..d06c97f97d4a 100755 --- a/playground/frontend/playground_components/tools/generate_build_metadata.sh +++ b/playground/frontend/playground_components/tools/generate_build_metadata.sh @@ -28,10 +28,10 @@ cat > "$FILE" << EOF // The copy of this file stored in the repository is for development purpose // so the project can be started locally. // Keep these constants \`null\` in the repository. -EOF -echo "const buildCommitHash = '$1';" >> "$FILE" -echo "const buildCommitSecondsSinceEpoch = $2;" >> "$FILE" +const buildCommitHash = '$1'; +const buildCommitSecondsSinceEpoch = $2; +EOF echo "Written $FILE:" cat "$FILE" From 3d581e56b321b065a20f5497836a0e192d9d8f3f Mon Sep 17 00:00:00 2001 From: Alexey Inkin Date: Mon, 6 Mar 2023 16:22:40 +0400 Subject: [PATCH 18/26] Address review comments (#22271) --- playground/frontend/lib/locator.dart | 15 +++++--- .../playground_components/build.gradle.kts | 9 ----- .../lib/playground_components.dart | 2 ++ .../lib/src/controllers/build_metadata.dart | 12 +++---- .../lib/src/models/component_version.dart | 11 ++++-- .../lib/src/repositories/code_repository.dart | 34 +++++++++---------- .../src/repositories/example_repository.dart | 24 ++++++------- 7 files changed, 55 insertions(+), 52 deletions(-) diff --git a/playground/frontend/lib/locator.dart b/playground/frontend/lib/locator.dart index f2f4c99f99de..52df0c3d835f 100644 --- a/playground/frontend/lib/locator.dart +++ b/playground/frontend/lib/locator.dart @@ -35,15 +35,20 @@ Future _initializeRepositories() async { for (final sdk in Sdk.known) sdk.id: getRunnerUrl(sdk), }); + final codeClient = GrpcCodeClient( + url: routerUrl, + runnerUrlsById: runnerUrls, + ); + + GetIt.instance.registerSingleton(codeClient); GetIt.instance.registerSingleton(CodeRepository( - client: GrpcCodeClient( - url: routerUrl, - runnerUrlsById: runnerUrls, - ), + client: codeClient, )); + final exampleClient = GrpcExampleClient(url: routerUrl); + GetIt.instance.registerSingleton(exampleClient); GetIt.instance.registerSingleton(ExampleRepository( - client: GrpcExampleClient(url: routerUrl), + client: exampleClient, )); } diff --git a/playground/frontend/playground_components/build.gradle.kts b/playground/frontend/playground_components/build.gradle.kts index 11b1bdf58f02..1af9d6053765 100644 --- a/playground/frontend/playground_components/build.gradle.kts +++ b/playground/frontend/playground_components/build.gradle.kts @@ -118,15 +118,6 @@ val deleteFilesByRegExp by extra( } ) -tasks.register("generateBuildMetadata") { - doLast { - exec { - executable("sh") - args("tools/generate_build_metadata.sh") - } - } -} - tasks.register("generateCode") { dependsOn("cleanFlutter") dependsOn("pubGet") diff --git a/playground/frontend/playground_components/lib/playground_components.dart b/playground/frontend/playground_components/lib/playground_components.dart index 348dda25c413..43703d9626d8 100644 --- a/playground/frontend/playground_components/lib/playground_components.dart +++ b/playground/frontend/playground_components/lib/playground_components.dart @@ -47,8 +47,10 @@ export 'src/models/toast.dart'; export 'src/models/toast_type.dart'; export 'src/playground_components.dart'; export 'src/repositories/backend_urls.dart'; +export 'src/repositories/code_client/code_client.dart'; export 'src/repositories/code_client/grpc_code_client.dart'; export 'src/repositories/code_repository.dart'; +export 'src/repositories/example_client/example_client.dart'; export 'src/repositories/example_client/grpc_example_client.dart'; export 'src/repositories/example_repository.dart'; export 'src/router/router_delegate.dart'; diff --git a/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart b/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart index 4cb85c0021e1..6455d19b0ea2 100644 --- a/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart +++ b/playground/frontend/playground_components/lib/src/controllers/build_metadata.dart @@ -24,8 +24,8 @@ import 'package:get_it/get_it.dart'; import '../api/v1/api.pbgrpc.dart' show GetMetadataResponse; import '../models/component_version.dart'; import '../models/sdk.dart'; -import '../repositories/code_repository.dart'; -import '../repositories/example_repository.dart'; +import '../repositories/code_client/code_client.dart'; +import '../repositories/example_client/example_client.dart'; import '../repositories/get_metadata_response_grpc_extension.dart'; /// Obtains versions from the backend. @@ -44,8 +44,8 @@ class BuildMetadataController extends ChangeNotifier { } Future _loadRouterVersion() async { - final repository = GetIt.instance.get(); - _routerVersionFuture = repository.client.getMetadata(); + final client = GetIt.instance.get(); + _routerVersionFuture = client.getMetadata(); final metadata = await _routerVersionFuture!; _routerVersion = metadata.componentVersion; @@ -62,8 +62,8 @@ class BuildMetadataController extends ChangeNotifier { } Future _loadRunnerVersion(Sdk sdk) async { - final repository = GetIt.instance.get(); - _runnerVersionFutures[sdk] = repository.client.getMetadata(sdk); + final client = GetIt.instance.get(); + _runnerVersionFutures[sdk] = client.getMetadata(sdk); final metadata = await _runnerVersionFutures[sdk]!; _runnerVersions[sdk] = metadata.componentVersion; diff --git a/playground/frontend/playground_components/lib/src/models/component_version.dart b/playground/frontend/playground_components/lib/src/models/component_version.dart index d1c1f99fc88b..0bff56950956 100644 --- a/playground/frontend/playground_components/lib/src/models/component_version.dart +++ b/playground/frontend/playground_components/lib/src/models/component_version.dart @@ -16,6 +16,8 @@ * limitations under the License. */ +// ignore_for_file: avoid_redundant_argument_values + import '../build_metadata.g.dart' as frontend_build_metadata; class ComponentVersion { @@ -32,8 +34,11 @@ class ComponentVersion { /// The version of the frontend. static final frontend = ComponentVersion( buildCommitHash: frontend_build_metadata.buildCommitHash, - dateTime: DateTime.fromMillisecondsSinceEpoch( - frontend_build_metadata.buildCommitSecondsSinceEpoch * 1000, - ), + dateTime: frontend_build_metadata.buildCommitSecondsSinceEpoch == null + ? null + : DateTime.fromMillisecondsSinceEpoch( + // ignore: avoid_dynamic_calls + frontend_build_metadata.buildCommitSecondsSinceEpoch * 1000, + ), ); } diff --git a/playground/frontend/playground_components/lib/src/repositories/code_repository.dart b/playground/frontend/playground_components/lib/src/repositories/code_repository.dart index f7448405cde2..ba54afe693e2 100644 --- a/playground/frontend/playground_components/lib/src/repositories/code_repository.dart +++ b/playground/frontend/playground_components/lib/src/repositories/code_repository.dart @@ -35,11 +35,11 @@ const kProcessingStartedText = 'The processing has started\n'; // TODO(alexeyinkin): Rename. This is not a repository but a higher level client. class CodeRepository { - final CodeClient client; + final CodeClient _client; CodeRepository({ - required this.client, - }); + required CodeClient client, + }) : _client = client; Stream runCode(RunCodeRequest request) async* { try { @@ -49,7 +49,7 @@ class CodeRepository { ); yield initResult; - final runCodeResponse = await client.runCode(request); + final runCodeResponse = await _client.runCode(request); final pipelineUuid = runCodeResponse.pipelineUuid; yield* _checkPipelineExecution( @@ -66,7 +66,7 @@ class CodeRepository { } Future cancelExecution(String pipelineUuid) { - return client.cancelExecution(pipelineUuid); + return _client.cancelExecution(pipelineUuid); } Stream _checkPipelineExecution( @@ -75,7 +75,7 @@ class CodeRepository { }) async* { try { final statusResponse = await runWithRetry( - () => client.checkStatus(pipelineUuid), + () => _client.checkStatus(pipelineUuid), ); final result = await _getPipelineResult( pipelineUuid, @@ -111,7 +111,7 @@ class CodeRepository { switch (status) { case RunCodeStatus.compileError: - final compileOutput = await client.getCompileOutput(pipelineUuid); + final compileOutput = await _client.getCompileOutput(pipelineUuid); return RunCodeResult( pipelineUuid: pipelineUuid, status: status, @@ -131,7 +131,7 @@ class CodeRepository { ); case RunCodeStatus.runError: - final output = await client.getRunErrorOutput(pipelineUuid); + final output = await _client.getRunErrorOutput(pipelineUuid); return RunCodeResult( pipelineUuid: pipelineUuid, status: status, @@ -141,7 +141,7 @@ class CodeRepository { ); case RunCodeStatus.validationError: - final output = await client.getValidationErrorOutput(pipelineUuid); + final output = await _client.getValidationErrorOutput(pipelineUuid); return RunCodeResult( status: status, output: output.output, @@ -150,7 +150,7 @@ class CodeRepository { ); case RunCodeStatus.preparationError: - final output = await client.getPreparationErrorOutput(pipelineUuid); + final output = await _client.getPreparationErrorOutput(pipelineUuid); return RunCodeResult( status: status, output: output.output, @@ -170,10 +170,10 @@ class CodeRepository { case RunCodeStatus.executing: final responses = await Future.wait([ - client.getRunOutput(pipelineUuid), - client.getLogOutput(pipelineUuid), + _client.getRunOutput(pipelineUuid), + _client.getLogOutput(pipelineUuid), prevGraph.isEmpty - ? client.getGraphOutput(pipelineUuid) + ? _client.getGraphOutput(pipelineUuid) : Future.value(OutputResponse(output: prevGraph)), ]); final output = responses[0]; @@ -189,11 +189,11 @@ class CodeRepository { case RunCodeStatus.finished: final responses = await Future.wait([ - client.getRunOutput(pipelineUuid), - client.getLogOutput(pipelineUuid), - client.getRunErrorOutput(pipelineUuid), + _client.getRunOutput(pipelineUuid), + _client.getLogOutput(pipelineUuid), + _client.getRunErrorOutput(pipelineUuid), prevGraph.isEmpty - ? client.getGraphOutput(pipelineUuid) + ? _client.getGraphOutput(pipelineUuid) : Future.value(OutputResponse(output: prevGraph)), ]); final output = responses[0]; diff --git a/playground/frontend/playground_components/lib/src/repositories/example_repository.dart b/playground/frontend/playground_components/lib/src/repositories/example_repository.dart index 8b3c37cd0b8f..bb35f0c7674e 100644 --- a/playground/frontend/playground_components/lib/src/repositories/example_repository.dart +++ b/playground/frontend/playground_components/lib/src/repositories/example_repository.dart @@ -29,72 +29,72 @@ import 'models/get_snippet_response.dart'; import 'models/save_snippet_request.dart'; class ExampleRepository { - final ExampleClient client; + final ExampleClient _client; ExampleRepository({ - required this.client, - }); + required ExampleClient client, + }) : _client = client; Future>> getPrecompiledObjects( GetPrecompiledObjectsRequest request, ) async { - final result = await client.getPrecompiledObjects(request); + final result = await _client.getPrecompiledObjects(request); return result.categories; } Future getDefaultPrecompiledObject( GetDefaultPrecompiledObjectRequest request, ) async { - final result = await client.getDefaultPrecompiledObject(request); + final result = await _client.getDefaultPrecompiledObject(request); return result.example; } Future> getPrecompiledObjectCode( GetPrecompiledObjectRequest request, ) async { - final result = await client.getPrecompiledObjectCode(request); + final result = await _client.getPrecompiledObjectCode(request); return result.files; } Future getPrecompiledObjectOutput( GetPrecompiledObjectRequest request, ) async { - final result = await client.getPrecompiledObjectOutput(request); + final result = await _client.getPrecompiledObjectOutput(request); return result.output; } Future getPrecompiledObjectLogs( GetPrecompiledObjectRequest request, ) async { - final result = await client.getPrecompiledObjectLogs(request); + final result = await _client.getPrecompiledObjectLogs(request); return result.output; } Future getPrecompiledObjectGraph( GetPrecompiledObjectRequest request, ) async { - final result = await client.getPrecompiledObjectGraph(request); + final result = await _client.getPrecompiledObjectGraph(request); return result.output; } Future getPrecompiledObject( GetPrecompiledObjectRequest request, ) async { - final result = await client.getPrecompiledObject(request); + final result = await _client.getPrecompiledObject(request); return result.example; } Future getSnippet( GetSnippetRequest request, ) async { - final result = await client.getSnippet(request); + final result = await _client.getSnippet(request); return result; } Future saveSnippet( SaveSnippetRequest request, ) async { - final result = await client.saveSnippet(request); + final result = await _client.saveSnippet(request); return result.id; } } From 26edffd5e4f9e9d46ed73620188a66aa529d9d99 Mon Sep 17 00:00:00 2001 From: Alexey Inkin Date: Wed, 8 Mar 2023 11:29:03 +0400 Subject: [PATCH 19/26] Add a TODO (#22271) --- .../src/repositories/get_metadata_response_grpc_extension.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/playground/frontend/playground_components/lib/src/repositories/get_metadata_response_grpc_extension.dart b/playground/frontend/playground_components/lib/src/repositories/get_metadata_response_grpc_extension.dart index 3886684c223f..b60b2c23e640 100644 --- a/playground/frontend/playground_components/lib/src/repositories/get_metadata_response_grpc_extension.dart +++ b/playground/frontend/playground_components/lib/src/repositories/get_metadata_response_grpc_extension.dart @@ -24,6 +24,8 @@ extension MetadataResponseGrpcExtension on GetMetadataResponse { return ComponentVersion( // If a string is optional in protobuf, for some reason it becomes // a non-nullable Dart string with '' as the default value. + // This can be deleted if this lands: + // https://github.com/google/protobuf.dart/issues/523 beamSdkVersion: beamSdkVersion == '' ? null : beamSdkVersion, buildCommitHash: buildCommitHash, dateTime: DateTime.fromMillisecondsSinceEpoch( From e34307885b16fd17b7ed3aaa58e5acd5072011f0 Mon Sep 17 00:00:00 2001 From: Timur Sultanov Date: Thu, 9 Mar 2023 12:34:48 +0400 Subject: [PATCH 20/26] Fix tabulation --- playground/backend/internal/environment/environment_service.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playground/backend/internal/environment/environment_service.go b/playground/backend/internal/environment/environment_service.go index 41bd0b0ae8d3..eb99060f5be8 100644 --- a/playground/backend/internal/environment/environment_service.go +++ b/playground/backend/internal/environment/environment_service.go @@ -35,7 +35,7 @@ const ( serverIpKey = "SERVER_IP" serverPortKey = "SERVER_PORT" beamSdkKey = "BEAM_SDK" - beamVersionKey = "BEAM_VERSION" + beamVersionKey = "BEAM_VERSION" workingDirKey = "APP_WORK_DIR" preparedModDirKey = "PREPARED_MOD_DIR" numOfParallelJobsKey = "NUM_PARALLEL_JOBS" From ce86f05d7f725c14c39bf2751d0846b460591e89 Mon Sep 17 00:00:00 2001 From: Timur Sultanov Date: Thu, 9 Mar 2023 14:18:26 +0400 Subject: [PATCH 21/26] Remove optional fields from Playground protocol --- .../backend/playground_api/api.pb.go | 361 +++++++++--------- playground/api/v1/api.proto | 6 +- playground/backend/cmd/server/controller.go | 22 +- playground/backend/internal/api/v1/api.pb.go | 360 +++++++++-------- .../backend/internal/environment/beam.go | 4 +- .../environment/environment_service.go | 8 +- .../environment/environment_service_test.go | 24 +- .../setup_tools/builder/setup_builder_test.go | 12 +- .../lib/src/api/v1/api.pbjson.dart | 13 +- playground/infrastructure/api/v1/api_pb2.py | 28 +- 10 files changed, 402 insertions(+), 436 deletions(-) diff --git a/learning/tour-of-beam/backend/playground_api/api.pb.go b/learning/tour-of-beam/backend/playground_api/api.pb.go index 18ca3884dd24..0f7519077b59 100644 --- a/learning/tour-of-beam/backend/playground_api/api.pb.go +++ b/learning/tour-of-beam/backend/playground_api/api.pb.go @@ -2633,10 +2633,10 @@ type GetMetadataResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RunnerSdk string `protobuf:"bytes,1,opt,name=runner_sdk,json=runnerSdk,proto3" json:"runner_sdk,omitempty"` - BuildCommitHash *string `protobuf:"bytes,2,opt,name=build_commit_hash,json=buildCommitHash,proto3,oneof" json:"build_commit_hash,omitempty"` - BuildCommitTimestampSecondsSinceEpoch *int64 `protobuf:"varint,3,opt,name=build_commit_timestamp_seconds_since_epoch,json=buildCommitTimestampSecondsSinceEpoch,proto3,oneof" json:"build_commit_timestamp_seconds_since_epoch,omitempty"` - BeamSdkVersion *string `protobuf:"bytes,4,opt,name=beam_sdk_version,json=beamSdkVersion,proto3,oneof" json:"beam_sdk_version,omitempty"` + RunnerSdk string `protobuf:"bytes,1,opt,name=runner_sdk,json=runnerSdk,proto3" json:"runner_sdk,omitempty"` + BuildCommitHash string `protobuf:"bytes,2,opt,name=build_commit_hash,json=buildCommitHash,proto3" json:"build_commit_hash,omitempty"` + BuildCommitTimestampSecondsSinceEpoch int64 `protobuf:"varint,3,opt,name=build_commit_timestamp_seconds_since_epoch,json=buildCommitTimestampSecondsSinceEpoch,proto3" json:"build_commit_timestamp_seconds_since_epoch,omitempty"` + BeamSdkVersion string `protobuf:"bytes,4,opt,name=beam_sdk_version,json=beamSdkVersion,proto3" json:"beam_sdk_version,omitempty"` } func (x *GetMetadataResponse) Reset() { @@ -2679,22 +2679,22 @@ func (x *GetMetadataResponse) GetRunnerSdk() string { } func (x *GetMetadataResponse) GetBuildCommitHash() string { - if x != nil && x.BuildCommitHash != nil { - return *x.BuildCommitHash + if x != nil { + return x.BuildCommitHash } return "" } func (x *GetMetadataResponse) GetBuildCommitTimestampSecondsSinceEpoch() int64 { - if x != nil && x.BuildCommitTimestampSecondsSinceEpoch != nil { - return *x.BuildCommitTimestampSecondsSinceEpoch + if x != nil { + return x.BuildCommitTimestampSecondsSinceEpoch } return 0 } func (x *GetMetadataResponse) GetBeamSdkVersion() string { - if x != nil && x.BeamSdkVersion != nil { - return *x.BeamSdkVersion + if x != nil { + return x.BeamSdkVersion } return "" } @@ -3001,188 +3001,182 @@ var file_api_proto_rawDesc = []byte{ 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0xce, 0x02, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0xe5, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, - 0x6e, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x12, 0x2f, 0x0a, 0x11, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, + 0x6e, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x48, 0x61, 0x73, 0x68, 0x88, 0x01, 0x01, 0x12, 0x5e, 0x0a, 0x2a, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x25, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x45, - 0x70, 0x6f, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x10, 0x62, 0x65, 0x61, 0x6d, 0x5f, - 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x02, 0x52, 0x0e, 0x62, 0x65, 0x61, 0x6d, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x42, 0x2d, 0x0a, 0x2b, - 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, - 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x42, 0x13, 0x0a, 0x11, 0x5f, - 0x62, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x2a, 0x52, 0x0a, 0x03, 0x53, 0x64, 0x6b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x44, 0x4b, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, - 0x53, 0x44, 0x4b, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x44, - 0x4b, 0x5f, 0x47, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x44, 0x4b, 0x5f, 0x50, 0x59, - 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x53, 0x43, - 0x49, 0x4f, 0x10, 0x04, 0x2a, 0xb8, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1b, - 0x0a, 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, - 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, - 0x41, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, - 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, - 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x12, - 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, - 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x09, - 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, - 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, - 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0c, 0x2a, - 0xae, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x45, + 0x09, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x48, 0x61, + 0x73, 0x68, 0x12, 0x59, 0x0a, 0x2a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x25, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x53, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x28, 0x0a, + 0x10, 0x62, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x65, 0x61, 0x6d, 0x53, 0x64, 0x6b, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2a, 0x52, 0x0a, 0x03, 0x53, 0x64, 0x6b, 0x12, 0x13, + 0x0a, 0x0f, 0x53, 0x44, 0x4b, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x10, + 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x44, 0x4b, 0x5f, 0x47, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, + 0x0a, 0x53, 0x44, 0x4b, 0x5f, 0x50, 0x59, 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, + 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x53, 0x43, 0x49, 0x4f, 0x10, 0x04, 0x2a, 0xb8, 0x02, 0x0a, 0x06, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, + 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, + 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, + 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, + 0x08, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, + 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, + 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0c, 0x2a, 0xae, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x63, 0x6f, + 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, + 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, - 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, - 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x52, 0x45, 0x43, 0x4f, - 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x54, 0x41, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x45, - 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x10, 0x03, - 0x2a, 0x6e, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x12, 0x1a, - 0x0a, 0x16, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, - 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, - 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x4d, - 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x50, 0x4c, - 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x41, 0x44, 0x56, 0x41, 0x4e, 0x43, 0x45, 0x44, 0x10, 0x03, - 0x2a, 0x46, 0x0a, 0x0c, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x17, 0x0a, 0x13, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x4b, 0x41, 0x46, 0x4b, 0x41, 0x10, 0x01, 0x32, 0xd3, 0x0d, 0x0a, 0x11, 0x50, 0x6c, 0x61, - 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, - 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, - 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, - 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, - 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x5e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, - 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x20, + 0x0a, 0x1c, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, + 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x54, 0x41, 0x10, 0x02, + 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, + 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, + 0x5f, 0x54, 0x45, 0x53, 0x54, 0x10, 0x03, 0x2a, 0x6e, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x78, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, + 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, + 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4d, 0x50, 0x4c, + 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x17, + 0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x41, 0x44, 0x56, + 0x41, 0x4e, 0x43, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x46, 0x0a, 0x0c, 0x45, 0x6d, 0x75, 0x6c, 0x61, + 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x4d, 0x55, 0x4c, 0x41, + 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, + 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x46, 0x4b, 0x41, 0x10, 0x01, 0x32, + 0xd3, 0x0d, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, + 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, + 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x17, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x22, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, + 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, + 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, + 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, + 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x15, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, + 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x1a, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, - 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x61, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x73, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, + 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, + 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, + 0x6f, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, - 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x28, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x76, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, - 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, + 0x61, 0x70, 0x68, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x61, 0x76, - 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, - 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, - 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, - 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, - 0x5a, 0x36, 0x62, 0x65, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, - 0x67, 0x2f, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x62, 0x61, 0x63, - 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x70, 0x6c, - 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, + 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, + 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, + 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, + 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, + 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, + 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, 0x36, 0x62, 0x65, 0x61, 0x6d, 0x2e, 0x61, 0x70, + 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, + 0x75, 0x6e, 0x64, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3872,7 +3866,6 @@ func file_api_proto_init() { } } } - file_api_proto_msgTypes[43].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/playground/api/v1/api.proto b/playground/api/v1/api.proto index 0cc1347a1f21..52473e4f0e02 100644 --- a/playground/api/v1/api.proto +++ b/playground/api/v1/api.proto @@ -320,9 +320,9 @@ message GetMetadataRequest {} // GetMetadataResponse contains metadata about the runner message GetMetadataResponse { string runner_sdk = 1; - optional string build_commit_hash = 2; - optional int64 build_commit_timestamp_seconds_since_epoch = 3; - optional string beam_sdk_version = 4; + string build_commit_hash = 2; + int64 build_commit_timestamp_seconds_since_epoch = 3; + string beam_sdk_version = 4; } service PlaygroundService { diff --git a/playground/backend/cmd/server/controller.go b/playground/backend/cmd/server/controller.go index 3cd164fe6534..34a42df2aa7d 100644 --- a/playground/backend/cmd/server/controller.go +++ b/playground/backend/cmd/server/controller.go @@ -532,25 +532,15 @@ func (controller *playgroundController) GetSnippet(ctx context.Context, info *pb // GetMetadata returns runner metadata func (controller *playgroundController) GetMetadata(_ context.Context, _ *pb.GetMetadataRequest) (*pb.GetMetadataResponse, error) { - commitTimestampInteger := func() *int64 { - timestamp, err := strconv.ParseInt(BuildCommitTimestamp, 10, 64) - if err != nil { - logger.Errorf("GetMetadata(): failed to parse BuildCommitTimestamp (\"%s\"): %s", BuildCommitTimestamp, err.Error()) - return nil - } - return ×tamp - }() - - buildCommitHash := func() *string { - if BuildCommitHash == "" { - return nil - } - return &BuildCommitHash - }() + commitTimestampInteger, err := strconv.ParseInt(BuildCommitTimestamp, 10, 64) + if err != nil { + logger.Errorf("GetMetadata(): failed to parse BuildCommitTimestamp (\"%s\"): %s", BuildCommitTimestamp, err.Error()) + commitTimestampInteger = 0 + } response := pb.GetMetadataResponse{ RunnerSdk: controller.env.BeamSdkEnvs.ApacheBeamSdk.String(), - BuildCommitHash: buildCommitHash, + BuildCommitHash: BuildCommitHash, BuildCommitTimestampSecondsSinceEpoch: commitTimestampInteger, BeamSdkVersion: controller.env.BeamSdkEnvs.BeamVersion, } diff --git a/playground/backend/internal/api/v1/api.pb.go b/playground/backend/internal/api/v1/api.pb.go index 7049141ddc7b..2df53df2bf04 100644 --- a/playground/backend/internal/api/v1/api.pb.go +++ b/playground/backend/internal/api/v1/api.pb.go @@ -2633,10 +2633,10 @@ type GetMetadataResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RunnerSdk string `protobuf:"bytes,1,opt,name=runner_sdk,json=runnerSdk,proto3" json:"runner_sdk,omitempty"` - BuildCommitHash *string `protobuf:"bytes,2,opt,name=build_commit_hash,json=buildCommitHash,proto3,oneof" json:"build_commit_hash,omitempty"` - BuildCommitTimestampSecondsSinceEpoch *int64 `protobuf:"varint,3,opt,name=build_commit_timestamp_seconds_since_epoch,json=buildCommitTimestampSecondsSinceEpoch,proto3,oneof" json:"build_commit_timestamp_seconds_since_epoch,omitempty"` - BeamSdkVersion *string `protobuf:"bytes,4,opt,name=beam_sdk_version,json=beamSdkVersion,proto3,oneof" json:"beam_sdk_version,omitempty"` + RunnerSdk string `protobuf:"bytes,1,opt,name=runner_sdk,json=runnerSdk,proto3" json:"runner_sdk,omitempty"` + BuildCommitHash string `protobuf:"bytes,2,opt,name=build_commit_hash,json=buildCommitHash,proto3" json:"build_commit_hash,omitempty"` + BuildCommitTimestampSecondsSinceEpoch int64 `protobuf:"varint,3,opt,name=build_commit_timestamp_seconds_since_epoch,json=buildCommitTimestampSecondsSinceEpoch,proto3" json:"build_commit_timestamp_seconds_since_epoch,omitempty"` + BeamSdkVersion string `protobuf:"bytes,4,opt,name=beam_sdk_version,json=beamSdkVersion,proto3" json:"beam_sdk_version,omitempty"` } func (x *GetMetadataResponse) Reset() { @@ -2679,22 +2679,22 @@ func (x *GetMetadataResponse) GetRunnerSdk() string { } func (x *GetMetadataResponse) GetBuildCommitHash() string { - if x != nil && x.BuildCommitHash != nil { - return *x.BuildCommitHash + if x != nil { + return x.BuildCommitHash } return "" } func (x *GetMetadataResponse) GetBuildCommitTimestampSecondsSinceEpoch() int64 { - if x != nil && x.BuildCommitTimestampSecondsSinceEpoch != nil { - return *x.BuildCommitTimestampSecondsSinceEpoch + if x != nil { + return x.BuildCommitTimestampSecondsSinceEpoch } return 0 } func (x *GetMetadataResponse) GetBeamSdkVersion() string { - if x != nil && x.BeamSdkVersion != nil { - return *x.BeamSdkVersion + if x != nil { + return x.BeamSdkVersion } return "" } @@ -3001,189 +3001,182 @@ var file_api_v1_api_proto_rawDesc = []byte{ 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xce, 0x02, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xe5, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x12, 0x2f, 0x0a, + 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x64, 0x6b, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x68, 0x61, - 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x48, 0x61, 0x73, 0x68, 0x88, 0x01, 0x01, 0x12, 0x5e, - 0x0a, 0x2a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x48, 0x01, 0x52, 0x25, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x2d, - 0x0a, 0x10, 0x62, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x64, 0x6b, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0e, 0x62, 0x65, 0x61, 0x6d, - 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x14, 0x0a, - 0x12, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x68, - 0x61, 0x73, 0x68, 0x42, 0x2d, 0x0a, 0x2b, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x73, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x62, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x64, 0x6b, 0x5f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2a, 0x52, 0x0a, 0x03, 0x53, 0x64, 0x6b, 0x12, 0x13, - 0x0a, 0x0f, 0x53, 0x44, 0x4b, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x10, - 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x44, 0x4b, 0x5f, 0x47, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, - 0x0a, 0x53, 0x44, 0x4b, 0x5f, 0x50, 0x59, 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, - 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x53, 0x43, 0x49, 0x4f, 0x10, 0x04, 0x2a, 0xb8, 0x02, 0x0a, 0x06, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, - 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, - 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, - 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, - 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, - 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x5f, 0x45, - 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, - 0x08, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, - 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, - 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, - 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0c, 0x2a, 0xae, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x65, 0x63, 0x6f, - 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, - 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x45, - 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x20, - 0x0a, 0x1c, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, - 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x54, 0x41, 0x10, 0x02, - 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, - 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, - 0x5f, 0x54, 0x45, 0x53, 0x54, 0x10, 0x03, 0x2a, 0x6e, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x78, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, - 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, - 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4d, 0x50, 0x4c, - 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x17, - 0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x41, 0x44, 0x56, - 0x41, 0x4e, 0x43, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x46, 0x0a, 0x0c, 0x45, 0x6d, 0x75, 0x6c, 0x61, - 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x4d, 0x55, 0x4c, 0x41, - 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, - 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x46, 0x4b, 0x41, 0x10, 0x01, 0x32, - 0xd3, 0x0d, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, - 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, - 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x17, 0x2e, 0x61, + 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x59, 0x0a, 0x2a, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, + 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x25, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x64, 0x6b, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x62, 0x65, 0x61, 0x6d, 0x53, 0x64, 0x6b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2a, 0x52, + 0x0a, 0x03, 0x53, 0x64, 0x6b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x44, 0x4b, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, + 0x4b, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x44, 0x4b, 0x5f, + 0x47, 0x4f, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x44, 0x4b, 0x5f, 0x50, 0x59, 0x54, 0x48, + 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x4b, 0x5f, 0x53, 0x43, 0x49, 0x4f, + 0x10, 0x04, 0x2a, 0xb8, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, + 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, + 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x14, 0x0a, + 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x49, 0x4e, + 0x47, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, + 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x12, 0x14, 0x0a, + 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4e, + 0x47, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, + 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x09, 0x12, 0x10, + 0x0a, 0x0c, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x0a, + 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x54, + 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0c, 0x2a, 0xae, 0x01, + 0x0a, 0x15, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x45, 0x43, 0x4f, + 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, + 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x41, 0x4d, + 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x50, + 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x4b, 0x41, 0x54, 0x41, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x45, 0x43, 0x4f, + 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x10, 0x03, 0x2a, 0x6e, + 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, + 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4d, 0x50, + 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x15, + 0x0a, 0x11, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x45, 0x44, + 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x58, + 0x49, 0x54, 0x59, 0x5f, 0x41, 0x44, 0x56, 0x41, 0x4e, 0x43, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x46, + 0x0a, 0x0c, 0x45, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, + 0x0a, 0x19, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, + 0x13, 0x45, 0x4d, 0x55, 0x4c, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, + 0x41, 0x46, 0x4b, 0x41, 0x10, 0x01, 0x32, 0xd3, 0x0d, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x67, + 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x07, + 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x64, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, + 0x61, 0x70, 0x68, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x22, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x52, 0x75, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, + 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, + 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x63, + 0x65, 0x6c, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, + 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, + 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, - 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x70, - 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, + 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1f, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x69, - 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x15, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, - 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x61, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, + 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x73, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, - 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, - 0x6f, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, - 0x61, 0x70, 0x68, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, + 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, + 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, - 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, - 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, - 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, - 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, - 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, - 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, - 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, 0x36, 0x62, 0x65, 0x61, 0x6d, 0x2e, 0x61, 0x70, - 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, + 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x76, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x65, 0x53, + 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x61, 0x76, 0x65, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x65, + 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x43, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x12, 0x19, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6e, 0x69, 0x70, 0x70, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, 0x36, + 0x62, 0x65, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, + 0x70, 0x6c, 0x61, 0x79, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3b, 0x70, 0x6c, 0x61, 0x79, + 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3873,7 +3866,6 @@ func file_api_v1_api_proto_init() { } } } - file_api_v1_api_proto_msgTypes[43].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/playground/backend/internal/environment/beam.go b/playground/backend/internal/environment/beam.go index ba634f3ee027..9e4574cbae27 100644 --- a/playground/backend/internal/environment/beam.go +++ b/playground/backend/internal/environment/beam.go @@ -43,14 +43,14 @@ func NewExecutorConfig(compileCmd, runCmd, testCmd string, compileArgs, runArgs, // BeamEnvs contains all environments related of ApacheBeam. These will use to run pipelines type BeamEnvs struct { ApacheBeamSdk pb.Sdk - BeamVersion *string + BeamVersion string ExecutorConfig *ExecutorConfig preparedModDir string numOfParallelJobs int } // NewBeamEnvs is a BeamEnvs constructor -func NewBeamEnvs(apacheBeamSdk pb.Sdk, beamVersion *string, executorConfig *ExecutorConfig, preparedModDir string, numOfParallelJobs int) *BeamEnvs { +func NewBeamEnvs(apacheBeamSdk pb.Sdk, beamVersion string, executorConfig *ExecutorConfig, preparedModDir string, numOfParallelJobs int) *BeamEnvs { return &BeamEnvs{ApacheBeamSdk: apacheBeamSdk, BeamVersion: beamVersion, ExecutorConfig: executorConfig, preparedModDir: preparedModDir, numOfParallelJobs: numOfParallelJobs} } diff --git a/playground/backend/internal/environment/environment_service.go b/playground/backend/internal/environment/environment_service.go index eb99060f5be8..cc2b22b5ce20 100644 --- a/playground/backend/internal/environment/environment_service.go +++ b/playground/backend/internal/environment/environment_service.go @@ -54,6 +54,7 @@ const ( defaultIp = "localhost" defaultPort = 8080 defaultSdk = pb.Sdk_SDK_JAVA + defaultBeamVersion = "" defaultBeamJarsPath = "/opt/apache/beam/jars/*" defaultDatasetsPath = "/opt/playground/backend/datasets" defaultKafkaEmulatorExecutablePath = "/opt/playground/backend/kafka-emulator/beam-playground-kafka-emulator.jar" @@ -154,12 +155,7 @@ func ConfigureBeamEnvs(workDir string) (*BeamEnvs, error) { preparedModDir, modDirExist := os.LookupEnv(preparedModDirKey) numOfParallelJobs := getEnvAsInt(numOfParallelJobsKey, defaultNumOfParallelJobs) - beamVersion := func() *string { - if version, ok := os.LookupEnv(beamVersionKey); ok { - return &version - } - return nil - }() + beamVersion := getEnv(beamVersionKey, defaultBeamVersion) if value, present := os.LookupEnv(beamSdkKey); present { diff --git a/playground/backend/internal/environment/environment_service_test.go b/playground/backend/internal/environment/environment_service_test.go index eda6979b1ccb..3d298addcc85 100644 --- a/playground/backend/internal/environment/environment_service_test.go +++ b/playground/backend/internal/environment/environment_service_test.go @@ -104,7 +104,7 @@ func TestNewEnvironment(t *testing.T) { }{ {name: "Create env service with default envs", want: &Environment{ NetworkEnvs: *NewNetworkEnvs(defaultIp, defaultPort, defaultProtocol), - BeamSdkEnvs: *NewBeamEnvs(defaultSdk, executorConfig, preparedModDir, 0), + BeamSdkEnvs: *NewBeamEnvs(defaultSdk, defaultBeamVersion, executorConfig, preparedModDir, 0), ApplicationEnvs: *NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultSDKConfigPath, defaultPropertyPath, defaultKafkaEmulatorExecutablePath, defaultDatasetsPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, defaultCacheKeyExpirationTime}, defaultPipelineExecuteTimeout, defaultCacheRequestTimeout), }}, } @@ -112,7 +112,7 @@ func TestNewEnvironment(t *testing.T) { t.Run(tt.name, func(t *testing.T) { if got := NewEnvironment( *NewNetworkEnvs(defaultIp, defaultPort, defaultProtocol), - *NewBeamEnvs(defaultSdk, executorConfig, preparedModDir, 0), + *NewBeamEnvs(defaultSdk, defaultBeamVersion, executorConfig, preparedModDir, 0), *NewApplicationEnvs("/app", defaultLaunchSite, defaultProjectId, defaultPipelinesFolder, defaultSDKConfigPath, defaultPropertyPath, defaultKafkaEmulatorExecutablePath, defaultDatasetsPath, &CacheEnvs{defaultCacheType, defaultCacheAddress, defaultCacheKeyExpirationTime}, defaultPipelineExecuteTimeout, defaultCacheRequestTimeout)); !reflect.DeepEqual(got, tt.want) { t.Errorf("NewEnvironment() = %v, want %v", got, tt.want) } @@ -131,25 +131,25 @@ func Test_getSdkEnvsFromOsEnvs(t *testing.T) { }{ { name: "Not specified beam sdk key in os envs", - want: NewBeamEnvs(pb.Sdk_SDK_UNSPECIFIED, nil, preparedModDir, defaultNumOfParallelJobs), + want: NewBeamEnvs(pb.Sdk_SDK_UNSPECIFIED, defaultBeamVersion, nil, preparedModDir, defaultNumOfParallelJobs), envsToSet: map[string]string{}, wantErr: false, }, { name: "Default beam envs", - want: NewBeamEnvs(defaultSdk, executorConfig, preparedModDir, defaultNumOfParallelJobs), + want: NewBeamEnvs(defaultSdk, defaultBeamVersion, executorConfig, preparedModDir, defaultNumOfParallelJobs), envsToSet: map[string]string{beamSdkKey: "SDK_JAVA"}, wantErr: false, }, { name: "Specific sdk key in os envs", - want: NewBeamEnvs(defaultSdk, executorConfig, preparedModDir, defaultNumOfParallelJobs), + want: NewBeamEnvs(defaultSdk, defaultBeamVersion, executorConfig, preparedModDir, defaultNumOfParallelJobs), envsToSet: map[string]string{beamSdkKey: "SDK_JAVA"}, wantErr: false, }, { name: "Wrong sdk key in os envs", - want: NewBeamEnvs(pb.Sdk_SDK_UNSPECIFIED, nil, preparedModDir, defaultNumOfParallelJobs), + want: NewBeamEnvs(pb.Sdk_SDK_UNSPECIFIED, defaultBeamVersion, nil, preparedModDir, defaultNumOfParallelJobs), envsToSet: map[string]string{beamSdkKey: "SDK_J"}, wantErr: false, }, @@ -394,7 +394,7 @@ func TestConfigureBeamEnvs(t *testing.T) { { name: "BeamSdkKey set to GO sdk", args: args{workingDir: workingDir}, - want: NewBeamEnvs(pb.Sdk_SDK_GO, goExecutorConfig, modDir, defaultNumOfParallelJobs), + want: NewBeamEnvs(pb.Sdk_SDK_GO, defaultBeamVersion, goExecutorConfig, modDir, defaultNumOfParallelJobs), wantErr: false, envsToSet: map[string]string{beamSdkKey: "SDK_GO", preparedModDirKey: modDir}, }, @@ -407,31 +407,31 @@ func TestConfigureBeamEnvs(t *testing.T) { }, { name: "BeamSdkKey set to Python sdk", - want: NewBeamEnvs(pb.Sdk_SDK_PYTHON, pythonExecutorConfig, modDir, defaultNumOfParallelJobs), + want: NewBeamEnvs(pb.Sdk_SDK_PYTHON, defaultBeamVersion, pythonExecutorConfig, modDir, defaultNumOfParallelJobs), wantErr: false, envsToSet: map[string]string{beamSdkKey: "SDK_PYTHON"}, }, { name: "BeamSdkKey set to SCIO sdk", - want: NewBeamEnvs(pb.Sdk_SDK_SCIO, scioExecutorConfig, modDir, defaultNumOfParallelJobs), + want: NewBeamEnvs(pb.Sdk_SDK_SCIO, defaultBeamVersion, scioExecutorConfig, modDir, defaultNumOfParallelJobs), wantErr: false, envsToSet: map[string]string{beamSdkKey: "SDK_SCIO"}, }, { name: "NumOfParallelJobsKey is set with a positive number", - want: NewBeamEnvs(pb.Sdk_SDK_PYTHON, pythonExecutorConfig, modDir, 1), + want: NewBeamEnvs(pb.Sdk_SDK_PYTHON, defaultBeamVersion, pythonExecutorConfig, modDir, 1), wantErr: false, envsToSet: map[string]string{beamSdkKey: "SDK_PYTHON", numOfParallelJobsKey: "1"}, }, { name: "NumOfParallelJobsKey is set with a negative number", - want: NewBeamEnvs(pb.Sdk_SDK_PYTHON, pythonExecutorConfig, modDir, defaultNumOfParallelJobs), + want: NewBeamEnvs(pb.Sdk_SDK_PYTHON, defaultBeamVersion, pythonExecutorConfig, modDir, defaultNumOfParallelJobs), wantErr: false, envsToSet: map[string]string{beamSdkKey: "SDK_PYTHON", numOfParallelJobsKey: "-1"}, }, { name: "NumOfParallelJobsKey is set with incorrect value", - want: NewBeamEnvs(pb.Sdk_SDK_PYTHON, pythonExecutorConfig, modDir, defaultNumOfParallelJobs), + want: NewBeamEnvs(pb.Sdk_SDK_PYTHON, defaultBeamVersion, pythonExecutorConfig, modDir, defaultNumOfParallelJobs), wantErr: false, envsToSet: map[string]string{beamSdkKey: "SDK_PYTHON", numOfParallelJobsKey: "incorrectValue"}, }, diff --git a/playground/backend/internal/setup_tools/builder/setup_builder_test.go b/playground/backend/internal/setup_tools/builder/setup_builder_test.go index edafd072c4d5..08eaab3d542c 100644 --- a/playground/backend/internal/setup_tools/builder/setup_builder_test.go +++ b/playground/backend/internal/setup_tools/builder/setup_builder_test.go @@ -77,10 +77,10 @@ func setup() { CompileArgs: []string{"MOCK_COMPILE_ARG"}, RunArgs: []string{"MOCK_RUN_CMD"}, } - pythonSdkEnv = environment.NewBeamEnvs(pb.Sdk_SDK_PYTHON, executorConfig, "", 0) - javaSdkEnv = environment.NewBeamEnvs(pb.Sdk_SDK_JAVA, executorConfig, "", 0) - goSdkEnv = environment.NewBeamEnvs(pb.Sdk_SDK_GO, executorConfig, "", 0) - scioSdkEnv = environment.NewBeamEnvs(pb.Sdk_SDK_SCIO, executorConfig, "", 0) + pythonSdkEnv = environment.NewBeamEnvs(pb.Sdk_SDK_PYTHON, "", executorConfig, "", 0) + javaSdkEnv = environment.NewBeamEnvs(pb.Sdk_SDK_JAVA, "", executorConfig, "", 0) + goSdkEnv = environment.NewBeamEnvs(pb.Sdk_SDK_GO, "", executorConfig, "", 0) + scioSdkEnv = environment.NewBeamEnvs(pb.Sdk_SDK_SCIO, "", executorConfig, "", 0) } func teardown() { @@ -121,7 +121,7 @@ func TestValidator(t *testing.T) { WithValidator(). WithSdkValidators(scioVals) - wrongSdkEnv := environment.NewBeamEnvs(pb.Sdk_SDK_UNSPECIFIED, pythonSdkEnv.ExecutorConfig, "", 0) + wrongSdkEnv := environment.NewBeamEnvs(pb.Sdk_SDK_UNSPECIFIED, "", pythonSdkEnv.ExecutorConfig, "", 0) type args struct { paths *fs_tool.LifeCyclePaths @@ -239,7 +239,7 @@ func TestPreparer(t *testing.T) { WithPreparer(). WithSdkPreparers(scioPrep) - wrongSdkEnv := environment.NewBeamEnvs(pb.Sdk_SDK_UNSPECIFIED, pythonSdkEnv.ExecutorConfig, "", 0) + wrongSdkEnv := environment.NewBeamEnvs(pb.Sdk_SDK_UNSPECIFIED, "", pythonSdkEnv.ExecutorConfig, "", 0) type args struct { paths fs_tool.LifeCyclePaths diff --git a/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart b/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart index e87052a6bb67..d61d6c2096fd 100644 --- a/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart +++ b/playground/frontend/playground_components/lib/src/api/v1/api.pbjson.dart @@ -563,16 +563,11 @@ const GetMetadataResponse$json = const { '1': 'GetMetadataResponse', '2': const [ const {'1': 'runner_sdk', '3': 1, '4': 1, '5': 9, '10': 'runnerSdk'}, - const {'1': 'build_commit_hash', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'buildCommitHash', '17': true}, - const {'1': 'build_commit_timestamp_seconds_since_epoch', '3': 3, '4': 1, '5': 3, '9': 1, '10': 'buildCommitTimestampSecondsSinceEpoch', '17': true}, - const {'1': 'beam_sdk_version', '3': 4, '4': 1, '5': 9, '9': 2, '10': 'beamSdkVersion', '17': true}, - ], - '8': const [ - const {'1': '_build_commit_hash'}, - const {'1': '_build_commit_timestamp_seconds_since_epoch'}, - const {'1': '_beam_sdk_version'}, + const {'1': 'build_commit_hash', '3': 2, '4': 1, '5': 9, '10': 'buildCommitHash'}, + const {'1': 'build_commit_timestamp_seconds_since_epoch', '3': 3, '4': 1, '5': 3, '10': 'buildCommitTimestampSecondsSinceEpoch'}, + const {'1': 'beam_sdk_version', '3': 4, '4': 1, '5': 9, '10': 'beamSdkVersion'}, ], }; /// Descriptor for `GetMetadataResponse`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List getMetadataResponseDescriptor = $convert.base64Decode('ChNHZXRNZXRhZGF0YVJlc3BvbnNlEh0KCnJ1bm5lcl9zZGsYASABKAlSCXJ1bm5lclNkaxIvChFidWlsZF9jb21taXRfaGFzaBgCIAEoCUgAUg9idWlsZENvbW1pdEhhc2iIAQESXgoqYnVpbGRfY29tbWl0X3RpbWVzdGFtcF9zZWNvbmRzX3NpbmNlX2Vwb2NoGAMgASgDSAFSJWJ1aWxkQ29tbWl0VGltZXN0YW1wU2Vjb25kc1NpbmNlRXBvY2iIAQESLQoQYmVhbV9zZGtfdmVyc2lvbhgEIAEoCUgCUg5iZWFtU2RrVmVyc2lvbogBAUIUChJfYnVpbGRfY29tbWl0X2hhc2hCLQorX2J1aWxkX2NvbW1pdF90aW1lc3RhbXBfc2Vjb25kc19zaW5jZV9lcG9jaEITChFfYmVhbV9zZGtfdmVyc2lvbg=='); +final $typed_data.Uint8List getMetadataResponseDescriptor = $convert.base64Decode('ChNHZXRNZXRhZGF0YVJlc3BvbnNlEh0KCnJ1bm5lcl9zZGsYASABKAlSCXJ1bm5lclNkaxIqChFidWlsZF9jb21taXRfaGFzaBgCIAEoCVIPYnVpbGRDb21taXRIYXNoElkKKmJ1aWxkX2NvbW1pdF90aW1lc3RhbXBfc2Vjb25kc19zaW5jZV9lcG9jaBgDIAEoA1IlYnVpbGRDb21taXRUaW1lc3RhbXBTZWNvbmRzU2luY2VFcG9jaBIoChBiZWFtX3Nka192ZXJzaW9uGAQgASgJUg5iZWFtU2RrVmVyc2lvbg=='); diff --git a/playground/infrastructure/api/v1/api_pb2.py b/playground/infrastructure/api/v1/api_pb2.py index ff58aa2c3697..2df020a3517a 100644 --- a/playground/infrastructure/api/v1/api_pb2.py +++ b/playground/infrastructure/api/v1/api_pb2.py @@ -13,7 +13,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x61pi/v1/api.proto\x12\x06\x61pi.v1\"\xca\x01\n\x07\x44\x61taset\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x14.api.v1.EmulatorTypeR\x04type\x12\x36\n\x07options\x18\x02 \x03(\x0b\x32\x1c.api.v1.Dataset.OptionsEntryR\x07options\x12!\n\x0c\x64\x61taset_path\x18\x03 \x01(\tR\x0b\x64\x61tasetPath\x1a:\n\x0cOptionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xc6\x01\n\x0eRunCodeRequest\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12+\n\x08\x64\x61tasets\x18\x04 \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12)\n\x05\x66iles\x18\x05 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"6\n\x0fRunCodeResponse\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"9\n\x12\x43heckStatusRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"=\n\x13\x43heckStatusResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x0e.api.v1.StatusR\x06status\"A\n\x1aGetValidationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"5\n\x1bGetValidationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"B\n\x1bGetPreparationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"6\n\x1cGetPreparationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\">\n\x17GetCompileOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"2\n\x18GetCompileOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n\x13GetRunOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\".\n\x14GetRunOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n\x12GetRunErrorRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"-\n\x13GetRunErrorResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"5\n\x0eGetLogsRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\")\n\x0fGetLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"6\n\x0fGetGraphRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"(\n\x10GetGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"4\n\rCancelRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"\x10\n\x0e\x43\x61ncelResponse\"\x94\x04\n\x11PrecompiledObject\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x04type\x18\x04 \x01(\x0e\x32\x1d.api.v1.PrecompiledObjectTypeR\x04type\x12)\n\x10pipeline_options\x18\x05 \x01(\tR\x0fpipelineOptions\x12\x12\n\x04link\x18\x06 \x01(\tR\x04link\x12\x1c\n\tmultifile\x18\x07 \x01(\x08R\tmultifile\x12!\n\x0c\x63ontext_line\x18\x08 \x01(\x05R\x0b\x63ontextLine\x12\'\n\x0f\x64\x65\x66\x61ult_example\x18\t \x01(\x08R\x0e\x64\x65\x66\x61ultExample\x12\x1d\n\x03sdk\x18\n \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x32\n\ncomplexity\x18\x0b \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\x12\n\x04tags\x18\x0c \x03(\tR\x04tags\x12+\n\x08\x64\x61tasets\x18\r \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12\x17\n\x07url_vcs\x18\x0e \x01(\tR\x06urlVcs\x12!\n\x0curl_notebook\x18\x0f \x01(\tR\x0burlNotebook\"\xe5\x01\n\nCategories\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12;\n\ncategories\x18\x02 \x03(\x0b\x32\x1b.api.v1.Categories.CategoryR\ncategories\x1a{\n\x08\x43\x61tegory\x12#\n\rcategory_name\x18\x01 \x01(\tR\x0c\x63\x61tegoryName\x12J\n\x13precompiled_objects\x18\x02 \x03(\x0b\x32\x19.api.v1.PrecompiledObjectR\x12precompiledObjects\"Y\n\x1cGetPrecompiledObjectsRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x1a\n\x08\x63\x61tegory\x18\x02 \x01(\tR\x08\x63\x61tegory\"<\n\x1bGetPrecompiledObjectRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectCodeRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"B\n!GetPrecompiledObjectOutputRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectLogsRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"A\n GetPrecompiledObjectGraphRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"C\n\"GetDefaultPrecompiledObjectRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\"Z\n\x1dGetPrecompiledObjectsResponse\x12\x39\n\x0esdk_categories\x18\x01 \x03(\x0b\x32\x12.api.v1.CategoriesR\rsdkCategories\"h\n\x1cGetPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"a\n GetPrecompiledObjectCodeResponse\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12)\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"<\n\"GetPrecompiledObjectOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n GetPrecompiledObjectLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n!GetPrecompiledObjectGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"o\n#GetDefaultPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"T\n\x0bSnippetFile\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x63ontent\x18\x02 \x01(\tR\x07\x63ontent\x12\x17\n\x07is_main\x18\x03 \x01(\x08R\x06isMain\"\xe6\x01\n\x12SaveSnippetRequest\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\'\n\x0fpersistence_key\x18\x05 \x01(\tR\x0epersistenceKey\"%\n\x13SaveSnippetResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"#\n\x11GetSnippetRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"\xbd\x01\n\x12GetSnippetResponse\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\"\x14\n\x12GetMetadataRequest\"\xce\x02\n\x13GetMetadataResponse\x12\x1d\n\nrunner_sdk\x18\x01 \x01(\tR\trunnerSdk\x12/\n\x11\x62uild_commit_hash\x18\x02 \x01(\tH\x00R\x0f\x62uildCommitHash\x88\x01\x01\x12^\n*build_commit_timestamp_seconds_since_epoch\x18\x03 \x01(\x03H\x01R%buildCommitTimestampSecondsSinceEpoch\x88\x01\x01\x12-\n\x10\x62\x65\x61m_sdk_version\x18\x04 \x01(\tH\x02R\x0e\x62\x65\x61mSdkVersion\x88\x01\x01\x42\x14\n\x12_build_commit_hashB-\n+_build_commit_timestamp_seconds_since_epochB\x13\n\x11_beam_sdk_version*R\n\x03Sdk\x12\x13\n\x0fSDK_UNSPECIFIED\x10\x00\x12\x0c\n\x08SDK_JAVA\x10\x01\x12\n\n\x06SDK_GO\x10\x02\x12\x0e\n\nSDK_PYTHON\x10\x03\x12\x0c\n\x08SDK_SCIO\x10\x04*\xb8\x02\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x15\n\x11STATUS_VALIDATING\x10\x01\x12\x1b\n\x17STATUS_VALIDATION_ERROR\x10\x02\x12\x14\n\x10STATUS_PREPARING\x10\x03\x12\x1c\n\x18STATUS_PREPARATION_ERROR\x10\x04\x12\x14\n\x10STATUS_COMPILING\x10\x05\x12\x18\n\x14STATUS_COMPILE_ERROR\x10\x06\x12\x14\n\x10STATUS_EXECUTING\x10\x07\x12\x13\n\x0fSTATUS_FINISHED\x10\x08\x12\x14\n\x10STATUS_RUN_ERROR\x10\t\x12\x10\n\x0cSTATUS_ERROR\x10\n\x12\x16\n\x12STATUS_RUN_TIMEOUT\x10\x0b\x12\x13\n\x0fSTATUS_CANCELED\x10\x0c*\xae\x01\n\x15PrecompiledObjectType\x12\'\n#PRECOMPILED_OBJECT_TYPE_UNSPECIFIED\x10\x00\x12#\n\x1fPRECOMPILED_OBJECT_TYPE_EXAMPLE\x10\x01\x12 \n\x1cPRECOMPILED_OBJECT_TYPE_KATA\x10\x02\x12%\n!PRECOMPILED_OBJECT_TYPE_UNIT_TEST\x10\x03*n\n\nComplexity\x12\x1a\n\x16\x43OMPLEXITY_UNSPECIFIED\x10\x00\x12\x14\n\x10\x43OMPLEXITY_BASIC\x10\x01\x12\x15\n\x11\x43OMPLEXITY_MEDIUM\x10\x02\x12\x17\n\x13\x43OMPLEXITY_ADVANCED\x10\x03*F\n\x0c\x45mulatorType\x12\x1d\n\x19\x45MULATOR_TYPE_UNSPECIFIED\x10\x00\x12\x17\n\x13\x45MULATOR_TYPE_KAFKA\x10\x01\x32\xd3\r\n\x11PlaygroundService\x12:\n\x07RunCode\x12\x16.api.v1.RunCodeRequest\x1a\x17.api.v1.RunCodeResponse\x12\x46\n\x0b\x43heckStatus\x12\x1a.api.v1.CheckStatusRequest\x1a\x1b.api.v1.CheckStatusResponse\x12I\n\x0cGetRunOutput\x12\x1b.api.v1.GetRunOutputRequest\x1a\x1c.api.v1.GetRunOutputResponse\x12:\n\x07GetLogs\x12\x16.api.v1.GetLogsRequest\x1a\x17.api.v1.GetLogsResponse\x12=\n\x08GetGraph\x12\x17.api.v1.GetGraphRequest\x1a\x18.api.v1.GetGraphResponse\x12\x46\n\x0bGetRunError\x12\x1a.api.v1.GetRunErrorRequest\x1a\x1b.api.v1.GetRunErrorResponse\x12^\n\x13GetValidationOutput\x12\".api.v1.GetValidationOutputRequest\x1a#.api.v1.GetValidationOutputResponse\x12\x61\n\x14GetPreparationOutput\x12#.api.v1.GetPreparationOutputRequest\x1a$.api.v1.GetPreparationOutputResponse\x12U\n\x10GetCompileOutput\x12\x1f.api.v1.GetCompileOutputRequest\x1a .api.v1.GetCompileOutputResponse\x12\x37\n\x06\x43\x61ncel\x12\x15.api.v1.CancelRequest\x1a\x16.api.v1.CancelResponse\x12\x64\n\x15GetPrecompiledObjects\x12$.api.v1.GetPrecompiledObjectsRequest\x1a%.api.v1.GetPrecompiledObjectsResponse\x12\x61\n\x14GetPrecompiledObject\x12#.api.v1.GetPrecompiledObjectRequest\x1a$.api.v1.GetPrecompiledObjectResponse\x12m\n\x18GetPrecompiledObjectCode\x12\'.api.v1.GetPrecompiledObjectCodeRequest\x1a(.api.v1.GetPrecompiledObjectCodeResponse\x12s\n\x1aGetPrecompiledObjectOutput\x12).api.v1.GetPrecompiledObjectOutputRequest\x1a*.api.v1.GetPrecompiledObjectOutputResponse\x12m\n\x18GetPrecompiledObjectLogs\x12\'.api.v1.GetPrecompiledObjectLogsRequest\x1a(.api.v1.GetPrecompiledObjectLogsResponse\x12p\n\x19GetPrecompiledObjectGraph\x12(.api.v1.GetPrecompiledObjectGraphRequest\x1a).api.v1.GetPrecompiledObjectGraphResponse\x12v\n\x1bGetDefaultPrecompiledObject\x12*.api.v1.GetDefaultPrecompiledObjectRequest\x1a+.api.v1.GetDefaultPrecompiledObjectResponse\x12\x46\n\x0bSaveSnippet\x12\x1a.api.v1.SaveSnippetRequest\x1a\x1b.api.v1.SaveSnippetResponse\x12\x43\n\nGetSnippet\x12\x19.api.v1.GetSnippetRequest\x1a\x1a.api.v1.GetSnippetResponse\x12\x46\n\x0bGetMetadata\x12\x1a.api.v1.GetMetadataRequest\x1a\x1b.api.v1.GetMetadataResponseB8Z6beam.apache.org/playground/backend/internal;playgroundb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x61pi/v1/api.proto\x12\x06\x61pi.v1\"\xca\x01\n\x07\x44\x61taset\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x14.api.v1.EmulatorTypeR\x04type\x12\x36\n\x07options\x18\x02 \x03(\x0b\x32\x1c.api.v1.Dataset.OptionsEntryR\x07options\x12!\n\x0c\x64\x61taset_path\x18\x03 \x01(\tR\x0b\x64\x61tasetPath\x1a:\n\x0cOptionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xc6\x01\n\x0eRunCodeRequest\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12+\n\x08\x64\x61tasets\x18\x04 \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12)\n\x05\x66iles\x18\x05 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"6\n\x0fRunCodeResponse\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"9\n\x12\x43heckStatusRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"=\n\x13\x43heckStatusResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x0e.api.v1.StatusR\x06status\"A\n\x1aGetValidationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"5\n\x1bGetValidationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"B\n\x1bGetPreparationOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"6\n\x1cGetPreparationOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\">\n\x17GetCompileOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"2\n\x18GetCompileOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n\x13GetRunOutputRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\".\n\x14GetRunOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n\x12GetRunErrorRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"-\n\x13GetRunErrorResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"5\n\x0eGetLogsRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\")\n\x0fGetLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"6\n\x0fGetGraphRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"(\n\x10GetGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"4\n\rCancelRequest\x12#\n\rpipeline_uuid\x18\x01 \x01(\tR\x0cpipelineUuid\"\x10\n\x0e\x43\x61ncelResponse\"\x94\x04\n\x11PrecompiledObject\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x31\n\x04type\x18\x04 \x01(\x0e\x32\x1d.api.v1.PrecompiledObjectTypeR\x04type\x12)\n\x10pipeline_options\x18\x05 \x01(\tR\x0fpipelineOptions\x12\x12\n\x04link\x18\x06 \x01(\tR\x04link\x12\x1c\n\tmultifile\x18\x07 \x01(\x08R\tmultifile\x12!\n\x0c\x63ontext_line\x18\x08 \x01(\x05R\x0b\x63ontextLine\x12\'\n\x0f\x64\x65\x66\x61ult_example\x18\t \x01(\x08R\x0e\x64\x65\x66\x61ultExample\x12\x1d\n\x03sdk\x18\n \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x32\n\ncomplexity\x18\x0b \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\x12\n\x04tags\x18\x0c \x03(\tR\x04tags\x12+\n\x08\x64\x61tasets\x18\r \x03(\x0b\x32\x0f.api.v1.DatasetR\x08\x64\x61tasets\x12\x17\n\x07url_vcs\x18\x0e \x01(\tR\x06urlVcs\x12!\n\x0curl_notebook\x18\x0f \x01(\tR\x0burlNotebook\"\xe5\x01\n\nCategories\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12;\n\ncategories\x18\x02 \x03(\x0b\x32\x1b.api.v1.Categories.CategoryR\ncategories\x1a{\n\x08\x43\x61tegory\x12#\n\rcategory_name\x18\x01 \x01(\tR\x0c\x63\x61tegoryName\x12J\n\x13precompiled_objects\x18\x02 \x03(\x0b\x32\x19.api.v1.PrecompiledObjectR\x12precompiledObjects\"Y\n\x1cGetPrecompiledObjectsRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12\x1a\n\x08\x63\x61tegory\x18\x02 \x01(\tR\x08\x63\x61tegory\"<\n\x1bGetPrecompiledObjectRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectCodeRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"B\n!GetPrecompiledObjectOutputRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"@\n\x1fGetPrecompiledObjectLogsRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"A\n GetPrecompiledObjectGraphRequest\x12\x1d\n\ncloud_path\x18\x01 \x01(\tR\tcloudPath\"C\n\"GetDefaultPrecompiledObjectRequest\x12\x1d\n\x03sdk\x18\x01 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\"Z\n\x1dGetPrecompiledObjectsResponse\x12\x39\n\x0esdk_categories\x18\x01 \x03(\x0b\x32\x12.api.v1.CategoriesR\rsdkCategories\"h\n\x1cGetPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"a\n GetPrecompiledObjectCodeResponse\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\x12)\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\"<\n\"GetPrecompiledObjectOutputResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\":\n GetPrecompiledObjectLogsResponse\x12\x16\n\x06output\x18\x01 \x01(\tR\x06output\"9\n!GetPrecompiledObjectGraphResponse\x12\x14\n\x05graph\x18\x01 \x01(\tR\x05graph\"o\n#GetDefaultPrecompiledObjectResponse\x12H\n\x12precompiled_object\x18\x01 \x01(\x0b\x32\x19.api.v1.PrecompiledObjectR\x11precompiledObject\"T\n\x0bSnippetFile\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x63ontent\x18\x02 \x01(\tR\x07\x63ontent\x12\x17\n\x07is_main\x18\x03 \x01(\x08R\x06isMain\"\xe6\x01\n\x12SaveSnippetRequest\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\x12\'\n\x0fpersistence_key\x18\x05 \x01(\tR\x0epersistenceKey\"%\n\x13SaveSnippetResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"#\n\x11GetSnippetRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"\xbd\x01\n\x12GetSnippetResponse\x12)\n\x05\x66iles\x18\x01 \x03(\x0b\x32\x13.api.v1.SnippetFileR\x05\x66iles\x12\x1d\n\x03sdk\x18\x02 \x01(\x0e\x32\x0b.api.v1.SdkR\x03sdk\x12)\n\x10pipeline_options\x18\x03 \x01(\tR\x0fpipelineOptions\x12\x32\n\ncomplexity\x18\x04 \x01(\x0e\x32\x12.api.v1.ComplexityR\ncomplexity\"\x14\n\x12GetMetadataRequest\"\xe5\x01\n\x13GetMetadataResponse\x12\x1d\n\nrunner_sdk\x18\x01 \x01(\tR\trunnerSdk\x12*\n\x11\x62uild_commit_hash\x18\x02 \x01(\tR\x0f\x62uildCommitHash\x12Y\n*build_commit_timestamp_seconds_since_epoch\x18\x03 \x01(\x03R%buildCommitTimestampSecondsSinceEpoch\x12(\n\x10\x62\x65\x61m_sdk_version\x18\x04 \x01(\tR\x0e\x62\x65\x61mSdkVersion*R\n\x03Sdk\x12\x13\n\x0fSDK_UNSPECIFIED\x10\x00\x12\x0c\n\x08SDK_JAVA\x10\x01\x12\n\n\x06SDK_GO\x10\x02\x12\x0e\n\nSDK_PYTHON\x10\x03\x12\x0c\n\x08SDK_SCIO\x10\x04*\xb8\x02\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x15\n\x11STATUS_VALIDATING\x10\x01\x12\x1b\n\x17STATUS_VALIDATION_ERROR\x10\x02\x12\x14\n\x10STATUS_PREPARING\x10\x03\x12\x1c\n\x18STATUS_PREPARATION_ERROR\x10\x04\x12\x14\n\x10STATUS_COMPILING\x10\x05\x12\x18\n\x14STATUS_COMPILE_ERROR\x10\x06\x12\x14\n\x10STATUS_EXECUTING\x10\x07\x12\x13\n\x0fSTATUS_FINISHED\x10\x08\x12\x14\n\x10STATUS_RUN_ERROR\x10\t\x12\x10\n\x0cSTATUS_ERROR\x10\n\x12\x16\n\x12STATUS_RUN_TIMEOUT\x10\x0b\x12\x13\n\x0fSTATUS_CANCELED\x10\x0c*\xae\x01\n\x15PrecompiledObjectType\x12\'\n#PRECOMPILED_OBJECT_TYPE_UNSPECIFIED\x10\x00\x12#\n\x1fPRECOMPILED_OBJECT_TYPE_EXAMPLE\x10\x01\x12 \n\x1cPRECOMPILED_OBJECT_TYPE_KATA\x10\x02\x12%\n!PRECOMPILED_OBJECT_TYPE_UNIT_TEST\x10\x03*n\n\nComplexity\x12\x1a\n\x16\x43OMPLEXITY_UNSPECIFIED\x10\x00\x12\x14\n\x10\x43OMPLEXITY_BASIC\x10\x01\x12\x15\n\x11\x43OMPLEXITY_MEDIUM\x10\x02\x12\x17\n\x13\x43OMPLEXITY_ADVANCED\x10\x03*F\n\x0c\x45mulatorType\x12\x1d\n\x19\x45MULATOR_TYPE_UNSPECIFIED\x10\x00\x12\x17\n\x13\x45MULATOR_TYPE_KAFKA\x10\x01\x32\xd3\r\n\x11PlaygroundService\x12:\n\x07RunCode\x12\x16.api.v1.RunCodeRequest\x1a\x17.api.v1.RunCodeResponse\x12\x46\n\x0b\x43heckStatus\x12\x1a.api.v1.CheckStatusRequest\x1a\x1b.api.v1.CheckStatusResponse\x12I\n\x0cGetRunOutput\x12\x1b.api.v1.GetRunOutputRequest\x1a\x1c.api.v1.GetRunOutputResponse\x12:\n\x07GetLogs\x12\x16.api.v1.GetLogsRequest\x1a\x17.api.v1.GetLogsResponse\x12=\n\x08GetGraph\x12\x17.api.v1.GetGraphRequest\x1a\x18.api.v1.GetGraphResponse\x12\x46\n\x0bGetRunError\x12\x1a.api.v1.GetRunErrorRequest\x1a\x1b.api.v1.GetRunErrorResponse\x12^\n\x13GetValidationOutput\x12\".api.v1.GetValidationOutputRequest\x1a#.api.v1.GetValidationOutputResponse\x12\x61\n\x14GetPreparationOutput\x12#.api.v1.GetPreparationOutputRequest\x1a$.api.v1.GetPreparationOutputResponse\x12U\n\x10GetCompileOutput\x12\x1f.api.v1.GetCompileOutputRequest\x1a .api.v1.GetCompileOutputResponse\x12\x37\n\x06\x43\x61ncel\x12\x15.api.v1.CancelRequest\x1a\x16.api.v1.CancelResponse\x12\x64\n\x15GetPrecompiledObjects\x12$.api.v1.GetPrecompiledObjectsRequest\x1a%.api.v1.GetPrecompiledObjectsResponse\x12\x61\n\x14GetPrecompiledObject\x12#.api.v1.GetPrecompiledObjectRequest\x1a$.api.v1.GetPrecompiledObjectResponse\x12m\n\x18GetPrecompiledObjectCode\x12\'.api.v1.GetPrecompiledObjectCodeRequest\x1a(.api.v1.GetPrecompiledObjectCodeResponse\x12s\n\x1aGetPrecompiledObjectOutput\x12).api.v1.GetPrecompiledObjectOutputRequest\x1a*.api.v1.GetPrecompiledObjectOutputResponse\x12m\n\x18GetPrecompiledObjectLogs\x12\'.api.v1.GetPrecompiledObjectLogsRequest\x1a(.api.v1.GetPrecompiledObjectLogsResponse\x12p\n\x19GetPrecompiledObjectGraph\x12(.api.v1.GetPrecompiledObjectGraphRequest\x1a).api.v1.GetPrecompiledObjectGraphResponse\x12v\n\x1bGetDefaultPrecompiledObject\x12*.api.v1.GetDefaultPrecompiledObjectRequest\x1a+.api.v1.GetDefaultPrecompiledObjectResponse\x12\x46\n\x0bSaveSnippet\x12\x1a.api.v1.SaveSnippetRequest\x1a\x1b.api.v1.SaveSnippetResponse\x12\x43\n\nGetSnippet\x12\x19.api.v1.GetSnippetRequest\x1a\x1a.api.v1.GetSnippetResponse\x12\x46\n\x0bGetMetadata\x12\x1a.api.v1.GetMetadataRequest\x1a\x1b.api.v1.GetMetadataResponseB8Z6beam.apache.org/playground/backend/internal;playgroundb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -24,16 +24,16 @@ DESCRIPTOR._serialized_options = b'Z6beam.apache.org/playground/backend/internal;playground' _DATASET_OPTIONSENTRY._options = None _DATASET_OPTIONSENTRY._serialized_options = b'8\001' - _globals['_SDK']._serialized_start=4249 - _globals['_SDK']._serialized_end=4331 - _globals['_STATUS']._serialized_start=4334 - _globals['_STATUS']._serialized_end=4646 - _globals['_PRECOMPILEDOBJECTTYPE']._serialized_start=4649 - _globals['_PRECOMPILEDOBJECTTYPE']._serialized_end=4823 - _globals['_COMPLEXITY']._serialized_start=4825 - _globals['_COMPLEXITY']._serialized_end=4935 - _globals['_EMULATORTYPE']._serialized_start=4937 - _globals['_EMULATORTYPE']._serialized_end=5007 + _globals['_SDK']._serialized_start=4144 + _globals['_SDK']._serialized_end=4226 + _globals['_STATUS']._serialized_start=4229 + _globals['_STATUS']._serialized_end=4541 + _globals['_PRECOMPILEDOBJECTTYPE']._serialized_start=4544 + _globals['_PRECOMPILEDOBJECTTYPE']._serialized_end=4718 + _globals['_COMPLEXITY']._serialized_start=4720 + _globals['_COMPLEXITY']._serialized_end=4830 + _globals['_EMULATORTYPE']._serialized_start=4832 + _globals['_EMULATORTYPE']._serialized_end=4902 _globals['_DATASET']._serialized_start=29 _globals['_DATASET']._serialized_end=231 _globals['_DATASET_OPTIONSENTRY']._serialized_start=173 @@ -125,7 +125,7 @@ _globals['_GETMETADATAREQUEST']._serialized_start=3890 _globals['_GETMETADATAREQUEST']._serialized_end=3910 _globals['_GETMETADATARESPONSE']._serialized_start=3913 - _globals['_GETMETADATARESPONSE']._serialized_end=4247 - _globals['_PLAYGROUNDSERVICE']._serialized_start=5010 - _globals['_PLAYGROUNDSERVICE']._serialized_end=6757 + _globals['_GETMETADATARESPONSE']._serialized_end=4142 + _globals['_PLAYGROUNDSERVICE']._serialized_start=4905 + _globals['_PLAYGROUNDSERVICE']._serialized_end=6652 # @@protoc_insertion_point(module_scope) From f73809662c11374aa4dce19ffca07e1e649d438f Mon Sep 17 00:00:00 2001 From: Alexey Inkin Date: Thu, 9 Mar 2023 15:24:24 +0400 Subject: [PATCH 22/26] Document the backend lookup (#22271) --- playground/README.md | 2 ++ playground/frontend/README.md | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/playground/README.md b/playground/README.md index f506070d6cd9..31cafcc5d102 100644 --- a/playground/README.md +++ b/playground/README.md @@ -106,6 +106,8 @@ If you do not need particular runners, comment out: 1. Dependencies on them in `/playground/build.gradle.kts` in `dockerComposeLocalUp` task. 2. Their Docker image configurations in `/playground/docker-compose.local.yaml`. +See also [Backend Lookup](frontend/README.md#backend-lookup) in the Frontend. + ## Removing old snippets Run the method to remove unused code snippets from the Cloud Datastore. Unused snippets are snippets that are out of date. If the last visited date property less or equals than the current date minus dayDiff parameter then a snippet is out of date diff --git a/playground/frontend/README.md b/playground/frontend/README.md index 95c43fb09cd1..e49491521ddb 100644 --- a/playground/frontend/README.md +++ b/playground/frontend/README.md @@ -47,6 +47,18 @@ flutter build web This produces `build/web` directory with static files. Deploy them to your web server. +### Backend Lookup + +The file [playground_components/lib/src/constants/backend_urls.dart](playground_components/lib/src/constants/backend_urls.dart) +is the location for backend-related constants. + +If the `backendUrlOverrides` map contains a URL for a server then only it will be attempted +for the given container. This is useful for running backend locally. + +Otherwise following patterns are tried when looking up the backend servers: +1. Prepending the frontend host with `router.`, `go.`, `java.`, `python.`, `scio.`. +2. Prepending the the default production frontend URL with the same. + ### Docker The app is deployed to production as a Docker container. From 222bcf30b57b318b3714d7de6eb2417f31d5d377 Mon Sep 17 00:00:00 2001 From: Alexey Inkin Date: Thu, 9 Mar 2023 16:04:59 +0400 Subject: [PATCH 23/26] Improve handling of empty values coming from GetMetadataResponse (#22271) --- .../get_metadata_response_grpc_extension.dart | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/playground/frontend/playground_components/lib/src/repositories/get_metadata_response_grpc_extension.dart b/playground/frontend/playground_components/lib/src/repositories/get_metadata_response_grpc_extension.dart index b60b2c23e640..c45e75fb62a4 100644 --- a/playground/frontend/playground_components/lib/src/repositories/get_metadata_response_grpc_extension.dart +++ b/playground/frontend/playground_components/lib/src/repositories/get_metadata_response_grpc_extension.dart @@ -22,15 +22,18 @@ import '../models/component_version.dart'; extension MetadataResponseGrpcExtension on GetMetadataResponse { ComponentVersion get componentVersion { return ComponentVersion( - // If a string is optional in protobuf, for some reason it becomes - // a non-nullable Dart string with '' as the default value. - // This can be deleted if this lands: - // https://github.com/google/protobuf.dart/issues/523 beamSdkVersion: beamSdkVersion == '' ? null : beamSdkVersion, - buildCommitHash: buildCommitHash, - dateTime: DateTime.fromMillisecondsSinceEpoch( - buildCommitTimestampSecondsSinceEpoch.toInt() * 1000, - ), + buildCommitHash: buildCommitHash == '' ? null : buildCommitHash, + dateTime: _getDateTime(), ); } + + DateTime? _getDateTime() { + final seconds = buildCommitTimestampSecondsSinceEpoch.toInt(); + if (seconds == 0) { + return null; + } + + return DateTime.fromMillisecondsSinceEpoch(seconds * 1000); + } } From 96badc32cc93f09ce311eeaabeda5d6086081633 Mon Sep 17 00:00:00 2001 From: Alexey Inkin Date: Fri, 10 Mar 2023 18:34:27 +0400 Subject: [PATCH 24/26] Fix integration tests (#22271) --- playground/frontend/integration_test/common/common.dart | 2 +- playground/frontend/lib/main.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/playground/frontend/integration_test/common/common.dart b/playground/frontend/integration_test/common/common.dart index 83575a99cb6c..7ec8318c5a61 100644 --- a/playground/frontend/integration_test/common/common.dart +++ b/playground/frontend/integration_test/common/common.dart @@ -20,7 +20,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:playground/main.dart' as app; Future init(WidgetTester wt) async { - app.main(); + await app.main(); await wt.pumpAndSettle(); } diff --git a/playground/frontend/lib/main.dart b/playground/frontend/lib/main.dart index dd0b894fb0d4..92ae9088eb95 100644 --- a/playground/frontend/lib/main.dart +++ b/playground/frontend/lib/main.dart @@ -31,7 +31,7 @@ import 'l10n/l10n.dart'; import 'locator.dart'; import 'playground_app.dart'; -void main() async { +Future main() async { FlutterIssue106664Workaround.instance.apply(); setPathUrlStrategy(); WidgetsFlutterBinding.ensureInitialized(); From 1cff6fdb5ae2d867aaaa72bc552f17301a2026be Mon Sep 17 00:00:00 2001 From: Timur Sultanov Date: Thu, 16 Mar 2023 12:23:07 +0400 Subject: [PATCH 25/26] Remove protoc requirement from Readme --- learning/tour-of-beam/backend/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/learning/tour-of-beam/backend/README.md b/learning/tour-of-beam/backend/README.md index a438025bce44..1ec10044ed59 100644 --- a/learning/tour-of-beam/backend/README.md +++ b/learning/tour-of-beam/backend/README.md @@ -41,7 +41,7 @@ To update mocks for tests, run: $ go generate -x ./... ``` -> Note: this requires [`protoc`](https://grpc.io/docs/protoc-installation/) version `>= 3.15` and [`moq`](https://github.com/matryer/moq) tools to be installed +> Note: [`moq`](https://github.com/matryer/moq) tool to be installed ### Datastore schema From 1336e8ec0b357ea6d990f646a21b7a83ace78318 Mon Sep 17 00:00:00 2001 From: Timur Sultanov Date: Thu, 16 Mar 2023 12:32:14 +0400 Subject: [PATCH 26/26] Remove trailing whitespace --- playground/frontend/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playground/frontend/README.md b/playground/frontend/README.md index 3c2ab13e11ad..7c35b7f88530 100644 --- a/playground/frontend/README.md +++ b/playground/frontend/README.md @@ -57,7 +57,7 @@ for the given container. This is useful for running backend locally. Otherwise following patterns are tried when looking up the backend servers: 1. Prepending the frontend host with `router.`, `go.`, `java.`, `python.`, `scio.`. -2. Prepending the the default production frontend URL with the same. +2. Prepending the the default production frontend URL with the same. ### Docker