diff --git a/docs/docs.json b/docs/docs.json index 85fd7ad8..6f66a9b8 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -10915,6 +10915,42 @@ "oneofdecl": "", "defaultValue": "" }, + { + "name": "project_name", + "description": "ProjectName is the project name for which this invite was created", + "label": "", + "type": "string", + "longType": "string", + "fullType": "string", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "tenant", + "description": "Tenant is the login of tenant who invites to join this project", + "label": "", + "type": "string", + "longType": "string", + "fullType": "string", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "tenant_name", + "description": "TenantName is the name of tenant who invites to join this project", + "label": "", + "type": "string", + "longType": "string", + "fullType": "string", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, { "name": "expires_at", "description": "ExpiresAt the date when this invite expires", @@ -11324,6 +11360,54 @@ "extensions": [], "fields": [] }, + { + "name": "ProjectServiceInviteGetRequest", + "longName": "ProjectServiceInviteGetRequest", + "fullName": "api.v1.ProjectServiceInviteGetRequest", + "description": "ProjectServiceInviteGetRequest is the request payload to get a invite", + "hasExtensions": false, + "hasFields": true, + "hasOneofs": false, + "extensions": [], + "fields": [ + { + "name": "secret", + "description": "Secret of the invite to list", + "label": "", + "type": "string", + "longType": "string", + "fullType": "string", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + } + ] + }, + { + "name": "ProjectServiceInviteGetResponse", + "longName": "ProjectServiceInviteGetResponse", + "fullName": "api.v1.ProjectServiceInviteGetResponse", + "description": "ProjectServiceInviteGetResponse is the response payload to a get invite request", + "hasExtensions": false, + "hasFields": true, + "hasOneofs": false, + "extensions": [], + "fields": [ + { + "name": "invite", + "description": "Invite is the invite", + "label": "", + "type": "ProjectInvite", + "longType": "ProjectInvite", + "fullType": "api.v1.ProjectInvite", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + } + ] + }, { "name": "ProjectServiceInviteRequest", "longName": "ProjectServiceInviteRequest", @@ -11587,6 +11671,86 @@ "extensions": [], "fields": [] }, + { + "name": "ProjectServiceUpdateMemberRequest", + "longName": "ProjectServiceUpdateMemberRequest", + "fullName": "api.v1.ProjectServiceUpdateMemberRequest", + "description": "ProjectServiceUpdateMemberRequest is used to update a member of a project", + "hasExtensions": false, + "hasFields": true, + "hasOneofs": false, + "extensions": [], + "fields": [ + { + "name": "project", + "description": "Project is the uuid of the project", + "label": "", + "type": "string", + "longType": "string", + "fullType": "string", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "", + "options": { + "validate.rules": [ + { + "name": "string.uuid", + "value": true + } + ] + } + }, + { + "name": "member_id", + "description": "MemberID is the id of the member to remove from this project", + "label": "", + "type": "string", + "longType": "string", + "fullType": "string", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "role", + "description": "Role is the role in this project the user will get after the update", + "label": "", + "type": "ProjectRole", + "longType": "ProjectRole", + "fullType": "api.v1.ProjectRole", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + } + ] + }, + { + "name": "ProjectServiceUpdateMemberResponse", + "longName": "ProjectServiceUpdateMemberResponse", + "fullName": "api.v1.ProjectServiceUpdateMemberResponse", + "description": "ProjectServiceUpdateMemberResponse is the response payload to a update member request", + "hasExtensions": false, + "hasFields": true, + "hasOneofs": false, + "extensions": [], + "fields": [ + { + "name": "project_member", + "description": "ProjectMember is the updated project member", + "label": "", + "type": "ProjectMember", + "longType": "ProjectMember", + "fullType": "api.v1.ProjectMember", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + } + ] + }, { "name": "ProjectServiceUpdateRequest", "longName": "ProjectServiceUpdateRequest", @@ -11761,7 +11925,7 @@ }, { "name": "RemoveMember", - "description": "RemoveMember a user from a project", + "description": "RemoveMember remove a user from a project", "requestType": "ProjectServiceRemoveMemberRequest", "requestLongType": "ProjectServiceRemoveMemberRequest", "requestFullType": "api.v1.ProjectServiceRemoveMemberRequest", @@ -11771,6 +11935,18 @@ "responseFullType": "api.v1.ProjectServiceRemoveMemberResponse", "responseStreaming": false }, + { + "name": "UpdateMember", + "description": "UpdateMember update a user for a project", + "requestType": "ProjectServiceUpdateMemberRequest", + "requestLongType": "ProjectServiceUpdateMemberRequest", + "requestFullType": "api.v1.ProjectServiceUpdateMemberRequest", + "requestStreaming": false, + "responseType": "ProjectServiceUpdateMemberResponse", + "responseLongType": "ProjectServiceUpdateMemberResponse", + "responseFullType": "api.v1.ProjectServiceUpdateMemberResponse", + "responseStreaming": false + }, { "name": "Invite", "description": "Invite a user to a project", @@ -11818,6 +11994,18 @@ "responseLongType": "ProjectServiceInvitesListResponse", "responseFullType": "api.v1.ProjectServiceInvitesListResponse", "responseStreaming": false + }, + { + "name": "InviteGet", + "description": "InviteGet get an invite", + "requestType": "ProjectServiceInviteGetRequest", + "requestLongType": "ProjectServiceInviteGetRequest", + "requestFullType": "api.v1.ProjectServiceInviteGetRequest", + "requestStreaming": false, + "responseType": "ProjectServiceInviteGetResponse", + "responseLongType": "ProjectServiceInviteGetResponse", + "responseFullType": "api.v1.ProjectServiceInviteGetResponse", + "responseStreaming": false } ] } diff --git a/go/api/v1/apiv1connect/project.connect.go b/go/api/v1/apiv1connect/project.connect.go index 898e537a..b4e07d16 100644 --- a/go/api/v1/apiv1connect/project.connect.go +++ b/go/api/v1/apiv1connect/project.connect.go @@ -46,6 +46,9 @@ const ( // ProjectServiceRemoveMemberProcedure is the fully-qualified name of the ProjectService's // RemoveMember RPC. ProjectServiceRemoveMemberProcedure = "/api.v1.ProjectService/RemoveMember" + // ProjectServiceUpdateMemberProcedure is the fully-qualified name of the ProjectService's + // UpdateMember RPC. + ProjectServiceUpdateMemberProcedure = "/api.v1.ProjectService/UpdateMember" // ProjectServiceInviteProcedure is the fully-qualified name of the ProjectService's Invite RPC. ProjectServiceInviteProcedure = "/api.v1.ProjectService/Invite" // ProjectServiceInviteAcceptProcedure is the fully-qualified name of the ProjectService's @@ -57,6 +60,9 @@ const ( // ProjectServiceInvitesListProcedure is the fully-qualified name of the ProjectService's // InvitesList RPC. ProjectServiceInvitesListProcedure = "/api.v1.ProjectService/InvitesList" + // ProjectServiceInviteGetProcedure is the fully-qualified name of the ProjectService's InviteGet + // RPC. + ProjectServiceInviteGetProcedure = "/api.v1.ProjectService/InviteGet" ) // These variables are the protoreflect.Descriptor objects for the RPCs defined in this package. @@ -68,10 +74,12 @@ var ( projectServiceDeleteMethodDescriptor = projectServiceServiceDescriptor.Methods().ByName("Delete") projectServiceUpdateMethodDescriptor = projectServiceServiceDescriptor.Methods().ByName("Update") projectServiceRemoveMemberMethodDescriptor = projectServiceServiceDescriptor.Methods().ByName("RemoveMember") + projectServiceUpdateMemberMethodDescriptor = projectServiceServiceDescriptor.Methods().ByName("UpdateMember") projectServiceInviteMethodDescriptor = projectServiceServiceDescriptor.Methods().ByName("Invite") projectServiceInviteAcceptMethodDescriptor = projectServiceServiceDescriptor.Methods().ByName("InviteAccept") projectServiceInviteDeleteMethodDescriptor = projectServiceServiceDescriptor.Methods().ByName("InviteDelete") projectServiceInvitesListMethodDescriptor = projectServiceServiceDescriptor.Methods().ByName("InvitesList") + projectServiceInviteGetMethodDescriptor = projectServiceServiceDescriptor.Methods().ByName("InviteGet") ) // ProjectServiceClient is a client for the api.v1.ProjectService service. @@ -86,8 +94,10 @@ type ProjectServiceClient interface { Delete(context.Context, *connect.Request[v1.ProjectServiceDeleteRequest]) (*connect.Response[v1.ProjectServiceDeleteResponse], error) // Update a project Update(context.Context, *connect.Request[v1.ProjectServiceUpdateRequest]) (*connect.Response[v1.ProjectServiceUpdateResponse], error) - // RemoveMember a user from a project + // RemoveMember remove a user from a project RemoveMember(context.Context, *connect.Request[v1.ProjectServiceRemoveMemberRequest]) (*connect.Response[v1.ProjectServiceRemoveMemberResponse], error) + // UpdateMember update a user for a project + UpdateMember(context.Context, *connect.Request[v1.ProjectServiceUpdateMemberRequest]) (*connect.Response[v1.ProjectServiceUpdateMemberResponse], error) // Invite a user to a project Invite(context.Context, *connect.Request[v1.ProjectServiceInviteRequest]) (*connect.Response[v1.ProjectServiceInviteResponse], error) // InviteAccept is called from a user to accept a invitation @@ -96,6 +106,8 @@ type ProjectServiceClient interface { InviteDelete(context.Context, *connect.Request[v1.ProjectServiceInviteDeleteRequest]) (*connect.Response[v1.ProjectServiceInviteDeleteResponse], error) // InvitesList list all invites to a project InvitesList(context.Context, *connect.Request[v1.ProjectServiceInvitesListRequest]) (*connect.Response[v1.ProjectServiceInvitesListResponse], error) + // InviteGet get an invite + InviteGet(context.Context, *connect.Request[v1.ProjectServiceInviteGetRequest]) (*connect.Response[v1.ProjectServiceInviteGetResponse], error) } // NewProjectServiceClient constructs a client for the api.v1.ProjectService service. By default, it @@ -144,6 +156,12 @@ func NewProjectServiceClient(httpClient connect.HTTPClient, baseURL string, opts connect.WithSchema(projectServiceRemoveMemberMethodDescriptor), connect.WithClientOptions(opts...), ), + updateMember: connect.NewClient[v1.ProjectServiceUpdateMemberRequest, v1.ProjectServiceUpdateMemberResponse]( + httpClient, + baseURL+ProjectServiceUpdateMemberProcedure, + connect.WithSchema(projectServiceUpdateMemberMethodDescriptor), + connect.WithClientOptions(opts...), + ), invite: connect.NewClient[v1.ProjectServiceInviteRequest, v1.ProjectServiceInviteResponse]( httpClient, baseURL+ProjectServiceInviteProcedure, @@ -168,6 +186,12 @@ func NewProjectServiceClient(httpClient connect.HTTPClient, baseURL string, opts connect.WithSchema(projectServiceInvitesListMethodDescriptor), connect.WithClientOptions(opts...), ), + inviteGet: connect.NewClient[v1.ProjectServiceInviteGetRequest, v1.ProjectServiceInviteGetResponse]( + httpClient, + baseURL+ProjectServiceInviteGetProcedure, + connect.WithSchema(projectServiceInviteGetMethodDescriptor), + connect.WithClientOptions(opts...), + ), } } @@ -179,10 +203,12 @@ type projectServiceClient struct { delete *connect.Client[v1.ProjectServiceDeleteRequest, v1.ProjectServiceDeleteResponse] update *connect.Client[v1.ProjectServiceUpdateRequest, v1.ProjectServiceUpdateResponse] removeMember *connect.Client[v1.ProjectServiceRemoveMemberRequest, v1.ProjectServiceRemoveMemberResponse] + updateMember *connect.Client[v1.ProjectServiceUpdateMemberRequest, v1.ProjectServiceUpdateMemberResponse] invite *connect.Client[v1.ProjectServiceInviteRequest, v1.ProjectServiceInviteResponse] inviteAccept *connect.Client[v1.ProjectServiceInviteAcceptRequest, v1.ProjectServiceInviteAcceptResponse] inviteDelete *connect.Client[v1.ProjectServiceInviteDeleteRequest, v1.ProjectServiceInviteDeleteResponse] invitesList *connect.Client[v1.ProjectServiceInvitesListRequest, v1.ProjectServiceInvitesListResponse] + inviteGet *connect.Client[v1.ProjectServiceInviteGetRequest, v1.ProjectServiceInviteGetResponse] } // List calls api.v1.ProjectService.List. @@ -215,6 +241,11 @@ func (c *projectServiceClient) RemoveMember(ctx context.Context, req *connect.Re return c.removeMember.CallUnary(ctx, req) } +// UpdateMember calls api.v1.ProjectService.UpdateMember. +func (c *projectServiceClient) UpdateMember(ctx context.Context, req *connect.Request[v1.ProjectServiceUpdateMemberRequest]) (*connect.Response[v1.ProjectServiceUpdateMemberResponse], error) { + return c.updateMember.CallUnary(ctx, req) +} + // Invite calls api.v1.ProjectService.Invite. func (c *projectServiceClient) Invite(ctx context.Context, req *connect.Request[v1.ProjectServiceInviteRequest]) (*connect.Response[v1.ProjectServiceInviteResponse], error) { return c.invite.CallUnary(ctx, req) @@ -235,6 +266,11 @@ func (c *projectServiceClient) InvitesList(ctx context.Context, req *connect.Req return c.invitesList.CallUnary(ctx, req) } +// InviteGet calls api.v1.ProjectService.InviteGet. +func (c *projectServiceClient) InviteGet(ctx context.Context, req *connect.Request[v1.ProjectServiceInviteGetRequest]) (*connect.Response[v1.ProjectServiceInviteGetResponse], error) { + return c.inviteGet.CallUnary(ctx, req) +} + // ProjectServiceHandler is an implementation of the api.v1.ProjectService service. type ProjectServiceHandler interface { // List all accessible projects @@ -247,8 +283,10 @@ type ProjectServiceHandler interface { Delete(context.Context, *connect.Request[v1.ProjectServiceDeleteRequest]) (*connect.Response[v1.ProjectServiceDeleteResponse], error) // Update a project Update(context.Context, *connect.Request[v1.ProjectServiceUpdateRequest]) (*connect.Response[v1.ProjectServiceUpdateResponse], error) - // RemoveMember a user from a project + // RemoveMember remove a user from a project RemoveMember(context.Context, *connect.Request[v1.ProjectServiceRemoveMemberRequest]) (*connect.Response[v1.ProjectServiceRemoveMemberResponse], error) + // UpdateMember update a user for a project + UpdateMember(context.Context, *connect.Request[v1.ProjectServiceUpdateMemberRequest]) (*connect.Response[v1.ProjectServiceUpdateMemberResponse], error) // Invite a user to a project Invite(context.Context, *connect.Request[v1.ProjectServiceInviteRequest]) (*connect.Response[v1.ProjectServiceInviteResponse], error) // InviteAccept is called from a user to accept a invitation @@ -257,6 +295,8 @@ type ProjectServiceHandler interface { InviteDelete(context.Context, *connect.Request[v1.ProjectServiceInviteDeleteRequest]) (*connect.Response[v1.ProjectServiceInviteDeleteResponse], error) // InvitesList list all invites to a project InvitesList(context.Context, *connect.Request[v1.ProjectServiceInvitesListRequest]) (*connect.Response[v1.ProjectServiceInvitesListResponse], error) + // InviteGet get an invite + InviteGet(context.Context, *connect.Request[v1.ProjectServiceInviteGetRequest]) (*connect.Response[v1.ProjectServiceInviteGetResponse], error) } // NewProjectServiceHandler builds an HTTP handler from the service implementation. It returns the @@ -301,6 +341,12 @@ func NewProjectServiceHandler(svc ProjectServiceHandler, opts ...connect.Handler connect.WithSchema(projectServiceRemoveMemberMethodDescriptor), connect.WithHandlerOptions(opts...), ) + projectServiceUpdateMemberHandler := connect.NewUnaryHandler( + ProjectServiceUpdateMemberProcedure, + svc.UpdateMember, + connect.WithSchema(projectServiceUpdateMemberMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) projectServiceInviteHandler := connect.NewUnaryHandler( ProjectServiceInviteProcedure, svc.Invite, @@ -325,6 +371,12 @@ func NewProjectServiceHandler(svc ProjectServiceHandler, opts ...connect.Handler connect.WithSchema(projectServiceInvitesListMethodDescriptor), connect.WithHandlerOptions(opts...), ) + projectServiceInviteGetHandler := connect.NewUnaryHandler( + ProjectServiceInviteGetProcedure, + svc.InviteGet, + connect.WithSchema(projectServiceInviteGetMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) return "/api.v1.ProjectService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case ProjectServiceListProcedure: @@ -339,6 +391,8 @@ func NewProjectServiceHandler(svc ProjectServiceHandler, opts ...connect.Handler projectServiceUpdateHandler.ServeHTTP(w, r) case ProjectServiceRemoveMemberProcedure: projectServiceRemoveMemberHandler.ServeHTTP(w, r) + case ProjectServiceUpdateMemberProcedure: + projectServiceUpdateMemberHandler.ServeHTTP(w, r) case ProjectServiceInviteProcedure: projectServiceInviteHandler.ServeHTTP(w, r) case ProjectServiceInviteAcceptProcedure: @@ -347,6 +401,8 @@ func NewProjectServiceHandler(svc ProjectServiceHandler, opts ...connect.Handler projectServiceInviteDeleteHandler.ServeHTTP(w, r) case ProjectServiceInvitesListProcedure: projectServiceInvitesListHandler.ServeHTTP(w, r) + case ProjectServiceInviteGetProcedure: + projectServiceInviteGetHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -380,6 +436,10 @@ func (UnimplementedProjectServiceHandler) RemoveMember(context.Context, *connect return nil, connect.NewError(connect.CodeUnimplemented, errors.New("api.v1.ProjectService.RemoveMember is not implemented")) } +func (UnimplementedProjectServiceHandler) UpdateMember(context.Context, *connect.Request[v1.ProjectServiceUpdateMemberRequest]) (*connect.Response[v1.ProjectServiceUpdateMemberResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("api.v1.ProjectService.UpdateMember is not implemented")) +} + func (UnimplementedProjectServiceHandler) Invite(context.Context, *connect.Request[v1.ProjectServiceInviteRequest]) (*connect.Response[v1.ProjectServiceInviteResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("api.v1.ProjectService.Invite is not implemented")) } @@ -395,3 +455,7 @@ func (UnimplementedProjectServiceHandler) InviteDelete(context.Context, *connect func (UnimplementedProjectServiceHandler) InvitesList(context.Context, *connect.Request[v1.ProjectServiceInvitesListRequest]) (*connect.Response[v1.ProjectServiceInvitesListResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("api.v1.ProjectService.InvitesList is not implemented")) } + +func (UnimplementedProjectServiceHandler) InviteGet(context.Context, *connect.Request[v1.ProjectServiceInviteGetRequest]) (*connect.Response[v1.ProjectServiceInviteGetResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("api.v1.ProjectService.InviteGet is not implemented")) +} diff --git a/go/api/v1/project.pb.go b/go/api/v1/project.pb.go index 85d7496f..3732fea0 100644 --- a/go/api/v1/project.pb.go +++ b/go/api/v1/project.pb.go @@ -207,6 +207,12 @@ type ProjectInvite struct { Role ProjectRole `protobuf:"varint,3,opt,name=role,proto3,enum=api.v1.ProjectRole" json:"role,omitempty"` // Joined is false as long as a user has not accepted the invite Joined bool `protobuf:"varint,4,opt,name=joined,proto3" json:"joined,omitempty"` + // ProjectName is the project name for which this invite was created + ProjectName string `protobuf:"bytes,5,opt,name=project_name,json=projectName,proto3" json:"project_name,omitempty"` + // Tenant is the login of tenant who invites to join this project + Tenant string `protobuf:"bytes,6,opt,name=tenant,proto3" json:"tenant,omitempty"` + // TenantName is the name of tenant who invites to join this project + TenantName string `protobuf:"bytes,7,opt,name=tenant_name,json=tenantName,proto3" json:"tenant_name,omitempty"` // ExpiresAt the date when this invite expires ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` // JoinedAt the date when the member accepted this invite @@ -273,6 +279,27 @@ func (x *ProjectInvite) GetJoined() bool { return false } +func (x *ProjectInvite) GetProjectName() string { + if x != nil { + return x.ProjectName + } + return "" +} + +func (x *ProjectInvite) GetTenant() string { + if x != nil { + return x.Tenant + } + return "" +} + +func (x *ProjectInvite) GetTenantName() string { + if x != nil { + return x.TenantName + } + return "" +} + func (x *ProjectInvite) GetExpiresAt() *timestamppb.Timestamp { if x != nil { return x.ExpiresAt @@ -1030,6 +1057,104 @@ func (x *ProjectServiceInvitesListResponse) GetInvites() []*ProjectInvite { return nil } +// ProjectServiceInviteGetRequest is the request payload to get a invite +type ProjectServiceInviteGetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Secret of the invite to list + Secret string `protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"` +} + +func (x *ProjectServiceInviteGetRequest) Reset() { + *x = ProjectServiceInviteGetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_project_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProjectServiceInviteGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProjectServiceInviteGetRequest) ProtoMessage() {} + +func (x *ProjectServiceInviteGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_project_proto_msgTypes[17] + 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 ProjectServiceInviteGetRequest.ProtoReflect.Descriptor instead. +func (*ProjectServiceInviteGetRequest) Descriptor() ([]byte, []int) { + return file_api_v1_project_proto_rawDescGZIP(), []int{17} +} + +func (x *ProjectServiceInviteGetRequest) GetSecret() string { + if x != nil { + return x.Secret + } + return "" +} + +// ProjectServiceInviteGetResponse is the response payload to a get invite request +type ProjectServiceInviteGetResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Invite is the invite + Invite *ProjectInvite `protobuf:"bytes,1,opt,name=invite,proto3" json:"invite,omitempty"` +} + +func (x *ProjectServiceInviteGetResponse) Reset() { + *x = ProjectServiceInviteGetResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_project_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProjectServiceInviteGetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProjectServiceInviteGetResponse) ProtoMessage() {} + +func (x *ProjectServiceInviteGetResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_project_proto_msgTypes[18] + 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 ProjectServiceInviteGetResponse.ProtoReflect.Descriptor instead. +func (*ProjectServiceInviteGetResponse) Descriptor() ([]byte, []int) { + return file_api_v1_project_proto_rawDescGZIP(), []int{18} +} + +func (x *ProjectServiceInviteGetResponse) GetInvite() *ProjectInvite { + if x != nil { + return x.Invite + } + return nil +} + // ProjectServiceRemoveMemberRequest is used to remove a member from a project type ProjectServiceRemoveMemberRequest struct { state protoimpl.MessageState @@ -1045,7 +1170,7 @@ type ProjectServiceRemoveMemberRequest struct { func (x *ProjectServiceRemoveMemberRequest) Reset() { *x = ProjectServiceRemoveMemberRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_project_proto_msgTypes[17] + mi := &file_api_v1_project_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1058,7 +1183,7 @@ func (x *ProjectServiceRemoveMemberRequest) String() string { func (*ProjectServiceRemoveMemberRequest) ProtoMessage() {} func (x *ProjectServiceRemoveMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_project_proto_msgTypes[17] + mi := &file_api_v1_project_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1071,7 +1196,7 @@ func (x *ProjectServiceRemoveMemberRequest) ProtoReflect() protoreflect.Message // Deprecated: Use ProjectServiceRemoveMemberRequest.ProtoReflect.Descriptor instead. func (*ProjectServiceRemoveMemberRequest) Descriptor() ([]byte, []int) { - return file_api_v1_project_proto_rawDescGZIP(), []int{17} + return file_api_v1_project_proto_rawDescGZIP(), []int{19} } func (x *ProjectServiceRemoveMemberRequest) GetProject() string { @@ -1098,7 +1223,7 @@ type ProjectServiceRemoveMemberResponse struct { func (x *ProjectServiceRemoveMemberResponse) Reset() { *x = ProjectServiceRemoveMemberResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_project_proto_msgTypes[18] + mi := &file_api_v1_project_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1111,7 +1236,7 @@ func (x *ProjectServiceRemoveMemberResponse) String() string { func (*ProjectServiceRemoveMemberResponse) ProtoMessage() {} func (x *ProjectServiceRemoveMemberResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_project_proto_msgTypes[18] + mi := &file_api_v1_project_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1124,7 +1249,123 @@ func (x *ProjectServiceRemoveMemberResponse) ProtoReflect() protoreflect.Message // Deprecated: Use ProjectServiceRemoveMemberResponse.ProtoReflect.Descriptor instead. func (*ProjectServiceRemoveMemberResponse) Descriptor() ([]byte, []int) { - return file_api_v1_project_proto_rawDescGZIP(), []int{18} + return file_api_v1_project_proto_rawDescGZIP(), []int{20} +} + +// ProjectServiceUpdateMemberRequest is used to update a member of a project +type ProjectServiceUpdateMemberRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Project is the uuid of the project + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + // MemberID is the id of the member to remove from this project + MemberId string `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + // Role is the role in this project the user will get after the update + Role ProjectRole `protobuf:"varint,3,opt,name=role,proto3,enum=api.v1.ProjectRole" json:"role,omitempty"` +} + +func (x *ProjectServiceUpdateMemberRequest) Reset() { + *x = ProjectServiceUpdateMemberRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_project_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProjectServiceUpdateMemberRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProjectServiceUpdateMemberRequest) ProtoMessage() {} + +func (x *ProjectServiceUpdateMemberRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_project_proto_msgTypes[21] + 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 ProjectServiceUpdateMemberRequest.ProtoReflect.Descriptor instead. +func (*ProjectServiceUpdateMemberRequest) Descriptor() ([]byte, []int) { + return file_api_v1_project_proto_rawDescGZIP(), []int{21} +} + +func (x *ProjectServiceUpdateMemberRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *ProjectServiceUpdateMemberRequest) GetMemberId() string { + if x != nil { + return x.MemberId + } + return "" +} + +func (x *ProjectServiceUpdateMemberRequest) GetRole() ProjectRole { + if x != nil { + return x.Role + } + return ProjectRole_PROJECT_ROLE_UNSPECIFIED +} + +// ProjectServiceUpdateMemberResponse is the response payload to a update member request +type ProjectServiceUpdateMemberResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ProjectMember is the updated project member + ProjectMember *ProjectMember `protobuf:"bytes,5,opt,name=project_member,json=projectMember,proto3" json:"project_member,omitempty"` +} + +func (x *ProjectServiceUpdateMemberResponse) Reset() { + *x = ProjectServiceUpdateMemberResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_project_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProjectServiceUpdateMemberResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProjectServiceUpdateMemberResponse) ProtoMessage() {} + +func (x *ProjectServiceUpdateMemberResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_project_proto_msgTypes[22] + 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 ProjectServiceUpdateMemberResponse.ProtoReflect.Descriptor instead. +func (*ProjectServiceUpdateMemberResponse) Descriptor() ([]byte, []int) { + return file_api_v1_project_proto_rawDescGZIP(), []int{22} +} + +func (x *ProjectServiceUpdateMemberResponse) GetProjectMember() *ProjectMember { + if x != nil { + return x.ProjectMember + } + return nil } // ProjectServiceInviteAcceptRequest is the request payload to a accept invite request @@ -1140,7 +1381,7 @@ type ProjectServiceInviteAcceptRequest struct { func (x *ProjectServiceInviteAcceptRequest) Reset() { *x = ProjectServiceInviteAcceptRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_project_proto_msgTypes[19] + mi := &file_api_v1_project_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1153,7 +1394,7 @@ func (x *ProjectServiceInviteAcceptRequest) String() string { func (*ProjectServiceInviteAcceptRequest) ProtoMessage() {} func (x *ProjectServiceInviteAcceptRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_project_proto_msgTypes[19] + mi := &file_api_v1_project_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1166,7 +1407,7 @@ func (x *ProjectServiceInviteAcceptRequest) ProtoReflect() protoreflect.Message // Deprecated: Use ProjectServiceInviteAcceptRequest.ProtoReflect.Descriptor instead. func (*ProjectServiceInviteAcceptRequest) Descriptor() ([]byte, []int) { - return file_api_v1_project_proto_rawDescGZIP(), []int{19} + return file_api_v1_project_proto_rawDescGZIP(), []int{23} } func (x *ProjectServiceInviteAcceptRequest) GetSecret() string { @@ -1191,7 +1432,7 @@ type ProjectServiceInviteAcceptResponse struct { func (x *ProjectServiceInviteAcceptResponse) Reset() { *x = ProjectServiceInviteAcceptResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_project_proto_msgTypes[20] + mi := &file_api_v1_project_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1204,7 +1445,7 @@ func (x *ProjectServiceInviteAcceptResponse) String() string { func (*ProjectServiceInviteAcceptResponse) ProtoMessage() {} func (x *ProjectServiceInviteAcceptResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_project_proto_msgTypes[20] + mi := &file_api_v1_project_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1217,7 +1458,7 @@ func (x *ProjectServiceInviteAcceptResponse) ProtoReflect() protoreflect.Message // Deprecated: Use ProjectServiceInviteAcceptResponse.ProtoReflect.Descriptor instead. func (*ProjectServiceInviteAcceptResponse) Descriptor() ([]byte, []int) { - return file_api_v1_project_proto_rawDescGZIP(), []int{20} + return file_api_v1_project_proto_rawDescGZIP(), []int{24} } func (x *ProjectServiceInviteAcceptResponse) GetProject() string { @@ -1249,7 +1490,7 @@ type ProjectServiceInviteDeleteRequest struct { func (x *ProjectServiceInviteDeleteRequest) Reset() { *x = ProjectServiceInviteDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_project_proto_msgTypes[21] + mi := &file_api_v1_project_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1262,7 +1503,7 @@ func (x *ProjectServiceInviteDeleteRequest) String() string { func (*ProjectServiceInviteDeleteRequest) ProtoMessage() {} func (x *ProjectServiceInviteDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_project_proto_msgTypes[21] + mi := &file_api_v1_project_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1275,7 +1516,7 @@ func (x *ProjectServiceInviteDeleteRequest) ProtoReflect() protoreflect.Message // Deprecated: Use ProjectServiceInviteDeleteRequest.ProtoReflect.Descriptor instead. func (*ProjectServiceInviteDeleteRequest) Descriptor() ([]byte, []int) { - return file_api_v1_project_proto_rawDescGZIP(), []int{21} + return file_api_v1_project_proto_rawDescGZIP(), []int{25} } func (x *ProjectServiceInviteDeleteRequest) GetProject() string { @@ -1302,7 +1543,7 @@ type ProjectServiceInviteDeleteResponse struct { func (x *ProjectServiceInviteDeleteResponse) Reset() { *x = ProjectServiceInviteDeleteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_project_proto_msgTypes[22] + mi := &file_api_v1_project_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1315,7 +1556,7 @@ func (x *ProjectServiceInviteDeleteResponse) String() string { func (*ProjectServiceInviteDeleteResponse) ProtoMessage() {} func (x *ProjectServiceInviteDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_project_proto_msgTypes[22] + mi := &file_api_v1_project_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1328,7 +1569,7 @@ func (x *ProjectServiceInviteDeleteResponse) ProtoReflect() protoreflect.Message // Deprecated: Use ProjectServiceInviteDeleteResponse.ProtoReflect.Descriptor instead. func (*ProjectServiceInviteDeleteResponse) Descriptor() ([]byte, []int) { - return file_api_v1_project_proto_rawDescGZIP(), []int{22} + return file_api_v1_project_proto_rawDescGZIP(), []int{26} } var File_api_v1_project_proto protoreflect.FileDescriptor @@ -1367,7 +1608,7 @@ var file_api_v1_project_proto_rawDesc = []byte{ 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 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, 0x22, 0xf6, 0x01, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0xd2, 0x02, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, @@ -1375,197 +1616,240 @@ var file_api_v1_project_proto_rawDesc = []byte{ 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x0a, - 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x0a, 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, 0x65, 0x78, - 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x12, 0x37, 0x0a, 0x09, 0x6a, 0x6f, 0x69, 0x6e, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 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, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x74, - 0x22, 0x7d, 0x0a, 0x19, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, - 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, - 0x01, 0x01, 0x12, 0x27, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, 0x48, 0x01, - 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x22, - 0x49, 0x0a, 0x1a, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, - 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3e, 0x0a, 0x18, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, - 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x46, 0x0a, 0x19, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x22, 0x8c, 0x01, 0x0a, 0x1b, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x20, 0x0a, 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, 0x52, 0x05, 0x6c, - 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x02, 0x18, 0x40, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, - 0x02, 0x18, 0x80, 0x04, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x49, 0x0a, 0x1c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x29, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x41, 0x0a, 0x1b, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x07, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, - 0x49, 0x0a, 0x1c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x29, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xb1, 0x01, 0x0a, 0x1b, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x22, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xfa, 0x42, - 0x06, 0x72, 0x04, 0x10, 0x02, 0x18, 0x40, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, - 0x01, 0x01, 0x12, 0x31, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, - 0x18, 0x80, 0x04, 0x48, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0e, - 0x0a, 0x0c, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x49, - 0x0a, 0x1c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, - 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x6a, 0x0a, 0x1b, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0xb0, 0x01, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x27, 0x0a, 0x04, - 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x4d, 0x0a, 0x1c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x06, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x22, 0x46, 0x0a, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0xb0, 0x01, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x54, 0x0a, 0x21, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x07, 0x69, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x73, 0x22, 0x64, 0x0a, 0x21, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, + 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x0a, 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, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, + 0x73, 0x41, 0x74, 0x12, 0x37, 0x0a, 0x09, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x18, 0x0b, 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, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x74, 0x22, 0x7d, 0x0a, 0x19, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, + 0x18, 0x80, 0x01, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x27, + 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, + 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, 0x48, 0x01, 0x52, 0x06, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x22, 0x49, 0x0a, 0x1a, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0x3e, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x07, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x46, 0x0a, 0x19, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x8c, + 0x01, 0x0a, 0x1b, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, + 0x0a, 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, + 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, 0x52, 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x6e, + 0x12, 0x1d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, + 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x02, 0x18, 0x40, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x2c, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x04, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x49, 0x0a, + 0x1c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x41, 0x0a, 0x1b, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, - 0x01, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x22, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, - 0x0a, 0x21, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x61, 0x0a, 0x22, 0x50, + 0x01, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x49, 0x0a, 0x1c, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xb1, 0x01, 0x0a, 0x1b, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, + 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x22, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, + 0x02, 0x18, 0x40, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x31, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x04, 0x48, + 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, + 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x49, 0x0a, 0x1c, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x6a, 0x0a, 0x1b, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x22, 0x4d, 0x0a, 0x1c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x06, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x22, 0x46, 0x0a, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x54, 0x0a, 0x21, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, + 0x07, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x07, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x22, 0x38, + 0x0a, 0x1e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x50, 0x0a, 0x1f, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x69, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x52, 0x06, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, 0x64, 0x0a, 0x21, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, + 0x22, 0x24, 0x0a, 0x22, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x21, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, + 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x27, 0x0a, + 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, + 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x62, 0x0a, 0x22, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0e, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x0d, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x21, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x61, 0x0a, 0x22, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x21, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x24, 0x0a, 0x22, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5f, - 0x0a, 0x21, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, - 0x24, 0x0a, 0x22, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x8c, 0x08, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x57, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xd8, 0xf3, 0x18, 0x03, 0xe8, 0xf3, 0x18, - 0x02, 0x12, 0x5c, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, + 0x69, 0x74, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x32, 0xe5, 0x09, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x57, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x21, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x08, 0xd8, 0xf3, 0x18, 0x03, 0xe8, 0xf3, 0x18, 0x02, 0x12, 0x5c, 0x0a, + 0x03, 0x47, 0x65, 0x74, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0xc8, 0xf3, 0x18, 0x01, 0xc8, + 0xf3, 0x18, 0x02, 0xc8, 0xf3, 0x18, 0x03, 0xe8, 0xf3, 0x18, 0x02, 0x12, 0x61, 0x0a, 0x06, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0xc8, - 0xf3, 0x18, 0x01, 0xc8, 0xf3, 0x18, 0x02, 0xc8, 0xf3, 0x18, 0x03, 0xe8, 0xf3, 0x18, 0x02, 0x12, - 0x61, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0c, 0xc0, 0xf3, 0x18, 0x01, 0xc0, 0xf3, 0x18, 0x02, 0xe8, 0xf3, - 0x18, 0x01, 0x12, 0x5d, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, + 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x0c, 0xc0, 0xf3, 0x18, 0x01, 0xc0, 0xf3, 0x18, 0x02, 0xe8, 0xf3, 0x18, 0x01, 0x12, 0x5d, + 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x08, 0xc8, 0xf3, 0x18, 0x01, 0xe8, 0xf3, 0x18, 0x01, 0x12, 0x61, 0x0a, + 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x0c, 0xc8, 0xf3, 0x18, 0x01, 0xc8, 0xf3, 0x18, 0x02, 0xe8, 0xf3, 0x18, 0x01, + 0x12, 0x6f, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xc8, 0xf3, 0x18, 0x01, 0xe8, 0xf3, 0x18, + 0x01, 0x12, 0x6f, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xc8, 0xf3, 0x18, 0x01, 0xe8, 0xf3, + 0x18, 0x01, 0x12, 0x5d, 0x0a, 0x06, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xc8, 0xf3, 0x18, 0x01, 0xe8, 0xf3, 0x18, - 0x01, 0x12, 0x61, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0c, 0xc8, 0xf3, 0x18, 0x01, 0xc8, 0xf3, 0x18, 0x02, - 0xe8, 0xf3, 0x18, 0x01, 0x12, 0x6f, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xc8, 0xf3, 0x18, - 0x01, 0xe8, 0xf3, 0x18, 0x01, 0x12, 0x5d, 0x0a, 0x06, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, - 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xc8, 0xf3, 0x18, 0x01, - 0xe8, 0xf3, 0x18, 0x01, 0x12, 0x6f, 0x0a, 0x0c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x63, - 0x65, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xd8, 0xf3, 0x18, - 0x03, 0xe8, 0xf3, 0x18, 0x01, 0x12, 0x6f, 0x0a, 0x0c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xc8, 0xf3, - 0x18, 0x01, 0xe8, 0xf3, 0x18, 0x01, 0x12, 0x6c, 0x0a, 0x0b, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xc8, 0xf3, 0x18, 0x01, - 0xe8, 0xf3, 0x18, 0x01, 0x42, 0x85, 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2d, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, - 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x06, 0x41, 0x70, - 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x06, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x12, - 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0xea, 0x02, 0x07, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x01, 0x12, 0x6f, 0x0a, 0x0c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, + 0x63, 0x63, 0x65, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xd8, 0xf3, 0x18, 0x03, 0xe8, 0xf3, + 0x18, 0x01, 0x12, 0x6f, 0x0a, 0x0c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xc8, 0xf3, 0x18, 0x01, 0xe8, + 0xf3, 0x18, 0x01, 0x12, 0x6c, 0x0a, 0x0b, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xc8, 0xf3, 0x18, 0x01, 0xe8, 0xf3, 0x18, + 0x02, 0x12, 0x66, 0x0a, 0x09, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x47, 0x65, 0x74, 0x12, 0x26, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, + 0x76, 0x69, 0x74, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x08, 0xd8, 0xf3, 0x18, 0x03, 0xe8, 0xf3, 0x18, 0x02, 0x42, 0x85, 0x01, 0x0a, 0x0a, 0x63, 0x6f, + 0x6d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, + 0x2d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, + 0xaa, 0x02, 0x06, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x06, 0x41, 0x70, 0x69, 0x5c, + 0x56, 0x31, 0xe2, 0x02, 0x12, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1580,7 +1864,7 @@ func file_api_v1_project_proto_rawDescGZIP() []byte { return file_api_v1_project_proto_rawDescData } -var file_api_v1_project_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_api_v1_project_proto_msgTypes = make([]protoimpl.MessageInfo, 27) var file_api_v1_project_proto_goTypes = []interface{}{ (*Project)(nil), // 0: api.v1.Project (*ProjectMember)(nil), // 1: api.v1.ProjectMember @@ -1599,57 +1883,68 @@ var file_api_v1_project_proto_goTypes = []interface{}{ (*ProjectServiceInviteResponse)(nil), // 14: api.v1.ProjectServiceInviteResponse (*ProjectServiceInvitesListRequest)(nil), // 15: api.v1.ProjectServiceInvitesListRequest (*ProjectServiceInvitesListResponse)(nil), // 16: api.v1.ProjectServiceInvitesListResponse - (*ProjectServiceRemoveMemberRequest)(nil), // 17: api.v1.ProjectServiceRemoveMemberRequest - (*ProjectServiceRemoveMemberResponse)(nil), // 18: api.v1.ProjectServiceRemoveMemberResponse - (*ProjectServiceInviteAcceptRequest)(nil), // 19: api.v1.ProjectServiceInviteAcceptRequest - (*ProjectServiceInviteAcceptResponse)(nil), // 20: api.v1.ProjectServiceInviteAcceptResponse - (*ProjectServiceInviteDeleteRequest)(nil), // 21: api.v1.ProjectServiceInviteDeleteRequest - (*ProjectServiceInviteDeleteResponse)(nil), // 22: api.v1.ProjectServiceInviteDeleteResponse - (*timestamppb.Timestamp)(nil), // 23: google.protobuf.Timestamp - (ProjectRole)(0), // 24: api.v1.ProjectRole + (*ProjectServiceInviteGetRequest)(nil), // 17: api.v1.ProjectServiceInviteGetRequest + (*ProjectServiceInviteGetResponse)(nil), // 18: api.v1.ProjectServiceInviteGetResponse + (*ProjectServiceRemoveMemberRequest)(nil), // 19: api.v1.ProjectServiceRemoveMemberRequest + (*ProjectServiceRemoveMemberResponse)(nil), // 20: api.v1.ProjectServiceRemoveMemberResponse + (*ProjectServiceUpdateMemberRequest)(nil), // 21: api.v1.ProjectServiceUpdateMemberRequest + (*ProjectServiceUpdateMemberResponse)(nil), // 22: api.v1.ProjectServiceUpdateMemberResponse + (*ProjectServiceInviteAcceptRequest)(nil), // 23: api.v1.ProjectServiceInviteAcceptRequest + (*ProjectServiceInviteAcceptResponse)(nil), // 24: api.v1.ProjectServiceInviteAcceptResponse + (*ProjectServiceInviteDeleteRequest)(nil), // 25: api.v1.ProjectServiceInviteDeleteRequest + (*ProjectServiceInviteDeleteResponse)(nil), // 26: api.v1.ProjectServiceInviteDeleteResponse + (*timestamppb.Timestamp)(nil), // 27: google.protobuf.Timestamp + (ProjectRole)(0), // 28: api.v1.ProjectRole } var file_api_v1_project_proto_depIdxs = []int32{ 1, // 0: api.v1.Project.project_members:type_name -> api.v1.ProjectMember - 23, // 1: api.v1.Project.created_at:type_name -> google.protobuf.Timestamp - 23, // 2: api.v1.Project.updated_at:type_name -> google.protobuf.Timestamp - 24, // 3: api.v1.ProjectMember.role:type_name -> api.v1.ProjectRole - 23, // 4: api.v1.ProjectMember.created_at:type_name -> google.protobuf.Timestamp - 24, // 5: api.v1.ProjectInvite.role:type_name -> api.v1.ProjectRole - 23, // 6: api.v1.ProjectInvite.expires_at:type_name -> google.protobuf.Timestamp - 23, // 7: api.v1.ProjectInvite.joined_at:type_name -> google.protobuf.Timestamp + 27, // 1: api.v1.Project.created_at:type_name -> google.protobuf.Timestamp + 27, // 2: api.v1.Project.updated_at:type_name -> google.protobuf.Timestamp + 28, // 3: api.v1.ProjectMember.role:type_name -> api.v1.ProjectRole + 27, // 4: api.v1.ProjectMember.created_at:type_name -> google.protobuf.Timestamp + 28, // 5: api.v1.ProjectInvite.role:type_name -> api.v1.ProjectRole + 27, // 6: api.v1.ProjectInvite.expires_at:type_name -> google.protobuf.Timestamp + 27, // 7: api.v1.ProjectInvite.joined_at:type_name -> google.protobuf.Timestamp 0, // 8: api.v1.ProjectServiceListResponse.projects:type_name -> api.v1.Project 0, // 9: api.v1.ProjectServiceGetResponse.project:type_name -> api.v1.Project 0, // 10: api.v1.ProjectServiceCreateResponse.project:type_name -> api.v1.Project 0, // 11: api.v1.ProjectServiceDeleteResponse.project:type_name -> api.v1.Project 0, // 12: api.v1.ProjectServiceUpdateResponse.project:type_name -> api.v1.Project - 24, // 13: api.v1.ProjectServiceInviteRequest.role:type_name -> api.v1.ProjectRole + 28, // 13: api.v1.ProjectServiceInviteRequest.role:type_name -> api.v1.ProjectRole 2, // 14: api.v1.ProjectServiceInviteResponse.invite:type_name -> api.v1.ProjectInvite 2, // 15: api.v1.ProjectServiceInvitesListResponse.invites:type_name -> api.v1.ProjectInvite - 3, // 16: api.v1.ProjectService.List:input_type -> api.v1.ProjectServiceListRequest - 5, // 17: api.v1.ProjectService.Get:input_type -> api.v1.ProjectServiceGetRequest - 7, // 18: api.v1.ProjectService.Create:input_type -> api.v1.ProjectServiceCreateRequest - 9, // 19: api.v1.ProjectService.Delete:input_type -> api.v1.ProjectServiceDeleteRequest - 11, // 20: api.v1.ProjectService.Update:input_type -> api.v1.ProjectServiceUpdateRequest - 17, // 21: api.v1.ProjectService.RemoveMember:input_type -> api.v1.ProjectServiceRemoveMemberRequest - 13, // 22: api.v1.ProjectService.Invite:input_type -> api.v1.ProjectServiceInviteRequest - 19, // 23: api.v1.ProjectService.InviteAccept:input_type -> api.v1.ProjectServiceInviteAcceptRequest - 21, // 24: api.v1.ProjectService.InviteDelete:input_type -> api.v1.ProjectServiceInviteDeleteRequest - 15, // 25: api.v1.ProjectService.InvitesList:input_type -> api.v1.ProjectServiceInvitesListRequest - 4, // 26: api.v1.ProjectService.List:output_type -> api.v1.ProjectServiceListResponse - 6, // 27: api.v1.ProjectService.Get:output_type -> api.v1.ProjectServiceGetResponse - 8, // 28: api.v1.ProjectService.Create:output_type -> api.v1.ProjectServiceCreateResponse - 10, // 29: api.v1.ProjectService.Delete:output_type -> api.v1.ProjectServiceDeleteResponse - 12, // 30: api.v1.ProjectService.Update:output_type -> api.v1.ProjectServiceUpdateResponse - 18, // 31: api.v1.ProjectService.RemoveMember:output_type -> api.v1.ProjectServiceRemoveMemberResponse - 14, // 32: api.v1.ProjectService.Invite:output_type -> api.v1.ProjectServiceInviteResponse - 20, // 33: api.v1.ProjectService.InviteAccept:output_type -> api.v1.ProjectServiceInviteAcceptResponse - 22, // 34: api.v1.ProjectService.InviteDelete:output_type -> api.v1.ProjectServiceInviteDeleteResponse - 16, // 35: api.v1.ProjectService.InvitesList:output_type -> api.v1.ProjectServiceInvitesListResponse - 26, // [26:36] is the sub-list for method output_type - 16, // [16:26] is the sub-list for method input_type - 16, // [16:16] is the sub-list for extension type_name - 16, // [16:16] is the sub-list for extension extendee - 0, // [0:16] is the sub-list for field type_name + 2, // 16: api.v1.ProjectServiceInviteGetResponse.invite:type_name -> api.v1.ProjectInvite + 28, // 17: api.v1.ProjectServiceUpdateMemberRequest.role:type_name -> api.v1.ProjectRole + 1, // 18: api.v1.ProjectServiceUpdateMemberResponse.project_member:type_name -> api.v1.ProjectMember + 3, // 19: api.v1.ProjectService.List:input_type -> api.v1.ProjectServiceListRequest + 5, // 20: api.v1.ProjectService.Get:input_type -> api.v1.ProjectServiceGetRequest + 7, // 21: api.v1.ProjectService.Create:input_type -> api.v1.ProjectServiceCreateRequest + 9, // 22: api.v1.ProjectService.Delete:input_type -> api.v1.ProjectServiceDeleteRequest + 11, // 23: api.v1.ProjectService.Update:input_type -> api.v1.ProjectServiceUpdateRequest + 19, // 24: api.v1.ProjectService.RemoveMember:input_type -> api.v1.ProjectServiceRemoveMemberRequest + 21, // 25: api.v1.ProjectService.UpdateMember:input_type -> api.v1.ProjectServiceUpdateMemberRequest + 13, // 26: api.v1.ProjectService.Invite:input_type -> api.v1.ProjectServiceInviteRequest + 23, // 27: api.v1.ProjectService.InviteAccept:input_type -> api.v1.ProjectServiceInviteAcceptRequest + 25, // 28: api.v1.ProjectService.InviteDelete:input_type -> api.v1.ProjectServiceInviteDeleteRequest + 15, // 29: api.v1.ProjectService.InvitesList:input_type -> api.v1.ProjectServiceInvitesListRequest + 17, // 30: api.v1.ProjectService.InviteGet:input_type -> api.v1.ProjectServiceInviteGetRequest + 4, // 31: api.v1.ProjectService.List:output_type -> api.v1.ProjectServiceListResponse + 6, // 32: api.v1.ProjectService.Get:output_type -> api.v1.ProjectServiceGetResponse + 8, // 33: api.v1.ProjectService.Create:output_type -> api.v1.ProjectServiceCreateResponse + 10, // 34: api.v1.ProjectService.Delete:output_type -> api.v1.ProjectServiceDeleteResponse + 12, // 35: api.v1.ProjectService.Update:output_type -> api.v1.ProjectServiceUpdateResponse + 20, // 36: api.v1.ProjectService.RemoveMember:output_type -> api.v1.ProjectServiceRemoveMemberResponse + 22, // 37: api.v1.ProjectService.UpdateMember:output_type -> api.v1.ProjectServiceUpdateMemberResponse + 14, // 38: api.v1.ProjectService.Invite:output_type -> api.v1.ProjectServiceInviteResponse + 24, // 39: api.v1.ProjectService.InviteAccept:output_type -> api.v1.ProjectServiceInviteAcceptResponse + 26, // 40: api.v1.ProjectService.InviteDelete:output_type -> api.v1.ProjectServiceInviteDeleteResponse + 16, // 41: api.v1.ProjectService.InvitesList:output_type -> api.v1.ProjectServiceInvitesListResponse + 18, // 42: api.v1.ProjectService.InviteGet:output_type -> api.v1.ProjectServiceInviteGetResponse + 31, // [31:43] is the sub-list for method output_type + 19, // [19:31] 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 } func init() { file_api_v1_project_proto_init() } @@ -1864,7 +2159,7 @@ func file_api_v1_project_proto_init() { } } file_api_v1_project_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectServiceRemoveMemberRequest); i { + switch v := v.(*ProjectServiceInviteGetRequest); i { case 0: return &v.state case 1: @@ -1876,7 +2171,7 @@ func file_api_v1_project_proto_init() { } } file_api_v1_project_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectServiceRemoveMemberResponse); i { + switch v := v.(*ProjectServiceInviteGetResponse); i { case 0: return &v.state case 1: @@ -1888,7 +2183,7 @@ func file_api_v1_project_proto_init() { } } file_api_v1_project_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectServiceInviteAcceptRequest); i { + switch v := v.(*ProjectServiceRemoveMemberRequest); i { case 0: return &v.state case 1: @@ -1900,7 +2195,7 @@ func file_api_v1_project_proto_init() { } } file_api_v1_project_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectServiceInviteAcceptResponse); i { + switch v := v.(*ProjectServiceRemoveMemberResponse); i { case 0: return &v.state case 1: @@ -1912,7 +2207,7 @@ func file_api_v1_project_proto_init() { } } file_api_v1_project_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectServiceInviteDeleteRequest); i { + switch v := v.(*ProjectServiceUpdateMemberRequest); i { case 0: return &v.state case 1: @@ -1924,6 +2219,54 @@ func file_api_v1_project_proto_init() { } } file_api_v1_project_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProjectServiceUpdateMemberResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_project_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProjectServiceInviteAcceptRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_project_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProjectServiceInviteAcceptResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_project_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProjectServiceInviteDeleteRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_project_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectServiceInviteDeleteResponse); i { case 0: return &v.state @@ -1944,7 +2287,7 @@ func file_api_v1_project_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_v1_project_proto_rawDesc, NumEnums: 0, - NumMessages: 23, + NumMessages: 27, NumExtensions: 0, NumServices: 1, }, diff --git a/go/api/v1/project.pb.validate.go b/go/api/v1/project.pb.validate.go index 71cf3d96..b033be6e 100644 --- a/go/api/v1/project.pb.validate.go +++ b/go/api/v1/project.pb.validate.go @@ -399,6 +399,12 @@ func (m *ProjectInvite) validate(all bool) error { // no validation rules for Joined + // no validation rules for ProjectName + + // no validation rules for Tenant + + // no validation rules for TenantName + if all { switch v := interface{}(m.GetExpiresAt()).(type) { case interface{ ValidateAll() error }: @@ -2385,6 +2391,243 @@ var _ interface { ErrorName() string } = ProjectServiceInvitesListResponseValidationError{} +// Validate checks the field values on ProjectServiceInviteGetRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ProjectServiceInviteGetRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ProjectServiceInviteGetRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ProjectServiceInviteGetRequestMultiError, or nil if none found. +func (m *ProjectServiceInviteGetRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ProjectServiceInviteGetRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Secret + + if len(errors) > 0 { + return ProjectServiceInviteGetRequestMultiError(errors) + } + + return nil +} + +// ProjectServiceInviteGetRequestMultiError is an error wrapping multiple +// validation errors returned by ProjectServiceInviteGetRequest.ValidateAll() +// if the designated constraints aren't met. +type ProjectServiceInviteGetRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ProjectServiceInviteGetRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ProjectServiceInviteGetRequestMultiError) AllErrors() []error { return m } + +// ProjectServiceInviteGetRequestValidationError is the validation error +// returned by ProjectServiceInviteGetRequest.Validate if the designated +// constraints aren't met. +type ProjectServiceInviteGetRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ProjectServiceInviteGetRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ProjectServiceInviteGetRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ProjectServiceInviteGetRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ProjectServiceInviteGetRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ProjectServiceInviteGetRequestValidationError) ErrorName() string { + return "ProjectServiceInviteGetRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e ProjectServiceInviteGetRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sProjectServiceInviteGetRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ProjectServiceInviteGetRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ProjectServiceInviteGetRequestValidationError{} + +// Validate checks the field values on ProjectServiceInviteGetResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ProjectServiceInviteGetResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ProjectServiceInviteGetResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// ProjectServiceInviteGetResponseMultiError, or nil if none found. +func (m *ProjectServiceInviteGetResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ProjectServiceInviteGetResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetInvite()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ProjectServiceInviteGetResponseValidationError{ + field: "Invite", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ProjectServiceInviteGetResponseValidationError{ + field: "Invite", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetInvite()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ProjectServiceInviteGetResponseValidationError{ + field: "Invite", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return ProjectServiceInviteGetResponseMultiError(errors) + } + + return nil +} + +// ProjectServiceInviteGetResponseMultiError is an error wrapping multiple +// validation errors returned by ProjectServiceInviteGetResponse.ValidateAll() +// if the designated constraints aren't met. +type ProjectServiceInviteGetResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ProjectServiceInviteGetResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ProjectServiceInviteGetResponseMultiError) AllErrors() []error { return m } + +// ProjectServiceInviteGetResponseValidationError is the validation error +// returned by ProjectServiceInviteGetResponse.Validate if the designated +// constraints aren't met. +type ProjectServiceInviteGetResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ProjectServiceInviteGetResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ProjectServiceInviteGetResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ProjectServiceInviteGetResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ProjectServiceInviteGetResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ProjectServiceInviteGetResponseValidationError) ErrorName() string { + return "ProjectServiceInviteGetResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e ProjectServiceInviteGetResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sProjectServiceInviteGetResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ProjectServiceInviteGetResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ProjectServiceInviteGetResponseValidationError{} + // Validate checks the field values on ProjectServiceRemoveMemberRequest with // the rules defined in the proto definition for this message. If any rules // are violated, the first error encountered is returned, or nil if there are @@ -2617,6 +2860,269 @@ var _ interface { ErrorName() string } = ProjectServiceRemoveMemberResponseValidationError{} +// Validate checks the field values on ProjectServiceUpdateMemberRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, the first error encountered is returned, or nil if there are +// no violations. +func (m *ProjectServiceUpdateMemberRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ProjectServiceUpdateMemberRequest +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// ProjectServiceUpdateMemberRequestMultiError, or nil if none found. +func (m *ProjectServiceUpdateMemberRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ProjectServiceUpdateMemberRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if err := m._validateUuid(m.GetProject()); err != nil { + err = ProjectServiceUpdateMemberRequestValidationError{ + field: "Project", + reason: "value must be a valid UUID", + cause: err, + } + if !all { + return err + } + errors = append(errors, err) + } + + // no validation rules for MemberId + + // no validation rules for Role + + if len(errors) > 0 { + return ProjectServiceUpdateMemberRequestMultiError(errors) + } + + return nil +} + +func (m *ProjectServiceUpdateMemberRequest) _validateUuid(uuid string) error { + if matched := _project_uuidPattern.MatchString(uuid); !matched { + return errors.New("invalid uuid format") + } + + return nil +} + +// ProjectServiceUpdateMemberRequestMultiError is an error wrapping multiple +// validation errors returned by +// ProjectServiceUpdateMemberRequest.ValidateAll() if the designated +// constraints aren't met. +type ProjectServiceUpdateMemberRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ProjectServiceUpdateMemberRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ProjectServiceUpdateMemberRequestMultiError) AllErrors() []error { return m } + +// ProjectServiceUpdateMemberRequestValidationError is the validation error +// returned by ProjectServiceUpdateMemberRequest.Validate if the designated +// constraints aren't met. +type ProjectServiceUpdateMemberRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ProjectServiceUpdateMemberRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ProjectServiceUpdateMemberRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ProjectServiceUpdateMemberRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ProjectServiceUpdateMemberRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ProjectServiceUpdateMemberRequestValidationError) ErrorName() string { + return "ProjectServiceUpdateMemberRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e ProjectServiceUpdateMemberRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sProjectServiceUpdateMemberRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ProjectServiceUpdateMemberRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ProjectServiceUpdateMemberRequestValidationError{} + +// Validate checks the field values on ProjectServiceUpdateMemberResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the first error encountered is returned, or nil if there are +// no violations. +func (m *ProjectServiceUpdateMemberResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ProjectServiceUpdateMemberResponse +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// ProjectServiceUpdateMemberResponseMultiError, or nil if none found. +func (m *ProjectServiceUpdateMemberResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ProjectServiceUpdateMemberResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetProjectMember()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ProjectServiceUpdateMemberResponseValidationError{ + field: "ProjectMember", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ProjectServiceUpdateMemberResponseValidationError{ + field: "ProjectMember", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetProjectMember()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ProjectServiceUpdateMemberResponseValidationError{ + field: "ProjectMember", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return ProjectServiceUpdateMemberResponseMultiError(errors) + } + + return nil +} + +// ProjectServiceUpdateMemberResponseMultiError is an error wrapping multiple +// validation errors returned by +// ProjectServiceUpdateMemberResponse.ValidateAll() if the designated +// constraints aren't met. +type ProjectServiceUpdateMemberResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ProjectServiceUpdateMemberResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ProjectServiceUpdateMemberResponseMultiError) AllErrors() []error { return m } + +// ProjectServiceUpdateMemberResponseValidationError is the validation error +// returned by ProjectServiceUpdateMemberResponse.Validate if the designated +// constraints aren't met. +type ProjectServiceUpdateMemberResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ProjectServiceUpdateMemberResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ProjectServiceUpdateMemberResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ProjectServiceUpdateMemberResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ProjectServiceUpdateMemberResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ProjectServiceUpdateMemberResponseValidationError) ErrorName() string { + return "ProjectServiceUpdateMemberResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e ProjectServiceUpdateMemberResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sProjectServiceUpdateMemberResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ProjectServiceUpdateMemberResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ProjectServiceUpdateMemberResponseValidationError{} + // Validate checks the field values on ProjectServiceInviteAcceptRequest with // the rules defined in the proto definition for this message. If any rules // are violated, the first error encountered is returned, or nil if there are diff --git a/go/permissions/servicepermissions.go b/go/permissions/servicepermissions.go index 1dc18273..89b9ed65 100755 --- a/go/permissions/servicepermissions.go +++ b/go/permissions/servicepermissions.go @@ -115,6 +115,7 @@ func GetServicePermissions() *ServicePermissions { "/api.v1.ProjectService/Delete", "/api.v1.ProjectService/Update", "/api.v1.ProjectService/RemoveMember", + "/api.v1.ProjectService/UpdateMember", "/api.v1.ProjectService/Invite", "/api.v1.ProjectService/InviteDelete", "/api.v1.ProjectService/InvitesList", @@ -214,10 +215,12 @@ func GetServicePermissions() *ServicePermissions { "/api.v1.ProjectService/Invite": true, "/api.v1.ProjectService/InviteAccept": true, "/api.v1.ProjectService/InviteDelete": true, + "/api.v1.ProjectService/InviteGet": true, "/api.v1.ProjectService/InvitesList": true, "/api.v1.ProjectService/List": true, "/api.v1.ProjectService/RemoveMember": true, "/api.v1.ProjectService/Update": true, + "/api.v1.ProjectService/UpdateMember": true, "/api.v1.SnapshotService/Delete": true, "/api.v1.SnapshotService/Get": true, "/api.v1.SnapshotService/List": true, @@ -254,6 +257,7 @@ func GetServicePermissions() *ServicePermissions { Self: map[string]bool{ "/api.v1.MethodService/TokenScopedList": true, "/api.v1.ProjectService/InviteAccept": true, + "/api.v1.ProjectService/InviteGet": true, "/api.v1.ProjectService/List": true, "/api.v1.TokenService/Create": true, "/api.v1.TokenService/List": true, @@ -318,10 +322,12 @@ func GetServicePermissions() *ServicePermissions { "/api.v1.ProjectService/Invite": true, "/api.v1.ProjectService/InviteAccept": true, "/api.v1.ProjectService/InviteDelete": true, - "/api.v1.ProjectService/InvitesList": true, + "/api.v1.ProjectService/InviteGet": false, + "/api.v1.ProjectService/InvitesList": false, "/api.v1.ProjectService/List": false, "/api.v1.ProjectService/RemoveMember": true, "/api.v1.ProjectService/Update": true, + "/api.v1.ProjectService/UpdateMember": true, "/api.v1.SnapshotService/Delete": true, "/api.v1.SnapshotService/Get": false, "/api.v1.SnapshotService/List": false, diff --git a/go/tests/mocks/api/v1/apiv1connect/ProjectServiceClient.go b/go/tests/mocks/api/v1/apiv1connect/ProjectServiceClient.go index cbf0939c..ad090710 100644 --- a/go/tests/mocks/api/v1/apiv1connect/ProjectServiceClient.go +++ b/go/tests/mocks/api/v1/apiv1connect/ProjectServiceClient.go @@ -196,6 +196,36 @@ func (_m *ProjectServiceClient) InviteDelete(_a0 context.Context, _a1 *connect.R return r0, r1 } +// InviteGet provides a mock function with given fields: _a0, _a1 +func (_m *ProjectServiceClient) InviteGet(_a0 context.Context, _a1 *connect.Request[apiv1.ProjectServiceInviteGetRequest]) (*connect.Response[apiv1.ProjectServiceInviteGetResponse], error) { + ret := _m.Called(_a0, _a1) + + if len(ret) == 0 { + panic("no return value specified for InviteGet") + } + + var r0 *connect.Response[apiv1.ProjectServiceInviteGetResponse] + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[apiv1.ProjectServiceInviteGetRequest]) (*connect.Response[apiv1.ProjectServiceInviteGetResponse], error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[apiv1.ProjectServiceInviteGetRequest]) *connect.Response[apiv1.ProjectServiceInviteGetResponse]); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*connect.Response[apiv1.ProjectServiceInviteGetResponse]) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *connect.Request[apiv1.ProjectServiceInviteGetRequest]) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // InvitesList provides a mock function with given fields: _a0, _a1 func (_m *ProjectServiceClient) InvitesList(_a0 context.Context, _a1 *connect.Request[apiv1.ProjectServiceInvitesListRequest]) (*connect.Response[apiv1.ProjectServiceInvitesListResponse], error) { ret := _m.Called(_a0, _a1) @@ -316,6 +346,36 @@ func (_m *ProjectServiceClient) Update(_a0 context.Context, _a1 *connect.Request return r0, r1 } +// UpdateMember provides a mock function with given fields: _a0, _a1 +func (_m *ProjectServiceClient) UpdateMember(_a0 context.Context, _a1 *connect.Request[apiv1.ProjectServiceUpdateMemberRequest]) (*connect.Response[apiv1.ProjectServiceUpdateMemberResponse], error) { + ret := _m.Called(_a0, _a1) + + if len(ret) == 0 { + panic("no return value specified for UpdateMember") + } + + var r0 *connect.Response[apiv1.ProjectServiceUpdateMemberResponse] + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[apiv1.ProjectServiceUpdateMemberRequest]) (*connect.Response[apiv1.ProjectServiceUpdateMemberResponse], error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[apiv1.ProjectServiceUpdateMemberRequest]) *connect.Response[apiv1.ProjectServiceUpdateMemberResponse]); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*connect.Response[apiv1.ProjectServiceUpdateMemberResponse]) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *connect.Request[apiv1.ProjectServiceUpdateMemberRequest]) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // NewProjectServiceClient creates a new instance of ProjectServiceClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. func NewProjectServiceClient(t interface { diff --git a/go/tests/mocks/api/v1/apiv1connect/ProjectServiceHandler.go b/go/tests/mocks/api/v1/apiv1connect/ProjectServiceHandler.go index 2a297550..da2decfc 100644 --- a/go/tests/mocks/api/v1/apiv1connect/ProjectServiceHandler.go +++ b/go/tests/mocks/api/v1/apiv1connect/ProjectServiceHandler.go @@ -196,6 +196,36 @@ func (_m *ProjectServiceHandler) InviteDelete(_a0 context.Context, _a1 *connect. return r0, r1 } +// InviteGet provides a mock function with given fields: _a0, _a1 +func (_m *ProjectServiceHandler) InviteGet(_a0 context.Context, _a1 *connect.Request[apiv1.ProjectServiceInviteGetRequest]) (*connect.Response[apiv1.ProjectServiceInviteGetResponse], error) { + ret := _m.Called(_a0, _a1) + + if len(ret) == 0 { + panic("no return value specified for InviteGet") + } + + var r0 *connect.Response[apiv1.ProjectServiceInviteGetResponse] + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[apiv1.ProjectServiceInviteGetRequest]) (*connect.Response[apiv1.ProjectServiceInviteGetResponse], error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[apiv1.ProjectServiceInviteGetRequest]) *connect.Response[apiv1.ProjectServiceInviteGetResponse]); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*connect.Response[apiv1.ProjectServiceInviteGetResponse]) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *connect.Request[apiv1.ProjectServiceInviteGetRequest]) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // InvitesList provides a mock function with given fields: _a0, _a1 func (_m *ProjectServiceHandler) InvitesList(_a0 context.Context, _a1 *connect.Request[apiv1.ProjectServiceInvitesListRequest]) (*connect.Response[apiv1.ProjectServiceInvitesListResponse], error) { ret := _m.Called(_a0, _a1) @@ -316,6 +346,36 @@ func (_m *ProjectServiceHandler) Update(_a0 context.Context, _a1 *connect.Reques return r0, r1 } +// UpdateMember provides a mock function with given fields: _a0, _a1 +func (_m *ProjectServiceHandler) UpdateMember(_a0 context.Context, _a1 *connect.Request[apiv1.ProjectServiceUpdateMemberRequest]) (*connect.Response[apiv1.ProjectServiceUpdateMemberResponse], error) { + ret := _m.Called(_a0, _a1) + + if len(ret) == 0 { + panic("no return value specified for UpdateMember") + } + + var r0 *connect.Response[apiv1.ProjectServiceUpdateMemberResponse] + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[apiv1.ProjectServiceUpdateMemberRequest]) (*connect.Response[apiv1.ProjectServiceUpdateMemberResponse], error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[apiv1.ProjectServiceUpdateMemberRequest]) *connect.Response[apiv1.ProjectServiceUpdateMemberResponse]); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*connect.Response[apiv1.ProjectServiceUpdateMemberResponse]) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *connect.Request[apiv1.ProjectServiceUpdateMemberRequest]) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // NewProjectServiceHandler creates a new instance of ProjectServiceHandler. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. func NewProjectServiceHandler(t interface { diff --git a/js/api/v1/project_connect.d.ts b/js/api/v1/project_connect.d.ts index c63e6012..35760098 100644 --- a/js/api/v1/project_connect.d.ts +++ b/js/api/v1/project_connect.d.ts @@ -1,4 +1,4 @@ -import { ProjectServiceCreateRequest, ProjectServiceCreateResponse, ProjectServiceDeleteRequest, ProjectServiceDeleteResponse, ProjectServiceGetRequest, ProjectServiceGetResponse, ProjectServiceInviteAcceptRequest, ProjectServiceInviteAcceptResponse, ProjectServiceInviteDeleteRequest, ProjectServiceInviteDeleteResponse, ProjectServiceInviteRequest, ProjectServiceInviteResponse, ProjectServiceInvitesListRequest, ProjectServiceInvitesListResponse, ProjectServiceListRequest, ProjectServiceListResponse, ProjectServiceRemoveMemberRequest, ProjectServiceRemoveMemberResponse, ProjectServiceUpdateRequest, ProjectServiceUpdateResponse } from "./project_pb.js"; +import { ProjectServiceCreateRequest, ProjectServiceCreateResponse, ProjectServiceDeleteRequest, ProjectServiceDeleteResponse, ProjectServiceGetRequest, ProjectServiceGetResponse, ProjectServiceInviteAcceptRequest, ProjectServiceInviteAcceptResponse, ProjectServiceInviteDeleteRequest, ProjectServiceInviteDeleteResponse, ProjectServiceInviteGetRequest, ProjectServiceInviteGetResponse, ProjectServiceInviteRequest, ProjectServiceInviteResponse, ProjectServiceInvitesListRequest, ProjectServiceInvitesListResponse, ProjectServiceListRequest, ProjectServiceListResponse, ProjectServiceRemoveMemberRequest, ProjectServiceRemoveMemberResponse, ProjectServiceUpdateMemberRequest, ProjectServiceUpdateMemberResponse, ProjectServiceUpdateRequest, ProjectServiceUpdateResponse } from "./project_pb.js"; import { MethodKind } from "@bufbuild/protobuf"; /** * ProjectService serves project related functions @@ -64,7 +64,7 @@ export declare const ProjectService: { readonly kind: MethodKind.Unary; }; /** - * RemoveMember a user from a project + * RemoveMember remove a user from a project * * @generated from rpc api.v1.ProjectService.RemoveMember */ @@ -74,6 +74,17 @@ export declare const ProjectService: { readonly O: typeof ProjectServiceRemoveMemberResponse; readonly kind: MethodKind.Unary; }; + /** + * UpdateMember update a user for a project + * + * @generated from rpc api.v1.ProjectService.UpdateMember + */ + readonly updateMember: { + readonly name: "UpdateMember"; + readonly I: typeof ProjectServiceUpdateMemberRequest; + readonly O: typeof ProjectServiceUpdateMemberResponse; + readonly kind: MethodKind.Unary; + }; /** * Invite a user to a project * @@ -118,5 +129,16 @@ export declare const ProjectService: { readonly O: typeof ProjectServiceInvitesListResponse; readonly kind: MethodKind.Unary; }; + /** + * InviteGet get an invite + * + * @generated from rpc api.v1.ProjectService.InviteGet + */ + readonly inviteGet: { + readonly name: "InviteGet"; + readonly I: typeof ProjectServiceInviteGetRequest; + readonly O: typeof ProjectServiceInviteGetResponse; + readonly kind: MethodKind.Unary; + }; }; }; diff --git a/js/api/v1/project_connect.js b/js/api/v1/project_connect.js index c901dc6f..693e015a 100644 --- a/js/api/v1/project_connect.js +++ b/js/api/v1/project_connect.js @@ -2,7 +2,7 @@ // @generated from file api/v1/project.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck -import { ProjectServiceCreateRequest, ProjectServiceCreateResponse, ProjectServiceDeleteRequest, ProjectServiceDeleteResponse, ProjectServiceGetRequest, ProjectServiceGetResponse, ProjectServiceInviteAcceptRequest, ProjectServiceInviteAcceptResponse, ProjectServiceInviteDeleteRequest, ProjectServiceInviteDeleteResponse, ProjectServiceInviteRequest, ProjectServiceInviteResponse, ProjectServiceInvitesListRequest, ProjectServiceInvitesListResponse, ProjectServiceListRequest, ProjectServiceListResponse, ProjectServiceRemoveMemberRequest, ProjectServiceRemoveMemberResponse, ProjectServiceUpdateRequest, ProjectServiceUpdateResponse } from "./project_pb.js"; +import { ProjectServiceCreateRequest, ProjectServiceCreateResponse, ProjectServiceDeleteRequest, ProjectServiceDeleteResponse, ProjectServiceGetRequest, ProjectServiceGetResponse, ProjectServiceInviteAcceptRequest, ProjectServiceInviteAcceptResponse, ProjectServiceInviteDeleteRequest, ProjectServiceInviteDeleteResponse, ProjectServiceInviteGetRequest, ProjectServiceInviteGetResponse, ProjectServiceInviteRequest, ProjectServiceInviteResponse, ProjectServiceInvitesListRequest, ProjectServiceInvitesListResponse, ProjectServiceListRequest, ProjectServiceListResponse, ProjectServiceRemoveMemberRequest, ProjectServiceRemoveMemberResponse, ProjectServiceUpdateMemberRequest, ProjectServiceUpdateMemberResponse, ProjectServiceUpdateRequest, ProjectServiceUpdateResponse } from "./project_pb.js"; import { MethodKind } from "@bufbuild/protobuf"; /** * ProjectService serves project related functions @@ -68,7 +68,7 @@ export const ProjectService = { kind: MethodKind.Unary, }, /** - * RemoveMember a user from a project + * RemoveMember remove a user from a project * * @generated from rpc api.v1.ProjectService.RemoveMember */ @@ -78,6 +78,17 @@ export const ProjectService = { O: ProjectServiceRemoveMemberResponse, kind: MethodKind.Unary, }, + /** + * UpdateMember update a user for a project + * + * @generated from rpc api.v1.ProjectService.UpdateMember + */ + updateMember: { + name: "UpdateMember", + I: ProjectServiceUpdateMemberRequest, + O: ProjectServiceUpdateMemberResponse, + kind: MethodKind.Unary, + }, /** * Invite a user to a project * @@ -122,5 +133,16 @@ export const ProjectService = { O: ProjectServiceInvitesListResponse, kind: MethodKind.Unary, }, + /** + * InviteGet get an invite + * + * @generated from rpc api.v1.ProjectService.InviteGet + */ + inviteGet: { + name: "InviteGet", + I: ProjectServiceInviteGetRequest, + O: ProjectServiceInviteGetResponse, + kind: MethodKind.Unary, + }, } }; diff --git a/js/api/v1/project_connect.ts b/js/api/v1/project_connect.ts index 63a0ff89..3152574e 100644 --- a/js/api/v1/project_connect.ts +++ b/js/api/v1/project_connect.ts @@ -3,7 +3,7 @@ /* eslint-disable */ // @ts-nocheck -import { ProjectServiceCreateRequest, ProjectServiceCreateResponse, ProjectServiceDeleteRequest, ProjectServiceDeleteResponse, ProjectServiceGetRequest, ProjectServiceGetResponse, ProjectServiceInviteAcceptRequest, ProjectServiceInviteAcceptResponse, ProjectServiceInviteDeleteRequest, ProjectServiceInviteDeleteResponse, ProjectServiceInviteRequest, ProjectServiceInviteResponse, ProjectServiceInvitesListRequest, ProjectServiceInvitesListResponse, ProjectServiceListRequest, ProjectServiceListResponse, ProjectServiceRemoveMemberRequest, ProjectServiceRemoveMemberResponse, ProjectServiceUpdateRequest, ProjectServiceUpdateResponse } from "./project_pb.js"; +import { ProjectServiceCreateRequest, ProjectServiceCreateResponse, ProjectServiceDeleteRequest, ProjectServiceDeleteResponse, ProjectServiceGetRequest, ProjectServiceGetResponse, ProjectServiceInviteAcceptRequest, ProjectServiceInviteAcceptResponse, ProjectServiceInviteDeleteRequest, ProjectServiceInviteDeleteResponse, ProjectServiceInviteGetRequest, ProjectServiceInviteGetResponse, ProjectServiceInviteRequest, ProjectServiceInviteResponse, ProjectServiceInvitesListRequest, ProjectServiceInvitesListResponse, ProjectServiceListRequest, ProjectServiceListResponse, ProjectServiceRemoveMemberRequest, ProjectServiceRemoveMemberResponse, ProjectServiceUpdateMemberRequest, ProjectServiceUpdateMemberResponse, ProjectServiceUpdateRequest, ProjectServiceUpdateResponse } from "./project_pb.js"; import { MethodKind } from "@bufbuild/protobuf"; /** @@ -70,7 +70,7 @@ export const ProjectService = { kind: MethodKind.Unary, }, /** - * RemoveMember a user from a project + * RemoveMember remove a user from a project * * @generated from rpc api.v1.ProjectService.RemoveMember */ @@ -80,6 +80,17 @@ export const ProjectService = { O: ProjectServiceRemoveMemberResponse, kind: MethodKind.Unary, }, + /** + * UpdateMember update a user for a project + * + * @generated from rpc api.v1.ProjectService.UpdateMember + */ + updateMember: { + name: "UpdateMember", + I: ProjectServiceUpdateMemberRequest, + O: ProjectServiceUpdateMemberResponse, + kind: MethodKind.Unary, + }, /** * Invite a user to a project * @@ -124,6 +135,17 @@ export const ProjectService = { O: ProjectServiceInvitesListResponse, kind: MethodKind.Unary, }, + /** + * InviteGet get an invite + * + * @generated from rpc api.v1.ProjectService.InviteGet + */ + inviteGet: { + name: "InviteGet", + I: ProjectServiceInviteGetRequest, + O: ProjectServiceInviteGetResponse, + kind: MethodKind.Unary, + }, } } as const; diff --git a/js/api/v1/project_pb.d.ts b/js/api/v1/project_pb.d.ts index 31a5f015..fe3f3451 100644 --- a/js/api/v1/project_pb.d.ts +++ b/js/api/v1/project_pb.d.ts @@ -122,6 +122,24 @@ export declare class ProjectInvite extends Message { * @generated from field: bool joined = 4; */ joined: boolean; + /** + * ProjectName is the project name for which this invite was created + * + * @generated from field: string project_name = 5; + */ + projectName: string; + /** + * Tenant is the login of tenant who invites to join this project + * + * @generated from field: string tenant = 6; + */ + tenant: string; + /** + * TenantName is the name of tenant who invites to join this project + * + * @generated from field: string tenant_name = 7; + */ + tenantName: string; /** * ExpiresAt the date when this invite expires * @@ -476,6 +494,48 @@ export declare class ProjectServiceInvitesListResponse extends Message): ProjectServiceInvitesListResponse; static equals(a: ProjectServiceInvitesListResponse | PlainMessage | undefined, b: ProjectServiceInvitesListResponse | PlainMessage | undefined): boolean; } +/** + * ProjectServiceInviteGetRequest is the request payload to get a invite + * + * @generated from message api.v1.ProjectServiceInviteGetRequest + */ +export declare class ProjectServiceInviteGetRequest extends Message { + /** + * Secret of the invite to list + * + * @generated from field: string secret = 1; + */ + secret: string; + constructor(data?: PartialMessage); + static readonly runtime: typeof proto3; + static readonly typeName = "api.v1.ProjectServiceInviteGetRequest"; + static readonly fields: FieldList; + static fromBinary(bytes: Uint8Array, options?: Partial): ProjectServiceInviteGetRequest; + static fromJson(jsonValue: JsonValue, options?: Partial): ProjectServiceInviteGetRequest; + static fromJsonString(jsonString: string, options?: Partial): ProjectServiceInviteGetRequest; + static equals(a: ProjectServiceInviteGetRequest | PlainMessage | undefined, b: ProjectServiceInviteGetRequest | PlainMessage | undefined): boolean; +} +/** + * ProjectServiceInviteGetResponse is the response payload to a get invite request + * + * @generated from message api.v1.ProjectServiceInviteGetResponse + */ +export declare class ProjectServiceInviteGetResponse extends Message { + /** + * Invite is the invite + * + * @generated from field: api.v1.ProjectInvite invite = 1; + */ + invite?: ProjectInvite; + constructor(data?: PartialMessage); + static readonly runtime: typeof proto3; + static readonly typeName = "api.v1.ProjectServiceInviteGetResponse"; + static readonly fields: FieldList; + static fromBinary(bytes: Uint8Array, options?: Partial): ProjectServiceInviteGetResponse; + static fromJson(jsonValue: JsonValue, options?: Partial): ProjectServiceInviteGetResponse; + static fromJsonString(jsonString: string, options?: Partial): ProjectServiceInviteGetResponse; + static equals(a: ProjectServiceInviteGetResponse | PlainMessage | undefined, b: ProjectServiceInviteGetResponse | PlainMessage | undefined): boolean; +} /** * ProjectServiceRemoveMemberRequest is used to remove a member from a project * @@ -518,6 +578,60 @@ export declare class ProjectServiceRemoveMemberResponse extends Message): ProjectServiceRemoveMemberResponse; static equals(a: ProjectServiceRemoveMemberResponse | PlainMessage | undefined, b: ProjectServiceRemoveMemberResponse | PlainMessage | undefined): boolean; } +/** + * ProjectServiceUpdateMemberRequest is used to update a member of a project + * + * @generated from message api.v1.ProjectServiceUpdateMemberRequest + */ +export declare class ProjectServiceUpdateMemberRequest extends Message { + /** + * Project is the uuid of the project + * + * @generated from field: string project = 1; + */ + project: string; + /** + * MemberID is the id of the member to remove from this project + * + * @generated from field: string member_id = 2; + */ + memberId: string; + /** + * Role is the role in this project the user will get after the update + * + * @generated from field: api.v1.ProjectRole role = 3; + */ + role: ProjectRole; + constructor(data?: PartialMessage); + static readonly runtime: typeof proto3; + static readonly typeName = "api.v1.ProjectServiceUpdateMemberRequest"; + static readonly fields: FieldList; + static fromBinary(bytes: Uint8Array, options?: Partial): ProjectServiceUpdateMemberRequest; + static fromJson(jsonValue: JsonValue, options?: Partial): ProjectServiceUpdateMemberRequest; + static fromJsonString(jsonString: string, options?: Partial): ProjectServiceUpdateMemberRequest; + static equals(a: ProjectServiceUpdateMemberRequest | PlainMessage | undefined, b: ProjectServiceUpdateMemberRequest | PlainMessage | undefined): boolean; +} +/** + * ProjectServiceUpdateMemberResponse is the response payload to a update member request + * + * @generated from message api.v1.ProjectServiceUpdateMemberResponse + */ +export declare class ProjectServiceUpdateMemberResponse extends Message { + /** + * ProjectMember is the updated project member + * + * @generated from field: api.v1.ProjectMember project_member = 5; + */ + projectMember?: ProjectMember; + constructor(data?: PartialMessage); + static readonly runtime: typeof proto3; + static readonly typeName = "api.v1.ProjectServiceUpdateMemberResponse"; + static readonly fields: FieldList; + static fromBinary(bytes: Uint8Array, options?: Partial): ProjectServiceUpdateMemberResponse; + static fromJson(jsonValue: JsonValue, options?: Partial): ProjectServiceUpdateMemberResponse; + static fromJsonString(jsonString: string, options?: Partial): ProjectServiceUpdateMemberResponse; + static equals(a: ProjectServiceUpdateMemberResponse | PlainMessage | undefined, b: ProjectServiceUpdateMemberResponse | PlainMessage | undefined): boolean; +} /** * ProjectServiceInviteAcceptRequest is the request payload to a accept invite request * diff --git a/js/api/v1/project_pb.js b/js/api/v1/project_pb.js index fd041d22..5cc7a176 100644 --- a/js/api/v1/project_pb.js +++ b/js/api/v1/project_pb.js @@ -143,6 +143,24 @@ export class ProjectInvite extends Message { * @generated from field: bool joined = 4; */ this.joined = false; + /** + * ProjectName is the project name for which this invite was created + * + * @generated from field: string project_name = 5; + */ + this.projectName = ""; + /** + * Tenant is the login of tenant who invites to join this project + * + * @generated from field: string tenant = 6; + */ + this.tenant = ""; + /** + * TenantName is the name of tenant who invites to join this project + * + * @generated from field: string tenant_name = 7; + */ + this.tenantName = ""; proto3.util.initPartial(data, this); } static fromBinary(bytes, options) { @@ -165,6 +183,9 @@ ProjectInvite.fields = proto3.util.newFieldList(() => [ { no: 2, name: "project", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 3, name: "role", kind: "enum", T: proto3.getEnumType(ProjectRole) }, { no: 4, name: "joined", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 5, name: "project_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 6, name: "tenant", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 7, name: "tenant_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 10, name: "expires_at", kind: "message", T: Timestamp }, { no: 11, name: "joined_at", kind: "message", T: Timestamp }, ]); @@ -633,6 +654,68 @@ ProjectServiceInvitesListResponse.typeName = "api.v1.ProjectServiceInvitesListRe ProjectServiceInvitesListResponse.fields = proto3.util.newFieldList(() => [ { no: 1, name: "invites", kind: "message", T: ProjectInvite, repeated: true }, ]); +/** + * ProjectServiceInviteGetRequest is the request payload to get a invite + * + * @generated from message api.v1.ProjectServiceInviteGetRequest + */ +export class ProjectServiceInviteGetRequest extends Message { + constructor(data) { + super(); + /** + * Secret of the invite to list + * + * @generated from field: string secret = 1; + */ + this.secret = ""; + proto3.util.initPartial(data, this); + } + static fromBinary(bytes, options) { + return new ProjectServiceInviteGetRequest().fromBinary(bytes, options); + } + static fromJson(jsonValue, options) { + return new ProjectServiceInviteGetRequest().fromJson(jsonValue, options); + } + static fromJsonString(jsonString, options) { + return new ProjectServiceInviteGetRequest().fromJsonString(jsonString, options); + } + static equals(a, b) { + return proto3.util.equals(ProjectServiceInviteGetRequest, a, b); + } +} +ProjectServiceInviteGetRequest.runtime = proto3; +ProjectServiceInviteGetRequest.typeName = "api.v1.ProjectServiceInviteGetRequest"; +ProjectServiceInviteGetRequest.fields = proto3.util.newFieldList(() => [ + { no: 1, name: "secret", kind: "scalar", T: 9 /* ScalarType.STRING */ }, +]); +/** + * ProjectServiceInviteGetResponse is the response payload to a get invite request + * + * @generated from message api.v1.ProjectServiceInviteGetResponse + */ +export class ProjectServiceInviteGetResponse extends Message { + constructor(data) { + super(); + proto3.util.initPartial(data, this); + } + static fromBinary(bytes, options) { + return new ProjectServiceInviteGetResponse().fromBinary(bytes, options); + } + static fromJson(jsonValue, options) { + return new ProjectServiceInviteGetResponse().fromJson(jsonValue, options); + } + static fromJsonString(jsonString, options) { + return new ProjectServiceInviteGetResponse().fromJsonString(jsonString, options); + } + static equals(a, b) { + return proto3.util.equals(ProjectServiceInviteGetResponse, a, b); + } +} +ProjectServiceInviteGetResponse.runtime = proto3; +ProjectServiceInviteGetResponse.typeName = "api.v1.ProjectServiceInviteGetResponse"; +ProjectServiceInviteGetResponse.fields = proto3.util.newFieldList(() => [ + { no: 1, name: "invite", kind: "message", T: ProjectInvite }, +]); /** * ProjectServiceRemoveMemberRequest is used to remove a member from a project * @@ -700,6 +783,82 @@ export class ProjectServiceRemoveMemberResponse extends Message { ProjectServiceRemoveMemberResponse.runtime = proto3; ProjectServiceRemoveMemberResponse.typeName = "api.v1.ProjectServiceRemoveMemberResponse"; ProjectServiceRemoveMemberResponse.fields = proto3.util.newFieldList(() => []); +/** + * ProjectServiceUpdateMemberRequest is used to update a member of a project + * + * @generated from message api.v1.ProjectServiceUpdateMemberRequest + */ +export class ProjectServiceUpdateMemberRequest extends Message { + constructor(data) { + super(); + /** + * Project is the uuid of the project + * + * @generated from field: string project = 1; + */ + this.project = ""; + /** + * MemberID is the id of the member to remove from this project + * + * @generated from field: string member_id = 2; + */ + this.memberId = ""; + /** + * Role is the role in this project the user will get after the update + * + * @generated from field: api.v1.ProjectRole role = 3; + */ + this.role = ProjectRole.UNSPECIFIED; + proto3.util.initPartial(data, this); + } + static fromBinary(bytes, options) { + return new ProjectServiceUpdateMemberRequest().fromBinary(bytes, options); + } + static fromJson(jsonValue, options) { + return new ProjectServiceUpdateMemberRequest().fromJson(jsonValue, options); + } + static fromJsonString(jsonString, options) { + return new ProjectServiceUpdateMemberRequest().fromJsonString(jsonString, options); + } + static equals(a, b) { + return proto3.util.equals(ProjectServiceUpdateMemberRequest, a, b); + } +} +ProjectServiceUpdateMemberRequest.runtime = proto3; +ProjectServiceUpdateMemberRequest.typeName = "api.v1.ProjectServiceUpdateMemberRequest"; +ProjectServiceUpdateMemberRequest.fields = proto3.util.newFieldList(() => [ + { no: 1, name: "project", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "member_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "role", kind: "enum", T: proto3.getEnumType(ProjectRole) }, +]); +/** + * ProjectServiceUpdateMemberResponse is the response payload to a update member request + * + * @generated from message api.v1.ProjectServiceUpdateMemberResponse + */ +export class ProjectServiceUpdateMemberResponse extends Message { + constructor(data) { + super(); + proto3.util.initPartial(data, this); + } + static fromBinary(bytes, options) { + return new ProjectServiceUpdateMemberResponse().fromBinary(bytes, options); + } + static fromJson(jsonValue, options) { + return new ProjectServiceUpdateMemberResponse().fromJson(jsonValue, options); + } + static fromJsonString(jsonString, options) { + return new ProjectServiceUpdateMemberResponse().fromJsonString(jsonString, options); + } + static equals(a, b) { + return proto3.util.equals(ProjectServiceUpdateMemberResponse, a, b); + } +} +ProjectServiceUpdateMemberResponse.runtime = proto3; +ProjectServiceUpdateMemberResponse.typeName = "api.v1.ProjectServiceUpdateMemberResponse"; +ProjectServiceUpdateMemberResponse.fields = proto3.util.newFieldList(() => [ + { no: 5, name: "project_member", kind: "message", T: ProjectMember }, +]); /** * ProjectServiceInviteAcceptRequest is the request payload to a accept invite request * diff --git a/js/api/v1/project_pb.ts b/js/api/v1/project_pb.ts index 357a286b..fb25a3de 100644 --- a/js/api/v1/project_pb.ts +++ b/js/api/v1/project_pb.ts @@ -188,6 +188,27 @@ export class ProjectInvite extends Message { */ joined = false; + /** + * ProjectName is the project name for which this invite was created + * + * @generated from field: string project_name = 5; + */ + projectName = ""; + + /** + * Tenant is the login of tenant who invites to join this project + * + * @generated from field: string tenant = 6; + */ + tenant = ""; + + /** + * TenantName is the name of tenant who invites to join this project + * + * @generated from field: string tenant_name = 7; + */ + tenantName = ""; + /** * ExpiresAt the date when this invite expires * @@ -214,6 +235,9 @@ export class ProjectInvite extends Message { { no: 2, name: "project", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 3, name: "role", kind: "enum", T: proto3.getEnumType(ProjectRole) }, { no: 4, name: "joined", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 5, name: "project_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 6, name: "tenant", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 7, name: "tenant_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 10, name: "expires_at", kind: "message", T: Timestamp }, { no: 11, name: "joined_at", kind: "message", T: Timestamp }, ]); @@ -860,6 +884,88 @@ export class ProjectServiceInvitesListResponse extends Message { + /** + * Secret of the invite to list + * + * @generated from field: string secret = 1; + */ + secret = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "api.v1.ProjectServiceInviteGetRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "secret", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ProjectServiceInviteGetRequest { + return new ProjectServiceInviteGetRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ProjectServiceInviteGetRequest { + return new ProjectServiceInviteGetRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ProjectServiceInviteGetRequest { + return new ProjectServiceInviteGetRequest().fromJsonString(jsonString, options); + } + + static equals(a: ProjectServiceInviteGetRequest | PlainMessage | undefined, b: ProjectServiceInviteGetRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(ProjectServiceInviteGetRequest, a, b); + } +} + +/** + * ProjectServiceInviteGetResponse is the response payload to a get invite request + * + * @generated from message api.v1.ProjectServiceInviteGetResponse + */ +export class ProjectServiceInviteGetResponse extends Message { + /** + * Invite is the invite + * + * @generated from field: api.v1.ProjectInvite invite = 1; + */ + invite?: ProjectInvite; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "api.v1.ProjectServiceInviteGetResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "invite", kind: "message", T: ProjectInvite }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ProjectServiceInviteGetResponse { + return new ProjectServiceInviteGetResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ProjectServiceInviteGetResponse { + return new ProjectServiceInviteGetResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ProjectServiceInviteGetResponse { + return new ProjectServiceInviteGetResponse().fromJsonString(jsonString, options); + } + + static equals(a: ProjectServiceInviteGetResponse | PlainMessage | undefined, b: ProjectServiceInviteGetResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(ProjectServiceInviteGetResponse, a, b); + } +} + /** * ProjectServiceRemoveMemberRequest is used to remove a member from a project * @@ -942,6 +1048,104 @@ export class ProjectServiceRemoveMemberResponse extends Message { + /** + * Project is the uuid of the project + * + * @generated from field: string project = 1; + */ + project = ""; + + /** + * MemberID is the id of the member to remove from this project + * + * @generated from field: string member_id = 2; + */ + memberId = ""; + + /** + * Role is the role in this project the user will get after the update + * + * @generated from field: api.v1.ProjectRole role = 3; + */ + role = ProjectRole.UNSPECIFIED; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "api.v1.ProjectServiceUpdateMemberRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "project", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "member_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "role", kind: "enum", T: proto3.getEnumType(ProjectRole) }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ProjectServiceUpdateMemberRequest { + return new ProjectServiceUpdateMemberRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ProjectServiceUpdateMemberRequest { + return new ProjectServiceUpdateMemberRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ProjectServiceUpdateMemberRequest { + return new ProjectServiceUpdateMemberRequest().fromJsonString(jsonString, options); + } + + static equals(a: ProjectServiceUpdateMemberRequest | PlainMessage | undefined, b: ProjectServiceUpdateMemberRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(ProjectServiceUpdateMemberRequest, a, b); + } +} + +/** + * ProjectServiceUpdateMemberResponse is the response payload to a update member request + * + * @generated from message api.v1.ProjectServiceUpdateMemberResponse + */ +export class ProjectServiceUpdateMemberResponse extends Message { + /** + * ProjectMember is the updated project member + * + * @generated from field: api.v1.ProjectMember project_member = 5; + */ + projectMember?: ProjectMember; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "api.v1.ProjectServiceUpdateMemberResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 5, name: "project_member", kind: "message", T: ProjectMember }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ProjectServiceUpdateMemberResponse { + return new ProjectServiceUpdateMemberResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ProjectServiceUpdateMemberResponse { + return new ProjectServiceUpdateMemberResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ProjectServiceUpdateMemberResponse { + return new ProjectServiceUpdateMemberResponse().fromJsonString(jsonString, options); + } + + static equals(a: ProjectServiceUpdateMemberResponse | PlainMessage | undefined, b: ProjectServiceUpdateMemberResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(ProjectServiceUpdateMemberResponse, a, b); + } +} + /** * ProjectServiceInviteAcceptRequest is the request payload to a accept invite request * diff --git a/js/permissions/servicepermissions.json b/js/permissions/servicepermissions.json index 6622499a..53781fd9 100755 --- a/js/permissions/servicepermissions.json +++ b/js/permissions/servicepermissions.json @@ -87,6 +87,7 @@ "/api.v1.ProjectService/Delete", "/api.v1.ProjectService/Update", "/api.v1.ProjectService/RemoveMember", + "/api.v1.ProjectService/UpdateMember", "/api.v1.ProjectService/Invite", "/api.v1.ProjectService/InviteDelete", "/api.v1.ProjectService/InvitesList", @@ -186,10 +187,12 @@ "/api.v1.ProjectService/Invite": true, "/api.v1.ProjectService/InviteAccept": true, "/api.v1.ProjectService/InviteDelete": true, + "/api.v1.ProjectService/InviteGet": true, "/api.v1.ProjectService/InvitesList": true, "/api.v1.ProjectService/List": true, "/api.v1.ProjectService/RemoveMember": true, "/api.v1.ProjectService/Update": true, + "/api.v1.ProjectService/UpdateMember": true, "/api.v1.SnapshotService/Delete": true, "/api.v1.SnapshotService/Get": true, "/api.v1.SnapshotService/List": true, @@ -226,6 +229,7 @@ "self": { "/api.v1.MethodService/TokenScopedList": true, "/api.v1.ProjectService/InviteAccept": true, + "/api.v1.ProjectService/InviteGet": true, "/api.v1.ProjectService/List": true, "/api.v1.TokenService/Create": true, "/api.v1.TokenService/List": true, @@ -290,10 +294,12 @@ "/api.v1.ProjectService/Invite": true, "/api.v1.ProjectService/InviteAccept": true, "/api.v1.ProjectService/InviteDelete": true, - "/api.v1.ProjectService/InvitesList": true, + "/api.v1.ProjectService/InviteGet": false, + "/api.v1.ProjectService/InvitesList": false, "/api.v1.ProjectService/List": false, "/api.v1.ProjectService/RemoveMember": true, "/api.v1.ProjectService/Update": true, + "/api.v1.ProjectService/UpdateMember": true, "/api.v1.SnapshotService/Delete": true, "/api.v1.SnapshotService/Get": false, "/api.v1.SnapshotService/List": false, diff --git a/proto/api/v1/project.proto b/proto/api/v1/project.proto index 30416c9c..5cfbe532 100644 --- a/proto/api/v1/project.proto +++ b/proto/api/v1/project.proto @@ -37,11 +37,16 @@ service ProjectService { option (project_roles) = PROJECT_ROLE_EDITOR; option (auditing) = AUDITING_INCLUDED; } - // RemoveMember a user from a project + // RemoveMember remove a user from a project rpc RemoveMember(ProjectServiceRemoveMemberRequest) returns (ProjectServiceRemoveMemberResponse) { option (project_roles) = PROJECT_ROLE_OWNER; option (auditing) = AUDITING_INCLUDED; } + // UpdateMember update a user for a project + rpc UpdateMember(ProjectServiceUpdateMemberRequest) returns (ProjectServiceUpdateMemberResponse) { + option (project_roles) = PROJECT_ROLE_OWNER; + option (auditing) = AUDITING_INCLUDED; + } // Invite a user to a project rpc Invite(ProjectServiceInviteRequest) returns (ProjectServiceInviteResponse) { option (project_roles) = PROJECT_ROLE_OWNER; @@ -60,7 +65,12 @@ service ProjectService { // InvitesList list all invites to a project rpc InvitesList(ProjectServiceInvitesListRequest) returns (ProjectServiceInvitesListResponse) { option (project_roles) = PROJECT_ROLE_OWNER; - option (auditing) = AUDITING_INCLUDED; + option (auditing) = AUDITING_EXCLUDED; + } + // InviteGet get an invite + rpc InviteGet(ProjectServiceInviteGetRequest) returns (ProjectServiceInviteGetResponse) { + option (visibility) = VISIBILITY_SELF; + option (auditing) = AUDITING_EXCLUDED; } } @@ -103,6 +113,12 @@ message ProjectInvite { ProjectRole role = 3; // Joined is false as long as a user has not accepted the invite bool joined = 4; + // ProjectName is the project name for which this invite was created + string project_name = 5; + // Tenant is the login of tenant who invites to join this project + string tenant = 6; + // TenantName is the name of tenant who invites to join this project + string tenant_name = 7; // ExpiresAt the date when this invite expires google.protobuf.Timestamp expires_at = 10; // JoinedAt the date when the member accepted this invite @@ -230,11 +246,22 @@ message ProjectServiceInvitesListResponse { repeated ProjectInvite invites = 1; } +// ProjectServiceInviteGetRequest is the request payload to get a invite +message ProjectServiceInviteGetRequest { + // Secret of the invite to list + string secret = 1; +} + +// ProjectServiceInviteGetResponse is the response payload to a get invite request +message ProjectServiceInviteGetResponse { + // Invite is the invite + ProjectInvite invite = 1; +} + // ProjectServiceRemoveMemberRequest is used to remove a member from a project message ProjectServiceRemoveMemberRequest { // Project is the uuid of the project string project = 1 [(validate.rules).string.uuid = true]; - // MemberID is the id of the member to remove from this project string member_id = 2; } @@ -242,6 +269,22 @@ message ProjectServiceRemoveMemberRequest { // ProjectServiceRemoveMemberResponse is the response payload to a remove member request message ProjectServiceRemoveMemberResponse {} +// ProjectServiceUpdateMemberRequest is used to update a member of a project +message ProjectServiceUpdateMemberRequest { + // Project is the uuid of the project + string project = 1 [(validate.rules).string.uuid = true]; + // MemberID is the id of the member to remove from this project + string member_id = 2; + // Role is the role in this project the user will get after the update + ProjectRole role = 3; +} + +// ProjectServiceUpdateMemberResponse is the response payload to a update member request +message ProjectServiceUpdateMemberResponse { + // ProjectMember is the updated project member + ProjectMember project_member = 5; +} + // ProjectServiceInviteAcceptRequest is the request payload to a accept invite request message ProjectServiceInviteAcceptRequest { // Secret is the invitation secret part of the invitation url diff --git a/proto/buf.gen.yaml b/proto/buf.gen.yaml index 4e8bfebd..2ae442ae 100644 --- a/proto/buf.gen.yaml +++ b/proto/buf.gen.yaml @@ -31,12 +31,12 @@ plugins: out: ../docs opt: json,docs.json # generate rust client - # - plugin: buf.build/community/neoeinstein-prost:v0.2.3 + # - plugin: buf.build/community/neoeinstein-prost:v0.3.1 # out: ../rs - # - plugin: buf.build/community/neoeinstein-tonic:v0.3.0 + # - plugin: buf.build/community/neoeinstein-tonic:v0.4.0 # out: ../rs # Create python client - # - plugin: buf.build/protocolbuffers/python:v25.2 + # - plugin: buf.build/protocolbuffers/python:v25.3 # out: ../python - # - plugin: buf.build/grpc/python:v1.61.0 + # - plugin: buf.build/grpc/python:v1.62.0 # out: ../python