diff --git a/frontend/web/src/stores/shortcut.ts b/frontend/web/src/stores/shortcut.ts index b653121..2798d38 100644 --- a/frontend/web/src/stores/shortcut.ts +++ b/frontend/web/src/stores/shortcut.ts @@ -26,12 +26,9 @@ const useShortcutStore = create( return shortcuts; }, fetchShortcutByName: async (name: string) => { - const { shortcut } = await shortcutServiceClient.getShortcutByName({ + const shortcut = await shortcutServiceClient.getShortcutByName({ name, }); - if (!shortcut) { - throw new Error(`Shortcut with name ${name} not found`); - } return shortcut; }, getOrFetchShortcutById: async (id: number) => { @@ -40,13 +37,9 @@ const useShortcutStore = create( return shortcutMap[id] as Shortcut; } - const { shortcut } = await shortcutServiceClient.getShortcut({ + const shortcut = await shortcutServiceClient.getShortcut({ id, }); - if (!shortcut) { - throw new Error(`Shortcut with id ${id} not found`); - } - shortcutMap[id] = shortcut; set({ shortcutMapById: shortcutMap }); return shortcut; @@ -59,25 +52,19 @@ const useShortcutStore = create( return Object.values(get().shortcutMapById); }, createShortcut: async (shortcut: Shortcut) => { - const { shortcut: createdShortcut } = await shortcutServiceClient.createShortcut({ + const createdShortcut = await shortcutServiceClient.createShortcut({ shortcut: shortcut, }); - if (!createdShortcut) { - throw new Error(`Failed to create shortcut`); - } const shortcutMap = get().shortcutMapById; shortcutMap[createdShortcut.id] = createdShortcut; set({ shortcutMapById: shortcutMap }); return createdShortcut; }, updateShortcut: async (shortcut: Partial, updateMask: string[]) => { - const { shortcut: updatedShortcut } = await shortcutServiceClient.updateShortcut({ + const updatedShortcut = await shortcutServiceClient.updateShortcut({ shortcut: shortcut, updateMask, }); - if (!updatedShortcut) { - throw new Error(`Failed to update shortcut`); - } const shortcutMap = get().shortcutMapById; shortcutMap[updatedShortcut.id] = updatedShortcut; set({ shortcutMapById: shortcutMap }); diff --git a/proto/api/v1/shortcut_service.proto b/proto/api/v1/shortcut_service.proto index aa3b568..82092b7 100644 --- a/proto/api/v1/shortcut_service.proto +++ b/proto/api/v1/shortcut_service.proto @@ -5,6 +5,7 @@ package slash.api.v1; import "api/v1/common.proto"; import "google/api/annotations.proto"; import "google/api/client.proto"; +import "google/protobuf/empty.proto"; import "google/protobuf/field_mask.proto"; import "google/protobuf/timestamp.proto"; @@ -16,21 +17,21 @@ service ShortcutService { option (google.api.http) = {get: "/api/v1/shortcuts"}; } // GetShortcut returns a shortcut by id. - rpc GetShortcut(GetShortcutRequest) returns (GetShortcutResponse) { + rpc GetShortcut(GetShortcutRequest) returns (Shortcut) { option (google.api.http) = {get: "/api/v1/shortcuts/{id}"}; option (google.api.method_signature) = "id"; } // GetShortcutByName returns a shortcut by name. - rpc GetShortcutByName(GetShortcutByNameRequest) returns (GetShortcutByNameResponse) {} + rpc GetShortcutByName(GetShortcutByNameRequest) returns (Shortcut) {} // CreateShortcut creates a shortcut. - rpc CreateShortcut(CreateShortcutRequest) returns (CreateShortcutResponse) { + rpc CreateShortcut(CreateShortcutRequest) returns (Shortcut) { option (google.api.http) = { post: "/api/v1/shortcuts" body: "shortcut" }; } // UpdateShortcut updates a shortcut. - rpc UpdateShortcut(UpdateShortcutRequest) returns (UpdateShortcutResponse) { + rpc UpdateShortcut(UpdateShortcutRequest) returns (Shortcut) { option (google.api.http) = { put: "/api/v1/shortcuts/{shortcut.id}" body: "shortcut" @@ -38,7 +39,7 @@ service ShortcutService { option (google.api.method_signature) = "shortcut,update_mask"; } // DeleteShortcut deletes a shortcut by name. - rpc DeleteShortcut(DeleteShortcutRequest) returns (DeleteShortcutResponse) { + rpc DeleteShortcut(DeleteShortcutRequest) returns (google.protobuf.Empty) { option (google.api.http) = {delete: "/api/v1/shortcuts/{id}"}; option (google.api.method_signature) = "id"; } @@ -75,15 +76,16 @@ message Shortcut { int32 view_count = 12; OpenGraphMetadata og_metadata = 13; + + message OpenGraphMetadata { + string title = 1; + + string description = 2; + + string image = 3; + } } -message OpenGraphMetadata { - string title = 1; - - string description = 2; - - string image = 3; -} message ListShortcutsRequest {} @@ -95,42 +97,24 @@ message GetShortcutRequest { int32 id = 1; } -message GetShortcutResponse { - Shortcut shortcut = 1; -} - message GetShortcutByNameRequest { string name = 1; } -message GetShortcutByNameResponse { - Shortcut shortcut = 1; -} - message CreateShortcutRequest { Shortcut shortcut = 1; } -message CreateShortcutResponse { - Shortcut shortcut = 1; -} - message UpdateShortcutRequest { Shortcut shortcut = 1; google.protobuf.FieldMask update_mask = 2; } -message UpdateShortcutResponse { - Shortcut shortcut = 1; -} - message DeleteShortcutRequest { int32 id = 1; } -message DeleteShortcutResponse {} - message GetShortcutAnalyticsRequest { int32 id = 1; } diff --git a/proto/gen/api/v1/README.md b/proto/gen/api/v1/README.md index 4210236..b0062a5 100644 --- a/proto/gen/api/v1/README.md +++ b/proto/gen/api/v1/README.md @@ -59,22 +59,17 @@ - [api/v1/shortcut_service.proto](#api_v1_shortcut_service-proto) - [CreateShortcutRequest](#slash-api-v1-CreateShortcutRequest) - - [CreateShortcutResponse](#slash-api-v1-CreateShortcutResponse) - [DeleteShortcutRequest](#slash-api-v1-DeleteShortcutRequest) - - [DeleteShortcutResponse](#slash-api-v1-DeleteShortcutResponse) - [GetShortcutAnalyticsRequest](#slash-api-v1-GetShortcutAnalyticsRequest) - [GetShortcutAnalyticsResponse](#slash-api-v1-GetShortcutAnalyticsResponse) - [GetShortcutAnalyticsResponse.AnalyticsItem](#slash-api-v1-GetShortcutAnalyticsResponse-AnalyticsItem) - [GetShortcutByNameRequest](#slash-api-v1-GetShortcutByNameRequest) - - [GetShortcutByNameResponse](#slash-api-v1-GetShortcutByNameResponse) - [GetShortcutRequest](#slash-api-v1-GetShortcutRequest) - - [GetShortcutResponse](#slash-api-v1-GetShortcutResponse) - [ListShortcutsRequest](#slash-api-v1-ListShortcutsRequest) - [ListShortcutsResponse](#slash-api-v1-ListShortcutsResponse) - - [OpenGraphMetadata](#slash-api-v1-OpenGraphMetadata) - [Shortcut](#slash-api-v1-Shortcut) + - [Shortcut.OpenGraphMetadata](#slash-api-v1-Shortcut-OpenGraphMetadata) - [UpdateShortcutRequest](#slash-api-v1-UpdateShortcutRequest) - - [UpdateShortcutResponse](#slash-api-v1-UpdateShortcutResponse) - [ShortcutService](#slash-api-v1-ShortcutService) @@ -824,21 +819,6 @@ - - -### CreateShortcutResponse - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| shortcut | [Shortcut](#slash-api-v1-Shortcut) | | | - - - - - - ### DeleteShortcutRequest @@ -854,16 +834,6 @@ - - -### DeleteShortcutResponse - - - - - - - ### GetShortcutAnalyticsRequest @@ -927,21 +897,6 @@ - - -### GetShortcutByNameResponse - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| shortcut | [Shortcut](#slash-api-v1-Shortcut) | | | - - - - - - ### GetShortcutRequest @@ -957,21 +912,6 @@ - - -### GetShortcutResponse - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| shortcut | [Shortcut](#slash-api-v1-Shortcut) | | | - - - - - - ### ListShortcutsRequest @@ -997,23 +937,6 @@ - - -### OpenGraphMetadata - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| title | [string](#string) | | | -| description | [string](#string) | | | -| image | [string](#string) | | | - - - - - - ### Shortcut @@ -1034,7 +957,24 @@ | description | [string](#string) | | | | visibility | [Visibility](#slash-api-v1-Visibility) | | | | view_count | [int32](#int32) | | | -| og_metadata | [OpenGraphMetadata](#slash-api-v1-OpenGraphMetadata) | | | +| og_metadata | [Shortcut.OpenGraphMetadata](#slash-api-v1-Shortcut-OpenGraphMetadata) | | | + + + + + + + + +### Shortcut.OpenGraphMetadata + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| title | [string](#string) | | | +| description | [string](#string) | | | +| image | [string](#string) | | | @@ -1056,21 +996,6 @@ - - - -### UpdateShortcutResponse - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| shortcut | [Shortcut](#slash-api-v1-Shortcut) | | | - - - - - @@ -1086,11 +1011,11 @@ | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| | ListShortcuts | [ListShortcutsRequest](#slash-api-v1-ListShortcutsRequest) | [ListShortcutsResponse](#slash-api-v1-ListShortcutsResponse) | ListShortcuts returns a list of shortcuts. | -| GetShortcut | [GetShortcutRequest](#slash-api-v1-GetShortcutRequest) | [GetShortcutResponse](#slash-api-v1-GetShortcutResponse) | GetShortcut returns a shortcut by id. | -| GetShortcutByName | [GetShortcutByNameRequest](#slash-api-v1-GetShortcutByNameRequest) | [GetShortcutByNameResponse](#slash-api-v1-GetShortcutByNameResponse) | GetShortcutByName returns a shortcut by name. | -| CreateShortcut | [CreateShortcutRequest](#slash-api-v1-CreateShortcutRequest) | [CreateShortcutResponse](#slash-api-v1-CreateShortcutResponse) | CreateShortcut creates a shortcut. | -| UpdateShortcut | [UpdateShortcutRequest](#slash-api-v1-UpdateShortcutRequest) | [UpdateShortcutResponse](#slash-api-v1-UpdateShortcutResponse) | UpdateShortcut updates a shortcut. | -| DeleteShortcut | [DeleteShortcutRequest](#slash-api-v1-DeleteShortcutRequest) | [DeleteShortcutResponse](#slash-api-v1-DeleteShortcutResponse) | DeleteShortcut deletes a shortcut by name. | +| GetShortcut | [GetShortcutRequest](#slash-api-v1-GetShortcutRequest) | [Shortcut](#slash-api-v1-Shortcut) | GetShortcut returns a shortcut by id. | +| GetShortcutByName | [GetShortcutByNameRequest](#slash-api-v1-GetShortcutByNameRequest) | [Shortcut](#slash-api-v1-Shortcut) | GetShortcutByName returns a shortcut by name. | +| CreateShortcut | [CreateShortcutRequest](#slash-api-v1-CreateShortcutRequest) | [Shortcut](#slash-api-v1-Shortcut) | CreateShortcut creates a shortcut. | +| UpdateShortcut | [UpdateShortcutRequest](#slash-api-v1-UpdateShortcutRequest) | [Shortcut](#slash-api-v1-Shortcut) | UpdateShortcut updates a shortcut. | +| DeleteShortcut | [DeleteShortcutRequest](#slash-api-v1-DeleteShortcutRequest) | [.google.protobuf.Empty](#google-protobuf-Empty) | DeleteShortcut deletes a shortcut by name. | | GetShortcutAnalytics | [GetShortcutAnalyticsRequest](#slash-api-v1-GetShortcutAnalyticsRequest) | [GetShortcutAnalyticsResponse](#slash-api-v1-GetShortcutAnalyticsResponse) | GetShortcutAnalytics returns the analytics for a shortcut. | diff --git a/proto/gen/api/v1/shortcut_service.pb.go b/proto/gen/api/v1/shortcut_service.pb.go index 718128e..f0343ef 100644 --- a/proto/gen/api/v1/shortcut_service.pb.go +++ b/proto/gen/api/v1/shortcut_service.pb.go @@ -10,6 +10,7 @@ import ( _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" @@ -28,19 +29,19 @@ type Shortcut struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - CreatorId int32 `protobuf:"varint,2,opt,name=creator_id,json=creatorId,proto3" json:"creator_id,omitempty"` - CreatedTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_time,json=createdTime,proto3" json:"created_time,omitempty"` - UpdatedTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=updated_time,json=updatedTime,proto3" json:"updated_time,omitempty"` - RowStatus RowStatus `protobuf:"varint,5,opt,name=row_status,json=rowStatus,proto3,enum=slash.api.v1.RowStatus" json:"row_status,omitempty"` - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` - Link string `protobuf:"bytes,7,opt,name=link,proto3" json:"link,omitempty"` - Title string `protobuf:"bytes,8,opt,name=title,proto3" json:"title,omitempty"` - Tags []string `protobuf:"bytes,9,rep,name=tags,proto3" json:"tags,omitempty"` - Description string `protobuf:"bytes,10,opt,name=description,proto3" json:"description,omitempty"` - Visibility Visibility `protobuf:"varint,11,opt,name=visibility,proto3,enum=slash.api.v1.Visibility" json:"visibility,omitempty"` - ViewCount int32 `protobuf:"varint,12,opt,name=view_count,json=viewCount,proto3" json:"view_count,omitempty"` - OgMetadata *OpenGraphMetadata `protobuf:"bytes,13,opt,name=og_metadata,json=ogMetadata,proto3" json:"og_metadata,omitempty"` + Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + CreatorId int32 `protobuf:"varint,2,opt,name=creator_id,json=creatorId,proto3" json:"creator_id,omitempty"` + CreatedTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_time,json=createdTime,proto3" json:"created_time,omitempty"` + UpdatedTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=updated_time,json=updatedTime,proto3" json:"updated_time,omitempty"` + RowStatus RowStatus `protobuf:"varint,5,opt,name=row_status,json=rowStatus,proto3,enum=slash.api.v1.RowStatus" json:"row_status,omitempty"` + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + Link string `protobuf:"bytes,7,opt,name=link,proto3" json:"link,omitempty"` + Title string `protobuf:"bytes,8,opt,name=title,proto3" json:"title,omitempty"` + Tags []string `protobuf:"bytes,9,rep,name=tags,proto3" json:"tags,omitempty"` + Description string `protobuf:"bytes,10,opt,name=description,proto3" json:"description,omitempty"` + Visibility Visibility `protobuf:"varint,11,opt,name=visibility,proto3,enum=slash.api.v1.Visibility" json:"visibility,omitempty"` + ViewCount int32 `protobuf:"varint,12,opt,name=view_count,json=viewCount,proto3" json:"view_count,omitempty"` + OgMetadata *Shortcut_OpenGraphMetadata `protobuf:"bytes,13,opt,name=og_metadata,json=ogMetadata,proto3" json:"og_metadata,omitempty"` } func (x *Shortcut) Reset() { @@ -159,76 +160,13 @@ func (x *Shortcut) GetViewCount() int32 { return 0 } -func (x *Shortcut) GetOgMetadata() *OpenGraphMetadata { +func (x *Shortcut) GetOgMetadata() *Shortcut_OpenGraphMetadata { if x != nil { return x.OgMetadata } return nil } -type OpenGraphMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Image string `protobuf:"bytes,3,opt,name=image,proto3" json:"image,omitempty"` -} - -func (x *OpenGraphMetadata) Reset() { - *x = OpenGraphMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OpenGraphMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OpenGraphMetadata) ProtoMessage() {} - -func (x *OpenGraphMetadata) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OpenGraphMetadata.ProtoReflect.Descriptor instead. -func (*OpenGraphMetadata) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{1} -} - -func (x *OpenGraphMetadata) GetTitle() string { - if x != nil { - return x.Title - } - return "" -} - -func (x *OpenGraphMetadata) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *OpenGraphMetadata) GetImage() string { - if x != nil { - return x.Image - } - return "" -} - type ListShortcutsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -238,7 +176,7 @@ type ListShortcutsRequest struct { func (x *ListShortcutsRequest) Reset() { *x = ListShortcutsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[2] + mi := &file_api_v1_shortcut_service_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -251,7 +189,7 @@ func (x *ListShortcutsRequest) String() string { func (*ListShortcutsRequest) ProtoMessage() {} func (x *ListShortcutsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[2] + mi := &file_api_v1_shortcut_service_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -264,7 +202,7 @@ func (x *ListShortcutsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListShortcutsRequest.ProtoReflect.Descriptor instead. func (*ListShortcutsRequest) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{2} + return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{1} } type ListShortcutsResponse struct { @@ -278,7 +216,7 @@ type ListShortcutsResponse struct { func (x *ListShortcutsResponse) Reset() { *x = ListShortcutsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[3] + mi := &file_api_v1_shortcut_service_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -291,7 +229,7 @@ func (x *ListShortcutsResponse) String() string { func (*ListShortcutsResponse) ProtoMessage() {} func (x *ListShortcutsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[3] + mi := &file_api_v1_shortcut_service_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -304,7 +242,7 @@ func (x *ListShortcutsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListShortcutsResponse.ProtoReflect.Descriptor instead. func (*ListShortcutsResponse) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{3} + return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{2} } func (x *ListShortcutsResponse) GetShortcuts() []*Shortcut { @@ -325,7 +263,7 @@ type GetShortcutRequest struct { func (x *GetShortcutRequest) Reset() { *x = GetShortcutRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[4] + mi := &file_api_v1_shortcut_service_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -338,7 +276,7 @@ func (x *GetShortcutRequest) String() string { func (*GetShortcutRequest) ProtoMessage() {} func (x *GetShortcutRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[4] + mi := &file_api_v1_shortcut_service_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -351,7 +289,7 @@ func (x *GetShortcutRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetShortcutRequest.ProtoReflect.Descriptor instead. func (*GetShortcutRequest) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{4} + return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{3} } func (x *GetShortcutRequest) GetId() int32 { @@ -361,53 +299,6 @@ func (x *GetShortcutRequest) GetId() int32 { return 0 } -type GetShortcutResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Shortcut *Shortcut `protobuf:"bytes,1,opt,name=shortcut,proto3" json:"shortcut,omitempty"` -} - -func (x *GetShortcutResponse) Reset() { - *x = GetShortcutResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetShortcutResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetShortcutResponse) ProtoMessage() {} - -func (x *GetShortcutResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[5] - 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 GetShortcutResponse.ProtoReflect.Descriptor instead. -func (*GetShortcutResponse) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{5} -} - -func (x *GetShortcutResponse) GetShortcut() *Shortcut { - if x != nil { - return x.Shortcut - } - return nil -} - type GetShortcutByNameRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -419,7 +310,7 @@ type GetShortcutByNameRequest struct { func (x *GetShortcutByNameRequest) Reset() { *x = GetShortcutByNameRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[6] + mi := &file_api_v1_shortcut_service_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -432,7 +323,7 @@ func (x *GetShortcutByNameRequest) String() string { func (*GetShortcutByNameRequest) ProtoMessage() {} func (x *GetShortcutByNameRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[6] + mi := &file_api_v1_shortcut_service_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -445,7 +336,7 @@ func (x *GetShortcutByNameRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetShortcutByNameRequest.ProtoReflect.Descriptor instead. func (*GetShortcutByNameRequest) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{6} + return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{4} } func (x *GetShortcutByNameRequest) GetName() string { @@ -455,53 +346,6 @@ func (x *GetShortcutByNameRequest) GetName() string { return "" } -type GetShortcutByNameResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Shortcut *Shortcut `protobuf:"bytes,1,opt,name=shortcut,proto3" json:"shortcut,omitempty"` -} - -func (x *GetShortcutByNameResponse) Reset() { - *x = GetShortcutByNameResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetShortcutByNameResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetShortcutByNameResponse) ProtoMessage() {} - -func (x *GetShortcutByNameResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[7] - 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 GetShortcutByNameResponse.ProtoReflect.Descriptor instead. -func (*GetShortcutByNameResponse) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{7} -} - -func (x *GetShortcutByNameResponse) GetShortcut() *Shortcut { - if x != nil { - return x.Shortcut - } - return nil -} - type CreateShortcutRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -513,7 +357,7 @@ type CreateShortcutRequest struct { func (x *CreateShortcutRequest) Reset() { *x = CreateShortcutRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[8] + mi := &file_api_v1_shortcut_service_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -526,7 +370,7 @@ func (x *CreateShortcutRequest) String() string { func (*CreateShortcutRequest) ProtoMessage() {} func (x *CreateShortcutRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[8] + mi := &file_api_v1_shortcut_service_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -539,7 +383,7 @@ func (x *CreateShortcutRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateShortcutRequest.ProtoReflect.Descriptor instead. func (*CreateShortcutRequest) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{8} + return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{5} } func (x *CreateShortcutRequest) GetShortcut() *Shortcut { @@ -549,53 +393,6 @@ func (x *CreateShortcutRequest) GetShortcut() *Shortcut { return nil } -type CreateShortcutResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Shortcut *Shortcut `protobuf:"bytes,1,opt,name=shortcut,proto3" json:"shortcut,omitempty"` -} - -func (x *CreateShortcutResponse) Reset() { - *x = CreateShortcutResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateShortcutResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateShortcutResponse) ProtoMessage() {} - -func (x *CreateShortcutResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[9] - 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 CreateShortcutResponse.ProtoReflect.Descriptor instead. -func (*CreateShortcutResponse) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{9} -} - -func (x *CreateShortcutResponse) GetShortcut() *Shortcut { - if x != nil { - return x.Shortcut - } - return nil -} - type UpdateShortcutRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -608,7 +405,7 @@ type UpdateShortcutRequest struct { func (x *UpdateShortcutRequest) Reset() { *x = UpdateShortcutRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[10] + mi := &file_api_v1_shortcut_service_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -621,7 +418,7 @@ func (x *UpdateShortcutRequest) String() string { func (*UpdateShortcutRequest) ProtoMessage() {} func (x *UpdateShortcutRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[10] + mi := &file_api_v1_shortcut_service_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -634,7 +431,7 @@ func (x *UpdateShortcutRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateShortcutRequest.ProtoReflect.Descriptor instead. func (*UpdateShortcutRequest) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{10} + return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{6} } func (x *UpdateShortcutRequest) GetShortcut() *Shortcut { @@ -651,53 +448,6 @@ func (x *UpdateShortcutRequest) GetUpdateMask() *fieldmaskpb.FieldMask { return nil } -type UpdateShortcutResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Shortcut *Shortcut `protobuf:"bytes,1,opt,name=shortcut,proto3" json:"shortcut,omitempty"` -} - -func (x *UpdateShortcutResponse) Reset() { - *x = UpdateShortcutResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateShortcutResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateShortcutResponse) ProtoMessage() {} - -func (x *UpdateShortcutResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[11] - 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 UpdateShortcutResponse.ProtoReflect.Descriptor instead. -func (*UpdateShortcutResponse) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{11} -} - -func (x *UpdateShortcutResponse) GetShortcut() *Shortcut { - if x != nil { - return x.Shortcut - } - return nil -} - type DeleteShortcutRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -709,7 +459,7 @@ type DeleteShortcutRequest struct { func (x *DeleteShortcutRequest) Reset() { *x = DeleteShortcutRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[12] + mi := &file_api_v1_shortcut_service_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -722,7 +472,7 @@ func (x *DeleteShortcutRequest) String() string { func (*DeleteShortcutRequest) ProtoMessage() {} func (x *DeleteShortcutRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[12] + mi := &file_api_v1_shortcut_service_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -735,7 +485,7 @@ func (x *DeleteShortcutRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteShortcutRequest.ProtoReflect.Descriptor instead. func (*DeleteShortcutRequest) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{12} + return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{7} } func (x *DeleteShortcutRequest) GetId() int32 { @@ -745,44 +495,6 @@ func (x *DeleteShortcutRequest) GetId() int32 { return 0 } -type DeleteShortcutResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *DeleteShortcutResponse) Reset() { - *x = DeleteShortcutResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteShortcutResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteShortcutResponse) ProtoMessage() {} - -func (x *DeleteShortcutResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteShortcutResponse.ProtoReflect.Descriptor instead. -func (*DeleteShortcutResponse) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{13} -} - type GetShortcutAnalyticsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -794,7 +506,7 @@ type GetShortcutAnalyticsRequest struct { func (x *GetShortcutAnalyticsRequest) Reset() { *x = GetShortcutAnalyticsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[14] + mi := &file_api_v1_shortcut_service_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -807,7 +519,7 @@ func (x *GetShortcutAnalyticsRequest) String() string { func (*GetShortcutAnalyticsRequest) ProtoMessage() {} func (x *GetShortcutAnalyticsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[14] + mi := &file_api_v1_shortcut_service_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -820,7 +532,7 @@ func (x *GetShortcutAnalyticsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetShortcutAnalyticsRequest.ProtoReflect.Descriptor instead. func (*GetShortcutAnalyticsRequest) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{14} + return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{8} } func (x *GetShortcutAnalyticsRequest) GetId() int32 { @@ -843,7 +555,7 @@ type GetShortcutAnalyticsResponse struct { func (x *GetShortcutAnalyticsResponse) Reset() { *x = GetShortcutAnalyticsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[15] + mi := &file_api_v1_shortcut_service_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -856,7 +568,7 @@ func (x *GetShortcutAnalyticsResponse) String() string { func (*GetShortcutAnalyticsResponse) ProtoMessage() {} func (x *GetShortcutAnalyticsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[15] + mi := &file_api_v1_shortcut_service_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -869,7 +581,7 @@ func (x *GetShortcutAnalyticsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetShortcutAnalyticsResponse.ProtoReflect.Descriptor instead. func (*GetShortcutAnalyticsResponse) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{15} + return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{9} } func (x *GetShortcutAnalyticsResponse) GetReferences() []*GetShortcutAnalyticsResponse_AnalyticsItem { @@ -893,6 +605,69 @@ func (x *GetShortcutAnalyticsResponse) GetBrowsers() []*GetShortcutAnalyticsResp return nil } +type Shortcut_OpenGraphMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Image string `protobuf:"bytes,3,opt,name=image,proto3" json:"image,omitempty"` +} + +func (x *Shortcut_OpenGraphMetadata) Reset() { + *x = Shortcut_OpenGraphMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_shortcut_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Shortcut_OpenGraphMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Shortcut_OpenGraphMetadata) ProtoMessage() {} + +func (x *Shortcut_OpenGraphMetadata) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_shortcut_service_proto_msgTypes[10] + 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 Shortcut_OpenGraphMetadata.ProtoReflect.Descriptor instead. +func (*Shortcut_OpenGraphMetadata) Descriptor() ([]byte, []int) { + return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *Shortcut_OpenGraphMetadata) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *Shortcut_OpenGraphMetadata) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Shortcut_OpenGraphMetadata) GetImage() string { + if x != nil { + return x.Image + } + return "" +} + type GetShortcutAnalyticsResponse_AnalyticsItem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -905,7 +680,7 @@ type GetShortcutAnalyticsResponse_AnalyticsItem struct { func (x *GetShortcutAnalyticsResponse_AnalyticsItem) Reset() { *x = GetShortcutAnalyticsResponse_AnalyticsItem{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_shortcut_service_proto_msgTypes[16] + mi := &file_api_v1_shortcut_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -918,7 +693,7 @@ func (x *GetShortcutAnalyticsResponse_AnalyticsItem) String() string { func (*GetShortcutAnalyticsResponse_AnalyticsItem) ProtoMessage() {} func (x *GetShortcutAnalyticsResponse_AnalyticsItem) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_shortcut_service_proto_msgTypes[16] + mi := &file_api_v1_shortcut_service_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -931,7 +706,7 @@ func (x *GetShortcutAnalyticsResponse_AnalyticsItem) ProtoReflect() protoreflect // Deprecated: Use GetShortcutAnalyticsResponse_AnalyticsItem.ProtoReflect.Descriptor instead. func (*GetShortcutAnalyticsResponse_AnalyticsItem) Descriptor() ([]byte, []int) { - return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{15, 0} + return file_api_v1_shortcut_service_proto_rawDescGZIP(), []int{9, 0} } func (x *GetShortcutAnalyticsResponse_AnalyticsItem) GetName() string { @@ -958,195 +733,171 @@ var file_api_v1_shortcut_service_proto_rawDesc = []byte{ 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfe, 0x03, 0x0a, - 0x08, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x0a, 0x72, 0x6f, 0x77, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x73, 0x6c, 0x61, - 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x77, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x09, 0x72, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x61, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, - 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1d, 0x0a, 0x0a, - 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x40, 0x0a, 0x0b, 0x6f, - 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x70, 0x65, 0x6e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x0a, 0x6f, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x61, 0x0a, - 0x11, 0x4f, 0x70, 0x65, 0x6e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x22, 0x16, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4d, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x34, 0x0a, 0x09, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x09, 0x73, 0x68, - 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x22, 0x24, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x68, - 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x49, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x08, - 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x22, 0x2e, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, - 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x4f, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x53, - 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, - 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x22, 0x4b, 0x0a, 0x15, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x08, 0x73, 0x68, - 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x22, 0x4c, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x32, 0x0a, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x72, - 0x74, 0x63, 0x75, 0x74, 0x22, 0x88, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, - 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, - 0x0a, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, - 0x75, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, - 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, - 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, - 0x4c, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x73, 0x68, 0x6f, - 0x72, 0x74, 0x63, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x6c, - 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, - 0x63, 0x75, 0x74, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x22, 0x27, 0x0a, - 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x2d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x41, - 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, - 0xdd, 0x02, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x41, - 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x58, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, + 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, + 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xea, 0x04, 0x0a, 0x08, 0x53, 0x68, + 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x0a, 0x72, 0x6f, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x09, 0x72, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, + 0x69, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x38, 0x0a, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x76, + 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x69, 0x65, + 0x77, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x76, + 0x69, 0x65, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x49, 0x0a, 0x0b, 0x6f, 0x67, 0x5f, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x6f, + 0x72, 0x74, 0x63, 0x75, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x6f, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x1a, 0x61, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x6e, 0x47, 0x72, 0x61, 0x70, 0x68, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, + 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4d, + 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x63, 0x75, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x6c, 0x61, + 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, + 0x75, 0x74, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x22, 0x24, 0x0a, + 0x12, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x02, 0x69, 0x64, 0x22, 0x2e, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, + 0x75, 0x74, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0x4b, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, + 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x08, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, + 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, + 0x22, 0x88, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, + 0x63, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, + 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x6f, 0x72, + 0x74, 0x63, 0x75, 0x74, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x12, 0x3b, + 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, + 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x27, 0x0a, 0x15, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x2d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, + 0x63, 0x75, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x02, 0x69, 0x64, 0x22, 0xdd, 0x02, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, + 0x63, 0x75, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, + 0x63, 0x75, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x52, + 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x38, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, + 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x6e, 0x61, 0x6c, + 0x79, 0x74, 0x69, 0x63, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x12, 0x54, 0x0a, 0x08, 0x62, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0a, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x07, 0x64, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x73, 0x6c, - 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, - 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, - 0x73, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x54, - 0x0a, 0x08, 0x62, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x38, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x6e, 0x61, - 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, 0x62, 0x72, 0x6f, 0x77, - 0x73, 0x65, 0x72, 0x73, 0x1a, 0x39, 0x0a, 0x0d, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, - 0x73, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, - 0xb4, 0x07, 0x0a, 0x0f, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x73, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, - 0x63, 0x75, 0x74, 0x73, 0x12, 0x22, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, + 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, + 0x62, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x73, 0x1a, 0x39, 0x0a, 0x0d, 0x41, 0x6e, 0x61, 0x6c, + 0x79, 0x74, 0x69, 0x63, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x32, 0xec, 0x06, 0x0a, 0x0f, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x73, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x12, 0x22, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x68, 0x6f, 0x72, - 0x74, 0x63, 0x75, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, - 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x12, 0x77, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, - 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x12, 0x20, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, - 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x73, 0x6c, 0x61, 0x73, - 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, - 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0xda, 0x41, - 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x12, 0x66, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, - 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, - 0x74, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, - 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x0e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x12, 0x23, 0x2e, 0x73, - 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, - 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x22, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x12, 0xa5, 0x01, 0x0a, - 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x12, - 0x23, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, - 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0xda, 0x41, 0x14, 0x73, - 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, - 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, - 0x63, 0x75, 0x74, 0x1a, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x6f, - 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x2f, 0x7b, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, - 0x2e, 0x69, 0x64, 0x7d, 0x12, 0x80, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, - 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x12, 0x23, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x6f, - 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, - 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x23, 0xda, 0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, - 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, - 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, - 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, - 0x12, 0x29, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x73, 0x6c, + 0x74, 0x63, 0x75, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x73, + 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x12, 0x6c, 0x0a, 0x0b, + 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x12, 0x20, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, - 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0xda, 0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, - 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x6e, 0x61, - 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x42, 0xb2, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x73, - 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x14, 0x53, 0x68, 0x6f, - 0x72, 0x74, 0x63, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x79, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x6c, 0x66, 0x68, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x73, - 0x6c, 0x61, 0x73, 0x68, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x53, 0x41, - 0x58, 0xaa, 0x02, 0x0c, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, - 0xca, 0x02, 0x0c, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, - 0x02, 0x18, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, - 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x53, 0x6c, 0x61, - 0x73, 0x68, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x6f, + 0x72, 0x74, 0x63, 0x75, 0x74, 0x22, 0x23, 0xda, 0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x63, 0x75, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x55, 0x0a, 0x11, 0x47, 0x65, + 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x26, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x22, + 0x00, 0x12, 0x72, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, + 0x63, 0x75, 0x74, 0x12, 0x23, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, + 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, + 0x75, 0x74, 0x22, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x63, 0x75, 0x74, 0x73, 0x12, 0x97, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x12, 0x23, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, + 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x6f, + 0x72, 0x74, 0x63, 0x75, 0x74, 0x22, 0x48, 0xda, 0x41, 0x14, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, + 0x75, 0x74, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x1a, 0x1f, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, + 0x73, 0x2f, 0x7b, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x2e, 0x69, 0x64, 0x7d, 0x12, + 0x72, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, + 0x74, 0x12, 0x23, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x23, + 0xda, 0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, + 0x63, 0x75, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x12, 0x29, 0x2e, 0x73, + 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, + 0x75, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x2d, 0xda, 0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, + 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, + 0x75, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, + 0x63, 0x73, 0x42, 0xb2, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x14, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, + 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x79, 0x6f, 0x75, 0x72, + 0x73, 0x65, 0x6c, 0x66, 0x68, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x73, 0x6c, 0x61, 0x73, 0x68, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x53, 0x41, 0x58, 0xaa, 0x02, 0x0c, + 0x53, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0c, 0x53, + 0x6c, 0x61, 0x73, 0x68, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x18, 0x53, 0x6c, + 0x61, 0x73, 0x68, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x3a, 0x3a, + 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1161,66 +912,58 @@ func file_api_v1_shortcut_service_proto_rawDescGZIP() []byte { return file_api_v1_shortcut_service_proto_rawDescData } -var file_api_v1_shortcut_service_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_api_v1_shortcut_service_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_api_v1_shortcut_service_proto_goTypes = []any{ (*Shortcut)(nil), // 0: slash.api.v1.Shortcut - (*OpenGraphMetadata)(nil), // 1: slash.api.v1.OpenGraphMetadata - (*ListShortcutsRequest)(nil), // 2: slash.api.v1.ListShortcutsRequest - (*ListShortcutsResponse)(nil), // 3: slash.api.v1.ListShortcutsResponse - (*GetShortcutRequest)(nil), // 4: slash.api.v1.GetShortcutRequest - (*GetShortcutResponse)(nil), // 5: slash.api.v1.GetShortcutResponse - (*GetShortcutByNameRequest)(nil), // 6: slash.api.v1.GetShortcutByNameRequest - (*GetShortcutByNameResponse)(nil), // 7: slash.api.v1.GetShortcutByNameResponse - (*CreateShortcutRequest)(nil), // 8: slash.api.v1.CreateShortcutRequest - (*CreateShortcutResponse)(nil), // 9: slash.api.v1.CreateShortcutResponse - (*UpdateShortcutRequest)(nil), // 10: slash.api.v1.UpdateShortcutRequest - (*UpdateShortcutResponse)(nil), // 11: slash.api.v1.UpdateShortcutResponse - (*DeleteShortcutRequest)(nil), // 12: slash.api.v1.DeleteShortcutRequest - (*DeleteShortcutResponse)(nil), // 13: slash.api.v1.DeleteShortcutResponse - (*GetShortcutAnalyticsRequest)(nil), // 14: slash.api.v1.GetShortcutAnalyticsRequest - (*GetShortcutAnalyticsResponse)(nil), // 15: slash.api.v1.GetShortcutAnalyticsResponse - (*GetShortcutAnalyticsResponse_AnalyticsItem)(nil), // 16: slash.api.v1.GetShortcutAnalyticsResponse.AnalyticsItem - (*timestamppb.Timestamp)(nil), // 17: google.protobuf.Timestamp - (RowStatus)(0), // 18: slash.api.v1.RowStatus - (Visibility)(0), // 19: slash.api.v1.Visibility - (*fieldmaskpb.FieldMask)(nil), // 20: google.protobuf.FieldMask + (*ListShortcutsRequest)(nil), // 1: slash.api.v1.ListShortcutsRequest + (*ListShortcutsResponse)(nil), // 2: slash.api.v1.ListShortcutsResponse + (*GetShortcutRequest)(nil), // 3: slash.api.v1.GetShortcutRequest + (*GetShortcutByNameRequest)(nil), // 4: slash.api.v1.GetShortcutByNameRequest + (*CreateShortcutRequest)(nil), // 5: slash.api.v1.CreateShortcutRequest + (*UpdateShortcutRequest)(nil), // 6: slash.api.v1.UpdateShortcutRequest + (*DeleteShortcutRequest)(nil), // 7: slash.api.v1.DeleteShortcutRequest + (*GetShortcutAnalyticsRequest)(nil), // 8: slash.api.v1.GetShortcutAnalyticsRequest + (*GetShortcutAnalyticsResponse)(nil), // 9: slash.api.v1.GetShortcutAnalyticsResponse + (*Shortcut_OpenGraphMetadata)(nil), // 10: slash.api.v1.Shortcut.OpenGraphMetadata + (*GetShortcutAnalyticsResponse_AnalyticsItem)(nil), // 11: slash.api.v1.GetShortcutAnalyticsResponse.AnalyticsItem + (*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp + (RowStatus)(0), // 13: slash.api.v1.RowStatus + (Visibility)(0), // 14: slash.api.v1.Visibility + (*fieldmaskpb.FieldMask)(nil), // 15: google.protobuf.FieldMask + (*emptypb.Empty)(nil), // 16: google.protobuf.Empty } var file_api_v1_shortcut_service_proto_depIdxs = []int32{ - 17, // 0: slash.api.v1.Shortcut.created_time:type_name -> google.protobuf.Timestamp - 17, // 1: slash.api.v1.Shortcut.updated_time:type_name -> google.protobuf.Timestamp - 18, // 2: slash.api.v1.Shortcut.row_status:type_name -> slash.api.v1.RowStatus - 19, // 3: slash.api.v1.Shortcut.visibility:type_name -> slash.api.v1.Visibility - 1, // 4: slash.api.v1.Shortcut.og_metadata:type_name -> slash.api.v1.OpenGraphMetadata + 12, // 0: slash.api.v1.Shortcut.created_time:type_name -> google.protobuf.Timestamp + 12, // 1: slash.api.v1.Shortcut.updated_time:type_name -> google.protobuf.Timestamp + 13, // 2: slash.api.v1.Shortcut.row_status:type_name -> slash.api.v1.RowStatus + 14, // 3: slash.api.v1.Shortcut.visibility:type_name -> slash.api.v1.Visibility + 10, // 4: slash.api.v1.Shortcut.og_metadata:type_name -> slash.api.v1.Shortcut.OpenGraphMetadata 0, // 5: slash.api.v1.ListShortcutsResponse.shortcuts:type_name -> slash.api.v1.Shortcut - 0, // 6: slash.api.v1.GetShortcutResponse.shortcut:type_name -> slash.api.v1.Shortcut - 0, // 7: slash.api.v1.GetShortcutByNameResponse.shortcut:type_name -> slash.api.v1.Shortcut - 0, // 8: slash.api.v1.CreateShortcutRequest.shortcut:type_name -> slash.api.v1.Shortcut - 0, // 9: slash.api.v1.CreateShortcutResponse.shortcut:type_name -> slash.api.v1.Shortcut - 0, // 10: slash.api.v1.UpdateShortcutRequest.shortcut:type_name -> slash.api.v1.Shortcut - 20, // 11: slash.api.v1.UpdateShortcutRequest.update_mask:type_name -> google.protobuf.FieldMask - 0, // 12: slash.api.v1.UpdateShortcutResponse.shortcut:type_name -> slash.api.v1.Shortcut - 16, // 13: slash.api.v1.GetShortcutAnalyticsResponse.references:type_name -> slash.api.v1.GetShortcutAnalyticsResponse.AnalyticsItem - 16, // 14: slash.api.v1.GetShortcutAnalyticsResponse.devices:type_name -> slash.api.v1.GetShortcutAnalyticsResponse.AnalyticsItem - 16, // 15: slash.api.v1.GetShortcutAnalyticsResponse.browsers:type_name -> slash.api.v1.GetShortcutAnalyticsResponse.AnalyticsItem - 2, // 16: slash.api.v1.ShortcutService.ListShortcuts:input_type -> slash.api.v1.ListShortcutsRequest - 4, // 17: slash.api.v1.ShortcutService.GetShortcut:input_type -> slash.api.v1.GetShortcutRequest - 6, // 18: slash.api.v1.ShortcutService.GetShortcutByName:input_type -> slash.api.v1.GetShortcutByNameRequest - 8, // 19: slash.api.v1.ShortcutService.CreateShortcut:input_type -> slash.api.v1.CreateShortcutRequest - 10, // 20: slash.api.v1.ShortcutService.UpdateShortcut:input_type -> slash.api.v1.UpdateShortcutRequest - 12, // 21: slash.api.v1.ShortcutService.DeleteShortcut:input_type -> slash.api.v1.DeleteShortcutRequest - 14, // 22: slash.api.v1.ShortcutService.GetShortcutAnalytics:input_type -> slash.api.v1.GetShortcutAnalyticsRequest - 3, // 23: slash.api.v1.ShortcutService.ListShortcuts:output_type -> slash.api.v1.ListShortcutsResponse - 5, // 24: slash.api.v1.ShortcutService.GetShortcut:output_type -> slash.api.v1.GetShortcutResponse - 7, // 25: slash.api.v1.ShortcutService.GetShortcutByName:output_type -> slash.api.v1.GetShortcutByNameResponse - 9, // 26: slash.api.v1.ShortcutService.CreateShortcut:output_type -> slash.api.v1.CreateShortcutResponse - 11, // 27: slash.api.v1.ShortcutService.UpdateShortcut:output_type -> slash.api.v1.UpdateShortcutResponse - 13, // 28: slash.api.v1.ShortcutService.DeleteShortcut:output_type -> slash.api.v1.DeleteShortcutResponse - 15, // 29: slash.api.v1.ShortcutService.GetShortcutAnalytics:output_type -> slash.api.v1.GetShortcutAnalyticsResponse - 23, // [23:30] is the sub-list for method output_type - 16, // [16:23] 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 + 0, // 6: slash.api.v1.CreateShortcutRequest.shortcut:type_name -> slash.api.v1.Shortcut + 0, // 7: slash.api.v1.UpdateShortcutRequest.shortcut:type_name -> slash.api.v1.Shortcut + 15, // 8: slash.api.v1.UpdateShortcutRequest.update_mask:type_name -> google.protobuf.FieldMask + 11, // 9: slash.api.v1.GetShortcutAnalyticsResponse.references:type_name -> slash.api.v1.GetShortcutAnalyticsResponse.AnalyticsItem + 11, // 10: slash.api.v1.GetShortcutAnalyticsResponse.devices:type_name -> slash.api.v1.GetShortcutAnalyticsResponse.AnalyticsItem + 11, // 11: slash.api.v1.GetShortcutAnalyticsResponse.browsers:type_name -> slash.api.v1.GetShortcutAnalyticsResponse.AnalyticsItem + 1, // 12: slash.api.v1.ShortcutService.ListShortcuts:input_type -> slash.api.v1.ListShortcutsRequest + 3, // 13: slash.api.v1.ShortcutService.GetShortcut:input_type -> slash.api.v1.GetShortcutRequest + 4, // 14: slash.api.v1.ShortcutService.GetShortcutByName:input_type -> slash.api.v1.GetShortcutByNameRequest + 5, // 15: slash.api.v1.ShortcutService.CreateShortcut:input_type -> slash.api.v1.CreateShortcutRequest + 6, // 16: slash.api.v1.ShortcutService.UpdateShortcut:input_type -> slash.api.v1.UpdateShortcutRequest + 7, // 17: slash.api.v1.ShortcutService.DeleteShortcut:input_type -> slash.api.v1.DeleteShortcutRequest + 8, // 18: slash.api.v1.ShortcutService.GetShortcutAnalytics:input_type -> slash.api.v1.GetShortcutAnalyticsRequest + 2, // 19: slash.api.v1.ShortcutService.ListShortcuts:output_type -> slash.api.v1.ListShortcutsResponse + 0, // 20: slash.api.v1.ShortcutService.GetShortcut:output_type -> slash.api.v1.Shortcut + 0, // 21: slash.api.v1.ShortcutService.GetShortcutByName:output_type -> slash.api.v1.Shortcut + 0, // 22: slash.api.v1.ShortcutService.CreateShortcut:output_type -> slash.api.v1.Shortcut + 0, // 23: slash.api.v1.ShortcutService.UpdateShortcut:output_type -> slash.api.v1.Shortcut + 16, // 24: slash.api.v1.ShortcutService.DeleteShortcut:output_type -> google.protobuf.Empty + 9, // 25: slash.api.v1.ShortcutService.GetShortcutAnalytics:output_type -> slash.api.v1.GetShortcutAnalyticsResponse + 19, // [19:26] is the sub-list for method output_type + 12, // [12:19] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_api_v1_shortcut_service_proto_init() } @@ -1243,18 +986,6 @@ func file_api_v1_shortcut_service_proto_init() { } } file_api_v1_shortcut_service_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*OpenGraphMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_v1_shortcut_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListShortcutsRequest); i { case 0: return &v.state @@ -1266,7 +997,7 @@ func file_api_v1_shortcut_service_proto_init() { return nil } } - file_api_v1_shortcut_service_proto_msgTypes[3].Exporter = func(v any, i int) any { + file_api_v1_shortcut_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListShortcutsResponse); i { case 0: return &v.state @@ -1278,7 +1009,7 @@ func file_api_v1_shortcut_service_proto_init() { return nil } } - file_api_v1_shortcut_service_proto_msgTypes[4].Exporter = func(v any, i int) any { + file_api_v1_shortcut_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*GetShortcutRequest); i { case 0: return &v.state @@ -1290,19 +1021,7 @@ func file_api_v1_shortcut_service_proto_init() { return nil } } - file_api_v1_shortcut_service_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*GetShortcutResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_v1_shortcut_service_proto_msgTypes[6].Exporter = func(v any, i int) any { + file_api_v1_shortcut_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*GetShortcutByNameRequest); i { case 0: return &v.state @@ -1314,19 +1033,7 @@ func file_api_v1_shortcut_service_proto_init() { return nil } } - file_api_v1_shortcut_service_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*GetShortcutByNameResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_v1_shortcut_service_proto_msgTypes[8].Exporter = func(v any, i int) any { + file_api_v1_shortcut_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*CreateShortcutRequest); i { case 0: return &v.state @@ -1338,19 +1045,7 @@ func file_api_v1_shortcut_service_proto_init() { return nil } } - file_api_v1_shortcut_service_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*CreateShortcutResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_v1_shortcut_service_proto_msgTypes[10].Exporter = func(v any, i int) any { + file_api_v1_shortcut_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*UpdateShortcutRequest); i { case 0: return &v.state @@ -1362,19 +1057,7 @@ func file_api_v1_shortcut_service_proto_init() { return nil } } - file_api_v1_shortcut_service_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*UpdateShortcutResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_v1_shortcut_service_proto_msgTypes[12].Exporter = func(v any, i int) any { + file_api_v1_shortcut_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*DeleteShortcutRequest); i { case 0: return &v.state @@ -1386,19 +1069,7 @@ func file_api_v1_shortcut_service_proto_init() { return nil } } - file_api_v1_shortcut_service_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*DeleteShortcutResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_api_v1_shortcut_service_proto_msgTypes[14].Exporter = func(v any, i int) any { + file_api_v1_shortcut_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*GetShortcutAnalyticsRequest); i { case 0: return &v.state @@ -1410,7 +1081,7 @@ func file_api_v1_shortcut_service_proto_init() { return nil } } - file_api_v1_shortcut_service_proto_msgTypes[15].Exporter = func(v any, i int) any { + file_api_v1_shortcut_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*GetShortcutAnalyticsResponse); i { case 0: return &v.state @@ -1422,7 +1093,19 @@ func file_api_v1_shortcut_service_proto_init() { return nil } } - file_api_v1_shortcut_service_proto_msgTypes[16].Exporter = func(v any, i int) any { + file_api_v1_shortcut_service_proto_msgTypes[10].Exporter = func(v any, i int) any { + switch v := v.(*Shortcut_OpenGraphMetadata); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_shortcut_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*GetShortcutAnalyticsResponse_AnalyticsItem); i { case 0: return &v.state @@ -1441,7 +1124,7 @@ func file_api_v1_shortcut_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_v1_shortcut_service_proto_rawDesc, NumEnums: 0, - NumMessages: 17, + NumMessages: 12, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/gen/api/v1/shortcut_service_grpc.pb.go b/proto/gen/api/v1/shortcut_service_grpc.pb.go index 7da2f17..2dc6d33 100644 --- a/proto/gen/api/v1/shortcut_service_grpc.pb.go +++ b/proto/gen/api/v1/shortcut_service_grpc.pb.go @@ -11,6 +11,7 @@ import ( grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" ) // This is a compile-time assertion to ensure that this generated file @@ -35,15 +36,15 @@ type ShortcutServiceClient interface { // ListShortcuts returns a list of shortcuts. ListShortcuts(ctx context.Context, in *ListShortcutsRequest, opts ...grpc.CallOption) (*ListShortcutsResponse, error) // GetShortcut returns a shortcut by id. - GetShortcut(ctx context.Context, in *GetShortcutRequest, opts ...grpc.CallOption) (*GetShortcutResponse, error) + GetShortcut(ctx context.Context, in *GetShortcutRequest, opts ...grpc.CallOption) (*Shortcut, error) // GetShortcutByName returns a shortcut by name. - GetShortcutByName(ctx context.Context, in *GetShortcutByNameRequest, opts ...grpc.CallOption) (*GetShortcutByNameResponse, error) + GetShortcutByName(ctx context.Context, in *GetShortcutByNameRequest, opts ...grpc.CallOption) (*Shortcut, error) // CreateShortcut creates a shortcut. - CreateShortcut(ctx context.Context, in *CreateShortcutRequest, opts ...grpc.CallOption) (*CreateShortcutResponse, error) + CreateShortcut(ctx context.Context, in *CreateShortcutRequest, opts ...grpc.CallOption) (*Shortcut, error) // UpdateShortcut updates a shortcut. - UpdateShortcut(ctx context.Context, in *UpdateShortcutRequest, opts ...grpc.CallOption) (*UpdateShortcutResponse, error) + UpdateShortcut(ctx context.Context, in *UpdateShortcutRequest, opts ...grpc.CallOption) (*Shortcut, error) // DeleteShortcut deletes a shortcut by name. - DeleteShortcut(ctx context.Context, in *DeleteShortcutRequest, opts ...grpc.CallOption) (*DeleteShortcutResponse, error) + DeleteShortcut(ctx context.Context, in *DeleteShortcutRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // GetShortcutAnalytics returns the analytics for a shortcut. GetShortcutAnalytics(ctx context.Context, in *GetShortcutAnalyticsRequest, opts ...grpc.CallOption) (*GetShortcutAnalyticsResponse, error) } @@ -66,9 +67,9 @@ func (c *shortcutServiceClient) ListShortcuts(ctx context.Context, in *ListShort return out, nil } -func (c *shortcutServiceClient) GetShortcut(ctx context.Context, in *GetShortcutRequest, opts ...grpc.CallOption) (*GetShortcutResponse, error) { +func (c *shortcutServiceClient) GetShortcut(ctx context.Context, in *GetShortcutRequest, opts ...grpc.CallOption) (*Shortcut, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(GetShortcutResponse) + out := new(Shortcut) err := c.cc.Invoke(ctx, ShortcutService_GetShortcut_FullMethodName, in, out, cOpts...) if err != nil { return nil, err @@ -76,9 +77,9 @@ func (c *shortcutServiceClient) GetShortcut(ctx context.Context, in *GetShortcut return out, nil } -func (c *shortcutServiceClient) GetShortcutByName(ctx context.Context, in *GetShortcutByNameRequest, opts ...grpc.CallOption) (*GetShortcutByNameResponse, error) { +func (c *shortcutServiceClient) GetShortcutByName(ctx context.Context, in *GetShortcutByNameRequest, opts ...grpc.CallOption) (*Shortcut, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(GetShortcutByNameResponse) + out := new(Shortcut) err := c.cc.Invoke(ctx, ShortcutService_GetShortcutByName_FullMethodName, in, out, cOpts...) if err != nil { return nil, err @@ -86,9 +87,9 @@ func (c *shortcutServiceClient) GetShortcutByName(ctx context.Context, in *GetSh return out, nil } -func (c *shortcutServiceClient) CreateShortcut(ctx context.Context, in *CreateShortcutRequest, opts ...grpc.CallOption) (*CreateShortcutResponse, error) { +func (c *shortcutServiceClient) CreateShortcut(ctx context.Context, in *CreateShortcutRequest, opts ...grpc.CallOption) (*Shortcut, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(CreateShortcutResponse) + out := new(Shortcut) err := c.cc.Invoke(ctx, ShortcutService_CreateShortcut_FullMethodName, in, out, cOpts...) if err != nil { return nil, err @@ -96,9 +97,9 @@ func (c *shortcutServiceClient) CreateShortcut(ctx context.Context, in *CreateSh return out, nil } -func (c *shortcutServiceClient) UpdateShortcut(ctx context.Context, in *UpdateShortcutRequest, opts ...grpc.CallOption) (*UpdateShortcutResponse, error) { +func (c *shortcutServiceClient) UpdateShortcut(ctx context.Context, in *UpdateShortcutRequest, opts ...grpc.CallOption) (*Shortcut, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(UpdateShortcutResponse) + out := new(Shortcut) err := c.cc.Invoke(ctx, ShortcutService_UpdateShortcut_FullMethodName, in, out, cOpts...) if err != nil { return nil, err @@ -106,9 +107,9 @@ func (c *shortcutServiceClient) UpdateShortcut(ctx context.Context, in *UpdateSh return out, nil } -func (c *shortcutServiceClient) DeleteShortcut(ctx context.Context, in *DeleteShortcutRequest, opts ...grpc.CallOption) (*DeleteShortcutResponse, error) { +func (c *shortcutServiceClient) DeleteShortcut(ctx context.Context, in *DeleteShortcutRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(DeleteShortcutResponse) + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, ShortcutService_DeleteShortcut_FullMethodName, in, out, cOpts...) if err != nil { return nil, err @@ -133,15 +134,15 @@ type ShortcutServiceServer interface { // ListShortcuts returns a list of shortcuts. ListShortcuts(context.Context, *ListShortcutsRequest) (*ListShortcutsResponse, error) // GetShortcut returns a shortcut by id. - GetShortcut(context.Context, *GetShortcutRequest) (*GetShortcutResponse, error) + GetShortcut(context.Context, *GetShortcutRequest) (*Shortcut, error) // GetShortcutByName returns a shortcut by name. - GetShortcutByName(context.Context, *GetShortcutByNameRequest) (*GetShortcutByNameResponse, error) + GetShortcutByName(context.Context, *GetShortcutByNameRequest) (*Shortcut, error) // CreateShortcut creates a shortcut. - CreateShortcut(context.Context, *CreateShortcutRequest) (*CreateShortcutResponse, error) + CreateShortcut(context.Context, *CreateShortcutRequest) (*Shortcut, error) // UpdateShortcut updates a shortcut. - UpdateShortcut(context.Context, *UpdateShortcutRequest) (*UpdateShortcutResponse, error) + UpdateShortcut(context.Context, *UpdateShortcutRequest) (*Shortcut, error) // DeleteShortcut deletes a shortcut by name. - DeleteShortcut(context.Context, *DeleteShortcutRequest) (*DeleteShortcutResponse, error) + DeleteShortcut(context.Context, *DeleteShortcutRequest) (*emptypb.Empty, error) // GetShortcutAnalytics returns the analytics for a shortcut. GetShortcutAnalytics(context.Context, *GetShortcutAnalyticsRequest) (*GetShortcutAnalyticsResponse, error) mustEmbedUnimplementedShortcutServiceServer() @@ -157,19 +158,19 @@ type UnimplementedShortcutServiceServer struct{} func (UnimplementedShortcutServiceServer) ListShortcuts(context.Context, *ListShortcutsRequest) (*ListShortcutsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListShortcuts not implemented") } -func (UnimplementedShortcutServiceServer) GetShortcut(context.Context, *GetShortcutRequest) (*GetShortcutResponse, error) { +func (UnimplementedShortcutServiceServer) GetShortcut(context.Context, *GetShortcutRequest) (*Shortcut, error) { return nil, status.Errorf(codes.Unimplemented, "method GetShortcut not implemented") } -func (UnimplementedShortcutServiceServer) GetShortcutByName(context.Context, *GetShortcutByNameRequest) (*GetShortcutByNameResponse, error) { +func (UnimplementedShortcutServiceServer) GetShortcutByName(context.Context, *GetShortcutByNameRequest) (*Shortcut, error) { return nil, status.Errorf(codes.Unimplemented, "method GetShortcutByName not implemented") } -func (UnimplementedShortcutServiceServer) CreateShortcut(context.Context, *CreateShortcutRequest) (*CreateShortcutResponse, error) { +func (UnimplementedShortcutServiceServer) CreateShortcut(context.Context, *CreateShortcutRequest) (*Shortcut, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateShortcut not implemented") } -func (UnimplementedShortcutServiceServer) UpdateShortcut(context.Context, *UpdateShortcutRequest) (*UpdateShortcutResponse, error) { +func (UnimplementedShortcutServiceServer) UpdateShortcut(context.Context, *UpdateShortcutRequest) (*Shortcut, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateShortcut not implemented") } -func (UnimplementedShortcutServiceServer) DeleteShortcut(context.Context, *DeleteShortcutRequest) (*DeleteShortcutResponse, error) { +func (UnimplementedShortcutServiceServer) DeleteShortcut(context.Context, *DeleteShortcutRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteShortcut not implemented") } func (UnimplementedShortcutServiceServer) GetShortcutAnalytics(context.Context, *GetShortcutAnalyticsRequest) (*GetShortcutAnalyticsResponse, error) { diff --git a/proto/gen/apidocs.swagger.yaml b/proto/gen/apidocs.swagger.yaml index 9c0a3a6..be10f6a 100644 --- a/proto/gen/apidocs.swagger.yaml +++ b/proto/gen/apidocs.swagger.yaml @@ -280,7 +280,7 @@ paths: "200": description: A successful response. schema: - $ref: '#/definitions/v1CreateShortcutResponse' + $ref: '#/definitions/apiv1Shortcut' default: description: An unexpected error response. schema: @@ -301,7 +301,7 @@ paths: "200": description: A successful response. schema: - $ref: '#/definitions/v1GetShortcutResponse' + $ref: '#/definitions/apiv1Shortcut' default: description: An unexpected error response. schema: @@ -321,7 +321,8 @@ paths: "200": description: A successful response. schema: - $ref: '#/definitions/v1DeleteShortcutResponse' + type: object + properties: {} default: description: An unexpected error response. schema: @@ -363,7 +364,7 @@ paths: "200": description: A successful response. schema: - $ref: '#/definitions/v1UpdateShortcutResponse' + $ref: '#/definitions/apiv1Shortcut' default: description: An unexpected error response. schema: @@ -409,7 +410,7 @@ paths: type: integer format: int32 ogMetadata: - $ref: '#/definitions/apiv1OpenGraphMetadata' + $ref: '#/definitions/v1ShortcutOpenGraphMetadata' - name: updateMask in: query required: false @@ -851,15 +852,6 @@ definitions: - TYPE_UNSPECIFIED - OAUTH2 default: TYPE_UNSPECIFIED - apiv1OpenGraphMetadata: - type: object - properties: - title: - type: string - description: - type: string - image: - type: string apiv1RowStatus: type: string enum: @@ -902,7 +894,7 @@ definitions: type: integer format: int32 ogMetadata: - $ref: '#/definitions/apiv1OpenGraphMetadata' + $ref: '#/definitions/v1ShortcutOpenGraphMetadata' apiv1UserSetting: type: object properties: @@ -995,11 +987,6 @@ definitions: properties: collection: $ref: '#/definitions/apiv1Collection' - v1CreateShortcutResponse: - type: object - properties: - shortcut: - $ref: '#/definitions/apiv1Shortcut' v1CreateUserAccessTokenResponse: type: object properties: @@ -1012,8 +999,6 @@ definitions: $ref: '#/definitions/v1User' v1DeleteCollectionResponse: type: object - v1DeleteShortcutResponse: - type: object v1DeleteUserAccessTokenResponse: type: object v1DeleteUserResponse: @@ -1046,16 +1031,6 @@ definitions: items: type: object $ref: '#/definitions/GetShortcutAnalyticsResponseAnalyticsItem' - v1GetShortcutByNameResponse: - type: object - properties: - shortcut: - $ref: '#/definitions/apiv1Shortcut' - v1GetShortcutResponse: - type: object - properties: - shortcut: - $ref: '#/definitions/apiv1Shortcut' v1GetUserResponse: type: object properties: @@ -1113,6 +1088,15 @@ definitions: - ADMIN - USER default: ROLE_UNSPECIFIED + v1ShortcutOpenGraphMetadata: + type: object + properties: + title: + type: string + description: + type: string + image: + type: string v1Subscription: type: object properties: @@ -1149,11 +1133,6 @@ definitions: properties: collection: $ref: '#/definitions/apiv1Collection' - v1UpdateShortcutResponse: - type: object - properties: - shortcut: - $ref: '#/definitions/apiv1Shortcut' v1UpdateSubscriptionRequest: type: object properties: diff --git a/server/route/api/v1/shortcut_service.go b/server/route/api/v1/shortcut_service.go index 998da48..c1a65f0 100644 --- a/server/route/api/v1/shortcut_service.go +++ b/server/route/api/v1/shortcut_service.go @@ -14,6 +14,7 @@ import ( "google.golang.org/grpc/peer" "google.golang.org/grpc/status" "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/types/known/emptypb" "google.golang.org/protobuf/types/known/timestamppb" v1pb "github.com/yourselfhosted/slash/proto/gen/api/v1" @@ -58,7 +59,7 @@ func (s *APIV1Service) ListShortcuts(ctx context.Context, _ *v1pb.ListShortcutsR return response, nil } -func (s *APIV1Service) GetShortcut(ctx context.Context, request *v1pb.GetShortcutRequest) (*v1pb.GetShortcutResponse, error) { +func (s *APIV1Service) GetShortcut(ctx context.Context, request *v1pb.GetShortcutRequest) (*v1pb.Shortcut, error) { shortcut, err := s.Store.GetShortcut(ctx, &store.FindShortcut{ ID: &request.Id, }) @@ -84,13 +85,10 @@ func (s *APIV1Service) GetShortcut(ctx context.Context, request *v1pb.GetShortcu if err != nil { return nil, status.Errorf(codes.Internal, "failed to convert shortcut, err: %v", err) } - response := &v1pb.GetShortcutResponse{ - Shortcut: composedShortcut, - } - return response, nil + return composedShortcut, nil } -func (s *APIV1Service) GetShortcutByName(ctx context.Context, request *v1pb.GetShortcutByNameRequest) (*v1pb.GetShortcutByNameResponse, error) { +func (s *APIV1Service) GetShortcutByName(ctx context.Context, request *v1pb.GetShortcutByNameRequest) (*v1pb.Shortcut, error) { shortcut, err := s.Store.GetShortcut(ctx, &store.FindShortcut{ Name: &request.Name, }) @@ -121,13 +119,10 @@ func (s *APIV1Service) GetShortcutByName(ctx context.Context, request *v1pb.GetS if err != nil { return nil, status.Errorf(codes.Internal, "failed to convert shortcut, err: %v", err) } - response := &v1pb.GetShortcutByNameResponse{ - Shortcut: composedShortcut, - } - return response, nil + return composedShortcut, nil } -func (s *APIV1Service) CreateShortcut(ctx context.Context, request *v1pb.CreateShortcutRequest) (*v1pb.CreateShortcutResponse, error) { +func (s *APIV1Service) CreateShortcut(ctx context.Context, request *v1pb.CreateShortcutRequest) (*v1pb.Shortcut, error) { if request.Shortcut.Name == "" || request.Shortcut.Link == "" { return nil, status.Errorf(codes.InvalidArgument, "name and link are required") } @@ -187,14 +182,11 @@ func (s *APIV1Service) CreateShortcut(ctx context.Context, request *v1pb.CreateS if err != nil { return nil, status.Errorf(codes.Internal, "failed to convert shortcut, err: %v", err) } - response := &v1pb.CreateShortcutResponse{ - Shortcut: composedShortcut, - } metric.Enqueue("shortcut create") - return response, nil + return composedShortcut, nil } -func (s *APIV1Service) UpdateShortcut(ctx context.Context, request *v1pb.UpdateShortcutRequest) (*v1pb.UpdateShortcutResponse, error) { +func (s *APIV1Service) UpdateShortcut(ctx context.Context, request *v1pb.UpdateShortcutRequest) (*v1pb.Shortcut, error) { if request.UpdateMask == nil || len(request.UpdateMask.Paths) == 0 { return nil, status.Errorf(codes.InvalidArgument, "updateMask is required") } @@ -254,13 +246,10 @@ func (s *APIV1Service) UpdateShortcut(ctx context.Context, request *v1pb.UpdateS if err != nil { return nil, status.Errorf(codes.Internal, "failed to convert shortcut, err: %v", err) } - response := &v1pb.UpdateShortcutResponse{ - Shortcut: composedShortcut, - } - return response, nil + return composedShortcut, nil } -func (s *APIV1Service) DeleteShortcut(ctx context.Context, request *v1pb.DeleteShortcutRequest) (*v1pb.DeleteShortcutResponse, error) { +func (s *APIV1Service) DeleteShortcut(ctx context.Context, request *v1pb.DeleteShortcutRequest) (*emptypb.Empty, error) { user, err := getCurrentUser(ctx, s.Store) if err != nil { return nil, status.Errorf(codes.Unauthenticated, "failed to get current user: %v", err) @@ -284,8 +273,7 @@ func (s *APIV1Service) DeleteShortcut(ctx context.Context, request *v1pb.DeleteS if err != nil { return nil, status.Errorf(codes.Internal, "failed to delete shortcut, err: %v", err) } - response := &v1pb.DeleteShortcutResponse{} - return response, nil + return &emptypb.Empty{}, nil } func (s *APIV1Service) GetShortcutAnalytics(ctx context.Context, request *v1pb.GetShortcutAnalyticsRequest) (*v1pb.GetShortcutAnalyticsResponse, error) { @@ -427,7 +415,7 @@ func (s *APIV1Service) convertShortcutFromStorepb(ctx context.Context, shortcut Tags: shortcut.Tags, Description: shortcut.Description, Visibility: v1pb.Visibility(shortcut.Visibility), - OgMetadata: &v1pb.OpenGraphMetadata{ + OgMetadata: &v1pb.Shortcut_OpenGraphMetadata{ Title: shortcut.OgMetadata.Title, Description: shortcut.OgMetadata.Description, Image: shortcut.OgMetadata.Image,