diff --git a/components/dashboard/src/data/setup.tsx b/components/dashboard/src/data/setup.tsx index a9b8f06a28132c..118f120d4c1052 100644 --- a/components/dashboard/src/data/setup.tsx +++ b/components/dashboard/src/data/setup.tsx @@ -33,7 +33,7 @@ import * as UserClasses from "@gitpod/public-api/lib/gitpod/v1/user_pb"; // This is used to version the cache // If data we cache changes in a non-backwards compatible way, increment this version // That will bust any previous cache versions a client may have stored -const CACHE_VERSION = "17"; +const CACHE_VERSION = "19"; export function noPersistence(queryKey: QueryKey): QueryKey { return [...queryKey, "no-persistence"]; diff --git a/components/dashboard/src/dedicated-setup/use-needs-setup.ts b/components/dashboard/src/dedicated-setup/use-needs-setup.ts index f9116ddc3aef9c..9e84cd627687c0 100644 --- a/components/dashboard/src/dedicated-setup/use-needs-setup.ts +++ b/components/dashboard/src/dedicated-setup/use-needs-setup.ts @@ -7,7 +7,8 @@ import { useQuery } from "@tanstack/react-query"; import { useFeatureFlag } from "../data/featureflag-query"; import { noPersistence } from "../data/setup"; -import { getGitpodService } from "../service/service"; +import { installationClient } from "../service/public-api"; +import { GetOnboardingStateRequest } from "@gitpod/public-api/lib/gitpod/v1/installation_pb"; /** * @description Returns a flage stating if the current installation still needs setup before it can be used. Also returns an isLoading indicator as the check is async @@ -17,7 +18,7 @@ export const useNeedsSetup = () => { const enableDedicatedOnboardingFlow = useFeatureFlag("enableDedicatedOnboardingFlow"); // This needs to only be true if we've loaded the onboarding state - let needsSetup = !isLoading && onboardingState && onboardingState.isCompleted !== true; + let needsSetup = !isLoading && onboardingState && onboardingState.completed !== true; if (isCurrentHostExcludedFromSetup()) { needsSetup = false; @@ -36,7 +37,8 @@ const useOnboardingState = () => { return useQuery( noPersistence(["onboarding-state"]), async () => { - return await getGitpodService().server.getOnboardingState(); + const response = await installationClient.getOnboardingState(new GetOnboardingStateRequest()); + return response.onboardingState!; }, { // Only query if feature flag is enabled diff --git a/components/dashboard/src/service/json-rpc-installation-client.ts b/components/dashboard/src/service/json-rpc-installation-client.ts index ac00a32c0812d6..8ba755186a0b48 100644 --- a/components/dashboard/src/service/json-rpc-installation-client.ts +++ b/components/dashboard/src/service/json-rpc-installation-client.ts @@ -20,6 +20,8 @@ import { CreateBlockedEmailDomainResponse, GetInstallationWorkspaceDefaultImageRequest, GetInstallationWorkspaceDefaultImageResponse, + GetOnboardingStateRequest, + GetOnboardingStateResponse, } from "@gitpod/public-api/lib/gitpod/v1/installation_pb"; import { ApplicationError, ErrorCodes } from "@gitpod/gitpod-protocol/lib/messaging/error"; import { getGitpodService } from "./service"; @@ -111,4 +113,14 @@ export class JsonRpcInstallationClient implements PromiseClient, + _options?: CallOptions | undefined, + ): Promise { + const info = await getGitpodService().server.getOnboardingState(); + return new GetOnboardingStateResponse({ + onboardingState: converter.toOnboardingState(info), + }); + } } diff --git a/components/public-api/gitpod/v1/installation.proto b/components/public-api/gitpod/v1/installation.proto index f8c5a409405c7e..3e96244144b5e8 100644 --- a/components/public-api/gitpod/v1/installation.proto +++ b/components/public-api/gitpod/v1/installation.proto @@ -27,6 +27,18 @@ service InstallationService { // CreateBlockedEmailDomain creates a new blocked email domain. rpc CreateBlockedEmailDomain(CreateBlockedEmailDomainRequest) returns (CreateBlockedEmailDomainResponse) {} + + // GetOnboardingState returns the onboarding state of the installation. + rpc GetOnboardingState(GetOnboardingStateRequest) returns (GetOnboardingStateResponse) {} +} + +message GetOnboardingStateRequest {} +message GetOnboardingStateResponse { + OnboardingState onboarding_state = 1; +} + +message OnboardingState { + bool completed = 1; } message GetInstallationWorkspaceDefaultImageRequest {} diff --git a/components/public-api/go/v1/installation.pb.go b/components/public-api/go/v1/installation.pb.go index 84ea87359fb872..70c809896d0ae4 100644 --- a/components/public-api/go/v1/installation.pb.go +++ b/components/public-api/go/v1/installation.pb.go @@ -25,6 +25,138 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type GetOnboardingStateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetOnboardingStateRequest) Reset() { + *x = GetOnboardingStateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_installation_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetOnboardingStateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetOnboardingStateRequest) ProtoMessage() {} + +func (x *GetOnboardingStateRequest) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_installation_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetOnboardingStateRequest.ProtoReflect.Descriptor instead. +func (*GetOnboardingStateRequest) Descriptor() ([]byte, []int) { + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{0} +} + +type GetOnboardingStateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OnboardingState *OnboardingState `protobuf:"bytes,1,opt,name=onboarding_state,json=onboardingState,proto3" json:"onboarding_state,omitempty"` +} + +func (x *GetOnboardingStateResponse) Reset() { + *x = GetOnboardingStateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_installation_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetOnboardingStateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetOnboardingStateResponse) ProtoMessage() {} + +func (x *GetOnboardingStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_installation_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetOnboardingStateResponse.ProtoReflect.Descriptor instead. +func (*GetOnboardingStateResponse) Descriptor() ([]byte, []int) { + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{1} +} + +func (x *GetOnboardingStateResponse) GetOnboardingState() *OnboardingState { + if x != nil { + return x.OnboardingState + } + return nil +} + +type OnboardingState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Completed bool `protobuf:"varint,1,opt,name=completed,proto3" json:"completed,omitempty"` +} + +func (x *OnboardingState) Reset() { + *x = OnboardingState{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_v1_installation_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OnboardingState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OnboardingState) ProtoMessage() {} + +func (x *OnboardingState) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_v1_installation_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OnboardingState.ProtoReflect.Descriptor instead. +func (*OnboardingState) Descriptor() ([]byte, []int) { + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{2} +} + +func (x *OnboardingState) GetCompleted() bool { + if x != nil { + return x.Completed + } + return false +} + type GetInstallationWorkspaceDefaultImageRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -34,7 +166,7 @@ type GetInstallationWorkspaceDefaultImageRequest struct { func (x *GetInstallationWorkspaceDefaultImageRequest) Reset() { *x = GetInstallationWorkspaceDefaultImageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_installation_proto_msgTypes[0] + mi := &file_gitpod_v1_installation_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -47,7 +179,7 @@ func (x *GetInstallationWorkspaceDefaultImageRequest) String() string { func (*GetInstallationWorkspaceDefaultImageRequest) ProtoMessage() {} func (x *GetInstallationWorkspaceDefaultImageRequest) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_installation_proto_msgTypes[0] + mi := &file_gitpod_v1_installation_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -60,7 +192,7 @@ func (x *GetInstallationWorkspaceDefaultImageRequest) ProtoReflect() protoreflec // Deprecated: Use GetInstallationWorkspaceDefaultImageRequest.ProtoReflect.Descriptor instead. func (*GetInstallationWorkspaceDefaultImageRequest) Descriptor() ([]byte, []int) { - return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{0} + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{3} } type GetInstallationWorkspaceDefaultImageResponse struct { @@ -74,7 +206,7 @@ type GetInstallationWorkspaceDefaultImageResponse struct { func (x *GetInstallationWorkspaceDefaultImageResponse) Reset() { *x = GetInstallationWorkspaceDefaultImageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_installation_proto_msgTypes[1] + mi := &file_gitpod_v1_installation_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -87,7 +219,7 @@ func (x *GetInstallationWorkspaceDefaultImageResponse) String() string { func (*GetInstallationWorkspaceDefaultImageResponse) ProtoMessage() {} func (x *GetInstallationWorkspaceDefaultImageResponse) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_installation_proto_msgTypes[1] + mi := &file_gitpod_v1_installation_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -100,7 +232,7 @@ func (x *GetInstallationWorkspaceDefaultImageResponse) ProtoReflect() protorefle // Deprecated: Use GetInstallationWorkspaceDefaultImageResponse.ProtoReflect.Descriptor instead. func (*GetInstallationWorkspaceDefaultImageResponse) Descriptor() ([]byte, []int) { - return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{1} + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{4} } func (x *GetInstallationWorkspaceDefaultImageResponse) GetDefaultWorkspaceImage() string { @@ -127,7 +259,7 @@ type ListBlockedRepositoriesRequest struct { func (x *ListBlockedRepositoriesRequest) Reset() { *x = ListBlockedRepositoriesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_installation_proto_msgTypes[2] + mi := &file_gitpod_v1_installation_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -140,7 +272,7 @@ func (x *ListBlockedRepositoriesRequest) String() string { func (*ListBlockedRepositoriesRequest) ProtoMessage() {} func (x *ListBlockedRepositoriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_installation_proto_msgTypes[2] + mi := &file_gitpod_v1_installation_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -153,7 +285,7 @@ func (x *ListBlockedRepositoriesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListBlockedRepositoriesRequest.ProtoReflect.Descriptor instead. func (*ListBlockedRepositoriesRequest) Descriptor() ([]byte, []int) { - return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{2} + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{5} } func (x *ListBlockedRepositoriesRequest) GetPagination() *PaginationRequest { @@ -191,7 +323,7 @@ type ListBlockedRepositoriesResponse struct { func (x *ListBlockedRepositoriesResponse) Reset() { *x = ListBlockedRepositoriesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_installation_proto_msgTypes[3] + mi := &file_gitpod_v1_installation_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -204,7 +336,7 @@ func (x *ListBlockedRepositoriesResponse) String() string { func (*ListBlockedRepositoriesResponse) ProtoMessage() {} func (x *ListBlockedRepositoriesResponse) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_installation_proto_msgTypes[3] + mi := &file_gitpod_v1_installation_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -217,7 +349,7 @@ func (x *ListBlockedRepositoriesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListBlockedRepositoriesResponse.ProtoReflect.Descriptor instead. func (*ListBlockedRepositoriesResponse) Descriptor() ([]byte, []int) { - return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{3} + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{6} } func (x *ListBlockedRepositoriesResponse) GetPagination() *PaginationResponse { @@ -249,7 +381,7 @@ type CreateBlockedRepositoryRequest struct { func (x *CreateBlockedRepositoryRequest) Reset() { *x = CreateBlockedRepositoryRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_installation_proto_msgTypes[4] + mi := &file_gitpod_v1_installation_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -262,7 +394,7 @@ func (x *CreateBlockedRepositoryRequest) String() string { func (*CreateBlockedRepositoryRequest) ProtoMessage() {} func (x *CreateBlockedRepositoryRequest) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_installation_proto_msgTypes[4] + mi := &file_gitpod_v1_installation_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -275,7 +407,7 @@ func (x *CreateBlockedRepositoryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBlockedRepositoryRequest.ProtoReflect.Descriptor instead. func (*CreateBlockedRepositoryRequest) Descriptor() ([]byte, []int) { - return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{4} + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{7} } func (x *CreateBlockedRepositoryRequest) GetUrlRegexp() string { @@ -303,7 +435,7 @@ type CreateBlockedRepositoryResponse struct { func (x *CreateBlockedRepositoryResponse) Reset() { *x = CreateBlockedRepositoryResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_installation_proto_msgTypes[5] + mi := &file_gitpod_v1_installation_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -316,7 +448,7 @@ func (x *CreateBlockedRepositoryResponse) String() string { func (*CreateBlockedRepositoryResponse) ProtoMessage() {} func (x *CreateBlockedRepositoryResponse) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_installation_proto_msgTypes[5] + mi := &file_gitpod_v1_installation_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -329,7 +461,7 @@ func (x *CreateBlockedRepositoryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBlockedRepositoryResponse.ProtoReflect.Descriptor instead. func (*CreateBlockedRepositoryResponse) Descriptor() ([]byte, []int) { - return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{5} + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{8} } func (x *CreateBlockedRepositoryResponse) GetBlockedRepository() *BlockedRepository { @@ -351,7 +483,7 @@ type DeleteBlockedRepositoryRequest struct { func (x *DeleteBlockedRepositoryRequest) Reset() { *x = DeleteBlockedRepositoryRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_installation_proto_msgTypes[6] + mi := &file_gitpod_v1_installation_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -364,7 +496,7 @@ func (x *DeleteBlockedRepositoryRequest) String() string { func (*DeleteBlockedRepositoryRequest) ProtoMessage() {} func (x *DeleteBlockedRepositoryRequest) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_installation_proto_msgTypes[6] + mi := &file_gitpod_v1_installation_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -377,7 +509,7 @@ func (x *DeleteBlockedRepositoryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteBlockedRepositoryRequest.ProtoReflect.Descriptor instead. func (*DeleteBlockedRepositoryRequest) Descriptor() ([]byte, []int) { - return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{6} + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{9} } func (x *DeleteBlockedRepositoryRequest) GetBlockedRepositoryId() uint32 { @@ -396,7 +528,7 @@ type DeleteBlockedRepositoryResponse struct { func (x *DeleteBlockedRepositoryResponse) Reset() { *x = DeleteBlockedRepositoryResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_installation_proto_msgTypes[7] + mi := &file_gitpod_v1_installation_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -409,7 +541,7 @@ func (x *DeleteBlockedRepositoryResponse) String() string { func (*DeleteBlockedRepositoryResponse) ProtoMessage() {} func (x *DeleteBlockedRepositoryResponse) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_installation_proto_msgTypes[7] + mi := &file_gitpod_v1_installation_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -422,7 +554,7 @@ func (x *DeleteBlockedRepositoryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteBlockedRepositoryResponse.ProtoReflect.Descriptor instead. func (*DeleteBlockedRepositoryResponse) Descriptor() ([]byte, []int) { - return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{7} + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{10} } type ListBlockedEmailDomainsRequest struct { @@ -438,7 +570,7 @@ type ListBlockedEmailDomainsRequest struct { func (x *ListBlockedEmailDomainsRequest) Reset() { *x = ListBlockedEmailDomainsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_installation_proto_msgTypes[8] + mi := &file_gitpod_v1_installation_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -451,7 +583,7 @@ func (x *ListBlockedEmailDomainsRequest) String() string { func (*ListBlockedEmailDomainsRequest) ProtoMessage() {} func (x *ListBlockedEmailDomainsRequest) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_installation_proto_msgTypes[8] + mi := &file_gitpod_v1_installation_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -464,7 +596,7 @@ func (x *ListBlockedEmailDomainsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListBlockedEmailDomainsRequest.ProtoReflect.Descriptor instead. func (*ListBlockedEmailDomainsRequest) Descriptor() ([]byte, []int) { - return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{8} + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{11} } func (x *ListBlockedEmailDomainsRequest) GetPagination() *PaginationRequest { @@ -489,7 +621,7 @@ type ListBlockedEmailDomainsResponse struct { func (x *ListBlockedEmailDomainsResponse) Reset() { *x = ListBlockedEmailDomainsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_installation_proto_msgTypes[9] + mi := &file_gitpod_v1_installation_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -502,7 +634,7 @@ func (x *ListBlockedEmailDomainsResponse) String() string { func (*ListBlockedEmailDomainsResponse) ProtoMessage() {} func (x *ListBlockedEmailDomainsResponse) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_installation_proto_msgTypes[9] + mi := &file_gitpod_v1_installation_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -515,7 +647,7 @@ func (x *ListBlockedEmailDomainsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListBlockedEmailDomainsResponse.ProtoReflect.Descriptor instead. func (*ListBlockedEmailDomainsResponse) Descriptor() ([]byte, []int) { - return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{9} + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{12} } func (x *ListBlockedEmailDomainsResponse) GetPagination() *PaginationResponse { @@ -545,7 +677,7 @@ type CreateBlockedEmailDomainRequest struct { func (x *CreateBlockedEmailDomainRequest) Reset() { *x = CreateBlockedEmailDomainRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_installation_proto_msgTypes[10] + mi := &file_gitpod_v1_installation_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -558,7 +690,7 @@ func (x *CreateBlockedEmailDomainRequest) String() string { func (*CreateBlockedEmailDomainRequest) ProtoMessage() {} func (x *CreateBlockedEmailDomainRequest) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_installation_proto_msgTypes[10] + mi := &file_gitpod_v1_installation_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -571,7 +703,7 @@ func (x *CreateBlockedEmailDomainRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBlockedEmailDomainRequest.ProtoReflect.Descriptor instead. func (*CreateBlockedEmailDomainRequest) Descriptor() ([]byte, []int) { - return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{10} + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{13} } func (x *CreateBlockedEmailDomainRequest) GetDomain() string { @@ -599,7 +731,7 @@ type CreateBlockedEmailDomainResponse struct { func (x *CreateBlockedEmailDomainResponse) Reset() { *x = CreateBlockedEmailDomainResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_installation_proto_msgTypes[11] + mi := &file_gitpod_v1_installation_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -612,7 +744,7 @@ func (x *CreateBlockedEmailDomainResponse) String() string { func (*CreateBlockedEmailDomainResponse) ProtoMessage() {} func (x *CreateBlockedEmailDomainResponse) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_installation_proto_msgTypes[11] + mi := &file_gitpod_v1_installation_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -625,7 +757,7 @@ func (x *CreateBlockedEmailDomainResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBlockedEmailDomainResponse.ProtoReflect.Descriptor instead. func (*CreateBlockedEmailDomainResponse) Descriptor() ([]byte, []int) { - return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{11} + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{14} } func (x *CreateBlockedEmailDomainResponse) GetBlockedEmailDomain() *BlockedEmailDomain { @@ -654,7 +786,7 @@ type BlockedRepository struct { func (x *BlockedRepository) Reset() { *x = BlockedRepository{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_installation_proto_msgTypes[12] + mi := &file_gitpod_v1_installation_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -667,7 +799,7 @@ func (x *BlockedRepository) String() string { func (*BlockedRepository) ProtoMessage() {} func (x *BlockedRepository) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_installation_proto_msgTypes[12] + mi := &file_gitpod_v1_installation_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -680,7 +812,7 @@ func (x *BlockedRepository) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockedRepository.ProtoReflect.Descriptor instead. func (*BlockedRepository) Descriptor() ([]byte, []int) { - return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{12} + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{15} } func (x *BlockedRepository) GetId() uint32 { @@ -733,7 +865,7 @@ type BlockedEmailDomain struct { func (x *BlockedEmailDomain) Reset() { *x = BlockedEmailDomain{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_v1_installation_proto_msgTypes[13] + mi := &file_gitpod_v1_installation_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -746,7 +878,7 @@ func (x *BlockedEmailDomain) String() string { func (*BlockedEmailDomain) ProtoMessage() {} func (x *BlockedEmailDomain) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_v1_installation_proto_msgTypes[13] + mi := &file_gitpod_v1_installation_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -759,7 +891,7 @@ func (x *BlockedEmailDomain) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockedEmailDomain.ProtoReflect.Descriptor instead. func (*BlockedEmailDomain) Descriptor() ([]byte, []int) { - return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{13} + return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{16} } func (x *BlockedEmailDomain) GetId() string { @@ -794,160 +926,177 @@ var file_gitpod_v1_installation_proto_rawDesc = []byte{ 0x2f, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x2d, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, - 0x0a, 0x2c, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, - 0x0a, 0x17, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x1f, 0x0a, 0x0b, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x65, 0x72, 0x6d, 0x22, 0xb1, 0x01, - 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x1b, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x63, 0x0a, 0x1a, + 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x10, 0x6f, 0x6e, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x0f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x22, 0x2f, 0x0a, 0x0f, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x22, 0x2d, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x66, 0x0a, 0x2c, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x77, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x1e, 0x4c, 0x69, + 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, + 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x04, 0x73, 0x6f, + 0x72, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, + 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x65, 0x72, 0x6d, + 0x22, 0xb1, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, + 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x14, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, + 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x69, 0x65, 0x73, 0x22, 0x5e, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x72, 0x6c, 0x5f, 0x72, 0x65, + 0x67, 0x65, 0x78, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x72, 0x6c, 0x52, + 0x65, 0x67, 0x65, 0x78, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x75, + 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x55, 0x73, 0x65, 0x72, 0x22, 0x6e, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x12, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, + 0x79, 0x52, 0x11, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, + 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x21, 0x0a, 0x1f, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x0a, + 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, + 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x3c, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb3, 0x01, + 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, + 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4f, 0x0a, 0x14, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x13, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, - 0x73, 0x22, 0x5e, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x72, 0x6c, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, - 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x72, 0x6c, 0x52, 0x65, 0x67, 0x65, - 0x78, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, - 0x72, 0x22, 0x6e, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x12, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, - 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x11, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, - 0x79, 0x22, 0x54, 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x21, 0x0a, 0x1f, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x12, 0x51, 0x0a, 0x15, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x13, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x73, 0x22, 0x55, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x22, 0x73, 0x0a, 0x20, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, + 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, + 0x0a, 0x14, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, + 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x12, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, + 0xdf, 0x01, 0x0a, 0x11, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x72, 0x6c, 0x5f, 0x72, 0x65, 0x67, + 0x65, 0x78, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x72, 0x6c, 0x52, 0x65, + 0x67, 0x65, 0x78, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x75, 0x73, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x55, + 0x73, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 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, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 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, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x22, 0x58, 0x0a, 0x12, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, + 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, + 0x1a, 0x0a, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x32, 0xdd, 0x06, 0x0a, 0x13, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x36, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x72, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, + 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x29, + 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x0a, 0x1e, 0x4c, 0x69, - 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0a, - 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, - 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb3, 0x01, 0x0a, 0x1f, 0x4c, + 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, - 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, - 0x15, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x64, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, - 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x13, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, - 0x22, 0x55, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, - 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6e, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x22, 0x73, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x14, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x64, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, - 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, - 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x12, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, - 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0xdf, 0x01, 0x0a, - 0x11, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x72, 0x6c, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x72, 0x6c, 0x52, 0x65, 0x67, 0x65, 0x78, - 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, - 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x04, 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, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 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, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x58, - 0x0a, 0x12, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, - 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x32, 0xf8, 0x05, 0x0a, 0x13, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x99, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x36, 0x2e, 0x67, 0x69, 0x74, 0x70, - 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x37, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, - 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, - 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x29, 0x2e, 0x67, 0x69, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, + 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x75, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, + 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, - 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, - 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x18, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, - 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, - 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x42, 0x39, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x70, - 0x6f, 0x64, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, + 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x39, 0x5a, 0x37, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, + 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2d, 0x61, 0x70, 0x69, + 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -962,56 +1111,62 @@ func file_gitpod_v1_installation_proto_rawDescGZIP() []byte { return file_gitpod_v1_installation_proto_rawDescData } -var file_gitpod_v1_installation_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_gitpod_v1_installation_proto_msgTypes = make([]protoimpl.MessageInfo, 17) var file_gitpod_v1_installation_proto_goTypes = []interface{}{ - (*GetInstallationWorkspaceDefaultImageRequest)(nil), // 0: gitpod.v1.GetInstallationWorkspaceDefaultImageRequest - (*GetInstallationWorkspaceDefaultImageResponse)(nil), // 1: gitpod.v1.GetInstallationWorkspaceDefaultImageResponse - (*ListBlockedRepositoriesRequest)(nil), // 2: gitpod.v1.ListBlockedRepositoriesRequest - (*ListBlockedRepositoriesResponse)(nil), // 3: gitpod.v1.ListBlockedRepositoriesResponse - (*CreateBlockedRepositoryRequest)(nil), // 4: gitpod.v1.CreateBlockedRepositoryRequest - (*CreateBlockedRepositoryResponse)(nil), // 5: gitpod.v1.CreateBlockedRepositoryResponse - (*DeleteBlockedRepositoryRequest)(nil), // 6: gitpod.v1.DeleteBlockedRepositoryRequest - (*DeleteBlockedRepositoryResponse)(nil), // 7: gitpod.v1.DeleteBlockedRepositoryResponse - (*ListBlockedEmailDomainsRequest)(nil), // 8: gitpod.v1.ListBlockedEmailDomainsRequest - (*ListBlockedEmailDomainsResponse)(nil), // 9: gitpod.v1.ListBlockedEmailDomainsResponse - (*CreateBlockedEmailDomainRequest)(nil), // 10: gitpod.v1.CreateBlockedEmailDomainRequest - (*CreateBlockedEmailDomainResponse)(nil), // 11: gitpod.v1.CreateBlockedEmailDomainResponse - (*BlockedRepository)(nil), // 12: gitpod.v1.BlockedRepository - (*BlockedEmailDomain)(nil), // 13: gitpod.v1.BlockedEmailDomain - (*PaginationRequest)(nil), // 14: gitpod.v1.PaginationRequest - (*Sort)(nil), // 15: gitpod.v1.Sort - (*PaginationResponse)(nil), // 16: gitpod.v1.PaginationResponse - (*timestamppb.Timestamp)(nil), // 17: google.protobuf.Timestamp + (*GetOnboardingStateRequest)(nil), // 0: gitpod.v1.GetOnboardingStateRequest + (*GetOnboardingStateResponse)(nil), // 1: gitpod.v1.GetOnboardingStateResponse + (*OnboardingState)(nil), // 2: gitpod.v1.OnboardingState + (*GetInstallationWorkspaceDefaultImageRequest)(nil), // 3: gitpod.v1.GetInstallationWorkspaceDefaultImageRequest + (*GetInstallationWorkspaceDefaultImageResponse)(nil), // 4: gitpod.v1.GetInstallationWorkspaceDefaultImageResponse + (*ListBlockedRepositoriesRequest)(nil), // 5: gitpod.v1.ListBlockedRepositoriesRequest + (*ListBlockedRepositoriesResponse)(nil), // 6: gitpod.v1.ListBlockedRepositoriesResponse + (*CreateBlockedRepositoryRequest)(nil), // 7: gitpod.v1.CreateBlockedRepositoryRequest + (*CreateBlockedRepositoryResponse)(nil), // 8: gitpod.v1.CreateBlockedRepositoryResponse + (*DeleteBlockedRepositoryRequest)(nil), // 9: gitpod.v1.DeleteBlockedRepositoryRequest + (*DeleteBlockedRepositoryResponse)(nil), // 10: gitpod.v1.DeleteBlockedRepositoryResponse + (*ListBlockedEmailDomainsRequest)(nil), // 11: gitpod.v1.ListBlockedEmailDomainsRequest + (*ListBlockedEmailDomainsResponse)(nil), // 12: gitpod.v1.ListBlockedEmailDomainsResponse + (*CreateBlockedEmailDomainRequest)(nil), // 13: gitpod.v1.CreateBlockedEmailDomainRequest + (*CreateBlockedEmailDomainResponse)(nil), // 14: gitpod.v1.CreateBlockedEmailDomainResponse + (*BlockedRepository)(nil), // 15: gitpod.v1.BlockedRepository + (*BlockedEmailDomain)(nil), // 16: gitpod.v1.BlockedEmailDomain + (*PaginationRequest)(nil), // 17: gitpod.v1.PaginationRequest + (*Sort)(nil), // 18: gitpod.v1.Sort + (*PaginationResponse)(nil), // 19: gitpod.v1.PaginationResponse + (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp } var file_gitpod_v1_installation_proto_depIdxs = []int32{ - 14, // 0: gitpod.v1.ListBlockedRepositoriesRequest.pagination:type_name -> gitpod.v1.PaginationRequest - 15, // 1: gitpod.v1.ListBlockedRepositoriesRequest.sort:type_name -> gitpod.v1.Sort - 16, // 2: gitpod.v1.ListBlockedRepositoriesResponse.pagination:type_name -> gitpod.v1.PaginationResponse - 12, // 3: gitpod.v1.ListBlockedRepositoriesResponse.blocked_repositories:type_name -> gitpod.v1.BlockedRepository - 12, // 4: gitpod.v1.CreateBlockedRepositoryResponse.blocked_repository:type_name -> gitpod.v1.BlockedRepository - 14, // 5: gitpod.v1.ListBlockedEmailDomainsRequest.pagination:type_name -> gitpod.v1.PaginationRequest - 16, // 6: gitpod.v1.ListBlockedEmailDomainsResponse.pagination:type_name -> gitpod.v1.PaginationResponse - 13, // 7: gitpod.v1.ListBlockedEmailDomainsResponse.blocked_email_domains:type_name -> gitpod.v1.BlockedEmailDomain - 13, // 8: gitpod.v1.CreateBlockedEmailDomainResponse.blocked_email_domain:type_name -> gitpod.v1.BlockedEmailDomain - 17, // 9: gitpod.v1.BlockedRepository.creation_time:type_name -> google.protobuf.Timestamp - 17, // 10: gitpod.v1.BlockedRepository.update_time:type_name -> google.protobuf.Timestamp - 0, // 11: gitpod.v1.InstallationService.GetInstallationWorkspaceDefaultImage:input_type -> gitpod.v1.GetInstallationWorkspaceDefaultImageRequest - 2, // 12: gitpod.v1.InstallationService.ListBlockedRepositories:input_type -> gitpod.v1.ListBlockedRepositoriesRequest - 4, // 13: gitpod.v1.InstallationService.CreateBlockedRepository:input_type -> gitpod.v1.CreateBlockedRepositoryRequest - 6, // 14: gitpod.v1.InstallationService.DeleteBlockedRepository:input_type -> gitpod.v1.DeleteBlockedRepositoryRequest - 8, // 15: gitpod.v1.InstallationService.ListBlockedEmailDomains:input_type -> gitpod.v1.ListBlockedEmailDomainsRequest - 10, // 16: gitpod.v1.InstallationService.CreateBlockedEmailDomain:input_type -> gitpod.v1.CreateBlockedEmailDomainRequest - 1, // 17: gitpod.v1.InstallationService.GetInstallationWorkspaceDefaultImage:output_type -> gitpod.v1.GetInstallationWorkspaceDefaultImageResponse - 3, // 18: gitpod.v1.InstallationService.ListBlockedRepositories:output_type -> gitpod.v1.ListBlockedRepositoriesResponse - 5, // 19: gitpod.v1.InstallationService.CreateBlockedRepository:output_type -> gitpod.v1.CreateBlockedRepositoryResponse - 7, // 20: gitpod.v1.InstallationService.DeleteBlockedRepository:output_type -> gitpod.v1.DeleteBlockedRepositoryResponse - 9, // 21: gitpod.v1.InstallationService.ListBlockedEmailDomains:output_type -> gitpod.v1.ListBlockedEmailDomainsResponse - 11, // 22: gitpod.v1.InstallationService.CreateBlockedEmailDomain:output_type -> gitpod.v1.CreateBlockedEmailDomainResponse - 17, // [17:23] is the sub-list for method output_type - 11, // [11:17] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 2, // 0: gitpod.v1.GetOnboardingStateResponse.onboarding_state:type_name -> gitpod.v1.OnboardingState + 17, // 1: gitpod.v1.ListBlockedRepositoriesRequest.pagination:type_name -> gitpod.v1.PaginationRequest + 18, // 2: gitpod.v1.ListBlockedRepositoriesRequest.sort:type_name -> gitpod.v1.Sort + 19, // 3: gitpod.v1.ListBlockedRepositoriesResponse.pagination:type_name -> gitpod.v1.PaginationResponse + 15, // 4: gitpod.v1.ListBlockedRepositoriesResponse.blocked_repositories:type_name -> gitpod.v1.BlockedRepository + 15, // 5: gitpod.v1.CreateBlockedRepositoryResponse.blocked_repository:type_name -> gitpod.v1.BlockedRepository + 17, // 6: gitpod.v1.ListBlockedEmailDomainsRequest.pagination:type_name -> gitpod.v1.PaginationRequest + 19, // 7: gitpod.v1.ListBlockedEmailDomainsResponse.pagination:type_name -> gitpod.v1.PaginationResponse + 16, // 8: gitpod.v1.ListBlockedEmailDomainsResponse.blocked_email_domains:type_name -> gitpod.v1.BlockedEmailDomain + 16, // 9: gitpod.v1.CreateBlockedEmailDomainResponse.blocked_email_domain:type_name -> gitpod.v1.BlockedEmailDomain + 20, // 10: gitpod.v1.BlockedRepository.creation_time:type_name -> google.protobuf.Timestamp + 20, // 11: gitpod.v1.BlockedRepository.update_time:type_name -> google.protobuf.Timestamp + 3, // 12: gitpod.v1.InstallationService.GetInstallationWorkspaceDefaultImage:input_type -> gitpod.v1.GetInstallationWorkspaceDefaultImageRequest + 5, // 13: gitpod.v1.InstallationService.ListBlockedRepositories:input_type -> gitpod.v1.ListBlockedRepositoriesRequest + 7, // 14: gitpod.v1.InstallationService.CreateBlockedRepository:input_type -> gitpod.v1.CreateBlockedRepositoryRequest + 9, // 15: gitpod.v1.InstallationService.DeleteBlockedRepository:input_type -> gitpod.v1.DeleteBlockedRepositoryRequest + 11, // 16: gitpod.v1.InstallationService.ListBlockedEmailDomains:input_type -> gitpod.v1.ListBlockedEmailDomainsRequest + 13, // 17: gitpod.v1.InstallationService.CreateBlockedEmailDomain:input_type -> gitpod.v1.CreateBlockedEmailDomainRequest + 0, // 18: gitpod.v1.InstallationService.GetOnboardingState:input_type -> gitpod.v1.GetOnboardingStateRequest + 4, // 19: gitpod.v1.InstallationService.GetInstallationWorkspaceDefaultImage:output_type -> gitpod.v1.GetInstallationWorkspaceDefaultImageResponse + 6, // 20: gitpod.v1.InstallationService.ListBlockedRepositories:output_type -> gitpod.v1.ListBlockedRepositoriesResponse + 8, // 21: gitpod.v1.InstallationService.CreateBlockedRepository:output_type -> gitpod.v1.CreateBlockedRepositoryResponse + 10, // 22: gitpod.v1.InstallationService.DeleteBlockedRepository:output_type -> gitpod.v1.DeleteBlockedRepositoryResponse + 12, // 23: gitpod.v1.InstallationService.ListBlockedEmailDomains:output_type -> gitpod.v1.ListBlockedEmailDomainsResponse + 14, // 24: gitpod.v1.InstallationService.CreateBlockedEmailDomain:output_type -> gitpod.v1.CreateBlockedEmailDomainResponse + 1, // 25: gitpod.v1.InstallationService.GetOnboardingState:output_type -> gitpod.v1.GetOnboardingStateResponse + 19, // [19:26] is the sub-list for method output_type + 12, // [12:19] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_gitpod_v1_installation_proto_init() } @@ -1023,7 +1178,7 @@ func file_gitpod_v1_installation_proto_init() { file_gitpod_v1_sorting_proto_init() if !protoimpl.UnsafeEnabled { file_gitpod_v1_installation_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetInstallationWorkspaceDefaultImageRequest); i { + switch v := v.(*GetOnboardingStateRequest); i { case 0: return &v.state case 1: @@ -1035,7 +1190,7 @@ func file_gitpod_v1_installation_proto_init() { } } file_gitpod_v1_installation_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetInstallationWorkspaceDefaultImageResponse); i { + switch v := v.(*GetOnboardingStateResponse); i { case 0: return &v.state case 1: @@ -1047,7 +1202,7 @@ func file_gitpod_v1_installation_proto_init() { } } file_gitpod_v1_installation_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListBlockedRepositoriesRequest); i { + switch v := v.(*OnboardingState); i { case 0: return &v.state case 1: @@ -1059,7 +1214,7 @@ func file_gitpod_v1_installation_proto_init() { } } file_gitpod_v1_installation_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListBlockedRepositoriesResponse); i { + switch v := v.(*GetInstallationWorkspaceDefaultImageRequest); i { case 0: return &v.state case 1: @@ -1071,7 +1226,7 @@ func file_gitpod_v1_installation_proto_init() { } } file_gitpod_v1_installation_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateBlockedRepositoryRequest); i { + switch v := v.(*GetInstallationWorkspaceDefaultImageResponse); i { case 0: return &v.state case 1: @@ -1083,7 +1238,7 @@ func file_gitpod_v1_installation_proto_init() { } } file_gitpod_v1_installation_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateBlockedRepositoryResponse); i { + switch v := v.(*ListBlockedRepositoriesRequest); i { case 0: return &v.state case 1: @@ -1095,7 +1250,7 @@ func file_gitpod_v1_installation_proto_init() { } } file_gitpod_v1_installation_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteBlockedRepositoryRequest); i { + switch v := v.(*ListBlockedRepositoriesResponse); i { case 0: return &v.state case 1: @@ -1107,7 +1262,7 @@ func file_gitpod_v1_installation_proto_init() { } } file_gitpod_v1_installation_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteBlockedRepositoryResponse); i { + switch v := v.(*CreateBlockedRepositoryRequest); i { case 0: return &v.state case 1: @@ -1119,7 +1274,7 @@ func file_gitpod_v1_installation_proto_init() { } } file_gitpod_v1_installation_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListBlockedEmailDomainsRequest); i { + switch v := v.(*CreateBlockedRepositoryResponse); i { case 0: return &v.state case 1: @@ -1131,7 +1286,7 @@ func file_gitpod_v1_installation_proto_init() { } } file_gitpod_v1_installation_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListBlockedEmailDomainsResponse); i { + switch v := v.(*DeleteBlockedRepositoryRequest); i { case 0: return &v.state case 1: @@ -1143,7 +1298,7 @@ func file_gitpod_v1_installation_proto_init() { } } file_gitpod_v1_installation_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateBlockedEmailDomainRequest); i { + switch v := v.(*DeleteBlockedRepositoryResponse); i { case 0: return &v.state case 1: @@ -1155,7 +1310,7 @@ func file_gitpod_v1_installation_proto_init() { } } file_gitpod_v1_installation_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateBlockedEmailDomainResponse); i { + switch v := v.(*ListBlockedEmailDomainsRequest); i { case 0: return &v.state case 1: @@ -1167,7 +1322,7 @@ func file_gitpod_v1_installation_proto_init() { } } file_gitpod_v1_installation_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockedRepository); i { + switch v := v.(*ListBlockedEmailDomainsResponse); i { case 0: return &v.state case 1: @@ -1179,6 +1334,42 @@ func file_gitpod_v1_installation_proto_init() { } } file_gitpod_v1_installation_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateBlockedEmailDomainRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_installation_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateBlockedEmailDomainResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_installation_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BlockedRepository); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_v1_installation_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BlockedEmailDomain); i { case 0: return &v.state @@ -1197,7 +1388,7 @@ func file_gitpod_v1_installation_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gitpod_v1_installation_proto_rawDesc, NumEnums: 0, - NumMessages: 14, + NumMessages: 17, NumExtensions: 0, NumServices: 1, }, diff --git a/components/public-api/go/v1/installation_grpc.pb.go b/components/public-api/go/v1/installation_grpc.pb.go index a44caade249580..5060f7162b63f0 100644 --- a/components/public-api/go/v1/installation_grpc.pb.go +++ b/components/public-api/go/v1/installation_grpc.pb.go @@ -39,6 +39,8 @@ type InstallationServiceClient interface { ListBlockedEmailDomains(ctx context.Context, in *ListBlockedEmailDomainsRequest, opts ...grpc.CallOption) (*ListBlockedEmailDomainsResponse, error) // CreateBlockedEmailDomain creates a new blocked email domain. CreateBlockedEmailDomain(ctx context.Context, in *CreateBlockedEmailDomainRequest, opts ...grpc.CallOption) (*CreateBlockedEmailDomainResponse, error) + // GetOnboardingState returns the onboarding state of the installation. + GetOnboardingState(ctx context.Context, in *GetOnboardingStateRequest, opts ...grpc.CallOption) (*GetOnboardingStateResponse, error) } type installationServiceClient struct { @@ -103,6 +105,15 @@ func (c *installationServiceClient) CreateBlockedEmailDomain(ctx context.Context return out, nil } +func (c *installationServiceClient) GetOnboardingState(ctx context.Context, in *GetOnboardingStateRequest, opts ...grpc.CallOption) (*GetOnboardingStateResponse, error) { + out := new(GetOnboardingStateResponse) + err := c.cc.Invoke(ctx, "/gitpod.v1.InstallationService/GetOnboardingState", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // InstallationServiceServer is the server API for InstallationService service. // All implementations must embed UnimplementedInstallationServiceServer // for forward compatibility @@ -120,6 +131,8 @@ type InstallationServiceServer interface { ListBlockedEmailDomains(context.Context, *ListBlockedEmailDomainsRequest) (*ListBlockedEmailDomainsResponse, error) // CreateBlockedEmailDomain creates a new blocked email domain. CreateBlockedEmailDomain(context.Context, *CreateBlockedEmailDomainRequest) (*CreateBlockedEmailDomainResponse, error) + // GetOnboardingState returns the onboarding state of the installation. + GetOnboardingState(context.Context, *GetOnboardingStateRequest) (*GetOnboardingStateResponse, error) mustEmbedUnimplementedInstallationServiceServer() } @@ -145,6 +158,9 @@ func (UnimplementedInstallationServiceServer) ListBlockedEmailDomains(context.Co func (UnimplementedInstallationServiceServer) CreateBlockedEmailDomain(context.Context, *CreateBlockedEmailDomainRequest) (*CreateBlockedEmailDomainResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateBlockedEmailDomain not implemented") } +func (UnimplementedInstallationServiceServer) GetOnboardingState(context.Context, *GetOnboardingStateRequest) (*GetOnboardingStateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetOnboardingState not implemented") +} func (UnimplementedInstallationServiceServer) mustEmbedUnimplementedInstallationServiceServer() {} // UnsafeInstallationServiceServer may be embedded to opt out of forward compatibility for this service. @@ -266,6 +282,24 @@ func _InstallationService_CreateBlockedEmailDomain_Handler(srv interface{}, ctx return interceptor(ctx, in, info, handler) } +func _InstallationService_GetOnboardingState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetOnboardingStateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InstallationServiceServer).GetOnboardingState(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gitpod.v1.InstallationService/GetOnboardingState", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InstallationServiceServer).GetOnboardingState(ctx, req.(*GetOnboardingStateRequest)) + } + return interceptor(ctx, in, info, handler) +} + // InstallationService_ServiceDesc is the grpc.ServiceDesc for InstallationService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -297,6 +331,10 @@ var InstallationService_ServiceDesc = grpc.ServiceDesc{ MethodName: "CreateBlockedEmailDomain", Handler: _InstallationService_CreateBlockedEmailDomain_Handler, }, + { + MethodName: "GetOnboardingState", + Handler: _InstallationService_GetOnboardingState_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "gitpod/v1/installation.proto", diff --git a/components/public-api/go/v1/v1connect/installation.connect.go b/components/public-api/go/v1/v1connect/installation.connect.go index be289028307be0..47826d3c612001 100644 --- a/components/public-api/go/v1/v1connect/installation.connect.go +++ b/components/public-api/go/v1/v1connect/installation.connect.go @@ -44,6 +44,8 @@ type InstallationServiceClient interface { ListBlockedEmailDomains(context.Context, *connect_go.Request[v1.ListBlockedEmailDomainsRequest]) (*connect_go.Response[v1.ListBlockedEmailDomainsResponse], error) // CreateBlockedEmailDomain creates a new blocked email domain. CreateBlockedEmailDomain(context.Context, *connect_go.Request[v1.CreateBlockedEmailDomainRequest]) (*connect_go.Response[v1.CreateBlockedEmailDomainResponse], error) + // GetOnboardingState returns the onboarding state of the installation. + GetOnboardingState(context.Context, *connect_go.Request[v1.GetOnboardingStateRequest]) (*connect_go.Response[v1.GetOnboardingStateResponse], error) } // NewInstallationServiceClient constructs a client for the gitpod.v1.InstallationService service. @@ -86,6 +88,11 @@ func NewInstallationServiceClient(httpClient connect_go.HTTPClient, baseURL stri baseURL+"/gitpod.v1.InstallationService/CreateBlockedEmailDomain", opts..., ), + getOnboardingState: connect_go.NewClient[v1.GetOnboardingStateRequest, v1.GetOnboardingStateResponse]( + httpClient, + baseURL+"/gitpod.v1.InstallationService/GetOnboardingState", + opts..., + ), } } @@ -97,6 +104,7 @@ type installationServiceClient struct { deleteBlockedRepository *connect_go.Client[v1.DeleteBlockedRepositoryRequest, v1.DeleteBlockedRepositoryResponse] listBlockedEmailDomains *connect_go.Client[v1.ListBlockedEmailDomainsRequest, v1.ListBlockedEmailDomainsResponse] createBlockedEmailDomain *connect_go.Client[v1.CreateBlockedEmailDomainRequest, v1.CreateBlockedEmailDomainResponse] + getOnboardingState *connect_go.Client[v1.GetOnboardingStateRequest, v1.GetOnboardingStateResponse] } // GetInstallationWorkspaceDefaultImage calls @@ -130,6 +138,11 @@ func (c *installationServiceClient) CreateBlockedEmailDomain(ctx context.Context return c.createBlockedEmailDomain.CallUnary(ctx, req) } +// GetOnboardingState calls gitpod.v1.InstallationService.GetOnboardingState. +func (c *installationServiceClient) GetOnboardingState(ctx context.Context, req *connect_go.Request[v1.GetOnboardingStateRequest]) (*connect_go.Response[v1.GetOnboardingStateResponse], error) { + return c.getOnboardingState.CallUnary(ctx, req) +} + // InstallationServiceHandler is an implementation of the gitpod.v1.InstallationService service. type InstallationServiceHandler interface { // GetInstallationWorkspaceDefaultImage returns the default image for current @@ -145,6 +158,8 @@ type InstallationServiceHandler interface { ListBlockedEmailDomains(context.Context, *connect_go.Request[v1.ListBlockedEmailDomainsRequest]) (*connect_go.Response[v1.ListBlockedEmailDomainsResponse], error) // CreateBlockedEmailDomain creates a new blocked email domain. CreateBlockedEmailDomain(context.Context, *connect_go.Request[v1.CreateBlockedEmailDomainRequest]) (*connect_go.Response[v1.CreateBlockedEmailDomainResponse], error) + // GetOnboardingState returns the onboarding state of the installation. + GetOnboardingState(context.Context, *connect_go.Request[v1.GetOnboardingStateRequest]) (*connect_go.Response[v1.GetOnboardingStateResponse], error) } // NewInstallationServiceHandler builds an HTTP handler from the service implementation. It returns @@ -184,6 +199,11 @@ func NewInstallationServiceHandler(svc InstallationServiceHandler, opts ...conne svc.CreateBlockedEmailDomain, opts..., )) + mux.Handle("/gitpod.v1.InstallationService/GetOnboardingState", connect_go.NewUnaryHandler( + "/gitpod.v1.InstallationService/GetOnboardingState", + svc.GetOnboardingState, + opts..., + )) return "/gitpod.v1.InstallationService/", mux } @@ -213,3 +233,7 @@ func (UnimplementedInstallationServiceHandler) ListBlockedEmailDomains(context.C func (UnimplementedInstallationServiceHandler) CreateBlockedEmailDomain(context.Context, *connect_go.Request[v1.CreateBlockedEmailDomainRequest]) (*connect_go.Response[v1.CreateBlockedEmailDomainResponse], error) { return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("gitpod.v1.InstallationService.CreateBlockedEmailDomain is not implemented")) } + +func (UnimplementedInstallationServiceHandler) GetOnboardingState(context.Context, *connect_go.Request[v1.GetOnboardingStateRequest]) (*connect_go.Response[v1.GetOnboardingStateResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("gitpod.v1.InstallationService.GetOnboardingState is not implemented")) +} diff --git a/components/public-api/go/v1/v1connect/installation.proxy.connect.go b/components/public-api/go/v1/v1connect/installation.proxy.connect.go index f48b5a2ebc51aa..c99d1a651aa42f 100644 --- a/components/public-api/go/v1/v1connect/installation.proxy.connect.go +++ b/components/public-api/go/v1/v1connect/installation.proxy.connect.go @@ -78,3 +78,13 @@ func (s *ProxyInstallationServiceHandler) CreateBlockedEmailDomain(ctx context.C return connect_go.NewResponse(resp), nil } + +func (s *ProxyInstallationServiceHandler) GetOnboardingState(ctx context.Context, req *connect_go.Request[v1.GetOnboardingStateRequest]) (*connect_go.Response[v1.GetOnboardingStateResponse], error) { + resp, err := s.Client.GetOnboardingState(ctx, req.Msg) + if err != nil { + // TODO(milan): Convert to correct status code + return nil, err + } + + return connect_go.NewResponse(resp), nil +} diff --git a/components/public-api/typescript-common/src/public-api-converter.spec.ts b/components/public-api/typescript-common/src/public-api-converter.spec.ts index b0cc3fe662a34f..e916987a1e9590 100644 --- a/components/public-api/typescript-common/src/public-api-converter.spec.ts +++ b/components/public-api/typescript-common/src/public-api-converter.spec.ts @@ -263,6 +263,18 @@ describe("PublicAPIConverter", () => { }); }); + describe("toOnboardingState", () => { + it("should convert", () => { + const result = converter.toOnboardingState({ + isCompleted: true, + hasAnyOrg: true, + }); + expect(result).to.deep.equal({ + completed: true, + }); + }); + }); + describe("errors", () => { it("USER_BLOCKED", () => { const connectError = converter.toError(new ApplicationError(ErrorCodes.USER_BLOCKED, "user blocked")); diff --git a/components/public-api/typescript-common/src/public-api-converter.ts b/components/public-api/typescript-common/src/public-api-converter.ts index fd580b2f86ee71..3da8343aa662cb 100644 --- a/components/public-api/typescript-common/src/public-api-converter.ts +++ b/components/public-api/typescript-common/src/public-api-converter.ts @@ -75,7 +75,11 @@ import { WorkspaceStatus_WorkspaceConditions, } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb"; import { EditorReference } from "@gitpod/public-api/lib/gitpod/v1/editor_pb"; -import { BlockedEmailDomain, BlockedRepository } from "@gitpod/public-api/lib/gitpod/v1/installation_pb"; +import { + BlockedEmailDomain, + BlockedRepository, + OnboardingState, +} from "@gitpod/public-api/lib/gitpod/v1/installation_pb"; import { SSHPublicKey } from "@gitpod/public-api/lib/gitpod/v1/ssh_pb"; import { ConfigurationEnvironmentVariable, @@ -144,6 +148,7 @@ import { SupportedWorkspaceClass } from "@gitpod/gitpod-protocol/lib/workspace-c import { RoleOrPermission } from "@gitpod/gitpod-protocol/lib/permission"; import { parseGoDurationToMs } from "@gitpod/gitpod-protocol/lib/util/timeutil"; import { isWorkspaceRegion } from "@gitpod/gitpod-protocol/lib/workspace-cluster"; +import { GitpodServer } from "@gitpod/gitpod-protocol"; export type PartialConfiguration = DeepPartial & Pick; @@ -1313,4 +1318,10 @@ export class PublicAPIConverter { creationTime: snapshot.creationTime ? this.toTimestamp(snapshot.creationTime) : undefined, }); } + + toOnboardingState(state: GitpodServer.OnboardingState): OnboardingState { + return new OnboardingState({ + completed: state.isCompleted, + }); + } } diff --git a/components/public-api/typescript/src/gitpod/v1/installation_connect.ts b/components/public-api/typescript/src/gitpod/v1/installation_connect.ts index 9f41a9057a47ad..2a50cccf3b0e82 100644 --- a/components/public-api/typescript/src/gitpod/v1/installation_connect.ts +++ b/components/public-api/typescript/src/gitpod/v1/installation_connect.ts @@ -9,7 +9,7 @@ /* eslint-disable */ // @ts-nocheck -import { CreateBlockedEmailDomainRequest, CreateBlockedEmailDomainResponse, CreateBlockedRepositoryRequest, CreateBlockedRepositoryResponse, DeleteBlockedRepositoryRequest, DeleteBlockedRepositoryResponse, GetInstallationWorkspaceDefaultImageRequest, GetInstallationWorkspaceDefaultImageResponse, ListBlockedEmailDomainsRequest, ListBlockedEmailDomainsResponse, ListBlockedRepositoriesRequest, ListBlockedRepositoriesResponse } from "./installation_pb.js"; +import { CreateBlockedEmailDomainRequest, CreateBlockedEmailDomainResponse, CreateBlockedRepositoryRequest, CreateBlockedRepositoryResponse, DeleteBlockedRepositoryRequest, DeleteBlockedRepositoryResponse, GetInstallationWorkspaceDefaultImageRequest, GetInstallationWorkspaceDefaultImageResponse, GetOnboardingStateRequest, GetOnboardingStateResponse, ListBlockedEmailDomainsRequest, ListBlockedEmailDomainsResponse, ListBlockedRepositoriesRequest, ListBlockedRepositoriesResponse } from "./installation_pb.js"; import { MethodKind } from "@bufbuild/protobuf"; /** @@ -85,5 +85,16 @@ export const InstallationService = { O: CreateBlockedEmailDomainResponse, kind: MethodKind.Unary, }, + /** + * GetOnboardingState returns the onboarding state of the installation. + * + * @generated from rpc gitpod.v1.InstallationService.GetOnboardingState + */ + getOnboardingState: { + name: "GetOnboardingState", + I: GetOnboardingStateRequest, + O: GetOnboardingStateResponse, + kind: MethodKind.Unary, + }, } } as const; diff --git a/components/public-api/typescript/src/gitpod/v1/installation_pb.ts b/components/public-api/typescript/src/gitpod/v1/installation_pb.ts index 92b54baa8f8d2f..f2032dd67c2725 100644 --- a/components/public-api/typescript/src/gitpod/v1/installation_pb.ts +++ b/components/public-api/typescript/src/gitpod/v1/installation_pb.ts @@ -14,6 +14,111 @@ import { Message, proto3, Timestamp } from "@bufbuild/protobuf"; import { PaginationRequest, PaginationResponse } from "./pagination_pb.js"; import { Sort } from "./sorting_pb.js"; +/** + * @generated from message gitpod.v1.GetOnboardingStateRequest + */ +export class GetOnboardingStateRequest extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.GetOnboardingStateRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetOnboardingStateRequest { + return new GetOnboardingStateRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetOnboardingStateRequest { + return new GetOnboardingStateRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetOnboardingStateRequest { + return new GetOnboardingStateRequest().fromJsonString(jsonString, options); + } + + static equals(a: GetOnboardingStateRequest | PlainMessage | undefined, b: GetOnboardingStateRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(GetOnboardingStateRequest, a, b); + } +} + +/** + * @generated from message gitpod.v1.GetOnboardingStateResponse + */ +export class GetOnboardingStateResponse extends Message { + /** + * @generated from field: gitpod.v1.OnboardingState onboarding_state = 1; + */ + onboardingState?: OnboardingState; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.GetOnboardingStateResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "onboarding_state", kind: "message", T: OnboardingState }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetOnboardingStateResponse { + return new GetOnboardingStateResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetOnboardingStateResponse { + return new GetOnboardingStateResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetOnboardingStateResponse { + return new GetOnboardingStateResponse().fromJsonString(jsonString, options); + } + + static equals(a: GetOnboardingStateResponse | PlainMessage | undefined, b: GetOnboardingStateResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(GetOnboardingStateResponse, a, b); + } +} + +/** + * @generated from message gitpod.v1.OnboardingState + */ +export class OnboardingState extends Message { + /** + * @generated from field: bool completed = 1; + */ + completed = false; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "gitpod.v1.OnboardingState"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "completed", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OnboardingState { + return new OnboardingState().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OnboardingState { + return new OnboardingState().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OnboardingState { + return new OnboardingState().fromJsonString(jsonString, options); + } + + static equals(a: OnboardingState | PlainMessage | undefined, b: OnboardingState | PlainMessage | undefined): boolean { + return proto3.util.equals(OnboardingState, a, b); + } +} + /** * @generated from message gitpod.v1.GetInstallationWorkspaceDefaultImageRequest */ diff --git a/components/server/src/api/installation-service-api.ts b/components/server/src/api/installation-service-api.ts index 2222d684cd2256..3b4924c70d8799 100644 --- a/components/server/src/api/installation-service-api.ts +++ b/components/server/src/api/installation-service-api.ts @@ -16,6 +16,8 @@ import { DeleteBlockedRepositoryResponse, GetInstallationWorkspaceDefaultImageRequest, GetInstallationWorkspaceDefaultImageResponse, + GetOnboardingStateRequest, + GetOnboardingStateResponse, ListBlockedEmailDomainsRequest, ListBlockedEmailDomainsResponse, ListBlockedRepositoriesRequest, @@ -28,6 +30,7 @@ import { PaginationToken, generatePaginationToken, parsePaginationToken } from " import { parseSorting } from "./sorting"; import { PaginationResponse } from "@gitpod/public-api/lib/gitpod/v1/pagination_pb"; import { PublicAPIConverter } from "@gitpod/public-api-common/lib/public-api-converter"; +import { Unauthenticated } from "./unauthenticated"; @injectable() export class InstallationServiceAPI implements ServiceImpl { @@ -137,4 +140,12 @@ export class InstallationServiceAPI implements ServiceImpl { + const state = await this.installationService.getOnboardingState(); + return new GetOnboardingStateResponse({ + onboardingState: this.apiConverter.toOnboardingState(state), + }); + } } diff --git a/components/server/src/api/server.ts b/components/server/src/api/server.ts index 18dcf4a23c2f5c..867e26115d37e0 100644 --- a/components/server/src/api/server.ts +++ b/components/server/src/api/server.ts @@ -59,6 +59,8 @@ import { VerificationServiceAPI } from "./verification-service-api"; import { VerificationService } from "@gitpod/public-api/lib/gitpod/v1/verification_connect"; import { UserServiceAPI } from "./user-service-api"; import { UserService as UserServiceInternal } from "../user/user-service"; +import { InstallationServiceAPI } from "./installation-service-api"; +import { InstallationService } from "@gitpod/public-api/lib/gitpod/v1/installation_connect"; decorate(injectable(), PublicAPIConverter); @@ -87,6 +89,7 @@ export class API { @inject(BearerAuth) private readonly bearerAuthenticator: BearerAuth; @inject(PrebuildServiceAPI) private readonly prebuildServiceApi: PrebuildServiceAPI; @inject(VerificationServiceAPI) private readonly verificationServiceApi: VerificationServiceAPI; + @inject(InstallationServiceAPI) private readonly installationServiceApi: InstallationServiceAPI; listenPrivate(): http.Server { const app = express(); @@ -137,6 +140,7 @@ export class API { service(SSHService, this.sshServiceApi), service(PrebuildService, this.prebuildServiceApi), service(VerificationService, this.verificationServiceApi), + service(InstallationService, this.installationServiceApi), ]) { router.service(type, new Proxy(impl, this.interceptService(type))); } @@ -392,6 +396,7 @@ export class API { bind(StatsServiceAPI).toSelf().inSingletonScope(); bind(PrebuildServiceAPI).toSelf().inSingletonScope(); bind(VerificationServiceAPI).toSelf().inSingletonScope(); + bind(InstallationServiceAPI).toSelf().inSingletonScope(); bind(API).toSelf().inSingletonScope(); } } diff --git a/components/server/src/api/teams.spec.db.ts b/components/server/src/api/teams.spec.db.ts index ce14ce6fa7e6ec..9a25a211ba3641 100644 --- a/components/server/src/api/teams.spec.db.ts +++ b/components/server/src/api/teams.spec.db.ts @@ -35,6 +35,7 @@ import { ContextParser } from "../workspace/context-parser-service"; import { SSHKeyService } from "../user/sshkey-service"; import { PrebuildManager } from "../prebuilds/prebuild-manager"; import { VerificationService } from "../auth/verification-service"; +import { InstallationService } from "../auth/installation-service"; const expect = chai.expect; @@ -67,6 +68,7 @@ export class APITeamsServiceSpec { this.container.bind(SSHKeyService).toConstantValue({} as SSHKeyService); this.container.bind(PrebuildManager).toConstantValue({} as PrebuildManager); this.container.bind(VerificationService).toConstantValue({} as VerificationService); + this.container.bind(InstallationService).toConstantValue({} as InstallationService); // Clean-up database const typeorm = testContainer.get(TypeORM); diff --git a/components/server/src/auth/installation-service.ts b/components/server/src/auth/installation-service.ts index f7c1f57f9c0d40..ae5fc6d133c612 100644 --- a/components/server/src/auth/installation-service.ts +++ b/components/server/src/auth/installation-service.ts @@ -4,9 +4,9 @@ * See License.AGPL.txt in the project root for license information. */ -import { AdminGetListRequest, AdminGetListResult, EmailDomainFilterEntry } from "@gitpod/gitpod-protocol"; +import { AdminGetListRequest, AdminGetListResult, EmailDomainFilterEntry, GitpodServer } from "@gitpod/gitpod-protocol"; import { inject, injectable } from "inversify"; -import { EmailDomainFilterDB } from "@gitpod/gitpod-db/lib"; +import { EmailDomainFilterDB, TeamDB } from "@gitpod/gitpod-db/lib"; import { BlockedRepository } from "@gitpod/gitpod-protocol/lib/blocked-repositories-protocol"; import { Authorizer } from "../authorization/authorizer"; import { BlockedRepositoryDB } from "@gitpod/gitpod-db/lib/blocked-repository-db"; @@ -18,6 +18,7 @@ export class InstallationService { @inject(Authorizer) private readonly auth: Authorizer; @inject(BlockedRepositoryDB) private readonly blockedRepositoryDB: BlockedRepositoryDB; @inject(EmailDomainFilterDB) private readonly emailDomainFilterDB: EmailDomainFilterDB; + @inject(TeamDB) private readonly teamDB: TeamDB; public async adminGetBlockedRepositories( userId: string, @@ -63,4 +64,27 @@ export class InstallationService { public async getWorkspaceDefaultImage(): Promise { return this.config.workspaceDefaults.workspaceImage; } + + async getOnboardingState(): Promise { + // Find useful details about the state of the Gitpod installation. + const { rows } = await this.teamDB.findTeams( + 0 /* offset */, + 1 /* limit */, + "creationTime" /* order by */, + "ASC", + "" /* empty search term returns any */, + ); + const hasAnyOrg = rows.length > 0; + let isCompleted = false; + for (const row of rows) { + isCompleted = await this.teamDB.hasActiveSSO(row.id); + if (isCompleted) { + break; + } + } + return { + isCompleted, + hasAnyOrg, + }; + } } diff --git a/components/server/src/workspace/gitpod-server-impl.ts b/components/server/src/workspace/gitpod-server-impl.ts index 84434487174a6c..b720b39792a0a0 100644 --- a/components/server/src/workspace/gitpod-server-impl.ts +++ b/components/server/src/workspace/gitpod-server-impl.ts @@ -2354,26 +2354,7 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable { } async getOnboardingState(ctx: TraceContext): Promise { - // Find useful details about the state of the Gitpod installation. - const { rows } = await this.teamDB.findTeams( - 0 /* offset */, - 1 /* limit */, - "creationTime" /* order by */, - "ASC", - "" /* empty search term returns any */, - ); - const hasAnyOrg = rows.length > 0; - let isCompleted = false; - for (const row of rows) { - isCompleted = await this.teamDB.hasActiveSSO(row.id); - if (isCompleted) { - break; - } - } - return { - isCompleted, - hasAnyOrg, - }; + return this.installationService.getOnboardingState(); } private async guardWithFeatureFlag(flagName: string, user: User, teamId: string) {