From cd144de51f60e4fc6fa13d154463106a980e2c53 Mon Sep 17 00:00:00 2001 From: Jean Pierre Date: Sun, 13 Nov 2022 17:09:49 +0000 Subject: [PATCH] Add IDEClientService --- .../public-api-server/pkg/apiv1/ide_client.go | 91 +++ .../public-api-server/pkg/apiv1/workspace.go | 34 - .../public-api-server/pkg/server/server.go | 3 + .../gitpod/experimental/v1/ide_client.proto | 23 + .../gitpod/experimental/v1/workspaces.proto | 16 - .../go/experimental/v1/ide_client.pb.go | 341 ++++++++ .../go/experimental/v1/ide_client_grpc.pb.go | 149 ++++ .../v1/v1connect/ide_client.connect.go | 117 +++ .../v1/v1connect/workspaces.connect.go | 48 -- .../go/experimental/v1/workspaces.pb.go | 739 ++++++------------ .../go/experimental/v1/workspaces_grpc.pb.go | 76 -- .../experimental/v1/ide_client_connectweb.ts | 44 ++ .../gitpod/experimental/v1/ide_client_pb.ts | 149 ++++ .../experimental/v1/workspaces_connectweb.ts | 24 +- .../gitpod/experimental/v1/workspaces_pb.ts | 136 ---- 15 files changed, 1162 insertions(+), 828 deletions(-) create mode 100644 components/public-api-server/pkg/apiv1/ide_client.go create mode 100644 components/public-api/gitpod/experimental/v1/ide_client.proto create mode 100644 components/public-api/go/experimental/v1/ide_client.pb.go create mode 100644 components/public-api/go/experimental/v1/ide_client_grpc.pb.go create mode 100644 components/public-api/go/experimental/v1/v1connect/ide_client.connect.go create mode 100644 components/public-api/typescript/src/gitpod/experimental/v1/ide_client_connectweb.ts create mode 100644 components/public-api/typescript/src/gitpod/experimental/v1/ide_client_pb.ts diff --git a/components/public-api-server/pkg/apiv1/ide_client.go b/components/public-api-server/pkg/apiv1/ide_client.go new file mode 100644 index 00000000000000..207fd3d90f19b7 --- /dev/null +++ b/components/public-api-server/pkg/apiv1/ide_client.go @@ -0,0 +1,91 @@ +// Copyright (c) 2022 Gitpod GmbH. All rights reserved. +// Licensed under the GNU Affero General Public License (AGPL). +// See License-AGPL.txt in the project root for license information. + +package apiv1 + +import ( + "context" + "fmt" + + connect "github.com/bufbuild/connect-go" + v1 "github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1" + "github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1/v1connect" + protocol "github.com/gitpod-io/gitpod/gitpod-protocol" + "github.com/gitpod-io/gitpod/public-api-server/pkg/proxy" + "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" +) + +func NewIDEClientService(pool proxy.ServerConnectionPool) *IDEClientService { + return &IDEClientService{ + connectionPool: pool, + } +} + +var _ v1connect.IDEClientServiceHandler = (*IDEClientService)(nil) + +type IDEClientService struct { + connectionPool proxy.ServerConnectionPool + + v1connect.UnimplementedIDEClientServiceHandler +} + +func (this *IDEClientService) SendHeartbeat(ctx context.Context, req *connect.Request[v1.SendHeartbeatRequest]) (*connect.Response[v1.SendHeartbeatResponse], error) { + logger := ctxlogrus.Extract(ctx) + + conn, err := getConnection(ctx, this.connectionPool) + if err != nil { + return nil, err + } + + workspace, err := conn.GetWorkspace(ctx, req.Msg.GetWorkspaceId()) + if err != nil { + logger.WithError(err).Error("Failed to get workspace.") + return nil, proxy.ConvertError(err) + } + + if workspace.LatestInstance == nil { + logger.WithError(err).Error("Failed to get latest instance.") + return nil, connect.NewError(connect.CodeFailedPrecondition, fmt.Errorf("instance not found")) + } + + err = conn.SendHeartBeat(ctx, &protocol.SendHeartBeatOptions{ + InstanceID: workspace.LatestInstance.ID, + WasClosed: false, + }) + if err != nil { + return nil, proxy.ConvertError(err) + } + + return connect.NewResponse(&v1.SendHeartbeatResponse{}), nil +} + +func (this *IDEClientService) SendDidClose(ctx context.Context, req *connect.Request[v1.SendDidCloseRequest]) (*connect.Response[v1.SendDidCloseResponse], error) { + logger := ctxlogrus.Extract(ctx) + + conn, err := getConnection(ctx, this.connectionPool) + if err != nil { + return nil, err + } + + workspace, err := conn.GetWorkspace(ctx, req.Msg.GetWorkspaceId()) + if err != nil { + logger.WithError(err).Error("Failed to get workspace.") + return nil, proxy.ConvertError(err) + } + + if workspace.LatestInstance == nil { + logger.WithError(err).Error("Failed to get latest instance.") + return nil, connect.NewError(connect.CodeFailedPrecondition, fmt.Errorf("instance not found")) + } + + err = conn.SendHeartBeat(ctx, &protocol.SendHeartBeatOptions{ + InstanceID: workspace.LatestInstance.ID, + WasClosed: true, + }) + if err != nil { + return nil, proxy.ConvertError(err) + } + + return connect.NewResponse(&v1.SendDidCloseResponse{}), nil +} diff --git a/components/public-api-server/pkg/apiv1/workspace.go b/components/public-api-server/pkg/apiv1/workspace.go index 58398a81ba6ebc..70656b9621fcf1 100644 --- a/components/public-api-server/pkg/apiv1/workspace.go +++ b/components/public-api-server/pkg/apiv1/workspace.go @@ -122,40 +122,6 @@ func (s *WorkspaceService) ListWorkspaces(ctx context.Context, req *connect.Requ ), nil } -func (s *WorkspaceService) SendHeartbeat(ctx context.Context, req *connect.Request[v1.SendHeartbeatRequest]) (*connect.Response[v1.SendHeartbeatResponse], error) { - conn, err := getConnection(ctx, s.connectionPool) - if err != nil { - return nil, err - } - - err = conn.SendHeartBeat(ctx, &protocol.SendHeartBeatOptions{ - InstanceID: req.Msg.GetWorkspaceId(), - WasClosed: false, - }) - if err != nil { - return nil, proxy.ConvertError(err) - } - - return connect.NewResponse(&v1.SendHeartbeatResponse{}), nil -} - -func (s *WorkspaceService) SendCloseSignal(ctx context.Context, req *connect.Request[v1.SendCloseSignalRequest]) (*connect.Response[v1.SendCloseSignalResponse], error) { - conn, err := getConnection(ctx, s.connectionPool) - if err != nil { - return nil, err - } - - err = conn.SendHeartBeat(ctx, &protocol.SendHeartBeatOptions{ - InstanceID: req.Msg.GetWorkspaceId(), - WasClosed: true, - }) - if err != nil { - return nil, proxy.ConvertError(err) - } - - return connect.NewResponse(&v1.SendCloseSignalResponse{}), nil -} - func getLimitFromPagination(pagination *v1.Pagination) (int, error) { const ( defaultLimit = 20 diff --git a/components/public-api-server/pkg/server/server.go b/components/public-api-server/pkg/server/server.go index a09099079a6791..e176ab539f3893 100644 --- a/components/public-api-server/pkg/server/server.go +++ b/components/public-api-server/pkg/server/server.go @@ -126,6 +126,9 @@ func register(srv *baseserver.Server, connPool proxy.ServerConnectionPool, expCl userRoute, userServiceHandler := v1connect.NewUserServiceHandler(apiv1.NewUserService(connPool), handlerOptions...) srv.HTTPMux().Handle(userRoute, userServiceHandler) + ideClientRoute, ideClientServiceHandler := v1connect.NewIDEClientServiceHandler(apiv1.NewIDEClientService(connPool), handlerOptions...) + srv.HTTPMux().Handle(ideClientRoute, ideClientServiceHandler) + return nil } diff --git a/components/public-api/gitpod/experimental/v1/ide_client.proto b/components/public-api/gitpod/experimental/v1/ide_client.proto new file mode 100644 index 00000000000000..89309350cbef0e --- /dev/null +++ b/components/public-api/gitpod/experimental/v1/ide_client.proto @@ -0,0 +1,23 @@ +syntax = "proto3"; + +package gitpod.experimental.v1; + +option go_package = "github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1"; + +service IDEClientService { + // SendHeartbeat sends a clientheartbeat signal for a running workspace. + rpc SendHeartbeat(SendHeartbeatRequest) returns (SendHeartbeatResponse) {} + + // SendDidClose sends a client close signal for a running workspace. + rpc SendDidClose(SendDidCloseRequest) returns (SendDidCloseResponse) {} +} + +message SendHeartbeatRequest { + string workspace_id = 1; +} +message SendHeartbeatResponse {} + +message SendDidCloseRequest { + string workspace_id = 1; +} +message SendDidCloseResponse {} diff --git a/components/public-api/gitpod/experimental/v1/workspaces.proto b/components/public-api/gitpod/experimental/v1/workspaces.proto index 877a595019286f..385838f75ac381 100644 --- a/components/public-api/gitpod/experimental/v1/workspaces.proto +++ b/components/public-api/gitpod/experimental/v1/workspaces.proto @@ -27,12 +27,6 @@ service WorkspacesService { // NOT_FOUND: the workspace_id is unkown // FAILED_PRECONDITION: if there's no running instance rpc StopWorkspace(StopWorkspaceRequest) returns (stream StopWorkspaceResponse) {} - - // SendHeartbeat sends a heartbeat signal to a running workspace. - rpc SendHeartbeat(SendHeartbeatRequest) returns (SendHeartbeatResponse) {} - - // SendCloseSignal sends a close signal to a running workspace. - rpc SendCloseSignal(SendCloseSignalRequest) returns (SendCloseSignalResponse) {} } message ListWorkspacesRequest { @@ -91,16 +85,6 @@ message StopWorkspaceRequest { } message StopWorkspaceResponse {} -message SendHeartbeatRequest { - string workspace_id = 1; -} -message SendHeartbeatResponse {} - -message SendCloseSignalRequest { - string workspace_id = 1; -} -message SendCloseSignalResponse {} - //////////////////////////////// // Shared messages come here //////////////////////////////// diff --git a/components/public-api/go/experimental/v1/ide_client.pb.go b/components/public-api/go/experimental/v1/ide_client.pb.go new file mode 100644 index 00000000000000..1234ce6413d603 --- /dev/null +++ b/components/public-api/go/experimental/v1/ide_client.pb.go @@ -0,0 +1,341 @@ +// Copyright (c) 2022 Gitpod GmbH. All rights reserved. +// Licensed under the GNU Affero General Public License (AGPL). +// See License-AGPL.txt in the project root for license information. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: gitpod/experimental/v1/ide_client.proto + +package v1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type SendHeartbeatRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + WorkspaceId string `protobuf:"bytes,1,opt,name=workspace_id,json=workspaceId,proto3" json:"workspace_id,omitempty"` +} + +func (x *SendHeartbeatRequest) Reset() { + *x = SendHeartbeatRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_experimental_v1_ide_client_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendHeartbeatRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendHeartbeatRequest) ProtoMessage() {} + +func (x *SendHeartbeatRequest) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_experimental_v1_ide_client_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 SendHeartbeatRequest.ProtoReflect.Descriptor instead. +func (*SendHeartbeatRequest) Descriptor() ([]byte, []int) { + return file_gitpod_experimental_v1_ide_client_proto_rawDescGZIP(), []int{0} +} + +func (x *SendHeartbeatRequest) GetWorkspaceId() string { + if x != nil { + return x.WorkspaceId + } + return "" +} + +type SendHeartbeatResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SendHeartbeatResponse) Reset() { + *x = SendHeartbeatResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_experimental_v1_ide_client_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendHeartbeatResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendHeartbeatResponse) ProtoMessage() {} + +func (x *SendHeartbeatResponse) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_experimental_v1_ide_client_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 SendHeartbeatResponse.ProtoReflect.Descriptor instead. +func (*SendHeartbeatResponse) Descriptor() ([]byte, []int) { + return file_gitpod_experimental_v1_ide_client_proto_rawDescGZIP(), []int{1} +} + +type SendDidCloseRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + WorkspaceId string `protobuf:"bytes,1,opt,name=workspace_id,json=workspaceId,proto3" json:"workspace_id,omitempty"` +} + +func (x *SendDidCloseRequest) Reset() { + *x = SendDidCloseRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_experimental_v1_ide_client_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendDidCloseRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendDidCloseRequest) ProtoMessage() {} + +func (x *SendDidCloseRequest) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_experimental_v1_ide_client_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 SendDidCloseRequest.ProtoReflect.Descriptor instead. +func (*SendDidCloseRequest) Descriptor() ([]byte, []int) { + return file_gitpod_experimental_v1_ide_client_proto_rawDescGZIP(), []int{2} +} + +func (x *SendDidCloseRequest) GetWorkspaceId() string { + if x != nil { + return x.WorkspaceId + } + return "" +} + +type SendDidCloseResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SendDidCloseResponse) Reset() { + *x = SendDidCloseResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gitpod_experimental_v1_ide_client_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendDidCloseResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendDidCloseResponse) ProtoMessage() {} + +func (x *SendDidCloseResponse) ProtoReflect() protoreflect.Message { + mi := &file_gitpod_experimental_v1_ide_client_proto_msgTypes[3] + 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 SendDidCloseResponse.ProtoReflect.Descriptor instead. +func (*SendDidCloseResponse) Descriptor() ([]byte, []int) { + return file_gitpod_experimental_v1_ide_client_proto_rawDescGZIP(), []int{3} +} + +var File_gitpod_experimental_v1_ide_client_proto protoreflect.FileDescriptor + +var file_gitpod_experimental_v1_ide_client_proto_rawDesc = []byte{ + 0x0a, 0x27, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x5f, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, + 0x31, 0x22, 0x39, 0x0a, 0x14, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, + 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, + 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x44, 0x69, 0x64, + 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, + 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, + 0x16, 0x0a, 0x14, 0x53, 0x65, 0x6e, 0x64, 0x44, 0x69, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xef, 0x01, 0x0a, 0x10, 0x49, 0x44, 0x45, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6e, 0x0a, 0x0d, + 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x2c, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, + 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x69, + 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, + 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a, 0x0c, + 0x53, 0x65, 0x6e, 0x64, 0x44, 0x69, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x2b, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x44, 0x69, 0x64, 0x43, 0x6c, 0x6f, + 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x44, 0x69, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x46, 0x5a, 0x44, 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, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2f, 0x76, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_gitpod_experimental_v1_ide_client_proto_rawDescOnce sync.Once + file_gitpod_experimental_v1_ide_client_proto_rawDescData = file_gitpod_experimental_v1_ide_client_proto_rawDesc +) + +func file_gitpod_experimental_v1_ide_client_proto_rawDescGZIP() []byte { + file_gitpod_experimental_v1_ide_client_proto_rawDescOnce.Do(func() { + file_gitpod_experimental_v1_ide_client_proto_rawDescData = protoimpl.X.CompressGZIP(file_gitpod_experimental_v1_ide_client_proto_rawDescData) + }) + return file_gitpod_experimental_v1_ide_client_proto_rawDescData +} + +var file_gitpod_experimental_v1_ide_client_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_gitpod_experimental_v1_ide_client_proto_goTypes = []interface{}{ + (*SendHeartbeatRequest)(nil), // 0: gitpod.experimental.v1.SendHeartbeatRequest + (*SendHeartbeatResponse)(nil), // 1: gitpod.experimental.v1.SendHeartbeatResponse + (*SendDidCloseRequest)(nil), // 2: gitpod.experimental.v1.SendDidCloseRequest + (*SendDidCloseResponse)(nil), // 3: gitpod.experimental.v1.SendDidCloseResponse +} +var file_gitpod_experimental_v1_ide_client_proto_depIdxs = []int32{ + 0, // 0: gitpod.experimental.v1.IDEClientService.SendHeartbeat:input_type -> gitpod.experimental.v1.SendHeartbeatRequest + 2, // 1: gitpod.experimental.v1.IDEClientService.SendDidClose:input_type -> gitpod.experimental.v1.SendDidCloseRequest + 1, // 2: gitpod.experimental.v1.IDEClientService.SendHeartbeat:output_type -> gitpod.experimental.v1.SendHeartbeatResponse + 3, // 3: gitpod.experimental.v1.IDEClientService.SendDidClose:output_type -> gitpod.experimental.v1.SendDidCloseResponse + 2, // [2:4] is the sub-list for method output_type + 0, // [0:2] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_gitpod_experimental_v1_ide_client_proto_init() } +func file_gitpod_experimental_v1_ide_client_proto_init() { + if File_gitpod_experimental_v1_ide_client_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_gitpod_experimental_v1_ide_client_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendHeartbeatRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_experimental_v1_ide_client_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendHeartbeatResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_experimental_v1_ide_client_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendDidCloseRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gitpod_experimental_v1_ide_client_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendDidCloseResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_gitpod_experimental_v1_ide_client_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_gitpod_experimental_v1_ide_client_proto_goTypes, + DependencyIndexes: file_gitpod_experimental_v1_ide_client_proto_depIdxs, + MessageInfos: file_gitpod_experimental_v1_ide_client_proto_msgTypes, + }.Build() + File_gitpod_experimental_v1_ide_client_proto = out.File + file_gitpod_experimental_v1_ide_client_proto_rawDesc = nil + file_gitpod_experimental_v1_ide_client_proto_goTypes = nil + file_gitpod_experimental_v1_ide_client_proto_depIdxs = nil +} diff --git a/components/public-api/go/experimental/v1/ide_client_grpc.pb.go b/components/public-api/go/experimental/v1/ide_client_grpc.pb.go new file mode 100644 index 00000000000000..06a75f0b5024b8 --- /dev/null +++ b/components/public-api/go/experimental/v1/ide_client_grpc.pb.go @@ -0,0 +1,149 @@ +// Copyright (c) 2022 Gitpod GmbH. All rights reserved. +// Licensed under the GNU Affero General Public License (AGPL). +// See License-AGPL.txt in the project root for license information. + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc (unknown) +// source: gitpod/experimental/v1/ide_client.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// IDEClientServiceClient is the client API for IDEClientService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type IDEClientServiceClient interface { + // SendHeartbeat sends a clientheartbeat signal for a running workspace. + SendHeartbeat(ctx context.Context, in *SendHeartbeatRequest, opts ...grpc.CallOption) (*SendHeartbeatResponse, error) + // SendDidClose sends a client close signal for a running workspace. + SendDidClose(ctx context.Context, in *SendDidCloseRequest, opts ...grpc.CallOption) (*SendDidCloseResponse, error) +} + +type iDEClientServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewIDEClientServiceClient(cc grpc.ClientConnInterface) IDEClientServiceClient { + return &iDEClientServiceClient{cc} +} + +func (c *iDEClientServiceClient) SendHeartbeat(ctx context.Context, in *SendHeartbeatRequest, opts ...grpc.CallOption) (*SendHeartbeatResponse, error) { + out := new(SendHeartbeatResponse) + err := c.cc.Invoke(ctx, "/gitpod.experimental.v1.IDEClientService/SendHeartbeat", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iDEClientServiceClient) SendDidClose(ctx context.Context, in *SendDidCloseRequest, opts ...grpc.CallOption) (*SendDidCloseResponse, error) { + out := new(SendDidCloseResponse) + err := c.cc.Invoke(ctx, "/gitpod.experimental.v1.IDEClientService/SendDidClose", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// IDEClientServiceServer is the server API for IDEClientService service. +// All implementations must embed UnimplementedIDEClientServiceServer +// for forward compatibility +type IDEClientServiceServer interface { + // SendHeartbeat sends a clientheartbeat signal for a running workspace. + SendHeartbeat(context.Context, *SendHeartbeatRequest) (*SendHeartbeatResponse, error) + // SendDidClose sends a client close signal for a running workspace. + SendDidClose(context.Context, *SendDidCloseRequest) (*SendDidCloseResponse, error) + mustEmbedUnimplementedIDEClientServiceServer() +} + +// UnimplementedIDEClientServiceServer must be embedded to have forward compatible implementations. +type UnimplementedIDEClientServiceServer struct { +} + +func (UnimplementedIDEClientServiceServer) SendHeartbeat(context.Context, *SendHeartbeatRequest) (*SendHeartbeatResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendHeartbeat not implemented") +} +func (UnimplementedIDEClientServiceServer) SendDidClose(context.Context, *SendDidCloseRequest) (*SendDidCloseResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendDidClose not implemented") +} +func (UnimplementedIDEClientServiceServer) mustEmbedUnimplementedIDEClientServiceServer() {} + +// UnsafeIDEClientServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to IDEClientServiceServer will +// result in compilation errors. +type UnsafeIDEClientServiceServer interface { + mustEmbedUnimplementedIDEClientServiceServer() +} + +func RegisterIDEClientServiceServer(s grpc.ServiceRegistrar, srv IDEClientServiceServer) { + s.RegisterService(&IDEClientService_ServiceDesc, srv) +} + +func _IDEClientService_SendHeartbeat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SendHeartbeatRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IDEClientServiceServer).SendHeartbeat(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gitpod.experimental.v1.IDEClientService/SendHeartbeat", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IDEClientServiceServer).SendHeartbeat(ctx, req.(*SendHeartbeatRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IDEClientService_SendDidClose_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SendDidCloseRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IDEClientServiceServer).SendDidClose(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gitpod.experimental.v1.IDEClientService/SendDidClose", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IDEClientServiceServer).SendDidClose(ctx, req.(*SendDidCloseRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// IDEClientService_ServiceDesc is the grpc.ServiceDesc for IDEClientService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var IDEClientService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "gitpod.experimental.v1.IDEClientService", + HandlerType: (*IDEClientServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SendHeartbeat", + Handler: _IDEClientService_SendHeartbeat_Handler, + }, + { + MethodName: "SendDidClose", + Handler: _IDEClientService_SendDidClose_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "gitpod/experimental/v1/ide_client.proto", +} diff --git a/components/public-api/go/experimental/v1/v1connect/ide_client.connect.go b/components/public-api/go/experimental/v1/v1connect/ide_client.connect.go new file mode 100644 index 00000000000000..0b4d37287b4bab --- /dev/null +++ b/components/public-api/go/experimental/v1/v1connect/ide_client.connect.go @@ -0,0 +1,117 @@ +// Copyright (c) 2022 Gitpod GmbH. All rights reserved. +// Licensed under the GNU Affero General Public License (AGPL). +// See License-AGPL.txt in the project root for license information. + +// Code generated by protoc-gen-connect-go. DO NOT EDIT. +// +// Source: gitpod/experimental/v1/ide_client.proto + +package v1connect + +import ( + context "context" + errors "errors" + connect_go "github.com/bufbuild/connect-go" + v1 "github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1" + http "net/http" + strings "strings" +) + +// This is a compile-time assertion to ensure that this generated file and the connect package are +// compatible. If you get a compiler error that this constant is not defined, this code was +// generated with a version of connect newer than the one compiled into your binary. You can fix the +// problem by either regenerating this code with an older version of connect or updating the connect +// version compiled into your binary. +const _ = connect_go.IsAtLeastVersion0_1_0 + +const ( + // IDEClientServiceName is the fully-qualified name of the IDEClientService service. + IDEClientServiceName = "gitpod.experimental.v1.IDEClientService" +) + +// IDEClientServiceClient is a client for the gitpod.experimental.v1.IDEClientService service. +type IDEClientServiceClient interface { + // SendHeartbeat sends a clientheartbeat signal for a running workspace. + SendHeartbeat(context.Context, *connect_go.Request[v1.SendHeartbeatRequest]) (*connect_go.Response[v1.SendHeartbeatResponse], error) + // SendDidClose sends a client close signal for a running workspace. + SendDidClose(context.Context, *connect_go.Request[v1.SendDidCloseRequest]) (*connect_go.Response[v1.SendDidCloseResponse], error) +} + +// NewIDEClientServiceClient constructs a client for the gitpod.experimental.v1.IDEClientService +// service. By default, it uses the Connect protocol with the binary Protobuf Codec, asks for +// gzipped responses, and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply +// the connect.WithGRPC() or connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewIDEClientServiceClient(httpClient connect_go.HTTPClient, baseURL string, opts ...connect_go.ClientOption) IDEClientServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + return &iDEClientServiceClient{ + sendHeartbeat: connect_go.NewClient[v1.SendHeartbeatRequest, v1.SendHeartbeatResponse]( + httpClient, + baseURL+"/gitpod.experimental.v1.IDEClientService/SendHeartbeat", + opts..., + ), + sendDidClose: connect_go.NewClient[v1.SendDidCloseRequest, v1.SendDidCloseResponse]( + httpClient, + baseURL+"/gitpod.experimental.v1.IDEClientService/SendDidClose", + opts..., + ), + } +} + +// iDEClientServiceClient implements IDEClientServiceClient. +type iDEClientServiceClient struct { + sendHeartbeat *connect_go.Client[v1.SendHeartbeatRequest, v1.SendHeartbeatResponse] + sendDidClose *connect_go.Client[v1.SendDidCloseRequest, v1.SendDidCloseResponse] +} + +// SendHeartbeat calls gitpod.experimental.v1.IDEClientService.SendHeartbeat. +func (c *iDEClientServiceClient) SendHeartbeat(ctx context.Context, req *connect_go.Request[v1.SendHeartbeatRequest]) (*connect_go.Response[v1.SendHeartbeatResponse], error) { + return c.sendHeartbeat.CallUnary(ctx, req) +} + +// SendDidClose calls gitpod.experimental.v1.IDEClientService.SendDidClose. +func (c *iDEClientServiceClient) SendDidClose(ctx context.Context, req *connect_go.Request[v1.SendDidCloseRequest]) (*connect_go.Response[v1.SendDidCloseResponse], error) { + return c.sendDidClose.CallUnary(ctx, req) +} + +// IDEClientServiceHandler is an implementation of the gitpod.experimental.v1.IDEClientService +// service. +type IDEClientServiceHandler interface { + // SendHeartbeat sends a clientheartbeat signal for a running workspace. + SendHeartbeat(context.Context, *connect_go.Request[v1.SendHeartbeatRequest]) (*connect_go.Response[v1.SendHeartbeatResponse], error) + // SendDidClose sends a client close signal for a running workspace. + SendDidClose(context.Context, *connect_go.Request[v1.SendDidCloseRequest]) (*connect_go.Response[v1.SendDidCloseResponse], error) +} + +// NewIDEClientServiceHandler builds an HTTP handler from the service implementation. It returns the +// path on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewIDEClientServiceHandler(svc IDEClientServiceHandler, opts ...connect_go.HandlerOption) (string, http.Handler) { + mux := http.NewServeMux() + mux.Handle("/gitpod.experimental.v1.IDEClientService/SendHeartbeat", connect_go.NewUnaryHandler( + "/gitpod.experimental.v1.IDEClientService/SendHeartbeat", + svc.SendHeartbeat, + opts..., + )) + mux.Handle("/gitpod.experimental.v1.IDEClientService/SendDidClose", connect_go.NewUnaryHandler( + "/gitpod.experimental.v1.IDEClientService/SendDidClose", + svc.SendDidClose, + opts..., + )) + return "/gitpod.experimental.v1.IDEClientService/", mux +} + +// UnimplementedIDEClientServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedIDEClientServiceHandler struct{} + +func (UnimplementedIDEClientServiceHandler) SendHeartbeat(context.Context, *connect_go.Request[v1.SendHeartbeatRequest]) (*connect_go.Response[v1.SendHeartbeatResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("gitpod.experimental.v1.IDEClientService.SendHeartbeat is not implemented")) +} + +func (UnimplementedIDEClientServiceHandler) SendDidClose(context.Context, *connect_go.Request[v1.SendDidCloseRequest]) (*connect_go.Response[v1.SendDidCloseResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("gitpod.experimental.v1.IDEClientService.SendDidClose is not implemented")) +} diff --git a/components/public-api/go/experimental/v1/v1connect/workspaces.connect.go b/components/public-api/go/experimental/v1/v1connect/workspaces.connect.go index 59e0d6e12c56f8..5155527950185c 100644 --- a/components/public-api/go/experimental/v1/v1connect/workspaces.connect.go +++ b/components/public-api/go/experimental/v1/v1connect/workspaces.connect.go @@ -45,10 +45,6 @@ type WorkspacesServiceClient interface { // NOT_FOUND: the workspace_id is unkown // FAILED_PRECONDITION: if there's no running instance StopWorkspace(context.Context, *connect_go.Request[v1.StopWorkspaceRequest]) (*connect_go.ServerStreamForClient[v1.StopWorkspaceResponse], error) - // SendHeartbeat sends a heartbeat signal to a running workspace. - SendHeartbeat(context.Context, *connect_go.Request[v1.SendHeartbeatRequest]) (*connect_go.Response[v1.SendHeartbeatResponse], error) - // SendCloseSignal sends a close signal to a running workspace. - SendCloseSignal(context.Context, *connect_go.Request[v1.SendCloseSignalRequest]) (*connect_go.Response[v1.SendCloseSignalResponse], error) } // NewWorkspacesServiceClient constructs a client for the gitpod.experimental.v1.WorkspacesService @@ -86,16 +82,6 @@ func NewWorkspacesServiceClient(httpClient connect_go.HTTPClient, baseURL string baseURL+"/gitpod.experimental.v1.WorkspacesService/StopWorkspace", opts..., ), - sendHeartbeat: connect_go.NewClient[v1.SendHeartbeatRequest, v1.SendHeartbeatResponse]( - httpClient, - baseURL+"/gitpod.experimental.v1.WorkspacesService/SendHeartbeat", - opts..., - ), - sendCloseSignal: connect_go.NewClient[v1.SendCloseSignalRequest, v1.SendCloseSignalResponse]( - httpClient, - baseURL+"/gitpod.experimental.v1.WorkspacesService/SendCloseSignal", - opts..., - ), } } @@ -106,8 +92,6 @@ type workspacesServiceClient struct { getOwnerToken *connect_go.Client[v1.GetOwnerTokenRequest, v1.GetOwnerTokenResponse] createAndStartWorkspace *connect_go.Client[v1.CreateAndStartWorkspaceRequest, v1.CreateAndStartWorkspaceResponse] stopWorkspace *connect_go.Client[v1.StopWorkspaceRequest, v1.StopWorkspaceResponse] - sendHeartbeat *connect_go.Client[v1.SendHeartbeatRequest, v1.SendHeartbeatResponse] - sendCloseSignal *connect_go.Client[v1.SendCloseSignalRequest, v1.SendCloseSignalResponse] } // ListWorkspaces calls gitpod.experimental.v1.WorkspacesService.ListWorkspaces. @@ -135,16 +119,6 @@ func (c *workspacesServiceClient) StopWorkspace(ctx context.Context, req *connec return c.stopWorkspace.CallServerStream(ctx, req) } -// SendHeartbeat calls gitpod.experimental.v1.WorkspacesService.SendHeartbeat. -func (c *workspacesServiceClient) SendHeartbeat(ctx context.Context, req *connect_go.Request[v1.SendHeartbeatRequest]) (*connect_go.Response[v1.SendHeartbeatResponse], error) { - return c.sendHeartbeat.CallUnary(ctx, req) -} - -// SendCloseSignal calls gitpod.experimental.v1.WorkspacesService.SendCloseSignal. -func (c *workspacesServiceClient) SendCloseSignal(ctx context.Context, req *connect_go.Request[v1.SendCloseSignalRequest]) (*connect_go.Response[v1.SendCloseSignalResponse], error) { - return c.sendCloseSignal.CallUnary(ctx, req) -} - // WorkspacesServiceHandler is an implementation of the gitpod.experimental.v1.WorkspacesService // service. type WorkspacesServiceHandler interface { @@ -162,10 +136,6 @@ type WorkspacesServiceHandler interface { // NOT_FOUND: the workspace_id is unkown // FAILED_PRECONDITION: if there's no running instance StopWorkspace(context.Context, *connect_go.Request[v1.StopWorkspaceRequest], *connect_go.ServerStream[v1.StopWorkspaceResponse]) error - // SendHeartbeat sends a heartbeat signal to a running workspace. - SendHeartbeat(context.Context, *connect_go.Request[v1.SendHeartbeatRequest]) (*connect_go.Response[v1.SendHeartbeatResponse], error) - // SendCloseSignal sends a close signal to a running workspace. - SendCloseSignal(context.Context, *connect_go.Request[v1.SendCloseSignalRequest]) (*connect_go.Response[v1.SendCloseSignalResponse], error) } // NewWorkspacesServiceHandler builds an HTTP handler from the service implementation. It returns @@ -200,16 +170,6 @@ func NewWorkspacesServiceHandler(svc WorkspacesServiceHandler, opts ...connect_g svc.StopWorkspace, opts..., )) - mux.Handle("/gitpod.experimental.v1.WorkspacesService/SendHeartbeat", connect_go.NewUnaryHandler( - "/gitpod.experimental.v1.WorkspacesService/SendHeartbeat", - svc.SendHeartbeat, - opts..., - )) - mux.Handle("/gitpod.experimental.v1.WorkspacesService/SendCloseSignal", connect_go.NewUnaryHandler( - "/gitpod.experimental.v1.WorkspacesService/SendCloseSignal", - svc.SendCloseSignal, - opts..., - )) return "/gitpod.experimental.v1.WorkspacesService/", mux } @@ -235,11 +195,3 @@ func (UnimplementedWorkspacesServiceHandler) CreateAndStartWorkspace(context.Con func (UnimplementedWorkspacesServiceHandler) StopWorkspace(context.Context, *connect_go.Request[v1.StopWorkspaceRequest], *connect_go.ServerStream[v1.StopWorkspaceResponse]) error { return connect_go.NewError(connect_go.CodeUnimplemented, errors.New("gitpod.experimental.v1.WorkspacesService.StopWorkspace is not implemented")) } - -func (UnimplementedWorkspacesServiceHandler) SendHeartbeat(context.Context, *connect_go.Request[v1.SendHeartbeatRequest]) (*connect_go.Response[v1.SendHeartbeatResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("gitpod.experimental.v1.WorkspacesService.SendHeartbeat is not implemented")) -} - -func (UnimplementedWorkspacesServiceHandler) SendCloseSignal(context.Context, *connect_go.Request[v1.SendCloseSignalRequest]) (*connect_go.Response[v1.SendCloseSignalResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("gitpod.experimental.v1.WorkspacesService.SendCloseSignal is not implemented")) -} diff --git a/components/public-api/go/experimental/v1/workspaces.pb.go b/components/public-api/go/experimental/v1/workspaces.pb.go index c944b5838ef8ff..3eb801a33f0ace 100644 --- a/components/public-api/go/experimental/v1/workspaces.pb.go +++ b/components/public-api/go/experimental/v1/workspaces.pb.go @@ -168,7 +168,7 @@ func (x WorkspaceInstanceStatus_Phase) Number() protoreflect.EnumNumber { // Deprecated: Use WorkspaceInstanceStatus_Phase.Descriptor instead. func (WorkspaceInstanceStatus_Phase) EnumDescriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{20, 0} + return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{16, 0} } type ListWorkspacesRequest struct { @@ -824,176 +824,6 @@ func (*StopWorkspaceResponse) Descriptor() ([]byte, []int) { return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{11} } -type SendHeartbeatRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - WorkspaceId string `protobuf:"bytes,1,opt,name=workspace_id,json=workspaceId,proto3" json:"workspace_id,omitempty"` -} - -func (x *SendHeartbeatRequest) Reset() { - *x = SendHeartbeatRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SendHeartbeatRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SendHeartbeatRequest) ProtoMessage() {} - -func (x *SendHeartbeatRequest) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[12] - 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 SendHeartbeatRequest.ProtoReflect.Descriptor instead. -func (*SendHeartbeatRequest) Descriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{12} -} - -func (x *SendHeartbeatRequest) GetWorkspaceId() string { - if x != nil { - return x.WorkspaceId - } - return "" -} - -type SendHeartbeatResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *SendHeartbeatResponse) Reset() { - *x = SendHeartbeatResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SendHeartbeatResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SendHeartbeatResponse) ProtoMessage() {} - -func (x *SendHeartbeatResponse) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[13] - 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 SendHeartbeatResponse.ProtoReflect.Descriptor instead. -func (*SendHeartbeatResponse) Descriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{13} -} - -type SendCloseSignalRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - WorkspaceId string `protobuf:"bytes,1,opt,name=workspace_id,json=workspaceId,proto3" json:"workspace_id,omitempty"` -} - -func (x *SendCloseSignalRequest) Reset() { - *x = SendCloseSignalRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SendCloseSignalRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SendCloseSignalRequest) ProtoMessage() {} - -func (x *SendCloseSignalRequest) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[14] - 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 SendCloseSignalRequest.ProtoReflect.Descriptor instead. -func (*SendCloseSignalRequest) Descriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{14} -} - -func (x *SendCloseSignalRequest) GetWorkspaceId() string { - if x != nil { - return x.WorkspaceId - } - return "" -} - -type SendCloseSignalResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *SendCloseSignalResponse) Reset() { - *x = SendCloseSignalResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SendCloseSignalResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SendCloseSignalResponse) ProtoMessage() {} - -func (x *SendCloseSignalResponse) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[15] - 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 SendCloseSignalResponse.ProtoReflect.Descriptor instead. -func (*SendCloseSignalResponse) Descriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{15} -} - // Workspace describes a single workspace type Workspace struct { state protoimpl.MessageState @@ -1017,7 +847,7 @@ type Workspace struct { func (x *Workspace) Reset() { *x = Workspace{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[16] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1030,7 +860,7 @@ func (x *Workspace) String() string { func (*Workspace) ProtoMessage() {} func (x *Workspace) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[16] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1043,7 +873,7 @@ func (x *Workspace) ProtoReflect() protoreflect.Message { // Deprecated: Use Workspace.ProtoReflect.Descriptor instead. func (*Workspace) Descriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{16} + return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{12} } func (x *Workspace) GetWorkspaceId() string { @@ -1101,7 +931,7 @@ type WorkspaceStatus struct { func (x *WorkspaceStatus) Reset() { *x = WorkspaceStatus{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[17] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1114,7 +944,7 @@ func (x *WorkspaceStatus) String() string { func (*WorkspaceStatus) ProtoMessage() {} func (x *WorkspaceStatus) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[17] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1127,7 +957,7 @@ func (x *WorkspaceStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkspaceStatus.ProtoReflect.Descriptor instead. func (*WorkspaceStatus) Descriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{17} + return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{13} } func (x *WorkspaceStatus) GetInstance() *WorkspaceInstance { @@ -1157,7 +987,7 @@ type WorkspaceContext struct { func (x *WorkspaceContext) Reset() { *x = WorkspaceContext{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[18] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1170,7 +1000,7 @@ func (x *WorkspaceContext) String() string { func (*WorkspaceContext) ProtoMessage() {} func (x *WorkspaceContext) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[18] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1183,7 +1013,7 @@ func (x *WorkspaceContext) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkspaceContext.ProtoReflect.Descriptor instead. func (*WorkspaceContext) Descriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{18} + return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{14} } func (x *WorkspaceContext) GetContextUrl() string { @@ -1260,7 +1090,7 @@ type WorkspaceInstance struct { func (x *WorkspaceInstance) Reset() { *x = WorkspaceInstance{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[19] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1273,7 +1103,7 @@ func (x *WorkspaceInstance) String() string { func (*WorkspaceInstance) ProtoMessage() {} func (x *WorkspaceInstance) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[19] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1286,7 +1116,7 @@ func (x *WorkspaceInstance) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkspaceInstance.ProtoReflect.Descriptor instead. func (*WorkspaceInstance) Descriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{19} + return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{15} } func (x *WorkspaceInstance) GetInstanceId() string { @@ -1344,7 +1174,7 @@ type WorkspaceInstanceStatus struct { func (x *WorkspaceInstanceStatus) Reset() { *x = WorkspaceInstanceStatus{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[20] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1357,7 +1187,7 @@ func (x *WorkspaceInstanceStatus) String() string { func (*WorkspaceInstanceStatus) ProtoMessage() {} func (x *WorkspaceInstanceStatus) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[20] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1370,7 +1200,7 @@ func (x *WorkspaceInstanceStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkspaceInstanceStatus.ProtoReflect.Descriptor instead. func (*WorkspaceInstanceStatus) Descriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{20} + return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{16} } func (x *WorkspaceInstanceStatus) GetStatusVersion() uint64 { @@ -1425,7 +1255,7 @@ type StartWorkspaceSpec struct { func (x *StartWorkspaceSpec) Reset() { *x = StartWorkspaceSpec{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[21] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1438,7 +1268,7 @@ func (x *StartWorkspaceSpec) String() string { func (*StartWorkspaceSpec) ProtoMessage() {} func (x *StartWorkspaceSpec) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[21] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1451,7 +1281,7 @@ func (x *StartWorkspaceSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use StartWorkspaceSpec.ProtoReflect.Descriptor instead. func (*StartWorkspaceSpec) Descriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{21} + return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{17} } // Explicit Git context @@ -1467,7 +1297,7 @@ type WorkspaceContext_Git struct { func (x *WorkspaceContext_Git) Reset() { *x = WorkspaceContext_Git{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[22] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1480,7 +1310,7 @@ func (x *WorkspaceContext_Git) String() string { func (*WorkspaceContext_Git) ProtoMessage() {} func (x *WorkspaceContext_Git) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[22] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1493,7 +1323,7 @@ func (x *WorkspaceContext_Git) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkspaceContext_Git.ProtoReflect.Descriptor instead. func (*WorkspaceContext_Git) Descriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{18, 0} + return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{14, 0} } func (x *WorkspaceContext_Git) GetNormalizedContextUrl() string { @@ -1526,7 +1356,7 @@ type WorkspaceContext_Prebuild struct { func (x *WorkspaceContext_Prebuild) Reset() { *x = WorkspaceContext_Prebuild{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[23] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1539,7 +1369,7 @@ func (x *WorkspaceContext_Prebuild) String() string { func (*WorkspaceContext_Prebuild) ProtoMessage() {} func (x *WorkspaceContext_Prebuild) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[23] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1552,7 +1382,7 @@ func (x *WorkspaceContext_Prebuild) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkspaceContext_Prebuild.ProtoReflect.Descriptor instead. func (*WorkspaceContext_Prebuild) Descriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{18, 1} + return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{14, 1} } func (x *WorkspaceContext_Prebuild) GetOriginalContext() *WorkspaceContext_Git { @@ -1581,7 +1411,7 @@ type WorkspaceContext_Snapshot struct { func (x *WorkspaceContext_Snapshot) Reset() { *x = WorkspaceContext_Snapshot{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[24] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1594,7 +1424,7 @@ func (x *WorkspaceContext_Snapshot) String() string { func (*WorkspaceContext_Snapshot) ProtoMessage() {} func (x *WorkspaceContext_Snapshot) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[24] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1607,7 +1437,7 @@ func (x *WorkspaceContext_Snapshot) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkspaceContext_Snapshot.ProtoReflect.Descriptor instead. func (*WorkspaceContext_Snapshot) Descriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{18, 2} + return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{14, 2} } func (x *WorkspaceContext_Snapshot) GetSnapshotId() string { @@ -1638,7 +1468,7 @@ type WorkspaceInstanceStatus_Conditions struct { func (x *WorkspaceInstanceStatus_Conditions) Reset() { *x = WorkspaceInstanceStatus_Conditions{} if protoimpl.UnsafeEnabled { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[25] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1651,7 +1481,7 @@ func (x *WorkspaceInstanceStatus_Conditions) String() string { func (*WorkspaceInstanceStatus_Conditions) ProtoMessage() {} func (x *WorkspaceInstanceStatus_Conditions) ProtoReflect() protoreflect.Message { - mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[25] + mi := &file_gitpod_experimental_v1_workspaces_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1664,7 +1494,7 @@ func (x *WorkspaceInstanceStatus_Conditions) ProtoReflect() protoreflect.Message // Deprecated: Use WorkspaceInstanceStatus_Conditions.ProtoReflect.Descriptor instead. func (*WorkspaceInstanceStatus_Conditions) Descriptor() ([]byte, []int) { - return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{20, 0} + return file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP(), []int{16, 0} } func (x *WorkspaceInstanceStatus_Conditions) GetFailed() string { @@ -1785,204 +1615,179 @@ var file_gitpod_experimental_v1_workspaces_proto_rawDesc = []byte{ 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x0a, 0x14, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, - 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, - 0x64, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, - 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x0a, 0x16, 0x53, 0x65, - 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8f, 0x02, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x65, 0x6e, 0x64, 0x43, - 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x8f, 0x02, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x42, 0x0a, - 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x58, 0x0a, 0x0f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, - 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x22, 0xab, - 0x04, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x75, - 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x55, 0x72, 0x6c, 0x12, 0x40, 0x0a, 0x03, 0x67, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x47, 0x69, 0x74, 0x48, - 0x00, 0x52, 0x03, 0x67, 0x69, 0x74, 0x12, 0x4f, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x64, 0x12, 0x42, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, + 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x58, 0x0a, 0x0f, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x22, 0xab, 0x04, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x40, 0x0a, 0x03, 0x67, 0x69, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, + 0x47, 0x69, 0x74, 0x48, 0x00, 0x52, 0x03, 0x67, 0x69, 0x74, 0x12, 0x4f, 0x0a, 0x08, 0x70, 0x72, + 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x48, + 0x00, 0x52, 0x08, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x4f, 0x0a, 0x08, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x48, 0x00, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x1a, 0x53, 0x0a, 0x03, + 0x47, 0x69, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x14, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x1a, 0x84, 0x01, 0x0a, 0x08, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x57, + 0x0a, 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x2e, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x48, 0x00, 0x52, 0x08, 0x70, - 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x4f, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x69, 0x74, 0x70, + 0x78, 0x74, 0x2e, 0x47, 0x69, 0x74, 0x52, 0x0f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, + 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x1a, 0x2b, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x49, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x22, 0xdb, 0x01, 0x0a, 0x11, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x47, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x8e, + 0x06, 0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x4b, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x35, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x2e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x5a, + 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, + 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x44, 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x48, 0x00, 0x52, 0x08, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x1a, 0x53, 0x0a, 0x03, 0x47, 0x69, 0x74, 0x12, - 0x34, 0x0a, 0x16, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x1a, 0x84, 0x01, - 0x0a, 0x08, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x57, 0x0a, 0x10, 0x6f, 0x72, - 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x47, - 0x69, 0x74, 0x52, 0x0f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x49, 0x64, 0x1a, 0x2b, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, - 0x64, 0x42, 0x09, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xdb, 0x01, 0x0a, - 0x11, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x76, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0xd4, 0x01, 0x0a, + 0x0a, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x4a, 0x0a, + 0x13, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x12, 0x47, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x8e, 0x06, 0x0a, 0x17, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, - 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x50, 0x68, - 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0a, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x11, 0x66, 0x69, 0x72, 0x73, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x31, 0x0a, 0x12, 0x73, 0x74, 0x6f, + 0x70, 0x70, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x10, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, + 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, + 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0xd9, 0x01, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, + 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x52, + 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x48, 0x41, + 0x53, 0x45, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x02, 0x12, + 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, + 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, + 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, + 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x11, + 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, + 0x06, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, + 0x52, 0x55, 0x50, 0x54, 0x45, 0x44, 0x10, 0x07, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, + 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x08, 0x12, 0x11, 0x0a, 0x0d, + 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x09, 0x22, + 0x14, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x2a, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x44, 0x4d, 0x49, 0x53, + 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x44, 0x4d, 0x49, + 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x4f, 0x57, 0x4e, 0x45, + 0x52, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x44, 0x4d, 0x49, + 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x56, 0x45, 0x52, + 0x59, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x32, 0xe4, 0x04, 0x0a, 0x11, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x71, 0x0a, 0x0e, + 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, - 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, - 0x72, 0x6c, 0x12, 0x44, 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x09, 0x61, - 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0xd4, 0x01, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x4a, 0x0a, 0x13, 0x66, 0x69, 0x72, - 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x18, 0x09, 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, 0x11, 0x66, 0x69, 0x72, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x31, 0x0a, 0x12, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, - 0x5f, 0x62, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x00, 0x52, 0x10, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x42, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x73, 0x74, 0x6f, - 0x70, 0x70, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0xd9, 0x01, 0x0a, 0x05, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x48, 0x41, - 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, - 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, - 0x4d, 0x41, 0x47, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x50, - 0x48, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x12, - 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, - 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, - 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, - 0x41, 0x53, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x15, 0x0a, - 0x11, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x55, 0x50, 0x54, - 0x45, 0x44, 0x10, 0x07, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x54, - 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x08, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x48, 0x41, 0x53, - 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x09, 0x22, 0x14, 0x0a, 0x12, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, - 0x63, 0x2a, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, - 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x4f, 0x57, 0x4e, 0x45, 0x52, 0x5f, 0x4f, 0x4e, - 0x4c, 0x59, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x44, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, - 0x4e, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x56, 0x45, 0x52, 0x59, 0x4f, 0x4e, 0x45, - 0x10, 0x02, 0x32, 0xca, 0x06, 0x0a, 0x11, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x71, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, - 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x67, 0x69, 0x74, - 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x69, 0x74, 0x70, - 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a, 0x0c, 0x47, - 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2b, 0x2e, 0x67, 0x69, + 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x6b, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x2b, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, + 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, + 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6e, 0x0a, 0x0d, + 0x47, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2c, 0x2e, + 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8c, 0x01, 0x0a, + 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x36, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6e, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4f, - 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x70, - 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, - 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8c, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x36, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x67, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x37, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, + 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x41, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x0d, 0x53, + 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, - 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x6e, 0x0a, 0x0d, 0x53, 0x65, 0x6e, - 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x2c, 0x2e, 0x67, 0x69, 0x74, + 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, - 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x74, 0x0a, 0x0f, 0x53, 0x65, 0x6e, - 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x2e, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, - 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, - 0x46, 0x5a, 0x44, 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, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x6c, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x42, 0x46, 0x5a, + 0x44, 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, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x6c, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1998,7 +1803,7 @@ func file_gitpod_experimental_v1_workspaces_proto_rawDescGZIP() []byte { } var file_gitpod_experimental_v1_workspaces_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_gitpod_experimental_v1_workspaces_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_gitpod_experimental_v1_workspaces_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_gitpod_experimental_v1_workspaces_proto_goTypes = []interface{}{ (AdmissionLevel)(0), // 0: gitpod.experimental.v1.AdmissionLevel (WorkspaceInstanceStatus_Phase)(0), // 1: gitpod.experimental.v1.WorkspaceInstanceStatus.Phase @@ -2014,60 +1819,52 @@ var file_gitpod_experimental_v1_workspaces_proto_goTypes = []interface{}{ (*StartWorkspaceResponse)(nil), // 11: gitpod.experimental.v1.StartWorkspaceResponse (*StopWorkspaceRequest)(nil), // 12: gitpod.experimental.v1.StopWorkspaceRequest (*StopWorkspaceResponse)(nil), // 13: gitpod.experimental.v1.StopWorkspaceResponse - (*SendHeartbeatRequest)(nil), // 14: gitpod.experimental.v1.SendHeartbeatRequest - (*SendHeartbeatResponse)(nil), // 15: gitpod.experimental.v1.SendHeartbeatResponse - (*SendCloseSignalRequest)(nil), // 16: gitpod.experimental.v1.SendCloseSignalRequest - (*SendCloseSignalResponse)(nil), // 17: gitpod.experimental.v1.SendCloseSignalResponse - (*Workspace)(nil), // 18: gitpod.experimental.v1.Workspace - (*WorkspaceStatus)(nil), // 19: gitpod.experimental.v1.WorkspaceStatus - (*WorkspaceContext)(nil), // 20: gitpod.experimental.v1.WorkspaceContext - (*WorkspaceInstance)(nil), // 21: gitpod.experimental.v1.WorkspaceInstance - (*WorkspaceInstanceStatus)(nil), // 22: gitpod.experimental.v1.WorkspaceInstanceStatus - (*StartWorkspaceSpec)(nil), // 23: gitpod.experimental.v1.StartWorkspaceSpec - (*WorkspaceContext_Git)(nil), // 24: gitpod.experimental.v1.WorkspaceContext.Git - (*WorkspaceContext_Prebuild)(nil), // 25: gitpod.experimental.v1.WorkspaceContext.Prebuild - (*WorkspaceContext_Snapshot)(nil), // 26: gitpod.experimental.v1.WorkspaceContext.Snapshot - (*WorkspaceInstanceStatus_Conditions)(nil), // 27: gitpod.experimental.v1.WorkspaceInstanceStatus.Conditions - (*Pagination)(nil), // 28: gitpod.experimental.v1.Pagination - (*fieldmaskpb.FieldMask)(nil), // 29: google.protobuf.FieldMask - (*timestamppb.Timestamp)(nil), // 30: google.protobuf.Timestamp + (*Workspace)(nil), // 14: gitpod.experimental.v1.Workspace + (*WorkspaceStatus)(nil), // 15: gitpod.experimental.v1.WorkspaceStatus + (*WorkspaceContext)(nil), // 16: gitpod.experimental.v1.WorkspaceContext + (*WorkspaceInstance)(nil), // 17: gitpod.experimental.v1.WorkspaceInstance + (*WorkspaceInstanceStatus)(nil), // 18: gitpod.experimental.v1.WorkspaceInstanceStatus + (*StartWorkspaceSpec)(nil), // 19: gitpod.experimental.v1.StartWorkspaceSpec + (*WorkspaceContext_Git)(nil), // 20: gitpod.experimental.v1.WorkspaceContext.Git + (*WorkspaceContext_Prebuild)(nil), // 21: gitpod.experimental.v1.WorkspaceContext.Prebuild + (*WorkspaceContext_Snapshot)(nil), // 22: gitpod.experimental.v1.WorkspaceContext.Snapshot + (*WorkspaceInstanceStatus_Conditions)(nil), // 23: gitpod.experimental.v1.WorkspaceInstanceStatus.Conditions + (*Pagination)(nil), // 24: gitpod.experimental.v1.Pagination + (*fieldmaskpb.FieldMask)(nil), // 25: google.protobuf.FieldMask + (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp } var file_gitpod_experimental_v1_workspaces_proto_depIdxs = []int32{ - 28, // 0: gitpod.experimental.v1.ListWorkspacesRequest.pagination:type_name -> gitpod.experimental.v1.Pagination - 29, // 1: gitpod.experimental.v1.ListWorkspacesRequest.field_mask:type_name -> google.protobuf.FieldMask - 18, // 2: gitpod.experimental.v1.ListWorkspacesResponse.result:type_name -> gitpod.experimental.v1.Workspace - 18, // 3: gitpod.experimental.v1.GetWorkspaceResponse.result:type_name -> gitpod.experimental.v1.Workspace - 23, // 4: gitpod.experimental.v1.CreateAndStartWorkspaceRequest.start_spec:type_name -> gitpod.experimental.v1.StartWorkspaceSpec - 23, // 5: gitpod.experimental.v1.StartWorkspaceRequest.spec:type_name -> gitpod.experimental.v1.StartWorkspaceSpec - 20, // 6: gitpod.experimental.v1.Workspace.context:type_name -> gitpod.experimental.v1.WorkspaceContext - 19, // 7: gitpod.experimental.v1.Workspace.status:type_name -> gitpod.experimental.v1.WorkspaceStatus - 21, // 8: gitpod.experimental.v1.WorkspaceStatus.instance:type_name -> gitpod.experimental.v1.WorkspaceInstance - 24, // 9: gitpod.experimental.v1.WorkspaceContext.git:type_name -> gitpod.experimental.v1.WorkspaceContext.Git - 25, // 10: gitpod.experimental.v1.WorkspaceContext.prebuild:type_name -> gitpod.experimental.v1.WorkspaceContext.Prebuild - 26, // 11: gitpod.experimental.v1.WorkspaceContext.snapshot:type_name -> gitpod.experimental.v1.WorkspaceContext.Snapshot - 30, // 12: gitpod.experimental.v1.WorkspaceInstance.created_at:type_name -> google.protobuf.Timestamp - 22, // 13: gitpod.experimental.v1.WorkspaceInstance.status:type_name -> gitpod.experimental.v1.WorkspaceInstanceStatus + 24, // 0: gitpod.experimental.v1.ListWorkspacesRequest.pagination:type_name -> gitpod.experimental.v1.Pagination + 25, // 1: gitpod.experimental.v1.ListWorkspacesRequest.field_mask:type_name -> google.protobuf.FieldMask + 14, // 2: gitpod.experimental.v1.ListWorkspacesResponse.result:type_name -> gitpod.experimental.v1.Workspace + 14, // 3: gitpod.experimental.v1.GetWorkspaceResponse.result:type_name -> gitpod.experimental.v1.Workspace + 19, // 4: gitpod.experimental.v1.CreateAndStartWorkspaceRequest.start_spec:type_name -> gitpod.experimental.v1.StartWorkspaceSpec + 19, // 5: gitpod.experimental.v1.StartWorkspaceRequest.spec:type_name -> gitpod.experimental.v1.StartWorkspaceSpec + 16, // 6: gitpod.experimental.v1.Workspace.context:type_name -> gitpod.experimental.v1.WorkspaceContext + 15, // 7: gitpod.experimental.v1.Workspace.status:type_name -> gitpod.experimental.v1.WorkspaceStatus + 17, // 8: gitpod.experimental.v1.WorkspaceStatus.instance:type_name -> gitpod.experimental.v1.WorkspaceInstance + 20, // 9: gitpod.experimental.v1.WorkspaceContext.git:type_name -> gitpod.experimental.v1.WorkspaceContext.Git + 21, // 10: gitpod.experimental.v1.WorkspaceContext.prebuild:type_name -> gitpod.experimental.v1.WorkspaceContext.Prebuild + 22, // 11: gitpod.experimental.v1.WorkspaceContext.snapshot:type_name -> gitpod.experimental.v1.WorkspaceContext.Snapshot + 26, // 12: gitpod.experimental.v1.WorkspaceInstance.created_at:type_name -> google.protobuf.Timestamp + 18, // 13: gitpod.experimental.v1.WorkspaceInstance.status:type_name -> gitpod.experimental.v1.WorkspaceInstanceStatus 1, // 14: gitpod.experimental.v1.WorkspaceInstanceStatus.phase:type_name -> gitpod.experimental.v1.WorkspaceInstanceStatus.Phase - 27, // 15: gitpod.experimental.v1.WorkspaceInstanceStatus.conditions:type_name -> gitpod.experimental.v1.WorkspaceInstanceStatus.Conditions + 23, // 15: gitpod.experimental.v1.WorkspaceInstanceStatus.conditions:type_name -> gitpod.experimental.v1.WorkspaceInstanceStatus.Conditions 0, // 16: gitpod.experimental.v1.WorkspaceInstanceStatus.admission:type_name -> gitpod.experimental.v1.AdmissionLevel - 24, // 17: gitpod.experimental.v1.WorkspaceContext.Prebuild.original_context:type_name -> gitpod.experimental.v1.WorkspaceContext.Git - 30, // 18: gitpod.experimental.v1.WorkspaceInstanceStatus.Conditions.first_user_activity:type_name -> google.protobuf.Timestamp + 20, // 17: gitpod.experimental.v1.WorkspaceContext.Prebuild.original_context:type_name -> gitpod.experimental.v1.WorkspaceContext.Git + 26, // 18: gitpod.experimental.v1.WorkspaceInstanceStatus.Conditions.first_user_activity:type_name -> google.protobuf.Timestamp 2, // 19: gitpod.experimental.v1.WorkspacesService.ListWorkspaces:input_type -> gitpod.experimental.v1.ListWorkspacesRequest 4, // 20: gitpod.experimental.v1.WorkspacesService.GetWorkspace:input_type -> gitpod.experimental.v1.GetWorkspaceRequest 6, // 21: gitpod.experimental.v1.WorkspacesService.GetOwnerToken:input_type -> gitpod.experimental.v1.GetOwnerTokenRequest 8, // 22: gitpod.experimental.v1.WorkspacesService.CreateAndStartWorkspace:input_type -> gitpod.experimental.v1.CreateAndStartWorkspaceRequest 12, // 23: gitpod.experimental.v1.WorkspacesService.StopWorkspace:input_type -> gitpod.experimental.v1.StopWorkspaceRequest - 14, // 24: gitpod.experimental.v1.WorkspacesService.SendHeartbeat:input_type -> gitpod.experimental.v1.SendHeartbeatRequest - 16, // 25: gitpod.experimental.v1.WorkspacesService.SendCloseSignal:input_type -> gitpod.experimental.v1.SendCloseSignalRequest - 3, // 26: gitpod.experimental.v1.WorkspacesService.ListWorkspaces:output_type -> gitpod.experimental.v1.ListWorkspacesResponse - 5, // 27: gitpod.experimental.v1.WorkspacesService.GetWorkspace:output_type -> gitpod.experimental.v1.GetWorkspaceResponse - 7, // 28: gitpod.experimental.v1.WorkspacesService.GetOwnerToken:output_type -> gitpod.experimental.v1.GetOwnerTokenResponse - 9, // 29: gitpod.experimental.v1.WorkspacesService.CreateAndStartWorkspace:output_type -> gitpod.experimental.v1.CreateAndStartWorkspaceResponse - 13, // 30: gitpod.experimental.v1.WorkspacesService.StopWorkspace:output_type -> gitpod.experimental.v1.StopWorkspaceResponse - 15, // 31: gitpod.experimental.v1.WorkspacesService.SendHeartbeat:output_type -> gitpod.experimental.v1.SendHeartbeatResponse - 17, // 32: gitpod.experimental.v1.WorkspacesService.SendCloseSignal:output_type -> gitpod.experimental.v1.SendCloseSignalResponse - 26, // [26:33] is the sub-list for method output_type - 19, // [19:26] is the sub-list for method input_type + 3, // 24: gitpod.experimental.v1.WorkspacesService.ListWorkspaces:output_type -> gitpod.experimental.v1.ListWorkspacesResponse + 5, // 25: gitpod.experimental.v1.WorkspacesService.GetWorkspace:output_type -> gitpod.experimental.v1.GetWorkspaceResponse + 7, // 26: gitpod.experimental.v1.WorkspacesService.GetOwnerToken:output_type -> gitpod.experimental.v1.GetOwnerTokenResponse + 9, // 27: gitpod.experimental.v1.WorkspacesService.CreateAndStartWorkspace:output_type -> gitpod.experimental.v1.CreateAndStartWorkspaceResponse + 13, // 28: gitpod.experimental.v1.WorkspacesService.StopWorkspace:output_type -> gitpod.experimental.v1.StopWorkspaceResponse + 24, // [24:29] is the sub-list for method output_type + 19, // [19:24] is the sub-list for method input_type 19, // [19:19] is the sub-list for extension type_name 19, // [19:19] is the sub-list for extension extendee 0, // [0:19] is the sub-list for field type_name @@ -2225,54 +2022,6 @@ func file_gitpod_experimental_v1_workspaces_proto_init() { } } file_gitpod_experimental_v1_workspaces_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendHeartbeatRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendHeartbeatResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendCloseSignalRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendCloseSignalResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Workspace); i { case 0: return &v.state @@ -2284,7 +2033,7 @@ func file_gitpod_experimental_v1_workspaces_proto_init() { return nil } } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_gitpod_experimental_v1_workspaces_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceStatus); i { case 0: return &v.state @@ -2296,7 +2045,7 @@ func file_gitpod_experimental_v1_workspaces_proto_init() { return nil } } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_gitpod_experimental_v1_workspaces_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceContext); i { case 0: return &v.state @@ -2308,7 +2057,7 @@ func file_gitpod_experimental_v1_workspaces_proto_init() { return nil } } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_gitpod_experimental_v1_workspaces_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceInstance); i { case 0: return &v.state @@ -2320,7 +2069,7 @@ func file_gitpod_experimental_v1_workspaces_proto_init() { return nil } } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_gitpod_experimental_v1_workspaces_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceInstanceStatus); i { case 0: return &v.state @@ -2332,7 +2081,7 @@ func file_gitpod_experimental_v1_workspaces_proto_init() { return nil } } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_gitpod_experimental_v1_workspaces_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartWorkspaceSpec); i { case 0: return &v.state @@ -2344,7 +2093,7 @@ func file_gitpod_experimental_v1_workspaces_proto_init() { return nil } } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_gitpod_experimental_v1_workspaces_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceContext_Git); i { case 0: return &v.state @@ -2356,7 +2105,7 @@ func file_gitpod_experimental_v1_workspaces_proto_init() { return nil } } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_gitpod_experimental_v1_workspaces_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceContext_Prebuild); i { case 0: return &v.state @@ -2368,7 +2117,7 @@ func file_gitpod_experimental_v1_workspaces_proto_init() { return nil } } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_gitpod_experimental_v1_workspaces_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceContext_Snapshot); i { case 0: return &v.state @@ -2380,7 +2129,7 @@ func file_gitpod_experimental_v1_workspaces_proto_init() { return nil } } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_gitpod_experimental_v1_workspaces_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceInstanceStatus_Conditions); i { case 0: return &v.state @@ -2397,19 +2146,19 @@ func file_gitpod_experimental_v1_workspaces_proto_init() { (*CreateAndStartWorkspaceRequest_ContextUrl)(nil), (*CreateAndStartWorkspaceRequest_PrebuildId)(nil), } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[18].OneofWrappers = []interface{}{ + file_gitpod_experimental_v1_workspaces_proto_msgTypes[14].OneofWrappers = []interface{}{ (*WorkspaceContext_Git_)(nil), (*WorkspaceContext_Prebuild_)(nil), (*WorkspaceContext_Snapshot_)(nil), } - file_gitpod_experimental_v1_workspaces_proto_msgTypes[25].OneofWrappers = []interface{}{} + file_gitpod_experimental_v1_workspaces_proto_msgTypes[21].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gitpod_experimental_v1_workspaces_proto_rawDesc, NumEnums: 2, - NumMessages: 26, + NumMessages: 22, NumExtensions: 0, NumServices: 1, }, diff --git a/components/public-api/go/experimental/v1/workspaces_grpc.pb.go b/components/public-api/go/experimental/v1/workspaces_grpc.pb.go index e94b02bd35195a..403942de40b2d9 100644 --- a/components/public-api/go/experimental/v1/workspaces_grpc.pb.go +++ b/components/public-api/go/experimental/v1/workspaces_grpc.pb.go @@ -40,10 +40,6 @@ type WorkspacesServiceClient interface { // NOT_FOUND: the workspace_id is unkown // FAILED_PRECONDITION: if there's no running instance StopWorkspace(ctx context.Context, in *StopWorkspaceRequest, opts ...grpc.CallOption) (WorkspacesService_StopWorkspaceClient, error) - // SendHeartbeat sends a heartbeat signal to a running workspace. - SendHeartbeat(ctx context.Context, in *SendHeartbeatRequest, opts ...grpc.CallOption) (*SendHeartbeatResponse, error) - // SendCloseSignal sends a close signal to a running workspace. - SendCloseSignal(ctx context.Context, in *SendCloseSignalRequest, opts ...grpc.CallOption) (*SendCloseSignalResponse, error) } type workspacesServiceClient struct { @@ -122,24 +118,6 @@ func (x *workspacesServiceStopWorkspaceClient) Recv() (*StopWorkspaceResponse, e return m, nil } -func (c *workspacesServiceClient) SendHeartbeat(ctx context.Context, in *SendHeartbeatRequest, opts ...grpc.CallOption) (*SendHeartbeatResponse, error) { - out := new(SendHeartbeatResponse) - err := c.cc.Invoke(ctx, "/gitpod.experimental.v1.WorkspacesService/SendHeartbeat", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *workspacesServiceClient) SendCloseSignal(ctx context.Context, in *SendCloseSignalRequest, opts ...grpc.CallOption) (*SendCloseSignalResponse, error) { - out := new(SendCloseSignalResponse) - err := c.cc.Invoke(ctx, "/gitpod.experimental.v1.WorkspacesService/SendCloseSignal", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - // WorkspacesServiceServer is the server API for WorkspacesService service. // All implementations must embed UnimplementedWorkspacesServiceServer // for forward compatibility @@ -158,10 +136,6 @@ type WorkspacesServiceServer interface { // NOT_FOUND: the workspace_id is unkown // FAILED_PRECONDITION: if there's no running instance StopWorkspace(*StopWorkspaceRequest, WorkspacesService_StopWorkspaceServer) error - // SendHeartbeat sends a heartbeat signal to a running workspace. - SendHeartbeat(context.Context, *SendHeartbeatRequest) (*SendHeartbeatResponse, error) - // SendCloseSignal sends a close signal to a running workspace. - SendCloseSignal(context.Context, *SendCloseSignalRequest) (*SendCloseSignalResponse, error) mustEmbedUnimplementedWorkspacesServiceServer() } @@ -184,12 +158,6 @@ func (UnimplementedWorkspacesServiceServer) CreateAndStartWorkspace(context.Cont func (UnimplementedWorkspacesServiceServer) StopWorkspace(*StopWorkspaceRequest, WorkspacesService_StopWorkspaceServer) error { return status.Errorf(codes.Unimplemented, "method StopWorkspace not implemented") } -func (UnimplementedWorkspacesServiceServer) SendHeartbeat(context.Context, *SendHeartbeatRequest) (*SendHeartbeatResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SendHeartbeat not implemented") -} -func (UnimplementedWorkspacesServiceServer) SendCloseSignal(context.Context, *SendCloseSignalRequest) (*SendCloseSignalResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SendCloseSignal not implemented") -} func (UnimplementedWorkspacesServiceServer) mustEmbedUnimplementedWorkspacesServiceServer() {} // UnsafeWorkspacesServiceServer may be embedded to opt out of forward compatibility for this service. @@ -296,42 +264,6 @@ func (x *workspacesServiceStopWorkspaceServer) Send(m *StopWorkspaceResponse) er return x.ServerStream.SendMsg(m) } -func _WorkspacesService_SendHeartbeat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SendHeartbeatRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(WorkspacesServiceServer).SendHeartbeat(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gitpod.experimental.v1.WorkspacesService/SendHeartbeat", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(WorkspacesServiceServer).SendHeartbeat(ctx, req.(*SendHeartbeatRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _WorkspacesService_SendCloseSignal_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SendCloseSignalRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(WorkspacesServiceServer).SendCloseSignal(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/gitpod.experimental.v1.WorkspacesService/SendCloseSignal", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(WorkspacesServiceServer).SendCloseSignal(ctx, req.(*SendCloseSignalRequest)) - } - return interceptor(ctx, in, info, handler) -} - // WorkspacesService_ServiceDesc is the grpc.ServiceDesc for WorkspacesService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -355,14 +287,6 @@ var WorkspacesService_ServiceDesc = grpc.ServiceDesc{ MethodName: "CreateAndStartWorkspace", Handler: _WorkspacesService_CreateAndStartWorkspace_Handler, }, - { - MethodName: "SendHeartbeat", - Handler: _WorkspacesService_SendHeartbeat_Handler, - }, - { - MethodName: "SendCloseSignal", - Handler: _WorkspacesService_SendCloseSignal_Handler, - }, }, Streams: []grpc.StreamDesc{ { diff --git a/components/public-api/typescript/src/gitpod/experimental/v1/ide_client_connectweb.ts b/components/public-api/typescript/src/gitpod/experimental/v1/ide_client_connectweb.ts new file mode 100644 index 00000000000000..de636ec19e07f6 --- /dev/null +++ b/components/public-api/typescript/src/gitpod/experimental/v1/ide_client_connectweb.ts @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2022 Gitpod GmbH. All rights reserved. + * Licensed under the GNU Affero General Public License (AGPL). + * See License-AGPL.txt in the project root for license information. + */ + +// @generated by protoc-gen-connect-web v0.2.1 with parameter "target=ts" +// @generated from file gitpod/experimental/v1/ide_client.proto (package gitpod.experimental.v1, syntax proto3) +/* eslint-disable */ +/* @ts-nocheck */ + +import {SendDidCloseRequest, SendDidCloseResponse, SendHeartbeatRequest, SendHeartbeatResponse} from "./ide_client_pb.js"; +import {MethodKind} from "@bufbuild/protobuf"; + +/** + * @generated from service gitpod.experimental.v1.IDEClientService + */ +export const IDEClientService = { + typeName: "gitpod.experimental.v1.IDEClientService", + methods: { + /** + * SendHeartbeat sends a clientheartbeat signal for a running workspace. + * + * @generated from rpc gitpod.experimental.v1.IDEClientService.SendHeartbeat + */ + sendHeartbeat: { + name: "SendHeartbeat", + I: SendHeartbeatRequest, + O: SendHeartbeatResponse, + kind: MethodKind.Unary, + }, + /** + * SendDidClose sends a client close signal for a running workspace. + * + * @generated from rpc gitpod.experimental.v1.IDEClientService.SendDidClose + */ + sendDidClose: { + name: "SendDidClose", + I: SendDidCloseRequest, + O: SendDidCloseResponse, + kind: MethodKind.Unary, + }, + } +} as const; diff --git a/components/public-api/typescript/src/gitpod/experimental/v1/ide_client_pb.ts b/components/public-api/typescript/src/gitpod/experimental/v1/ide_client_pb.ts new file mode 100644 index 00000000000000..1395493557d07e --- /dev/null +++ b/components/public-api/typescript/src/gitpod/experimental/v1/ide_client_pb.ts @@ -0,0 +1,149 @@ +/** + * Copyright (c) 2022 Gitpod GmbH. All rights reserved. + * Licensed under the GNU Affero General Public License (AGPL). + * See License-AGPL.txt in the project root for license information. + */ + +// @generated by protoc-gen-es v0.1.1 with parameter "target=ts" +// @generated from file gitpod/experimental/v1/ide_client.proto (package gitpod.experimental.v1, syntax proto3) +/* eslint-disable */ +/* @ts-nocheck */ + +import type {BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage} from "@bufbuild/protobuf"; +import {Message, proto3} from "@bufbuild/protobuf"; + +/** + * @generated from message gitpod.experimental.v1.SendHeartbeatRequest + */ +export class SendHeartbeatRequest extends Message { + /** + * @generated from field: string workspace_id = 1; + */ + workspaceId = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "gitpod.experimental.v1.SendHeartbeatRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "workspace_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendHeartbeatRequest { + return new SendHeartbeatRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendHeartbeatRequest { + return new SendHeartbeatRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendHeartbeatRequest { + return new SendHeartbeatRequest().fromJsonString(jsonString, options); + } + + static equals(a: SendHeartbeatRequest | PlainMessage | undefined, b: SendHeartbeatRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(SendHeartbeatRequest, a, b); + } +} + +/** + * @generated from message gitpod.experimental.v1.SendHeartbeatResponse + */ +export class SendHeartbeatResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "gitpod.experimental.v1.SendHeartbeatResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendHeartbeatResponse { + return new SendHeartbeatResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendHeartbeatResponse { + return new SendHeartbeatResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendHeartbeatResponse { + return new SendHeartbeatResponse().fromJsonString(jsonString, options); + } + + static equals(a: SendHeartbeatResponse | PlainMessage | undefined, b: SendHeartbeatResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(SendHeartbeatResponse, a, b); + } +} + +/** + * @generated from message gitpod.experimental.v1.SendDidCloseRequest + */ +export class SendDidCloseRequest extends Message { + /** + * @generated from field: string workspace_id = 1; + */ + workspaceId = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "gitpod.experimental.v1.SendDidCloseRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "workspace_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendDidCloseRequest { + return new SendDidCloseRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendDidCloseRequest { + return new SendDidCloseRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendDidCloseRequest { + return new SendDidCloseRequest().fromJsonString(jsonString, options); + } + + static equals(a: SendDidCloseRequest | PlainMessage | undefined, b: SendDidCloseRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(SendDidCloseRequest, a, b); + } +} + +/** + * @generated from message gitpod.experimental.v1.SendDidCloseResponse + */ +export class SendDidCloseResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "gitpod.experimental.v1.SendDidCloseResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendDidCloseResponse { + return new SendDidCloseResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendDidCloseResponse { + return new SendDidCloseResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendDidCloseResponse { + return new SendDidCloseResponse().fromJsonString(jsonString, options); + } + + static equals(a: SendDidCloseResponse | PlainMessage | undefined, b: SendDidCloseResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(SendDidCloseResponse, a, b); + } +} diff --git a/components/public-api/typescript/src/gitpod/experimental/v1/workspaces_connectweb.ts b/components/public-api/typescript/src/gitpod/experimental/v1/workspaces_connectweb.ts index 32c61fa0749988..0f4bd03f790a53 100644 --- a/components/public-api/typescript/src/gitpod/experimental/v1/workspaces_connectweb.ts +++ b/components/public-api/typescript/src/gitpod/experimental/v1/workspaces_connectweb.ts @@ -9,7 +9,7 @@ /* eslint-disable */ /* @ts-nocheck */ -import {CreateAndStartWorkspaceRequest, CreateAndStartWorkspaceResponse, GetOwnerTokenRequest, GetOwnerTokenResponse, GetWorkspaceRequest, GetWorkspaceResponse, ListWorkspacesRequest, ListWorkspacesResponse, SendCloseSignalRequest, SendCloseSignalResponse, SendHeartbeatRequest, SendHeartbeatResponse, StopWorkspaceRequest, StopWorkspaceResponse} from "./workspaces_pb.js"; +import {CreateAndStartWorkspaceRequest, CreateAndStartWorkspaceResponse, GetOwnerTokenRequest, GetOwnerTokenResponse, GetWorkspaceRequest, GetWorkspaceResponse, ListWorkspacesRequest, ListWorkspacesResponse, StopWorkspaceRequest, StopWorkspaceResponse} from "./workspaces_pb.js"; import {MethodKind} from "@bufbuild/protobuf"; /** @@ -76,27 +76,5 @@ export const WorkspacesService = { O: StopWorkspaceResponse, kind: MethodKind.ServerStreaming, }, - /** - * SendHeartbeat sends a heartbeat signal to a running workspace. - * - * @generated from rpc gitpod.experimental.v1.WorkspacesService.SendHeartbeat - */ - sendHeartbeat: { - name: "SendHeartbeat", - I: SendHeartbeatRequest, - O: SendHeartbeatResponse, - kind: MethodKind.Unary, - }, - /** - * SendCloseSignal sends a close signal to a running workspace. - * - * @generated from rpc gitpod.experimental.v1.WorkspacesService.SendCloseSignal - */ - sendCloseSignal: { - name: "SendCloseSignal", - I: SendCloseSignalRequest, - O: SendCloseSignalResponse, - kind: MethodKind.Unary, - }, } } as const; diff --git a/components/public-api/typescript/src/gitpod/experimental/v1/workspaces_pb.ts b/components/public-api/typescript/src/gitpod/experimental/v1/workspaces_pb.ts index a3c60b50cf0415..4e4af4841c5ffd 100644 --- a/components/public-api/typescript/src/gitpod/experimental/v1/workspaces_pb.ts +++ b/components/public-api/typescript/src/gitpod/experimental/v1/workspaces_pb.ts @@ -544,142 +544,6 @@ export class StopWorkspaceResponse extends Message { } } -/** - * @generated from message gitpod.experimental.v1.SendHeartbeatRequest - */ -export class SendHeartbeatRequest extends Message { - /** - * @generated from field: string workspace_id = 1; - */ - workspaceId = ""; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime = proto3; - static readonly typeName = "gitpod.experimental.v1.SendHeartbeatRequest"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "workspace_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): SendHeartbeatRequest { - return new SendHeartbeatRequest().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): SendHeartbeatRequest { - return new SendHeartbeatRequest().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): SendHeartbeatRequest { - return new SendHeartbeatRequest().fromJsonString(jsonString, options); - } - - static equals(a: SendHeartbeatRequest | PlainMessage | undefined, b: SendHeartbeatRequest | PlainMessage | undefined): boolean { - return proto3.util.equals(SendHeartbeatRequest, a, b); - } -} - -/** - * @generated from message gitpod.experimental.v1.SendHeartbeatResponse - */ -export class SendHeartbeatResponse extends Message { - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime = proto3; - static readonly typeName = "gitpod.experimental.v1.SendHeartbeatResponse"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): SendHeartbeatResponse { - return new SendHeartbeatResponse().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): SendHeartbeatResponse { - return new SendHeartbeatResponse().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): SendHeartbeatResponse { - return new SendHeartbeatResponse().fromJsonString(jsonString, options); - } - - static equals(a: SendHeartbeatResponse | PlainMessage | undefined, b: SendHeartbeatResponse | PlainMessage | undefined): boolean { - return proto3.util.equals(SendHeartbeatResponse, a, b); - } -} - -/** - * @generated from message gitpod.experimental.v1.SendCloseSignalRequest - */ -export class SendCloseSignalRequest extends Message { - /** - * @generated from field: string workspace_id = 1; - */ - workspaceId = ""; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime = proto3; - static readonly typeName = "gitpod.experimental.v1.SendCloseSignalRequest"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "workspace_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): SendCloseSignalRequest { - return new SendCloseSignalRequest().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): SendCloseSignalRequest { - return new SendCloseSignalRequest().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): SendCloseSignalRequest { - return new SendCloseSignalRequest().fromJsonString(jsonString, options); - } - - static equals(a: SendCloseSignalRequest | PlainMessage | undefined, b: SendCloseSignalRequest | PlainMessage | undefined): boolean { - return proto3.util.equals(SendCloseSignalRequest, a, b); - } -} - -/** - * @generated from message gitpod.experimental.v1.SendCloseSignalResponse - */ -export class SendCloseSignalResponse extends Message { - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime = proto3; - static readonly typeName = "gitpod.experimental.v1.SendCloseSignalResponse"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): SendCloseSignalResponse { - return new SendCloseSignalResponse().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): SendCloseSignalResponse { - return new SendCloseSignalResponse().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): SendCloseSignalResponse { - return new SendCloseSignalResponse().fromJsonString(jsonString, options); - } - - static equals(a: SendCloseSignalResponse | PlainMessage | undefined, b: SendCloseSignalResponse | PlainMessage | undefined): boolean { - return proto3.util.equals(SendCloseSignalResponse, a, b); - } -} - /** * Workspace describes a single workspace *