From 39a5e74460687f426b09e4af04b057fdb4aa45e4 Mon Sep 17 00:00:00 2001 From: Michael Lee Date: Mon, 22 Dec 2025 13:23:42 -0500 Subject: [PATCH 1/7] StartPackageBuild API --- proto/viam/app/build/v1/build.proto | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/proto/viam/app/build/v1/build.proto b/proto/viam/app/build/v1/build.proto index b1a7a7b08..30f33a529 100644 --- a/proto/viam/app/build/v1/build.proto +++ b/proto/viam/app/build/v1/build.proto @@ -36,6 +36,9 @@ service BuildService { rpc UnlinkOrg(UnlinkOrgRequest) returns (UnlinkOrgResponse); // upload the local dev environment and build a module for hot reloading rpc StartReloadBuild(stream StartReloadBuildRequest) returns (StartReloadBuildResponse); + + // Start a build where the source code is hosted by Viam + rpc StartPackageBuild(stream StartPackageBuildRequest) returns (StartPackageBuildResponse); } message StartBuildRequest { @@ -85,6 +88,19 @@ message StartReloadBuildResponse { string build_id = 1; } +message StartPackageBuildRequest { + // module_id to build for + string module_id = 1; + // the version of source code to build for + string package_version = 2; + // version of the module to publish to the registry. must be valid semver2.0 string (ex: 1.2.3-rc0) + string module_version = 3; +} + +message StartPackageBuildRequest { + string build_id = 1; +} + // GetLogsResponse is a streaming endpoint that may have multiple messages that belong // to the same build_step if there are too many bytes to fit into a single gRPC // response. From 3565623d8e6318fc86c8d051f2219e9832c29286 Mon Sep 17 00:00:00 2001 From: Michael Lee Date: Mon, 22 Dec 2025 13:29:23 -0500 Subject: [PATCH 2/7] oops --- proto/viam/app/build/v1/build.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/viam/app/build/v1/build.proto b/proto/viam/app/build/v1/build.proto index 30f33a529..85a94903e 100644 --- a/proto/viam/app/build/v1/build.proto +++ b/proto/viam/app/build/v1/build.proto @@ -97,7 +97,7 @@ message StartPackageBuildRequest { string module_version = 3; } -message StartPackageBuildRequest { +message StartPackageBuildResponse { string build_id = 1; } From f88b9f455e771530227c8ecadfc7f7ad406c6705 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 20:04:33 +0000 Subject: [PATCH 3/7] Built new protos from 3565623 --- app/build/v1/build.pb.go | 722 +++++++++++++--------- app/build/v1/build.pb.gw.go | 77 +++ app/build/v1/build_grpc.pb.go | 72 +++ gen/js/app/build/v1/build_pb.d.ts | 48 ++ gen/js/app/build/v1/build_pb.js | 364 +++++++++++ gen/js/app/build/v1/build_pb_service.d.ts | 11 + gen/js/app/build/v1/build_pb_service.js | 50 ++ 7 files changed, 1049 insertions(+), 295 deletions(-) diff --git a/app/build/v1/build.pb.go b/app/build/v1/build.pb.go index 7e0bdb265..9dedc8944 100644 --- a/app/build/v1/build.pb.go +++ b/app/build/v1/build.pb.go @@ -462,6 +462,115 @@ func (x *StartReloadBuildResponse) GetBuildId() string { return "" } +type StartPackageBuildRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // module_id to build for + ModuleId string `protobuf:"bytes,1,opt,name=module_id,json=moduleId,proto3" json:"module_id,omitempty"` + // the version of source code to build for + PackageVersion string `protobuf:"bytes,2,opt,name=package_version,json=packageVersion,proto3" json:"package_version,omitempty"` + // version of the module to publish to the registry. must be valid semver2.0 string (ex: 1.2.3-rc0) + ModuleVersion string `protobuf:"bytes,3,opt,name=module_version,json=moduleVersion,proto3" json:"module_version,omitempty"` +} + +func (x *StartPackageBuildRequest) Reset() { + *x = StartPackageBuildRequest{} + mi := &file_app_build_v1_build_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StartPackageBuildRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartPackageBuildRequest) ProtoMessage() {} + +func (x *StartPackageBuildRequest) ProtoReflect() protoreflect.Message { + mi := &file_app_build_v1_build_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartPackageBuildRequest.ProtoReflect.Descriptor instead. +func (*StartPackageBuildRequest) Descriptor() ([]byte, []int) { + return file_app_build_v1_build_proto_rawDescGZIP(), []int{6} +} + +func (x *StartPackageBuildRequest) GetModuleId() string { + if x != nil { + return x.ModuleId + } + return "" +} + +func (x *StartPackageBuildRequest) GetPackageVersion() string { + if x != nil { + return x.PackageVersion + } + return "" +} + +func (x *StartPackageBuildRequest) GetModuleVersion() string { + if x != nil { + return x.ModuleVersion + } + return "" +} + +type StartPackageBuildResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` +} + +func (x *StartPackageBuildResponse) Reset() { + *x = StartPackageBuildResponse{} + mi := &file_app_build_v1_build_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StartPackageBuildResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartPackageBuildResponse) ProtoMessage() {} + +func (x *StartPackageBuildResponse) ProtoReflect() protoreflect.Message { + mi := &file_app_build_v1_build_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartPackageBuildResponse.ProtoReflect.Descriptor instead. +func (*StartPackageBuildResponse) Descriptor() ([]byte, []int) { + return file_app_build_v1_build_proto_rawDescGZIP(), []int{7} +} + +func (x *StartPackageBuildResponse) GetBuildId() string { + if x != nil { + return x.BuildId + } + return "" +} + // GetLogsResponse is a streaming endpoint that may have multiple messages that belong // to the same build_step if there are too many bytes to fit into a single gRPC // response. @@ -477,7 +586,7 @@ type GetLogsResponse struct { func (x *GetLogsResponse) Reset() { *x = GetLogsResponse{} - mi := &file_app_build_v1_build_proto_msgTypes[6] + mi := &file_app_build_v1_build_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -489,7 +598,7 @@ func (x *GetLogsResponse) String() string { func (*GetLogsResponse) ProtoMessage() {} func (x *GetLogsResponse) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[6] + mi := &file_app_build_v1_build_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -502,7 +611,7 @@ func (x *GetLogsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetLogsResponse.ProtoReflect.Descriptor instead. func (*GetLogsResponse) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{6} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{8} } func (x *GetLogsResponse) GetBuildStep() string { @@ -535,7 +644,7 @@ type JobInfo struct { func (x *JobInfo) Reset() { *x = JobInfo{} - mi := &file_app_build_v1_build_proto_msgTypes[7] + mi := &file_app_build_v1_build_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -547,7 +656,7 @@ func (x *JobInfo) String() string { func (*JobInfo) ProtoMessage() {} func (x *JobInfo) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[7] + mi := &file_app_build_v1_build_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -560,7 +669,7 @@ func (x *JobInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use JobInfo.ProtoReflect.Descriptor instead. func (*JobInfo) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{7} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{9} } func (x *JobInfo) GetBuildId() string { @@ -629,7 +738,7 @@ type ListJobsRequest struct { func (x *ListJobsRequest) Reset() { *x = ListJobsRequest{} - mi := &file_app_build_v1_build_proto_msgTypes[8] + mi := &file_app_build_v1_build_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -641,7 +750,7 @@ func (x *ListJobsRequest) String() string { func (*ListJobsRequest) ProtoMessage() {} func (x *ListJobsRequest) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[8] + mi := &file_app_build_v1_build_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -654,7 +763,7 @@ func (x *ListJobsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListJobsRequest.ProtoReflect.Descriptor instead. func (*ListJobsRequest) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{8} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{10} } func (x *ListJobsRequest) GetModuleId() string { @@ -689,7 +798,7 @@ type ListJobsResponse struct { func (x *ListJobsResponse) Reset() { *x = ListJobsResponse{} - mi := &file_app_build_v1_build_proto_msgTypes[9] + mi := &file_app_build_v1_build_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -701,7 +810,7 @@ func (x *ListJobsResponse) String() string { func (*ListJobsResponse) ProtoMessage() {} func (x *ListJobsResponse) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[9] + mi := &file_app_build_v1_build_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -714,7 +823,7 @@ func (x *ListJobsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListJobsResponse.ProtoReflect.Descriptor instead. func (*ListJobsResponse) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{9} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{11} } func (x *ListJobsResponse) GetJobs() []*JobInfo { @@ -746,7 +855,7 @@ type RepoLink struct { func (x *RepoLink) Reset() { *x = RepoLink{} - mi := &file_app_build_v1_build_proto_msgTypes[10] + mi := &file_app_build_v1_build_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -758,7 +867,7 @@ func (x *RepoLink) String() string { func (*RepoLink) ProtoMessage() {} func (x *RepoLink) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[10] + mi := &file_app_build_v1_build_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -771,7 +880,7 @@ func (x *RepoLink) ProtoReflect() protoreflect.Message { // Deprecated: Use RepoLink.ProtoReflect.Descriptor instead. func (*RepoLink) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{10} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{12} } func (x *RepoLink) GetOauthAppLinkId() string { @@ -826,7 +935,7 @@ type LinkRepoRequest struct { func (x *LinkRepoRequest) Reset() { *x = LinkRepoRequest{} - mi := &file_app_build_v1_build_proto_msgTypes[11] + mi := &file_app_build_v1_build_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -838,7 +947,7 @@ func (x *LinkRepoRequest) String() string { func (*LinkRepoRequest) ProtoMessage() {} func (x *LinkRepoRequest) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[11] + mi := &file_app_build_v1_build_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -851,7 +960,7 @@ func (x *LinkRepoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LinkRepoRequest.ProtoReflect.Descriptor instead. func (*LinkRepoRequest) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{11} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{13} } func (x *LinkRepoRequest) GetLink() *RepoLink { @@ -871,7 +980,7 @@ type LinkRepoResponse struct { func (x *LinkRepoResponse) Reset() { *x = LinkRepoResponse{} - mi := &file_app_build_v1_build_proto_msgTypes[12] + mi := &file_app_build_v1_build_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -883,7 +992,7 @@ func (x *LinkRepoResponse) String() string { func (*LinkRepoResponse) ProtoMessage() {} func (x *LinkRepoResponse) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[12] + mi := &file_app_build_v1_build_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -896,7 +1005,7 @@ func (x *LinkRepoResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LinkRepoResponse.ProtoReflect.Descriptor instead. func (*LinkRepoResponse) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{12} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{14} } func (x *LinkRepoResponse) GetRepoLinkId() string { @@ -916,7 +1025,7 @@ type UnlinkRepoRequest struct { func (x *UnlinkRepoRequest) Reset() { *x = UnlinkRepoRequest{} - mi := &file_app_build_v1_build_proto_msgTypes[13] + mi := &file_app_build_v1_build_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -928,7 +1037,7 @@ func (x *UnlinkRepoRequest) String() string { func (*UnlinkRepoRequest) ProtoMessage() {} func (x *UnlinkRepoRequest) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[13] + mi := &file_app_build_v1_build_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -941,7 +1050,7 @@ func (x *UnlinkRepoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnlinkRepoRequest.ProtoReflect.Descriptor instead. func (*UnlinkRepoRequest) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{13} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{15} } func (x *UnlinkRepoRequest) GetRepoLinkId() string { @@ -959,7 +1068,7 @@ type UnlinkRepoResponse struct { func (x *UnlinkRepoResponse) Reset() { *x = UnlinkRepoResponse{} - mi := &file_app_build_v1_build_proto_msgTypes[14] + mi := &file_app_build_v1_build_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -971,7 +1080,7 @@ func (x *UnlinkRepoResponse) String() string { func (*UnlinkRepoResponse) ProtoMessage() {} func (x *UnlinkRepoResponse) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[14] + mi := &file_app_build_v1_build_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -984,7 +1093,7 @@ func (x *UnlinkRepoResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UnlinkRepoResponse.ProtoReflect.Descriptor instead. func (*UnlinkRepoResponse) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{14} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{16} } type ListRepoLinksRequest struct { @@ -995,7 +1104,7 @@ type ListRepoLinksRequest struct { func (x *ListRepoLinksRequest) Reset() { *x = ListRepoLinksRequest{} - mi := &file_app_build_v1_build_proto_msgTypes[15] + mi := &file_app_build_v1_build_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1007,7 +1116,7 @@ func (x *ListRepoLinksRequest) String() string { func (*ListRepoLinksRequest) ProtoMessage() {} func (x *ListRepoLinksRequest) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[15] + mi := &file_app_build_v1_build_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1020,7 +1129,7 @@ func (x *ListRepoLinksRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRepoLinksRequest.ProtoReflect.Descriptor instead. func (*ListRepoLinksRequest) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{15} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{17} } type ListRepoLinksResponse struct { @@ -1033,7 +1142,7 @@ type ListRepoLinksResponse struct { func (x *ListRepoLinksResponse) Reset() { *x = ListRepoLinksResponse{} - mi := &file_app_build_v1_build_proto_msgTypes[16] + mi := &file_app_build_v1_build_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1045,7 +1154,7 @@ func (x *ListRepoLinksResponse) String() string { func (*ListRepoLinksResponse) ProtoMessage() {} func (x *ListRepoLinksResponse) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[16] + mi := &file_app_build_v1_build_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1058,7 +1167,7 @@ func (x *ListRepoLinksResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRepoLinksResponse.ProtoReflect.Descriptor instead. func (*ListRepoLinksResponse) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{16} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{18} } func (x *ListRepoLinksResponse) GetLinks() []*RepoLink { @@ -1076,7 +1185,7 @@ type ListAppLinksRequest struct { func (x *ListAppLinksRequest) Reset() { *x = ListAppLinksRequest{} - mi := &file_app_build_v1_build_proto_msgTypes[17] + mi := &file_app_build_v1_build_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1088,7 +1197,7 @@ func (x *ListAppLinksRequest) String() string { func (*ListAppLinksRequest) ProtoMessage() {} func (x *ListAppLinksRequest) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[17] + mi := &file_app_build_v1_build_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1101,7 +1210,7 @@ func (x *ListAppLinksRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAppLinksRequest.ProtoReflect.Descriptor instead. func (*ListAppLinksRequest) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{17} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{19} } // represents a link between viam users / orgs and an external oauth app @@ -1122,7 +1231,7 @@ type AppLink struct { func (x *AppLink) Reset() { *x = AppLink{} - mi := &file_app_build_v1_build_proto_msgTypes[18] + mi := &file_app_build_v1_build_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1134,7 +1243,7 @@ func (x *AppLink) String() string { func (*AppLink) ProtoMessage() {} func (x *AppLink) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[18] + mi := &file_app_build_v1_build_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1147,7 +1256,7 @@ func (x *AppLink) ProtoReflect() protoreflect.Message { // Deprecated: Use AppLink.ProtoReflect.Descriptor instead. func (*AppLink) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{18} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{20} } func (x *AppLink) GetOauthAppLinkId() string { @@ -1188,7 +1297,7 @@ type ListAppLinksResponse struct { func (x *ListAppLinksResponse) Reset() { *x = ListAppLinksResponse{} - mi := &file_app_build_v1_build_proto_msgTypes[19] + mi := &file_app_build_v1_build_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1200,7 +1309,7 @@ func (x *ListAppLinksResponse) String() string { func (*ListAppLinksResponse) ProtoMessage() {} func (x *ListAppLinksResponse) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[19] + mi := &file_app_build_v1_build_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1213,7 +1322,7 @@ func (x *ListAppLinksResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAppLinksResponse.ProtoReflect.Descriptor instead. func (*ListAppLinksResponse) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{19} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{21} } func (x *ListAppLinksResponse) GetLinks() []*AppLink { @@ -1234,7 +1343,7 @@ type RemoveAppLinkRequest struct { func (x *RemoveAppLinkRequest) Reset() { *x = RemoveAppLinkRequest{} - mi := &file_app_build_v1_build_proto_msgTypes[20] + mi := &file_app_build_v1_build_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1246,7 +1355,7 @@ func (x *RemoveAppLinkRequest) String() string { func (*RemoveAppLinkRequest) ProtoMessage() {} func (x *RemoveAppLinkRequest) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[20] + mi := &file_app_build_v1_build_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1259,7 +1368,7 @@ func (x *RemoveAppLinkRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveAppLinkRequest.ProtoReflect.Descriptor instead. func (*RemoveAppLinkRequest) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{20} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{22} } func (x *RemoveAppLinkRequest) GetOauthAppLinkId() string { @@ -1277,7 +1386,7 @@ type RemoveAppLinkResponse struct { func (x *RemoveAppLinkResponse) Reset() { *x = RemoveAppLinkResponse{} - mi := &file_app_build_v1_build_proto_msgTypes[21] + mi := &file_app_build_v1_build_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1289,7 +1398,7 @@ func (x *RemoveAppLinkResponse) String() string { func (*RemoveAppLinkResponse) ProtoMessage() {} func (x *RemoveAppLinkResponse) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[21] + mi := &file_app_build_v1_build_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1302,7 +1411,7 @@ func (x *RemoveAppLinkResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveAppLinkResponse.ProtoReflect.Descriptor instead. func (*RemoveAppLinkResponse) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{21} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{23} } type LinkOrgRequest struct { @@ -1317,7 +1426,7 @@ type LinkOrgRequest struct { func (x *LinkOrgRequest) Reset() { *x = LinkOrgRequest{} - mi := &file_app_build_v1_build_proto_msgTypes[22] + mi := &file_app_build_v1_build_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1329,7 +1438,7 @@ func (x *LinkOrgRequest) String() string { func (*LinkOrgRequest) ProtoMessage() {} func (x *LinkOrgRequest) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[22] + mi := &file_app_build_v1_build_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1342,7 +1451,7 @@ func (x *LinkOrgRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LinkOrgRequest.ProtoReflect.Descriptor instead. func (*LinkOrgRequest) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{22} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{24} } func (x *LinkOrgRequest) GetOauthAppLinkId() string { @@ -1367,7 +1476,7 @@ type LinkOrgResponse struct { func (x *LinkOrgResponse) Reset() { *x = LinkOrgResponse{} - mi := &file_app_build_v1_build_proto_msgTypes[23] + mi := &file_app_build_v1_build_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1379,7 +1488,7 @@ func (x *LinkOrgResponse) String() string { func (*LinkOrgResponse) ProtoMessage() {} func (x *LinkOrgResponse) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[23] + mi := &file_app_build_v1_build_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1392,7 +1501,7 @@ func (x *LinkOrgResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LinkOrgResponse.ProtoReflect.Descriptor instead. func (*LinkOrgResponse) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{23} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{25} } type UnlinkOrgRequest struct { @@ -1407,7 +1516,7 @@ type UnlinkOrgRequest struct { func (x *UnlinkOrgRequest) Reset() { *x = UnlinkOrgRequest{} - mi := &file_app_build_v1_build_proto_msgTypes[24] + mi := &file_app_build_v1_build_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1419,7 +1528,7 @@ func (x *UnlinkOrgRequest) String() string { func (*UnlinkOrgRequest) ProtoMessage() {} func (x *UnlinkOrgRequest) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[24] + mi := &file_app_build_v1_build_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1432,7 +1541,7 @@ func (x *UnlinkOrgRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnlinkOrgRequest.ProtoReflect.Descriptor instead. func (*UnlinkOrgRequest) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{24} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{26} } func (x *UnlinkOrgRequest) GetOauthAppLinkId() string { @@ -1457,7 +1566,7 @@ type UnlinkOrgResponse struct { func (x *UnlinkOrgResponse) Reset() { *x = UnlinkOrgResponse{} - mi := &file_app_build_v1_build_proto_msgTypes[25] + mi := &file_app_build_v1_build_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1469,7 +1578,7 @@ func (x *UnlinkOrgResponse) String() string { func (*UnlinkOrgResponse) ProtoMessage() {} func (x *UnlinkOrgResponse) ProtoReflect() protoreflect.Message { - mi := &file_app_build_v1_build_proto_msgTypes[25] + mi := &file_app_build_v1_build_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1482,7 +1591,7 @@ func (x *UnlinkOrgResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UnlinkOrgResponse.ProtoReflect.Descriptor instead. func (*UnlinkOrgResponse) Descriptor() ([]byte, []int) { - return file_app_build_v1_build_proto_rawDescGZIP(), []int{25} + return file_app_build_v1_build_proto_rawDescGZIP(), []int{27} } var File_app_build_v1_build_proto protoreflect.FileDescriptor @@ -1540,187 +1649,206 @@ var file_app_build_v1_build_proto_rawDesc = []byte{ 0x6c, 0x64, 0x22, 0x35, 0x0a, 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x44, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x65, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0xc7, 0x02, 0x0a, 0x07, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x76, + 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x87, 0x01, 0x0a, 0x18, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x22, 0x36, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, + 0x61, 0x67, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x44, 0x0a, 0x0f, 0x47, + 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x65, 0x70, 0x12, 0x12, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x22, 0xc7, 0x02, 0x0a, 0x07, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x0a, + 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x34, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, + 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x3a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, + 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x01, 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x65, 0x70, 0x88, 0x01, 0x01, 0x42, + 0x0b, 0x0a, 0x09, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x0d, 0x0a, 0x0b, + 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x22, 0x9c, 0x01, 0x0a, 0x0f, + 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1b, 0x0a, 0x09, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x0f, + 0x6d, 0x61, 0x78, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x4a, 0x6f, 0x62, 0x73, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, 0x08, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x6d, 0x61, + 0x78, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x0b, 0x0a, + 0x09, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x22, 0x42, 0x0a, 0x10, 0x4c, 0x69, + 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, + 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, - 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x07, 0x65, - 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, - 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x65, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, - 0x09, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x22, 0x9c, 0x01, 0x0a, 0x0f, 0x4c, 0x69, - 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, - 0x09, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x0f, 0x6d, 0x61, - 0x78, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x4a, 0x6f, 0x62, 0x73, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x6d, 0x61, 0x78, 0x5f, - 0x6a, 0x6f, 0x62, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x0b, 0x0a, 0x09, 0x5f, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x22, 0x42, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, - 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x04, - 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x69, 0x61, - 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4a, - 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0xcf, 0x01, 0x0a, - 0x08, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x29, 0x0a, 0x11, 0x6f, 0x61, 0x75, - 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x41, 0x70, 0x70, 0x4c, 0x69, - 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x09, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1f, - 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, - 0x65, 0x70, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x61, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x61, 0x6d, 0x55, 0x73, 0x65, 0x72, - 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x42, - 0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x04, 0x6c, 0x69, - 0x6e, 0x6b, 0x22, 0x34, 0x0a, 0x10, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6c, - 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, - 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x22, 0x35, 0x0a, 0x11, 0x55, 0x6e, 0x6c, 0x69, - 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, - 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x22, - 0x14, 0x0a, 0x12, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, - 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4a, 0x0a, - 0x15, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, - 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, - 0x6e, 0x6b, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x97, 0x01, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x29, 0x0a, 0x11, - 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x41, 0x70, - 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x61, 0x6d, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x61, 0x6d, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0c, 0x6f, 0x72, 0x67, - 0x5f, 0x69, 0x64, 0x5f, 0x6f, 0x72, 0x5f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x09, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x4f, 0x72, 0x4e, 0x73, 0x22, 0x48, 0x0a, 0x14, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x05, 0x6c, - 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x41, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, - 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x11, - 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x41, 0x70, - 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x52, 0x0a, 0x0e, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x29, 0x0a, 0x11, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, - 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, - 0x61, 0x75, 0x74, 0x68, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x15, 0x0a, - 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, - 0x72, 0x67, 0x49, 0x64, 0x22, 0x11, 0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x10, 0x55, 0x6e, 0x6c, 0x69, 0x6e, - 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x11, 0x6f, + 0x2e, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0xcf, + 0x01, 0x0a, 0x08, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x29, 0x0a, 0x11, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x22, 0x13, 0x0a, - 0x11, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2a, 0x6f, 0x0a, 0x09, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x1a, 0x0a, 0x16, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x4a, - 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, - 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4a, 0x4f, 0x42, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x13, - 0x0a, 0x0f, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x4e, - 0x45, 0x10, 0x03, 0x32, 0x84, 0x08, 0x0a, 0x0c, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x59, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x12, 0x24, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, - 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x52, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x21, 0x2e, 0x76, 0x69, 0x61, - 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, - 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x30, 0x01, 0x12, 0x53, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x12, - 0x22, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x08, 0x4c, 0x69, 0x6e, 0x6b, - 0x52, 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, - 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, - 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, - 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, - 0x0a, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x24, 0x2e, 0x76, 0x69, - 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x27, 0x2e, 0x76, 0x69, 0x61, 0x6d, - 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x4c, - 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x0c, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x26, 0x2e, 0x76, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x21, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x88, 0x01, 0x01, + 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x61, 0x6d, 0x5f, 0x75, 0x73, + 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x61, 0x6d, 0x55, 0x73, + 0x65, 0x72, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x22, 0x42, 0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x04, + 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x34, 0x0a, 0x10, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6f, + 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x72, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x22, 0x35, 0x0a, 0x11, 0x55, 0x6e, + 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x20, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x49, + 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x4a, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x6b, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, + 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x29, + 0x0a, 0x11, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, + 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x61, + 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, + 0x61, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0c, 0x6f, + 0x72, 0x67, 0x5f, 0x69, 0x64, 0x5f, 0x6f, 0x72, 0x5f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x09, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x4f, 0x72, 0x4e, 0x73, 0x22, 0x48, 0x0a, 0x14, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, + 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x41, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, + 0x0a, 0x11, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, + 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x52, 0x0a, 0x0e, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x11, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, + 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, + 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x22, 0x11, 0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x10, 0x55, 0x6e, 0x6c, + 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, + 0x11, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x41, + 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x22, + 0x13, 0x0a, 0x11, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x6f, 0x0a, 0x09, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x1a, 0x0a, 0x16, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, + 0x16, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x5f, 0x50, + 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4a, 0x4f, 0x42, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, + 0x12, 0x13, 0x0a, 0x0f, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, + 0x4f, 0x4e, 0x45, 0x10, 0x03, 0x32, 0xf6, 0x08, 0x0a, 0x0c, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x59, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, + 0x75, 0x69, 0x6c, 0x64, 0x12, 0x24, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x69, 0x61, + 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x52, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x21, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, - 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, - 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x27, - 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, - 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x50, 0x0a, 0x07, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x12, 0x21, 0x2e, 0x76, - 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x09, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, - 0x12, 0x23, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, - 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, - 0x4f, 0x72, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x10, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, - 0x2a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x76, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x53, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, + 0x73, 0x12, 0x22, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, + 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, + 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x08, 0x4c, 0x69, + 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, + 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, + 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x69, 0x61, + 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x59, 0x0a, 0x0a, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x24, 0x2e, + 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, + 0x70, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0d, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x27, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x42, 0x1e, 0x5a, 0x1c, 0x67, 0x6f, - 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, - 0x70, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, + 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, + 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x26, + 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, + 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x62, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, + 0x12, 0x27, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, + 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x69, 0x61, 0x6d, + 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x07, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x12, 0x21, + 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x09, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4f, + 0x72, 0x67, 0x12, 0x23, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, + 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, + 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, + 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x12, 0x2a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, + 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, + 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x75, 0x69, + 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x70, 0x0a, 0x11, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x12, 0x2b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, + 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x42, + 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x42, 0x1e, + 0x5a, 0x1c, 0x67, 0x6f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1736,72 +1864,76 @@ func file_app_build_v1_build_proto_rawDescGZIP() []byte { } var file_app_build_v1_build_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_app_build_v1_build_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_app_build_v1_build_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_app_build_v1_build_proto_goTypes = []any{ - (JobStatus)(0), // 0: viam.app.build.v1.JobStatus - (*StartBuildRequest)(nil), // 1: viam.app.build.v1.StartBuildRequest - (*StartBuildResponse)(nil), // 2: viam.app.build.v1.StartBuildResponse - (*GetLogsRequest)(nil), // 3: viam.app.build.v1.GetLogsRequest - (*ReloadBuildInfo)(nil), // 4: viam.app.build.v1.ReloadBuildInfo - (*StartReloadBuildRequest)(nil), // 5: viam.app.build.v1.StartReloadBuildRequest - (*StartReloadBuildResponse)(nil), // 6: viam.app.build.v1.StartReloadBuildResponse - (*GetLogsResponse)(nil), // 7: viam.app.build.v1.GetLogsResponse - (*JobInfo)(nil), // 8: viam.app.build.v1.JobInfo - (*ListJobsRequest)(nil), // 9: viam.app.build.v1.ListJobsRequest - (*ListJobsResponse)(nil), // 10: viam.app.build.v1.ListJobsResponse - (*RepoLink)(nil), // 11: viam.app.build.v1.RepoLink - (*LinkRepoRequest)(nil), // 12: viam.app.build.v1.LinkRepoRequest - (*LinkRepoResponse)(nil), // 13: viam.app.build.v1.LinkRepoResponse - (*UnlinkRepoRequest)(nil), // 14: viam.app.build.v1.UnlinkRepoRequest - (*UnlinkRepoResponse)(nil), // 15: viam.app.build.v1.UnlinkRepoResponse - (*ListRepoLinksRequest)(nil), // 16: viam.app.build.v1.ListRepoLinksRequest - (*ListRepoLinksResponse)(nil), // 17: viam.app.build.v1.ListRepoLinksResponse - (*ListAppLinksRequest)(nil), // 18: viam.app.build.v1.ListAppLinksRequest - (*AppLink)(nil), // 19: viam.app.build.v1.AppLink - (*ListAppLinksResponse)(nil), // 20: viam.app.build.v1.ListAppLinksResponse - (*RemoveAppLinkRequest)(nil), // 21: viam.app.build.v1.RemoveAppLinkRequest - (*RemoveAppLinkResponse)(nil), // 22: viam.app.build.v1.RemoveAppLinkResponse - (*LinkOrgRequest)(nil), // 23: viam.app.build.v1.LinkOrgRequest - (*LinkOrgResponse)(nil), // 24: viam.app.build.v1.LinkOrgResponse - (*UnlinkOrgRequest)(nil), // 25: viam.app.build.v1.UnlinkOrgRequest - (*UnlinkOrgResponse)(nil), // 26: viam.app.build.v1.UnlinkOrgResponse - (*v1.CreatePackageRequest)(nil), // 27: viam.app.packages.v1.CreatePackageRequest - (*timestamppb.Timestamp)(nil), // 28: google.protobuf.Timestamp + (JobStatus)(0), // 0: viam.app.build.v1.JobStatus + (*StartBuildRequest)(nil), // 1: viam.app.build.v1.StartBuildRequest + (*StartBuildResponse)(nil), // 2: viam.app.build.v1.StartBuildResponse + (*GetLogsRequest)(nil), // 3: viam.app.build.v1.GetLogsRequest + (*ReloadBuildInfo)(nil), // 4: viam.app.build.v1.ReloadBuildInfo + (*StartReloadBuildRequest)(nil), // 5: viam.app.build.v1.StartReloadBuildRequest + (*StartReloadBuildResponse)(nil), // 6: viam.app.build.v1.StartReloadBuildResponse + (*StartPackageBuildRequest)(nil), // 7: viam.app.build.v1.StartPackageBuildRequest + (*StartPackageBuildResponse)(nil), // 8: viam.app.build.v1.StartPackageBuildResponse + (*GetLogsResponse)(nil), // 9: viam.app.build.v1.GetLogsResponse + (*JobInfo)(nil), // 10: viam.app.build.v1.JobInfo + (*ListJobsRequest)(nil), // 11: viam.app.build.v1.ListJobsRequest + (*ListJobsResponse)(nil), // 12: viam.app.build.v1.ListJobsResponse + (*RepoLink)(nil), // 13: viam.app.build.v1.RepoLink + (*LinkRepoRequest)(nil), // 14: viam.app.build.v1.LinkRepoRequest + (*LinkRepoResponse)(nil), // 15: viam.app.build.v1.LinkRepoResponse + (*UnlinkRepoRequest)(nil), // 16: viam.app.build.v1.UnlinkRepoRequest + (*UnlinkRepoResponse)(nil), // 17: viam.app.build.v1.UnlinkRepoResponse + (*ListRepoLinksRequest)(nil), // 18: viam.app.build.v1.ListRepoLinksRequest + (*ListRepoLinksResponse)(nil), // 19: viam.app.build.v1.ListRepoLinksResponse + (*ListAppLinksRequest)(nil), // 20: viam.app.build.v1.ListAppLinksRequest + (*AppLink)(nil), // 21: viam.app.build.v1.AppLink + (*ListAppLinksResponse)(nil), // 22: viam.app.build.v1.ListAppLinksResponse + (*RemoveAppLinkRequest)(nil), // 23: viam.app.build.v1.RemoveAppLinkRequest + (*RemoveAppLinkResponse)(nil), // 24: viam.app.build.v1.RemoveAppLinkResponse + (*LinkOrgRequest)(nil), // 25: viam.app.build.v1.LinkOrgRequest + (*LinkOrgResponse)(nil), // 26: viam.app.build.v1.LinkOrgResponse + (*UnlinkOrgRequest)(nil), // 27: viam.app.build.v1.UnlinkOrgRequest + (*UnlinkOrgResponse)(nil), // 28: viam.app.build.v1.UnlinkOrgResponse + (*v1.CreatePackageRequest)(nil), // 29: viam.app.packages.v1.CreatePackageRequest + (*timestamppb.Timestamp)(nil), // 30: google.protobuf.Timestamp } var file_app_build_v1_build_proto_depIdxs = []int32{ - 27, // 0: viam.app.build.v1.StartReloadBuildRequest.package:type_name -> viam.app.packages.v1.CreatePackageRequest + 29, // 0: viam.app.build.v1.StartReloadBuildRequest.package:type_name -> viam.app.packages.v1.CreatePackageRequest 4, // 1: viam.app.build.v1.StartReloadBuildRequest.build_info:type_name -> viam.app.build.v1.ReloadBuildInfo 0, // 2: viam.app.build.v1.JobInfo.status:type_name -> viam.app.build.v1.JobStatus - 28, // 3: viam.app.build.v1.JobInfo.start_time:type_name -> google.protobuf.Timestamp - 28, // 4: viam.app.build.v1.JobInfo.end_time:type_name -> google.protobuf.Timestamp - 8, // 5: viam.app.build.v1.ListJobsResponse.jobs:type_name -> viam.app.build.v1.JobInfo - 11, // 6: viam.app.build.v1.LinkRepoRequest.link:type_name -> viam.app.build.v1.RepoLink - 11, // 7: viam.app.build.v1.ListRepoLinksResponse.links:type_name -> viam.app.build.v1.RepoLink - 19, // 8: viam.app.build.v1.ListAppLinksResponse.links:type_name -> viam.app.build.v1.AppLink + 30, // 3: viam.app.build.v1.JobInfo.start_time:type_name -> google.protobuf.Timestamp + 30, // 4: viam.app.build.v1.JobInfo.end_time:type_name -> google.protobuf.Timestamp + 10, // 5: viam.app.build.v1.ListJobsResponse.jobs:type_name -> viam.app.build.v1.JobInfo + 13, // 6: viam.app.build.v1.LinkRepoRequest.link:type_name -> viam.app.build.v1.RepoLink + 13, // 7: viam.app.build.v1.ListRepoLinksResponse.links:type_name -> viam.app.build.v1.RepoLink + 21, // 8: viam.app.build.v1.ListAppLinksResponse.links:type_name -> viam.app.build.v1.AppLink 1, // 9: viam.app.build.v1.BuildService.StartBuild:input_type -> viam.app.build.v1.StartBuildRequest 3, // 10: viam.app.build.v1.BuildService.GetLogs:input_type -> viam.app.build.v1.GetLogsRequest - 9, // 11: viam.app.build.v1.BuildService.ListJobs:input_type -> viam.app.build.v1.ListJobsRequest - 12, // 12: viam.app.build.v1.BuildService.LinkRepo:input_type -> viam.app.build.v1.LinkRepoRequest - 14, // 13: viam.app.build.v1.BuildService.UnlinkRepo:input_type -> viam.app.build.v1.UnlinkRepoRequest - 16, // 14: viam.app.build.v1.BuildService.ListRepoLinks:input_type -> viam.app.build.v1.ListRepoLinksRequest - 18, // 15: viam.app.build.v1.BuildService.ListAppLinks:input_type -> viam.app.build.v1.ListAppLinksRequest - 21, // 16: viam.app.build.v1.BuildService.RemoveAppLink:input_type -> viam.app.build.v1.RemoveAppLinkRequest - 23, // 17: viam.app.build.v1.BuildService.LinkOrg:input_type -> viam.app.build.v1.LinkOrgRequest - 25, // 18: viam.app.build.v1.BuildService.UnlinkOrg:input_type -> viam.app.build.v1.UnlinkOrgRequest + 11, // 11: viam.app.build.v1.BuildService.ListJobs:input_type -> viam.app.build.v1.ListJobsRequest + 14, // 12: viam.app.build.v1.BuildService.LinkRepo:input_type -> viam.app.build.v1.LinkRepoRequest + 16, // 13: viam.app.build.v1.BuildService.UnlinkRepo:input_type -> viam.app.build.v1.UnlinkRepoRequest + 18, // 14: viam.app.build.v1.BuildService.ListRepoLinks:input_type -> viam.app.build.v1.ListRepoLinksRequest + 20, // 15: viam.app.build.v1.BuildService.ListAppLinks:input_type -> viam.app.build.v1.ListAppLinksRequest + 23, // 16: viam.app.build.v1.BuildService.RemoveAppLink:input_type -> viam.app.build.v1.RemoveAppLinkRequest + 25, // 17: viam.app.build.v1.BuildService.LinkOrg:input_type -> viam.app.build.v1.LinkOrgRequest + 27, // 18: viam.app.build.v1.BuildService.UnlinkOrg:input_type -> viam.app.build.v1.UnlinkOrgRequest 5, // 19: viam.app.build.v1.BuildService.StartReloadBuild:input_type -> viam.app.build.v1.StartReloadBuildRequest - 2, // 20: viam.app.build.v1.BuildService.StartBuild:output_type -> viam.app.build.v1.StartBuildResponse - 7, // 21: viam.app.build.v1.BuildService.GetLogs:output_type -> viam.app.build.v1.GetLogsResponse - 10, // 22: viam.app.build.v1.BuildService.ListJobs:output_type -> viam.app.build.v1.ListJobsResponse - 13, // 23: viam.app.build.v1.BuildService.LinkRepo:output_type -> viam.app.build.v1.LinkRepoResponse - 15, // 24: viam.app.build.v1.BuildService.UnlinkRepo:output_type -> viam.app.build.v1.UnlinkRepoResponse - 17, // 25: viam.app.build.v1.BuildService.ListRepoLinks:output_type -> viam.app.build.v1.ListRepoLinksResponse - 20, // 26: viam.app.build.v1.BuildService.ListAppLinks:output_type -> viam.app.build.v1.ListAppLinksResponse - 22, // 27: viam.app.build.v1.BuildService.RemoveAppLink:output_type -> viam.app.build.v1.RemoveAppLinkResponse - 24, // 28: viam.app.build.v1.BuildService.LinkOrg:output_type -> viam.app.build.v1.LinkOrgResponse - 26, // 29: viam.app.build.v1.BuildService.UnlinkOrg:output_type -> viam.app.build.v1.UnlinkOrgResponse - 6, // 30: viam.app.build.v1.BuildService.StartReloadBuild:output_type -> viam.app.build.v1.StartReloadBuildResponse - 20, // [20:31] is the sub-list for method output_type - 9, // [9:20] is the sub-list for method input_type + 7, // 20: viam.app.build.v1.BuildService.StartPackageBuild:input_type -> viam.app.build.v1.StartPackageBuildRequest + 2, // 21: viam.app.build.v1.BuildService.StartBuild:output_type -> viam.app.build.v1.StartBuildResponse + 9, // 22: viam.app.build.v1.BuildService.GetLogs:output_type -> viam.app.build.v1.GetLogsResponse + 12, // 23: viam.app.build.v1.BuildService.ListJobs:output_type -> viam.app.build.v1.ListJobsResponse + 15, // 24: viam.app.build.v1.BuildService.LinkRepo:output_type -> viam.app.build.v1.LinkRepoResponse + 17, // 25: viam.app.build.v1.BuildService.UnlinkRepo:output_type -> viam.app.build.v1.UnlinkRepoResponse + 19, // 26: viam.app.build.v1.BuildService.ListRepoLinks:output_type -> viam.app.build.v1.ListRepoLinksResponse + 22, // 27: viam.app.build.v1.BuildService.ListAppLinks:output_type -> viam.app.build.v1.ListAppLinksResponse + 24, // 28: viam.app.build.v1.BuildService.RemoveAppLink:output_type -> viam.app.build.v1.RemoveAppLinkResponse + 26, // 29: viam.app.build.v1.BuildService.LinkOrg:output_type -> viam.app.build.v1.LinkOrgResponse + 28, // 30: viam.app.build.v1.BuildService.UnlinkOrg:output_type -> viam.app.build.v1.UnlinkOrgResponse + 6, // 31: viam.app.build.v1.BuildService.StartReloadBuild:output_type -> viam.app.build.v1.StartReloadBuildResponse + 8, // 32: viam.app.build.v1.BuildService.StartPackageBuild:output_type -> viam.app.build.v1.StartPackageBuildResponse + 21, // [21:33] is the sub-list for method output_type + 9, // [9:21] is the sub-list for method input_type 9, // [9:9] is the sub-list for extension type_name 9, // [9:9] is the sub-list for extension extendee 0, // [0:9] is the sub-list for field type_name @@ -1818,16 +1950,16 @@ func file_app_build_v1_build_proto_init() { (*StartReloadBuildRequest_Package)(nil), (*StartReloadBuildRequest_BuildInfo)(nil), } - file_app_build_v1_build_proto_msgTypes[7].OneofWrappers = []any{} - file_app_build_v1_build_proto_msgTypes[8].OneofWrappers = []any{} + file_app_build_v1_build_proto_msgTypes[9].OneofWrappers = []any{} file_app_build_v1_build_proto_msgTypes[10].OneofWrappers = []any{} + file_app_build_v1_build_proto_msgTypes[12].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_app_build_v1_build_proto_rawDesc, NumEnums: 1, - NumMessages: 26, + NumMessages: 28, NumExtensions: 0, NumServices: 1, }, diff --git a/app/build/v1/build.pb.gw.go b/app/build/v1/build.pb.gw.go index c86ba6ed6..b51162956 100644 --- a/app/build/v1/build.pb.gw.go +++ b/app/build/v1/build.pb.gw.go @@ -330,6 +330,50 @@ func request_BuildService_StartReloadBuild_0(ctx context.Context, marshaler runt } +func request_BuildService_StartPackageBuild_0(ctx context.Context, marshaler runtime.Marshaler, client BuildServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var metadata runtime.ServerMetadata + stream, err := client.StartPackageBuild(ctx) + if err != nil { + grpclog.Errorf("Failed to start streaming: %v", err) + return nil, metadata, err + } + dec := marshaler.NewDecoder(req.Body) + for { + var protoReq StartPackageBuildRequest + err = dec.Decode(&protoReq) + if err == io.EOF { + break + } + if err != nil { + grpclog.Errorf("Failed to decode request: %v", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err = stream.Send(&protoReq); err != nil { + if err == io.EOF { + break + } + grpclog.Errorf("Failed to send request: %v", err) + return nil, metadata, err + } + } + + if err := stream.CloseSend(); err != nil { + grpclog.Errorf("Failed to terminate client stream: %v", err) + return nil, metadata, err + } + header, err := stream.Header() + if err != nil { + grpclog.Errorf("Failed to get header from client: %v", err) + return nil, metadata, err + } + metadata.HeaderMD = header + + msg, err := stream.CloseAndRecv() + metadata.TrailerMD = stream.Trailer() + return msg, metadata, err + +} + // RegisterBuildServiceHandlerServer registers the http handlers for service BuildService to "mux". // UnaryRPC :call BuildServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -575,6 +619,13 @@ func RegisterBuildServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu return }) + mux.Handle("POST", pattern_BuildService_StartPackageBuild_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + }) + return nil } @@ -858,6 +909,28 @@ func RegisterBuildServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("POST", pattern_BuildService_StartPackageBuild_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/viam.app.build.v1.BuildService/StartPackageBuild", runtime.WithHTTPPathPattern("/viam.app.build.v1.BuildService/StartPackageBuild")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_BuildService_StartPackageBuild_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BuildService_StartPackageBuild_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -883,6 +956,8 @@ var ( pattern_BuildService_UnlinkOrg_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"viam.app.build.v1.BuildService", "UnlinkOrg"}, "")) pattern_BuildService_StartReloadBuild_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"viam.app.build.v1.BuildService", "StartReloadBuild"}, "")) + + pattern_BuildService_StartPackageBuild_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"viam.app.build.v1.BuildService", "StartPackageBuild"}, "")) ) var ( @@ -907,4 +982,6 @@ var ( forward_BuildService_UnlinkOrg_0 = runtime.ForwardResponseMessage forward_BuildService_StartReloadBuild_0 = runtime.ForwardResponseMessage + + forward_BuildService_StartPackageBuild_0 = runtime.ForwardResponseMessage ) diff --git a/app/build/v1/build_grpc.pb.go b/app/build/v1/build_grpc.pb.go index 116430a72..da4db0dde 100644 --- a/app/build/v1/build_grpc.pb.go +++ b/app/build/v1/build_grpc.pb.go @@ -44,6 +44,8 @@ type BuildServiceClient interface { UnlinkOrg(ctx context.Context, in *UnlinkOrgRequest, opts ...grpc.CallOption) (*UnlinkOrgResponse, error) // upload the local dev environment and build a module for hot reloading StartReloadBuild(ctx context.Context, opts ...grpc.CallOption) (BuildService_StartReloadBuildClient, error) + // Start a build where the source code is hosted by Viam + StartPackageBuild(ctx context.Context, opts ...grpc.CallOption) (BuildService_StartPackageBuildClient, error) } type buildServiceClient struct { @@ -201,6 +203,40 @@ func (x *buildServiceStartReloadBuildClient) CloseAndRecv() (*StartReloadBuildRe return m, nil } +func (c *buildServiceClient) StartPackageBuild(ctx context.Context, opts ...grpc.CallOption) (BuildService_StartPackageBuildClient, error) { + stream, err := c.cc.NewStream(ctx, &BuildService_ServiceDesc.Streams[2], "/viam.app.build.v1.BuildService/StartPackageBuild", opts...) + if err != nil { + return nil, err + } + x := &buildServiceStartPackageBuildClient{stream} + return x, nil +} + +type BuildService_StartPackageBuildClient interface { + Send(*StartPackageBuildRequest) error + CloseAndRecv() (*StartPackageBuildResponse, error) + grpc.ClientStream +} + +type buildServiceStartPackageBuildClient struct { + grpc.ClientStream +} + +func (x *buildServiceStartPackageBuildClient) Send(m *StartPackageBuildRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *buildServiceStartPackageBuildClient) CloseAndRecv() (*StartPackageBuildResponse, error) { + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + m := new(StartPackageBuildResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // BuildServiceServer is the server API for BuildService service. // All implementations must embed UnimplementedBuildServiceServer // for forward compatibility @@ -227,6 +263,8 @@ type BuildServiceServer interface { UnlinkOrg(context.Context, *UnlinkOrgRequest) (*UnlinkOrgResponse, error) // upload the local dev environment and build a module for hot reloading StartReloadBuild(BuildService_StartReloadBuildServer) error + // Start a build where the source code is hosted by Viam + StartPackageBuild(BuildService_StartPackageBuildServer) error mustEmbedUnimplementedBuildServiceServer() } @@ -267,6 +305,9 @@ func (UnimplementedBuildServiceServer) UnlinkOrg(context.Context, *UnlinkOrgRequ func (UnimplementedBuildServiceServer) StartReloadBuild(BuildService_StartReloadBuildServer) error { return status.Errorf(codes.Unimplemented, "method StartReloadBuild not implemented") } +func (UnimplementedBuildServiceServer) StartPackageBuild(BuildService_StartPackageBuildServer) error { + return status.Errorf(codes.Unimplemented, "method StartPackageBuild not implemented") +} func (UnimplementedBuildServiceServer) mustEmbedUnimplementedBuildServiceServer() {} // UnsafeBuildServiceServer may be embedded to opt out of forward compatibility for this service. @@ -489,6 +530,32 @@ func (x *buildServiceStartReloadBuildServer) Recv() (*StartReloadBuildRequest, e return m, nil } +func _BuildService_StartPackageBuild_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(BuildServiceServer).StartPackageBuild(&buildServiceStartPackageBuildServer{stream}) +} + +type BuildService_StartPackageBuildServer interface { + SendAndClose(*StartPackageBuildResponse) error + Recv() (*StartPackageBuildRequest, error) + grpc.ServerStream +} + +type buildServiceStartPackageBuildServer struct { + grpc.ServerStream +} + +func (x *buildServiceStartPackageBuildServer) SendAndClose(m *StartPackageBuildResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *buildServiceStartPackageBuildServer) Recv() (*StartPackageBuildRequest, error) { + m := new(StartPackageBuildRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // BuildService_ServiceDesc is the grpc.ServiceDesc for BuildService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -544,6 +611,11 @@ var BuildService_ServiceDesc = grpc.ServiceDesc{ Handler: _BuildService_StartReloadBuild_Handler, ClientStreams: true, }, + { + StreamName: "StartPackageBuild", + Handler: _BuildService_StartPackageBuild_Handler, + ClientStreams: true, + }, }, Metadata: "app/build/v1/build.proto", } diff --git a/gen/js/app/build/v1/build_pb.d.ts b/gen/js/app/build/v1/build_pb.d.ts index 7c82968a0..0933d2fab 100644 --- a/gen/js/app/build/v1/build_pb.d.ts +++ b/gen/js/app/build/v1/build_pb.d.ts @@ -186,6 +186,54 @@ export namespace StartReloadBuildResponse { } } +export class StartPackageBuildRequest extends jspb.Message { + getModuleId(): string; + setModuleId(value: string): void; + + getPackageVersion(): string; + setPackageVersion(value: string): void; + + getModuleVersion(): string; + setModuleVersion(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): StartPackageBuildRequest.AsObject; + static toObject(includeInstance: boolean, msg: StartPackageBuildRequest): StartPackageBuildRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: StartPackageBuildRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): StartPackageBuildRequest; + static deserializeBinaryFromReader(message: StartPackageBuildRequest, reader: jspb.BinaryReader): StartPackageBuildRequest; +} + +export namespace StartPackageBuildRequest { + export type AsObject = { + moduleId: string, + packageVersion: string, + moduleVersion: string, + } +} + +export class StartPackageBuildResponse extends jspb.Message { + getBuildId(): string; + setBuildId(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): StartPackageBuildResponse.AsObject; + static toObject(includeInstance: boolean, msg: StartPackageBuildResponse): StartPackageBuildResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: StartPackageBuildResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): StartPackageBuildResponse; + static deserializeBinaryFromReader(message: StartPackageBuildResponse, reader: jspb.BinaryReader): StartPackageBuildResponse; +} + +export namespace StartPackageBuildResponse { + export type AsObject = { + buildId: string, + } +} + export class GetLogsResponse extends jspb.Message { getBuildStep(): string; setBuildStep(value: string): void; diff --git a/gen/js/app/build/v1/build_pb.js b/gen/js/app/build/v1/build_pb.js index 42ddb2c9c..8274a82a0 100644 --- a/gen/js/app/build/v1/build_pb.js +++ b/gen/js/app/build/v1/build_pb.js @@ -40,6 +40,8 @@ goog.exportSymbol('proto.viam.app.build.v1.RemoveAppLinkResponse', null, global) goog.exportSymbol('proto.viam.app.build.v1.RepoLink', null, global); goog.exportSymbol('proto.viam.app.build.v1.StartBuildRequest', null, global); goog.exportSymbol('proto.viam.app.build.v1.StartBuildResponse', null, global); +goog.exportSymbol('proto.viam.app.build.v1.StartPackageBuildRequest', null, global); +goog.exportSymbol('proto.viam.app.build.v1.StartPackageBuildResponse', null, global); goog.exportSymbol('proto.viam.app.build.v1.StartReloadBuildRequest', null, global); goog.exportSymbol('proto.viam.app.build.v1.StartReloadBuildRequest.CloudBuildCase', null, global); goog.exportSymbol('proto.viam.app.build.v1.StartReloadBuildResponse', null, global); @@ -173,6 +175,48 @@ if (goog.DEBUG && !COMPILED) { */ proto.viam.app.build.v1.StartReloadBuildResponse.displayName = 'proto.viam.app.build.v1.StartReloadBuildResponse'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.app.build.v1.StartPackageBuildRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.app.build.v1.StartPackageBuildRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.app.build.v1.StartPackageBuildRequest.displayName = 'proto.viam.app.build.v1.StartPackageBuildRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.app.build.v1.StartPackageBuildResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.app.build.v1.StartPackageBuildResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.app.build.v1.StartPackageBuildResponse.displayName = 'proto.viam.app.build.v1.StartPackageBuildResponse'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -1842,6 +1886,326 @@ proto.viam.app.build.v1.StartReloadBuildResponse.prototype.setBuildId = function +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.app.build.v1.StartPackageBuildRequest.prototype.toObject = function(opt_includeInstance) { + return proto.viam.app.build.v1.StartPackageBuildRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.app.build.v1.StartPackageBuildRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.app.build.v1.StartPackageBuildRequest.toObject = function(includeInstance, msg) { + var f, obj = { + moduleId: jspb.Message.getFieldWithDefault(msg, 1, ""), + packageVersion: jspb.Message.getFieldWithDefault(msg, 2, ""), + moduleVersion: jspb.Message.getFieldWithDefault(msg, 3, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.app.build.v1.StartPackageBuildRequest} + */ +proto.viam.app.build.v1.StartPackageBuildRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.app.build.v1.StartPackageBuildRequest; + return proto.viam.app.build.v1.StartPackageBuildRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.app.build.v1.StartPackageBuildRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.app.build.v1.StartPackageBuildRequest} + */ +proto.viam.app.build.v1.StartPackageBuildRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setModuleId(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setPackageVersion(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setModuleVersion(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.app.build.v1.StartPackageBuildRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.app.build.v1.StartPackageBuildRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.app.build.v1.StartPackageBuildRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.app.build.v1.StartPackageBuildRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getModuleId(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getPackageVersion(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getModuleVersion(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * optional string module_id = 1; + * @return {string} + */ +proto.viam.app.build.v1.StartPackageBuildRequest.prototype.getModuleId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.app.build.v1.StartPackageBuildRequest} returns this + */ +proto.viam.app.build.v1.StartPackageBuildRequest.prototype.setModuleId = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string package_version = 2; + * @return {string} + */ +proto.viam.app.build.v1.StartPackageBuildRequest.prototype.getPackageVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.app.build.v1.StartPackageBuildRequest} returns this + */ +proto.viam.app.build.v1.StartPackageBuildRequest.prototype.setPackageVersion = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional string module_version = 3; + * @return {string} + */ +proto.viam.app.build.v1.StartPackageBuildRequest.prototype.getModuleVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.app.build.v1.StartPackageBuildRequest} returns this + */ +proto.viam.app.build.v1.StartPackageBuildRequest.prototype.setModuleVersion = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.app.build.v1.StartPackageBuildResponse.prototype.toObject = function(opt_includeInstance) { + return proto.viam.app.build.v1.StartPackageBuildResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.app.build.v1.StartPackageBuildResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.app.build.v1.StartPackageBuildResponse.toObject = function(includeInstance, msg) { + var f, obj = { + buildId: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.app.build.v1.StartPackageBuildResponse} + */ +proto.viam.app.build.v1.StartPackageBuildResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.app.build.v1.StartPackageBuildResponse; + return proto.viam.app.build.v1.StartPackageBuildResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.app.build.v1.StartPackageBuildResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.app.build.v1.StartPackageBuildResponse} + */ +proto.viam.app.build.v1.StartPackageBuildResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setBuildId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.app.build.v1.StartPackageBuildResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.app.build.v1.StartPackageBuildResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.app.build.v1.StartPackageBuildResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.app.build.v1.StartPackageBuildResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getBuildId(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string build_id = 1; + * @return {string} + */ +proto.viam.app.build.v1.StartPackageBuildResponse.prototype.getBuildId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.app.build.v1.StartPackageBuildResponse} returns this + */ +proto.viam.app.build.v1.StartPackageBuildResponse.prototype.setBuildId = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. diff --git a/gen/js/app/build/v1/build_pb_service.d.ts b/gen/js/app/build/v1/build_pb_service.d.ts index 00150530f..939da9f01 100644 --- a/gen/js/app/build/v1/build_pb_service.d.ts +++ b/gen/js/app/build/v1/build_pb_service.d.ts @@ -103,6 +103,15 @@ type BuildServiceStartReloadBuild = { readonly responseType: typeof app_build_v1_build_pb.StartReloadBuildResponse; }; +type BuildServiceStartPackageBuild = { + readonly methodName: string; + readonly service: typeof BuildService; + readonly requestStream: true; + readonly responseStream: false; + readonly requestType: typeof app_build_v1_build_pb.StartPackageBuildRequest; + readonly responseType: typeof app_build_v1_build_pb.StartPackageBuildResponse; +}; + export class BuildService { static readonly serviceName: string; static readonly StartBuild: BuildServiceStartBuild; @@ -116,6 +125,7 @@ export class BuildService { static readonly LinkOrg: BuildServiceLinkOrg; static readonly UnlinkOrg: BuildServiceUnlinkOrg; static readonly StartReloadBuild: BuildServiceStartReloadBuild; + static readonly StartPackageBuild: BuildServiceStartPackageBuild; } export type ServiceError = { message: string, code: number; metadata: grpc.Metadata } @@ -233,5 +243,6 @@ export class BuildServiceClient { callback: (error: ServiceError|null, responseMessage: app_build_v1_build_pb.UnlinkOrgResponse|null) => void ): UnaryResponse; startReloadBuild(metadata?: grpc.Metadata): RequestStream; + startPackageBuild(metadata?: grpc.Metadata): RequestStream; } diff --git a/gen/js/app/build/v1/build_pb_service.js b/gen/js/app/build/v1/build_pb_service.js index 4901704c0..7bbe1e20e 100644 --- a/gen/js/app/build/v1/build_pb_service.js +++ b/gen/js/app/build/v1/build_pb_service.js @@ -109,6 +109,15 @@ BuildService.StartReloadBuild = { responseType: app_build_v1_build_pb.StartReloadBuildResponse }; +BuildService.StartPackageBuild = { + methodName: "StartPackageBuild", + service: BuildService, + requestStream: true, + responseStream: false, + requestType: app_build_v1_build_pb.StartPackageBuildRequest, + responseType: app_build_v1_build_pb.StartPackageBuildResponse +}; + exports.BuildService = BuildService; function BuildServiceClient(serviceHost, options) { @@ -475,5 +484,46 @@ BuildServiceClient.prototype.startReloadBuild = function startReloadBuild(metada }; }; +BuildServiceClient.prototype.startPackageBuild = function startPackageBuild(metadata) { + var listeners = { + end: [], + status: [] + }; + var client = grpc.client(BuildService.StartPackageBuild, { + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport + }); + client.onEnd(function (status, statusMessage, trailers) { + listeners.status.forEach(function (handler) { + handler({ code: status, details: statusMessage, metadata: trailers }); + }); + listeners.end.forEach(function (handler) { + handler({ code: status, details: statusMessage, metadata: trailers }); + }); + listeners = null; + }); + return { + on: function (type, handler) { + listeners[type].push(handler); + return this; + }, + write: function (requestMessage) { + if (!client.started) { + client.start(metadata); + } + client.send(requestMessage); + return this; + }, + end: function () { + client.finishSend(); + }, + cancel: function () { + listeners = null; + client.close(); + } + }; +}; + exports.BuildServiceClient = BuildServiceClient; From 4bfa4341159f0762838a05f84e5d488977577c6c Mon Sep 17 00:00:00 2001 From: Michael Lee Date: Mon, 22 Dec 2025 15:45:23 -0500 Subject: [PATCH 4/7] add platform list --- proto/viam/app/build/v1/build.proto | 2 ++ 1 file changed, 2 insertions(+) diff --git a/proto/viam/app/build/v1/build.proto b/proto/viam/app/build/v1/build.proto index 85a94903e..f556262be 100644 --- a/proto/viam/app/build/v1/build.proto +++ b/proto/viam/app/build/v1/build.proto @@ -95,6 +95,8 @@ message StartPackageBuildRequest { string package_version = 2; // version of the module to publish to the registry. must be valid semver2.0 string (ex: 1.2.3-rc0) string module_version = 3; + // specify the platforms to build for (ex: linux/arm64) + repeated string platforms = 4; } message StartPackageBuildResponse { From 1f58bc1e3a33156b6ea881ad53753fa3bff2f8d9 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 20:46:57 +0000 Subject: [PATCH 5/7] Built new protos from 61fe3da --- app/build/v1/build.pb.go | 381 +++++++++++++++--------------- gen/js/app/build/v1/build_pb.d.ts | 6 + gen/js/app/build/v1/build_pb.js | 60 ++++- 3 files changed, 260 insertions(+), 187 deletions(-) diff --git a/app/build/v1/build.pb.go b/app/build/v1/build.pb.go index 9dedc8944..fc0340a12 100644 --- a/app/build/v1/build.pb.go +++ b/app/build/v1/build.pb.go @@ -473,6 +473,8 @@ type StartPackageBuildRequest struct { PackageVersion string `protobuf:"bytes,2,opt,name=package_version,json=packageVersion,proto3" json:"package_version,omitempty"` // version of the module to publish to the registry. must be valid semver2.0 string (ex: 1.2.3-rc0) ModuleVersion string `protobuf:"bytes,3,opt,name=module_version,json=moduleVersion,proto3" json:"module_version,omitempty"` + // specify the platforms to build for (ex: linux/arm64) + Platforms []string `protobuf:"bytes,4,rep,name=platforms,proto3" json:"platforms,omitempty"` } func (x *StartPackageBuildRequest) Reset() { @@ -526,6 +528,13 @@ func (x *StartPackageBuildRequest) GetModuleVersion() string { return "" } +func (x *StartPackageBuildRequest) GetPlatforms() []string { + if x != nil { + return x.Platforms + } + return nil +} + type StartPackageBuildResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1649,7 +1658,7 @@ var file_app_build_v1_build_proto_rawDesc = []byte{ 0x6c, 0x64, 0x22, 0x35, 0x0a, 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x87, 0x01, 0x0a, 0x18, 0x53, 0x74, + 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0xa5, 0x01, 0x0a, 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x75, 0x6c, @@ -1658,197 +1667,199 @@ var file_app_build_v1_build_proto_rawDesc = []byte{ 0x63, 0x6b, 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0x36, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x44, 0x0a, 0x0f, 0x47, - 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x65, 0x70, 0x12, 0x12, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x22, 0xc7, 0x02, 0x0a, 0x07, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x0a, - 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x34, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, - 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x3a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, - 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x01, 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x65, 0x70, 0x88, 0x01, 0x01, 0x42, - 0x0b, 0x0a, 0x09, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x0d, 0x0a, 0x0b, - 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x22, 0x9c, 0x01, 0x0a, 0x0f, - 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x0f, - 0x6d, 0x61, 0x78, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x4a, 0x6f, 0x62, 0x73, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, 0x08, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x6d, 0x61, - 0x78, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x0b, 0x0a, - 0x09, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x22, 0x42, 0x0a, 0x10, 0x4c, 0x69, - 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, - 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, + 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x73, 0x22, 0x36, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, + 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x44, 0x0a, 0x0f, 0x47, 0x65, 0x74, + 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x65, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0xc7, 0x02, 0x0a, 0x07, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x4a, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0xcf, - 0x01, 0x0a, 0x08, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x29, 0x0a, 0x11, 0x6f, + 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, + 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x07, 0x65, + 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, + 0x09, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x65, 0x70, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, + 0x09, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x22, 0x9c, 0x01, 0x0a, 0x0f, 0x4c, 0x69, + 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, + 0x09, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x0f, 0x6d, 0x61, + 0x78, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x4a, 0x6f, 0x62, 0x73, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x6d, 0x61, 0x78, 0x5f, + 0x6a, 0x6f, 0x62, 0x73, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x0b, 0x0a, 0x09, 0x5f, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x22, 0x42, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, + 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x04, + 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x69, 0x61, + 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4a, + 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0xcf, 0x01, 0x0a, + 0x08, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x29, 0x0a, 0x11, 0x6f, 0x61, 0x75, + 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x41, 0x70, 0x70, 0x4c, 0x69, + 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1f, + 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, + 0x65, 0x70, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x61, 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x61, 0x6d, 0x55, 0x73, 0x65, 0x72, + 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x42, + 0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x04, 0x6c, 0x69, + 0x6e, 0x6b, 0x22, 0x34, 0x0a, 0x10, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6c, + 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, + 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x22, 0x35, 0x0a, 0x11, 0x55, 0x6e, 0x6c, 0x69, + 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, + 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x22, + 0x14, 0x0a, 0x12, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, + 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4a, 0x0a, + 0x15, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, + 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, + 0x6e, 0x6b, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x97, 0x01, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x29, 0x0a, 0x11, + 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x41, 0x70, + 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x61, 0x6d, 0x5f, + 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x61, 0x6d, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0c, 0x6f, 0x72, 0x67, + 0x5f, 0x69, 0x64, 0x5f, 0x6f, 0x72, 0x5f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x09, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x4f, 0x72, 0x4e, 0x73, 0x22, 0x48, 0x0a, 0x14, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x05, 0x6c, + 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x41, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, + 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x11, + 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x41, 0x70, + 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x52, 0x0a, 0x0e, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x29, 0x0a, 0x11, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, + 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, + 0x61, 0x75, 0x74, 0x68, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x15, 0x0a, + 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, + 0x72, 0x67, 0x49, 0x64, 0x22, 0x11, 0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x10, 0x55, 0x6e, 0x6c, 0x69, 0x6e, + 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x11, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x21, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x88, 0x01, 0x01, - 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x61, 0x6d, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x61, 0x6d, 0x55, 0x73, - 0x65, 0x72, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x22, 0x42, 0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x04, - 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x34, 0x0a, 0x10, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6f, - 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x72, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x22, 0x35, 0x0a, 0x11, 0x55, 0x6e, - 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x20, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x49, - 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x4a, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x6b, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, - 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, - 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x97, 0x01, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x29, - 0x0a, 0x11, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, - 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x61, - 0x6d, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, - 0x61, 0x6d, 0x55, 0x73, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0c, 0x6f, - 0x72, 0x67, 0x5f, 0x69, 0x64, 0x5f, 0x6f, 0x72, 0x5f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x09, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x4f, 0x72, 0x4e, 0x73, 0x22, 0x48, 0x0a, 0x14, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, - 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x41, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, - 0x0a, 0x11, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, - 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x52, 0x0a, 0x0e, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x11, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, - 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, - 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x22, 0x11, 0x0a, 0x0f, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x10, 0x55, 0x6e, 0x6c, - 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, - 0x11, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x41, - 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x22, - 0x13, 0x0a, 0x11, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x6f, 0x0a, 0x09, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x1a, 0x0a, 0x16, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, - 0x16, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x5f, 0x50, - 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4a, 0x4f, 0x42, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, - 0x12, 0x13, 0x0a, 0x0f, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, - 0x4f, 0x4e, 0x45, 0x10, 0x03, 0x32, 0xf6, 0x08, 0x0a, 0x0c, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x59, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x12, 0x24, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x69, 0x61, - 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x52, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x21, 0x2e, 0x76, - 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x22, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x53, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, - 0x73, 0x12, 0x22, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, - 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, - 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x08, 0x4c, 0x69, - 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, - 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, - 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x69, 0x61, - 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x59, 0x0a, 0x0a, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x24, 0x2e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x22, 0x13, 0x0a, + 0x11, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2a, 0x6f, 0x0a, 0x09, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x1a, 0x0a, 0x16, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x4a, + 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, + 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4a, 0x4f, 0x42, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x13, + 0x0a, 0x0f, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x4e, + 0x45, 0x10, 0x03, 0x32, 0xf6, 0x08, 0x0a, 0x0c, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x59, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, + 0x6c, 0x64, 0x12, 0x24, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, + 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x52, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x21, 0x2e, 0x76, 0x69, 0x61, + 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, - 0x70, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0d, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x27, 0x2e, 0x76, 0x69, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x30, 0x01, 0x12, 0x53, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x12, + 0x22, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x08, 0x4c, 0x69, 0x6e, 0x6b, + 0x52, 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, + 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, + 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, + 0x0a, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x24, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, - 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, - 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x26, - 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, - 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x62, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, - 0x12, 0x27, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, - 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x69, 0x61, 0x6d, - 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x07, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x12, 0x21, - 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x22, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x09, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4f, - 0x72, 0x67, 0x12, 0x23, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, - 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, - 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, - 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x75, 0x69, 0x6c, - 0x64, 0x12, 0x2a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, - 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, - 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x70, 0x0a, 0x11, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x42, 0x75, 0x69, 0x6c, - 0x64, 0x12, 0x2b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, + 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x70, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x27, 0x2e, 0x76, 0x69, 0x61, 0x6d, + 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x4c, + 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x0c, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x26, 0x2e, 0x76, + 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, + 0x4c, 0x69, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, + 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x27, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x42, 0x1e, - 0x5a, 0x1c, 0x67, 0x6f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, + 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x41, 0x70, 0x70, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x50, 0x0a, 0x07, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x12, 0x21, 0x2e, 0x76, + 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x22, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x09, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, + 0x12, 0x23, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4f, 0x72, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, + 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, + 0x4f, 0x72, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x10, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, + 0x2a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x42, + 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x76, 0x69, + 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x70, 0x0a, 0x11, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, + 0x2b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x76, + 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x42, 0x75, 0x69, + 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x42, 0x1e, 0x5a, 0x1c, + 0x67, 0x6f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x61, 0x70, 0x70, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/gen/js/app/build/v1/build_pb.d.ts b/gen/js/app/build/v1/build_pb.d.ts index 0933d2fab..55facb486 100644 --- a/gen/js/app/build/v1/build_pb.d.ts +++ b/gen/js/app/build/v1/build_pb.d.ts @@ -196,6 +196,11 @@ export class StartPackageBuildRequest extends jspb.Message { getModuleVersion(): string; setModuleVersion(value: string): void; + clearPlatformsList(): void; + getPlatformsList(): Array; + setPlatformsList(value: Array): void; + addPlatforms(value: string, index?: number): string; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): StartPackageBuildRequest.AsObject; static toObject(includeInstance: boolean, msg: StartPackageBuildRequest): StartPackageBuildRequest.AsObject; @@ -211,6 +216,7 @@ export namespace StartPackageBuildRequest { moduleId: string, packageVersion: string, moduleVersion: string, + platformsList: Array, } } diff --git a/gen/js/app/build/v1/build_pb.js b/gen/js/app/build/v1/build_pb.js index 8274a82a0..444eca21c 100644 --- a/gen/js/app/build/v1/build_pb.js +++ b/gen/js/app/build/v1/build_pb.js @@ -186,7 +186,7 @@ if (goog.DEBUG && !COMPILED) { * @constructor */ proto.viam.app.build.v1.StartPackageBuildRequest = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); + jspb.Message.initialize(this, opt_data, 0, -1, proto.viam.app.build.v1.StartPackageBuildRequest.repeatedFields_, null); }; goog.inherits(proto.viam.app.build.v1.StartPackageBuildRequest, jspb.Message); if (goog.DEBUG && !COMPILED) { @@ -1884,6 +1884,13 @@ proto.viam.app.build.v1.StartReloadBuildResponse.prototype.setBuildId = function +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.viam.app.build.v1.StartPackageBuildRequest.repeatedFields_ = [4]; + if (jspb.Message.GENERATE_TO_OBJECT) { @@ -1917,7 +1924,8 @@ proto.viam.app.build.v1.StartPackageBuildRequest.toObject = function(includeInst var f, obj = { moduleId: jspb.Message.getFieldWithDefault(msg, 1, ""), packageVersion: jspb.Message.getFieldWithDefault(msg, 2, ""), - moduleVersion: jspb.Message.getFieldWithDefault(msg, 3, "") + moduleVersion: jspb.Message.getFieldWithDefault(msg, 3, ""), + platformsList: (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f }; if (includeInstance) { @@ -1966,6 +1974,10 @@ proto.viam.app.build.v1.StartPackageBuildRequest.deserializeBinaryFromReader = f var value = /** @type {string} */ (reader.readString()); msg.setModuleVersion(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.addPlatforms(value); + break; default: reader.skipField(); break; @@ -2016,6 +2028,13 @@ proto.viam.app.build.v1.StartPackageBuildRequest.serializeBinaryToWriter = funct f ); } + f = message.getPlatformsList(); + if (f.length > 0) { + writer.writeRepeatedString( + 4, + f + ); + } }; @@ -2073,6 +2092,43 @@ proto.viam.app.build.v1.StartPackageBuildRequest.prototype.setModuleVersion = fu }; +/** + * repeated string platforms = 4; + * @return {!Array} + */ +proto.viam.app.build.v1.StartPackageBuildRequest.prototype.getPlatformsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 4)); +}; + + +/** + * @param {!Array} value + * @return {!proto.viam.app.build.v1.StartPackageBuildRequest} returns this + */ +proto.viam.app.build.v1.StartPackageBuildRequest.prototype.setPlatformsList = function(value) { + return jspb.Message.setField(this, 4, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.viam.app.build.v1.StartPackageBuildRequest} returns this + */ +proto.viam.app.build.v1.StartPackageBuildRequest.prototype.addPlatforms = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 4, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.viam.app.build.v1.StartPackageBuildRequest} returns this + */ +proto.viam.app.build.v1.StartPackageBuildRequest.prototype.clearPlatformsList = function() { + return this.setPlatformsList([]); +}; + + From 7090dd29620ca77c5fe4898330862d50fa45dd45 Mon Sep 17 00:00:00 2001 From: Michael Lee Date: Tue, 23 Dec 2025 10:50:09 -0500 Subject: [PATCH 6/7] not a streaming API --- proto/viam/app/build/v1/build.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/viam/app/build/v1/build.proto b/proto/viam/app/build/v1/build.proto index f556262be..559df117f 100644 --- a/proto/viam/app/build/v1/build.proto +++ b/proto/viam/app/build/v1/build.proto @@ -38,7 +38,7 @@ service BuildService { rpc StartReloadBuild(stream StartReloadBuildRequest) returns (StartReloadBuildResponse); // Start a build where the source code is hosted by Viam - rpc StartPackageBuild(stream StartPackageBuildRequest) returns (StartPackageBuildResponse); + rpc StartPackageBuild(StartPackageBuildRequest) returns (StartPackageBuildResponse); } message StartBuildRequest { From 48834c3258accd9073a3470c54a8f426877483ea Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 23 Dec 2025 15:50:40 +0000 Subject: [PATCH 7/7] Built new protos from 7090dd2 --- app/build/v1/build.pb.go | 12 ++-- app/build/v1/build.pb.gw.go | 76 ++++++++++---------- app/build/v1/build_grpc.pb.go | 86 +++++++---------------- gen/js/app/build/v1/build_grpc_web_pb.js | 61 ++++++++++++++++ gen/js/app/build/v1/build_pb_service.d.ts | 12 +++- gen/js/app/build/v1/build_pb_service.js | 54 ++++++-------- 6 files changed, 163 insertions(+), 138 deletions(-) diff --git a/app/build/v1/build.pb.go b/app/build/v1/build.pb.go index fc0340a12..947bff926 100644 --- a/app/build/v1/build.pb.go +++ b/app/build/v1/build.pb.go @@ -1785,7 +1785,7 @@ var file_app_build_v1_build_proto_rawDesc = []byte{ 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x4e, - 0x45, 0x10, 0x03, 0x32, 0xf6, 0x08, 0x0a, 0x0c, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x65, 0x72, + 0x45, 0x10, 0x03, 0x32, 0xf4, 0x08, 0x0a, 0x0c, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x59, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x24, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, @@ -1849,17 +1849,17 @@ var file_app_build_v1_build_proto_rawDesc = []byte{ 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x70, 0x0a, 0x11, 0x53, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x6e, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x2b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x42, 0x1e, 0x5a, 0x1c, - 0x67, 0x6f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x61, 0x70, 0x70, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x1e, 0x5a, 0x1c, 0x67, 0x6f, + 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, + 0x70, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( diff --git a/app/build/v1/build.pb.gw.go b/app/build/v1/build.pb.gw.go index b51162956..16fec4562 100644 --- a/app/build/v1/build.pb.gw.go +++ b/app/build/v1/build.pb.gw.go @@ -331,45 +331,27 @@ func request_BuildService_StartReloadBuild_0(ctx context.Context, marshaler runt } func request_BuildService_StartPackageBuild_0(ctx context.Context, marshaler runtime.Marshaler, client BuildServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StartPackageBuildRequest var metadata runtime.ServerMetadata - stream, err := client.StartPackageBuild(ctx) - if err != nil { - grpclog.Errorf("Failed to start streaming: %v", err) - return nil, metadata, err - } - dec := marshaler.NewDecoder(req.Body) - for { - var protoReq StartPackageBuildRequest - err = dec.Decode(&protoReq) - if err == io.EOF { - break - } - if err != nil { - grpclog.Errorf("Failed to decode request: %v", err) - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err = stream.Send(&protoReq); err != nil { - if err == io.EOF { - break - } - grpclog.Errorf("Failed to send request: %v", err) - return nil, metadata, err - } - } - if err := stream.CloseSend(); err != nil { - grpclog.Errorf("Failed to terminate client stream: %v", err) - return nil, metadata, err + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - header, err := stream.Header() - if err != nil { - grpclog.Errorf("Failed to get header from client: %v", err) - return nil, metadata, err + + msg, err := client.StartPackageBuild(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BuildService_StartPackageBuild_0(ctx context.Context, marshaler runtime.Marshaler, server BuildServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StartPackageBuildRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - metadata.HeaderMD = header - msg, err := stream.CloseAndRecv() - metadata.TrailerMD = stream.Trailer() + msg, err := server.StartPackageBuild(ctx, &protoReq) return msg, metadata, err } @@ -620,10 +602,28 @@ func RegisterBuildServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu }) mux.Handle("POST", pattern_BuildService_StartPackageBuild_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") - _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/viam.app.build.v1.BuildService/StartPackageBuild", runtime.WithHTTPPathPattern("/viam.app.build.v1.BuildService/StartPackageBuild")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BuildService_StartPackageBuild_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BuildService_StartPackageBuild_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) return nil diff --git a/app/build/v1/build_grpc.pb.go b/app/build/v1/build_grpc.pb.go index da4db0dde..02d508d72 100644 --- a/app/build/v1/build_grpc.pb.go +++ b/app/build/v1/build_grpc.pb.go @@ -45,7 +45,7 @@ type BuildServiceClient interface { // upload the local dev environment and build a module for hot reloading StartReloadBuild(ctx context.Context, opts ...grpc.CallOption) (BuildService_StartReloadBuildClient, error) // Start a build where the source code is hosted by Viam - StartPackageBuild(ctx context.Context, opts ...grpc.CallOption) (BuildService_StartPackageBuildClient, error) + StartPackageBuild(ctx context.Context, in *StartPackageBuildRequest, opts ...grpc.CallOption) (*StartPackageBuildResponse, error) } type buildServiceClient struct { @@ -203,38 +203,13 @@ func (x *buildServiceStartReloadBuildClient) CloseAndRecv() (*StartReloadBuildRe return m, nil } -func (c *buildServiceClient) StartPackageBuild(ctx context.Context, opts ...grpc.CallOption) (BuildService_StartPackageBuildClient, error) { - stream, err := c.cc.NewStream(ctx, &BuildService_ServiceDesc.Streams[2], "/viam.app.build.v1.BuildService/StartPackageBuild", opts...) +func (c *buildServiceClient) StartPackageBuild(ctx context.Context, in *StartPackageBuildRequest, opts ...grpc.CallOption) (*StartPackageBuildResponse, error) { + out := new(StartPackageBuildResponse) + err := c.cc.Invoke(ctx, "/viam.app.build.v1.BuildService/StartPackageBuild", in, out, opts...) if err != nil { return nil, err } - x := &buildServiceStartPackageBuildClient{stream} - return x, nil -} - -type BuildService_StartPackageBuildClient interface { - Send(*StartPackageBuildRequest) error - CloseAndRecv() (*StartPackageBuildResponse, error) - grpc.ClientStream -} - -type buildServiceStartPackageBuildClient struct { - grpc.ClientStream -} - -func (x *buildServiceStartPackageBuildClient) Send(m *StartPackageBuildRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *buildServiceStartPackageBuildClient) CloseAndRecv() (*StartPackageBuildResponse, error) { - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - m := new(StartPackageBuildResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil + return out, nil } // BuildServiceServer is the server API for BuildService service. @@ -264,7 +239,7 @@ type BuildServiceServer interface { // upload the local dev environment and build a module for hot reloading StartReloadBuild(BuildService_StartReloadBuildServer) error // Start a build where the source code is hosted by Viam - StartPackageBuild(BuildService_StartPackageBuildServer) error + StartPackageBuild(context.Context, *StartPackageBuildRequest) (*StartPackageBuildResponse, error) mustEmbedUnimplementedBuildServiceServer() } @@ -305,8 +280,8 @@ func (UnimplementedBuildServiceServer) UnlinkOrg(context.Context, *UnlinkOrgRequ func (UnimplementedBuildServiceServer) StartReloadBuild(BuildService_StartReloadBuildServer) error { return status.Errorf(codes.Unimplemented, "method StartReloadBuild not implemented") } -func (UnimplementedBuildServiceServer) StartPackageBuild(BuildService_StartPackageBuildServer) error { - return status.Errorf(codes.Unimplemented, "method StartPackageBuild not implemented") +func (UnimplementedBuildServiceServer) StartPackageBuild(context.Context, *StartPackageBuildRequest) (*StartPackageBuildResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StartPackageBuild not implemented") } func (UnimplementedBuildServiceServer) mustEmbedUnimplementedBuildServiceServer() {} @@ -530,30 +505,22 @@ func (x *buildServiceStartReloadBuildServer) Recv() (*StartReloadBuildRequest, e return m, nil } -func _BuildService_StartPackageBuild_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(BuildServiceServer).StartPackageBuild(&buildServiceStartPackageBuildServer{stream}) -} - -type BuildService_StartPackageBuildServer interface { - SendAndClose(*StartPackageBuildResponse) error - Recv() (*StartPackageBuildRequest, error) - grpc.ServerStream -} - -type buildServiceStartPackageBuildServer struct { - grpc.ServerStream -} - -func (x *buildServiceStartPackageBuildServer) SendAndClose(m *StartPackageBuildResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *buildServiceStartPackageBuildServer) Recv() (*StartPackageBuildRequest, error) { - m := new(StartPackageBuildRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { +func _BuildService_StartPackageBuild_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartPackageBuildRequest) + if err := dec(in); err != nil { return nil, err } - return m, nil + if interceptor == nil { + return srv.(BuildServiceServer).StartPackageBuild(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/viam.app.build.v1.BuildService/StartPackageBuild", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BuildServiceServer).StartPackageBuild(ctx, req.(*StartPackageBuildRequest)) + } + return interceptor(ctx, in, info, handler) } // BuildService_ServiceDesc is the grpc.ServiceDesc for BuildService service. @@ -599,6 +566,10 @@ var BuildService_ServiceDesc = grpc.ServiceDesc{ MethodName: "UnlinkOrg", Handler: _BuildService_UnlinkOrg_Handler, }, + { + MethodName: "StartPackageBuild", + Handler: _BuildService_StartPackageBuild_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -611,11 +582,6 @@ var BuildService_ServiceDesc = grpc.ServiceDesc{ Handler: _BuildService_StartReloadBuild_Handler, ClientStreams: true, }, - { - StreamName: "StartPackageBuild", - Handler: _BuildService_StartPackageBuild_Handler, - ClientStreams: true, - }, }, Metadata: "app/build/v1/build.proto", } diff --git a/gen/js/app/build/v1/build_grpc_web_pb.js b/gen/js/app/build/v1/build_grpc_web_pb.js index e568f82f7..3d9a12e8a 100644 --- a/gen/js/app/build/v1/build_grpc_web_pb.js +++ b/gen/js/app/build/v1/build_grpc_web_pb.js @@ -686,5 +686,66 @@ proto.viam.app.build.v1.BuildServicePromiseClient.prototype.unlinkOrg = }; +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.viam.app.build.v1.StartPackageBuildRequest, + * !proto.viam.app.build.v1.StartPackageBuildResponse>} + */ +const methodDescriptor_BuildService_StartPackageBuild = new grpc.web.MethodDescriptor( + '/viam.app.build.v1.BuildService/StartPackageBuild', + grpc.web.MethodType.UNARY, + proto.viam.app.build.v1.StartPackageBuildRequest, + proto.viam.app.build.v1.StartPackageBuildResponse, + /** + * @param {!proto.viam.app.build.v1.StartPackageBuildRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.viam.app.build.v1.StartPackageBuildResponse.deserializeBinary +); + + +/** + * @param {!proto.viam.app.build.v1.StartPackageBuildRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.RpcError, ?proto.viam.app.build.v1.StartPackageBuildResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.viam.app.build.v1.BuildServiceClient.prototype.startPackageBuild = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/viam.app.build.v1.BuildService/StartPackageBuild', + request, + metadata || {}, + methodDescriptor_BuildService_StartPackageBuild, + callback); +}; + + +/** + * @param {!proto.viam.app.build.v1.StartPackageBuildRequest} request The + * request proto + * @param {?Object=} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.viam.app.build.v1.BuildServicePromiseClient.prototype.startPackageBuild = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/viam.app.build.v1.BuildService/StartPackageBuild', + request, + metadata || {}, + methodDescriptor_BuildService_StartPackageBuild); +}; + + module.exports = proto.viam.app.build.v1; diff --git a/gen/js/app/build/v1/build_pb_service.d.ts b/gen/js/app/build/v1/build_pb_service.d.ts index 939da9f01..73568e991 100644 --- a/gen/js/app/build/v1/build_pb_service.d.ts +++ b/gen/js/app/build/v1/build_pb_service.d.ts @@ -106,7 +106,7 @@ type BuildServiceStartReloadBuild = { type BuildServiceStartPackageBuild = { readonly methodName: string; readonly service: typeof BuildService; - readonly requestStream: true; + readonly requestStream: false; readonly responseStream: false; readonly requestType: typeof app_build_v1_build_pb.StartPackageBuildRequest; readonly responseType: typeof app_build_v1_build_pb.StartPackageBuildResponse; @@ -243,6 +243,14 @@ export class BuildServiceClient { callback: (error: ServiceError|null, responseMessage: app_build_v1_build_pb.UnlinkOrgResponse|null) => void ): UnaryResponse; startReloadBuild(metadata?: grpc.Metadata): RequestStream; - startPackageBuild(metadata?: grpc.Metadata): RequestStream; + startPackageBuild( + requestMessage: app_build_v1_build_pb.StartPackageBuildRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: app_build_v1_build_pb.StartPackageBuildResponse|null) => void + ): UnaryResponse; + startPackageBuild( + requestMessage: app_build_v1_build_pb.StartPackageBuildRequest, + callback: (error: ServiceError|null, responseMessage: app_build_v1_build_pb.StartPackageBuildResponse|null) => void + ): UnaryResponse; } diff --git a/gen/js/app/build/v1/build_pb_service.js b/gen/js/app/build/v1/build_pb_service.js index 7bbe1e20e..9a904a8bc 100644 --- a/gen/js/app/build/v1/build_pb_service.js +++ b/gen/js/app/build/v1/build_pb_service.js @@ -112,7 +112,7 @@ BuildService.StartReloadBuild = { BuildService.StartPackageBuild = { methodName: "StartPackageBuild", service: BuildService, - requestStream: true, + requestStream: false, responseStream: false, requestType: app_build_v1_build_pb.StartPackageBuildRequest, responseType: app_build_v1_build_pb.StartPackageBuildResponse @@ -484,42 +484,32 @@ BuildServiceClient.prototype.startReloadBuild = function startReloadBuild(metada }; }; -BuildServiceClient.prototype.startPackageBuild = function startPackageBuild(metadata) { - var listeners = { - end: [], - status: [] - }; - var client = grpc.client(BuildService.StartPackageBuild, { +BuildServiceClient.prototype.startPackageBuild = function startPackageBuild(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(BuildService.StartPackageBuild, { + request: requestMessage, host: this.serviceHost, metadata: metadata, - transport: this.options.transport - }); - client.onEnd(function (status, statusMessage, trailers) { - listeners.status.forEach(function (handler) { - handler({ code: status, details: statusMessage, metadata: trailers }); - }); - listeners.end.forEach(function (handler) { - handler({ code: status, details: statusMessage, metadata: trailers }); - }); - listeners = null; + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } }); return { - on: function (type, handler) { - listeners[type].push(handler); - return this; - }, - write: function (requestMessage) { - if (!client.started) { - client.start(metadata); - } - client.send(requestMessage); - return this; - }, - end: function () { - client.finishSend(); - }, cancel: function () { - listeners = null; + callback = null; client.close(); } };