diff --git a/.golangci.yaml b/.golangci.yaml
index 8bb78de..e4a0f65 100644
--- a/.golangci.yaml
+++ b/.golangci.yaml
@@ -67,6 +67,8 @@ linters-settings:
disabled: true
- name: use-any
disabled: true
+ - name: var-naming
+ disabled: true
- name: exported
arguments:
- "disableStutteringCheck"
diff --git a/api/v1/redirector.go b/api/v1/redirector.go
deleted file mode 100644
index 4475ada..0000000
--- a/api/v1/redirector.go
+++ /dev/null
@@ -1,118 +0,0 @@
-package v1
-
-import (
- "encoding/json"
- "fmt"
- "html"
- "net/http"
- "net/url"
- "strings"
-
- "github.com/labstack/echo/v4"
- "github.com/pkg/errors"
-
- storepb "github.com/yourselfhosted/slash/proto/gen/store"
- "github.com/yourselfhosted/slash/server/metric"
- "github.com/yourselfhosted/slash/store"
-)
-
-func (s *APIV1Service) registerRedirectorRoutes(g *echo.Group) {
- g.GET("/*", func(c echo.Context) error {
- ctx := c.Request().Context()
- if len(c.ParamValues()) == 0 {
- return echo.NewHTTPError(http.StatusBadRequest, "invalid shortcut name")
- }
-
- shortcutName := c.ParamValues()[0]
- shortcut, err := s.Store.GetShortcut(ctx, &store.FindShortcut{
- Name: &shortcutName,
- })
- if err != nil {
- return echo.NewHTTPError(http.StatusInternalServerError, fmt.Sprintf("failed to get shortcut, err: %s", err)).SetInternal(err)
- }
- if shortcut == nil {
- return c.Redirect(http.StatusSeeOther, fmt.Sprintf("/404?shortcut=%s", shortcutName))
- }
- if shortcut.Visibility != storepb.Visibility_PUBLIC {
- userID, ok := c.Get(userIDContextKey).(int32)
- if !ok {
- return echo.NewHTTPError(http.StatusUnauthorized, "Unauthorized")
- }
- if shortcut.Visibility == storepb.Visibility_PRIVATE && shortcut.CreatorId != userID {
- return echo.NewHTTPError(http.StatusUnauthorized, "Unauthorized")
- }
- }
-
- if err := s.createShortcutViewActivity(c, shortcut); err != nil {
- return echo.NewHTTPError(http.StatusInternalServerError, fmt.Sprintf("failed to create activity, err: %s", err)).SetInternal(err)
- }
-
- metric.Enqueue("shortcut redirect")
- return redirectToShortcut(c, shortcut)
- })
-}
-
-func redirectToShortcut(c echo.Context, shortcut *storepb.Shortcut) error {
- isValidURL := isValidURLString(shortcut.Link)
- if shortcut.OgMetadata == nil || (shortcut.OgMetadata.Title == "" && shortcut.OgMetadata.Description == "" && shortcut.OgMetadata.Image == "") {
- if isValidURL {
- return c.Redirect(http.StatusSeeOther, shortcut.Link)
- }
- return c.String(http.StatusOK, shortcut.Link)
- }
-
- htmlTemplate := `
%s%s`
- metadataList := []string{
- fmt.Sprintf(`%s`, shortcut.OgMetadata.Title),
- fmt.Sprintf(``, shortcut.OgMetadata.Description),
- fmt.Sprintf(``, shortcut.OgMetadata.Title),
- fmt.Sprintf(``, shortcut.OgMetadata.Description),
- fmt.Sprintf(``, shortcut.OgMetadata.Image),
- ``,
- // Twitter related metadata.
- fmt.Sprintf(``, shortcut.OgMetadata.Title),
- fmt.Sprintf(``, shortcut.OgMetadata.Description),
- fmt.Sprintf(``, shortcut.OgMetadata.Image),
- ``,
- }
- if isValidURL {
- metadataList = append(metadataList, fmt.Sprintf(``, shortcut.Link))
- }
- body := ""
- if isValidURL {
- body = fmt.Sprintf(``, shortcut.Link)
- } else {
- body = html.EscapeString(shortcut.Link)
- }
- htmlString := fmt.Sprintf(htmlTemplate, strings.Join(metadataList, ""), body)
- return c.HTML(http.StatusOK, htmlString)
-}
-
-func (s *APIV1Service) createShortcutViewActivity(c echo.Context, shortcut *storepb.Shortcut) error {
- payload := &ActivityShorcutViewPayload{
- ShortcutID: shortcut.Id,
- IP: c.RealIP(),
- Referer: c.Request().Referer(),
- UserAgent: c.Request().UserAgent(),
- }
- payloadStr, err := json.Marshal(payload)
- if err != nil {
- return errors.Wrap(err, "Failed to marshal activity payload")
- }
- activity := &store.Activity{
- CreatorID: BotID,
- Type: store.ActivityShortcutView,
- Level: store.ActivityInfo,
- Payload: string(payloadStr),
- }
- _, err = s.Store.CreateActivity(c.Request().Context(), activity)
- if err != nil {
- return errors.Wrap(err, "Failed to create activity")
- }
- return nil
-}
-
-func isValidURLString(s string) bool {
- _, err := url.ParseRequestURI(s)
- return err == nil
-}
diff --git a/api/v1/redirector_test.go b/api/v1/redirector_test.go
deleted file mode 100644
index 1e988a6..0000000
--- a/api/v1/redirector_test.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package v1
-
-import "testing"
-
-func TestIsValidURLString(t *testing.T) {
- tests := []struct {
- link string
- expected bool
- }{
- {
- link: "https://google.com",
- expected: true,
- },
- {
- link: "http://google.com",
- expected: true,
- },
- {
- link: "google.com",
- expected: false,
- },
- {
- link: "mailto:email@example.com",
- expected: true,
- },
- }
-
- for _, test := range tests {
- if isValidURLString(test.link) != test.expected {
- t.Errorf("isValidURLString(%s) = %v, expected %v", test.link, !test.expected, test.expected)
- }
- }
-}
diff --git a/api/v1/v1.go b/api/v1/v1.go
index db1826b..43f28d8 100644
--- a/api/v1/v1.go
+++ b/api/v1/v1.go
@@ -32,10 +32,4 @@ func (s *APIV1Service) Start(apiGroup *echo.Group, secret string) {
s.registerUserRoutes(apiV1Group)
s.registerShortcutRoutes(apiV1Group)
s.registerAnalyticsRoutes(apiV1Group)
-
- redirectorGroup := apiGroup.Group("/s")
- redirectorGroup.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
- return JWTMiddleware(s, next, secret)
- })
- s.registerRedirectorRoutes(redirectorGroup)
}
diff --git a/api/v2/shortcut_service.go b/api/v2/shortcut_service.go
index 23429c4..9e25df6 100644
--- a/api/v2/shortcut_service.go
+++ b/api/v2/shortcut_service.go
@@ -54,7 +54,7 @@ func (s *APIV2Service) ListShortcuts(ctx context.Context, _ *apiv2pb.ListShortcu
func (s *APIV2Service) GetShortcut(ctx context.Context, request *apiv2pb.GetShortcutRequest) (*apiv2pb.GetShortcutResponse, error) {
shortcut, err := s.Store.GetShortcut(ctx, &store.FindShortcut{
- ID: &request.Id,
+ Name: &request.Name,
})
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get shortcut by name: %v", err)
@@ -84,6 +84,38 @@ func (s *APIV2Service) GetShortcut(ctx context.Context, request *apiv2pb.GetShor
return response, nil
}
+func (s *APIV2Service) GetShortcutById(ctx context.Context, request *apiv2pb.GetShortcutByIdRequest) (*apiv2pb.GetShortcutByIdResponse, error) {
+ shortcut, err := s.Store.GetShortcut(ctx, &store.FindShortcut{
+ ID: &request.Id,
+ })
+ if err != nil {
+ return nil, status.Errorf(codes.Internal, "failed to get shortcut by id: %v", err)
+ }
+ if shortcut == nil {
+ return nil, status.Errorf(codes.NotFound, "shortcut not found")
+ }
+
+ userID, ok := ctx.Value(userIDContextKey).(int32)
+ if ok {
+ if shortcut.Visibility == storepb.Visibility_PRIVATE && shortcut.CreatorId != userID {
+ return nil, status.Errorf(codes.PermissionDenied, "Permission denied")
+ }
+ } else {
+ if shortcut.Visibility != storepb.Visibility_PUBLIC {
+ return nil, status.Errorf(codes.PermissionDenied, "Permission denied")
+ }
+ }
+
+ composedShortcut, err := s.convertShortcutFromStorepb(ctx, shortcut)
+ if err != nil {
+ return nil, status.Errorf(codes.Internal, "failed to convert shortcut, err: %v", err)
+ }
+ response := &apiv2pb.GetShortcutByIdResponse{
+ Shortcut: composedShortcut,
+ }
+ return response, nil
+}
+
func (s *APIV2Service) CreateShortcut(ctx context.Context, request *apiv2pb.CreateShortcutRequest) (*apiv2pb.CreateShortcutResponse, error) {
userID := ctx.Value(userIDContextKey).(int32)
shortcut := &storepb.Shortcut{
@@ -199,7 +231,7 @@ func (s *APIV2Service) DeleteShortcut(ctx context.Context, request *apiv2pb.Dele
return nil, status.Errorf(codes.Internal, "failed to get current user, err: %v", err)
}
shortcut, err := s.Store.GetShortcut(ctx, &store.FindShortcut{
- ID: &request.Id,
+ Name: &request.Name,
})
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get shortcut by name: %v", err)
@@ -223,7 +255,7 @@ func (s *APIV2Service) DeleteShortcut(ctx context.Context, request *apiv2pb.Dele
func (s *APIV2Service) GetShortcutAnalytics(ctx context.Context, request *apiv2pb.GetShortcutAnalyticsRequest) (*apiv2pb.GetShortcutAnalyticsResponse, error) {
shortcut, err := s.Store.GetShortcut(ctx, &store.FindShortcut{
- ID: &request.Id,
+ Name: &request.Name,
})
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get shortcut by name: %v", err)
@@ -234,7 +266,7 @@ func (s *APIV2Service) GetShortcutAnalytics(ctx context.Context, request *apiv2p
activities, err := s.Store.ListActivities(ctx, &store.FindActivity{
Type: store.ActivityShortcutView,
- Where: []string{fmt.Sprintf("json_extract(payload, '$.shortcutId') = %d", request.Id)},
+ Where: []string{fmt.Sprintf("json_extract(payload, '$.shortcutId') = %d", shortcut.Id)},
})
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get activities, err: %v", err)
diff --git a/frontend/web/src/components/AnalyticsView.tsx b/frontend/web/src/components/AnalyticsView.tsx
index e979c82..2f3516d 100644
--- a/frontend/web/src/components/AnalyticsView.tsx
+++ b/frontend/web/src/components/AnalyticsView.tsx
@@ -6,18 +6,18 @@ import { GetShortcutAnalyticsResponse } from "@/types/proto/api/v2/shortcut_serv
import Icon from "./Icon";
interface Props {
- shortcutId: number;
+ shortcutName: string;
className?: string;
}
const AnalyticsView: React.FC = (props: Props) => {
- const { shortcutId, className } = props;
+ const { shortcutName, className } = props;
const { t } = useTranslation();
const [analytics, setAnalytics] = useState(null);
const [selectedDeviceTab, setSelectedDeviceTab] = useState<"os" | "browser">("browser");
useEffect(() => {
- shortcutServiceClient.getShortcutAnalytics({ id: shortcutId }).then((response) => {
+ shortcutServiceClient.getShortcutAnalytics({ name: shortcutName }).then((response) => {
setAnalytics(response);
});
}, []);
diff --git a/frontend/web/src/components/CreateShortcutDrawer.tsx b/frontend/web/src/components/CreateShortcutDrawer.tsx
index a322b5b..823fa6f 100644
--- a/frontend/web/src/components/CreateShortcutDrawer.tsx
+++ b/frontend/web/src/components/CreateShortcutDrawer.tsx
@@ -25,7 +25,7 @@ import Icon from "./Icon";
import ResourceNameInput from "./ResourceNameInput";
interface Props {
- shortcutId?: number;
+ shortcutName?: string;
initialShortcut?: Partial;
onClose: () => void;
onConfirm?: () => void;
@@ -36,7 +36,7 @@ interface State {
}
const CreateShortcutDrawer: React.FC = (props: Props) => {
- const { onClose, onConfirm, shortcutId, initialShortcut } = props;
+ const { onClose, onConfirm, shortcutName, initialShortcut } = props;
const { t } = useTranslation();
const [state, setState] = useState({
shortcutCreate: Shortcut.fromPartial({
@@ -54,13 +54,13 @@ const CreateShortcutDrawer: React.FC = (props: Props) => {
const shortcutList = shortcutStore.getShortcutList();
const [tag, setTag] = useState("");
const tagSuggestions = uniq(shortcutList.map((shortcut) => shortcut.tags).flat());
- const isCreating = isUndefined(shortcutId);
+ const isCreating = isUndefined(shortcutName);
const loadingState = useLoading(!isCreating);
const requestState = useLoading(false);
useEffect(() => {
- if (shortcutId) {
- const shortcut = shortcutStore.getShortcutById(shortcutId);
+ if (shortcutName) {
+ const shortcut = shortcutStore.getShortcutByName(shortcutName);
if (shortcut) {
setState({
...state,
@@ -77,7 +77,7 @@ const CreateShortcutDrawer: React.FC = (props: Props) => {
loadingState.setFinish();
}
}
- }, [shortcutId]);
+ }, [shortcutName]);
if (loadingState.isLoading) {
return null;
@@ -183,15 +183,15 @@ const CreateShortcutDrawer: React.FC = (props: Props) => {
}
try {
- if (shortcutId) {
+ if (shortcutName) {
const updatingShortcut = {
...state.shortcutCreate,
- id: shortcutId,
+ name: shortcutName,
tags: tag.split(" ").filter(Boolean),
};
await shortcutStore.updateShortcut(
updatingShortcut,
- getShortcutUpdateMask(shortcutStore.getShortcutById(updatingShortcut.id), updatingShortcut)
+ getShortcutUpdateMask(shortcutStore.getShortcutByName(updatingShortcut.name), updatingShortcut)
);
} else {
await shortcutStore.createShortcut({
diff --git a/frontend/web/src/components/ShortcutActionsDropdown.tsx b/frontend/web/src/components/ShortcutActionsDropdown.tsx
index fdc81f6..4945ab3 100644
--- a/frontend/web/src/components/ShortcutActionsDropdown.tsx
+++ b/frontend/web/src/components/ShortcutActionsDropdown.tsx
@@ -31,7 +31,7 @@ const ShortcutActionsDropdown = (props: Props) => {
content: `Are you sure to delete shortcut \`${shortcut.name}\`? You cannot undo this action.`,
style: "danger",
onConfirm: async () => {
- await shortcutStore.deleteShortcut(shortcut.id);
+ await shortcutStore.deleteShortcut(shortcut.name);
},
});
};
@@ -82,7 +82,7 @@ const ShortcutActionsDropdown = (props: Props) => {
{showEditDrawer && (
setShowEditDrawer(false)}
onConfirm={() => setShowEditDrawer(false)}
/>
diff --git a/frontend/web/src/components/ShortcutCard.tsx b/frontend/web/src/components/ShortcutCard.tsx
index 3610628..b900e6a 100644
--- a/frontend/web/src/components/ShortcutCard.tsx
+++ b/frontend/web/src/components/ShortcutCard.tsx
@@ -37,7 +37,10 @@ const ShortcutCard = (props: Props) => {
>
-
+
{favicon ? (

) : (
@@ -120,7 +123,7 @@ const ShortcutCard = (props: Props) => {
diff --git a/frontend/web/src/helpers/utils.ts b/frontend/web/src/helpers/utils.ts
index dd7f03a..f019514 100644
--- a/frontend/web/src/helpers/utils.ts
+++ b/frontend/web/src/helpers/utils.ts
@@ -10,6 +10,11 @@ export const absolutifyLink = (rel: string): string => {
return anchor.href;
};
+export const isURL = (str: string): boolean => {
+ const urlRegex = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i;
+ return urlRegex.test(str);
+};
+
export const releaseGuard = () => {
return import.meta.env.MODE === "development";
};
diff --git a/frontend/web/src/pages/CollectionSpace.tsx b/frontend/web/src/pages/CollectionSpace.tsx
index 23aa1a7..45522fc 100644
--- a/frontend/web/src/pages/CollectionSpace.tsx
+++ b/frontend/web/src/pages/CollectionSpace.tsx
@@ -14,7 +14,8 @@ import { Collection } from "@/types/proto/api/v2/collection_service";
import { Shortcut } from "@/types/proto/api/v2/shortcut_service";
const CollectionSpace = () => {
- const { collectionName } = useParams();
+ const params = useParams();
+ const collectionName = params["*"];
const { sm } = useResponsiveWidth();
const userStore = useUserStore();
const collectionStore = useCollectionStore();
@@ -36,7 +37,7 @@ const CollectionSpace = () => {
setShortcuts([]);
for (const shortcutId of collection.shortcutIds) {
try {
- const shortcut = await shortcutStore.getOrFetchShortcutById(shortcutId);
+ const shortcut = await shortcutStore.fetchShortcutById(shortcutId);
setShortcuts((shortcuts) => {
return [...shortcuts, shortcut];
});
diff --git a/frontend/web/src/pages/ShortcutDetail.tsx b/frontend/web/src/pages/ShortcutDetail.tsx
index e91ea06..b091b98 100644
--- a/frontend/web/src/pages/ShortcutDetail.tsx
+++ b/frontend/web/src/pages/ShortcutDetail.tsx
@@ -28,11 +28,11 @@ interface State {
const ShortcutDetail = () => {
const { t } = useTranslation();
const params = useParams();
+ const shortcutName = params["*"] || "";
const navigateTo = useNavigateTo();
- const shortcutId = Number(params.shortcutId);
const shortcutStore = useShortcutStore();
const userStore = useUserStore();
- const shortcut = shortcutStore.getShortcutById(shortcutId);
+ const shortcut = shortcutStore.getShortcutByName(shortcutName);
const currentUser = useUserStore().getCurrentUser();
const [state, setState] = useState({
showEditDrawer: false,
@@ -46,11 +46,11 @@ const ShortcutDetail = () => {
useEffect(() => {
(async () => {
- const shortcut = await shortcutStore.getOrFetchShortcutById(shortcutId);
+ const shortcut = await shortcutStore.getOrFetchShortcutByName(shortcutName);
await userStore.getOrFetchUserById(shortcut.creatorId);
loadingState.setFinish();
})();
- }, [shortcutId]);
+ }, [shortcutName]);
if (loadingState.isLoading) {
return null;
@@ -67,7 +67,7 @@ const ShortcutDetail = () => {
content: `Are you sure to delete shortcut \`${shortcut.name}\`? You cannot undo this action.`,
style: "danger",
onConfirm: async () => {
- await shortcutStore.deleteShortcut(shortcut.id);
+ await shortcutStore.deleteShortcut(shortcut.name);
navigateTo("/", {
replace: true,
});
@@ -198,7 +198,7 @@ const ShortcutDetail = () => {
{t("analytics.self")}
-
+
@@ -206,7 +206,7 @@ const ShortcutDetail = () => {
{state.showEditDrawer && (
setState({
...state,
diff --git a/frontend/web/src/pages/ShortcutSpace.tsx b/frontend/web/src/pages/ShortcutSpace.tsx
new file mode 100644
index 0000000..31fb2b0
--- /dev/null
+++ b/frontend/web/src/pages/ShortcutSpace.tsx
@@ -0,0 +1,36 @@
+import { useEffect } from "react";
+import toast from "react-hot-toast";
+import { useParams } from "react-router-dom";
+import { isURL } from "@/helpers/utils";
+import useShortcutStore from "@/stores/v1/shortcut";
+
+const ShortcutSpace = () => {
+ const params = useParams();
+ const shortcutName = params["*"] || "";
+ const shortcutStore = useShortcutStore();
+ const shortcut = shortcutStore.getShortcutByName(shortcutName);
+
+ useEffect(() => {
+ (async () => {
+ try {
+ await shortcutStore.getOrFetchShortcutByName(shortcutName);
+ } catch (error: any) {
+ console.error(error);
+ toast.error(error.details);
+ }
+ })();
+ }, [shortcutName]);
+
+ if (!shortcut) {
+ return null;
+ }
+
+ if (isURL(shortcut.link)) {
+ window.location.href = shortcut.link;
+ return null;
+ }
+
+ return {shortcut.link}
;
+};
+
+export default ShortcutSpace;
diff --git a/frontend/web/src/routers/index.tsx b/frontend/web/src/routers/index.tsx
index 2e3b0e1..21e7c7c 100644
--- a/frontend/web/src/routers/index.tsx
+++ b/frontend/web/src/routers/index.tsx
@@ -2,6 +2,7 @@ import { createBrowserRouter } from "react-router-dom";
import CollectionDashboard from "@/pages/CollectionDashboard";
import CollectionSpace from "@/pages/CollectionSpace";
import NotFound from "@/pages/NotFound";
+import ShortcutSpace from "@/pages/ShortcutSpace";
import SignIn from "@/pages/SignIn";
import SignUp from "@/pages/SignUp";
import SubscriptionSetting from "@/pages/SubscriptionSetting";
@@ -38,7 +39,7 @@ const router = createBrowserRouter([
element: ,
},
{
- path: "/shortcut/:shortcutId",
+ path: "/shortcut/*",
element: ,
},
{
@@ -56,7 +57,11 @@ const router = createBrowserRouter([
],
},
{
- path: "c/:collectionName",
+ path: "s/*",
+ element: ,
+ },
+ {
+ path: "c/*",
element: ,
},
{
diff --git a/frontend/web/src/stores/v1/shortcut.ts b/frontend/web/src/stores/v1/shortcut.ts
index 60878e4..0e219fa 100644
--- a/frontend/web/src/stores/v1/shortcut.ts
+++ b/frontend/web/src/stores/v1/shortcut.ts
@@ -4,50 +4,61 @@ import { shortcutServiceClient } from "@/grpcweb";
import { Shortcut } from "@/types/proto/api/v2/shortcut_service";
interface ShortcutState {
- shortcutMapById: Record;
+ shortcutMapByName: Record;
fetchShortcutList: () => Promise;
- getOrFetchShortcutById: (id: number) => Promise;
- getShortcutById: (id: number) => Shortcut;
+ fetchShortcutById: (id: number) => Promise;
+ getOrFetchShortcutByName: (name: string) => Promise;
+ getShortcutByName: (name: string) => Shortcut;
getShortcutList: () => Shortcut[];
createShortcut: (shortcut: Shortcut) => Promise;
updateShortcut: (shortcut: Partial, updateMask: string[]) => Promise;
- deleteShortcut: (id: number) => Promise;
+ deleteShortcut: (name: string) => Promise;
}
const useShortcutStore = create()((set, get) => ({
shortcutMapById: {},
+ shortcutMapByName: {},
fetchShortcutList: async () => {
const { shortcuts } = await shortcutServiceClient.listShortcuts({});
- const shortcutMap = get().shortcutMapById;
+ const shortcutMap = get().shortcutMapByName;
shortcuts.forEach((shortcut) => {
- shortcutMap[shortcut.id] = shortcut;
+ shortcutMap[shortcut.name] = shortcut;
});
set(shortcutMap);
return shortcuts;
},
- getOrFetchShortcutById: async (id: number) => {
- const shortcutMap = get().shortcutMapById;
- if (shortcutMap[id]) {
- return shortcutMap[id] as Shortcut;
- }
-
- const { shortcut } = await shortcutServiceClient.getShortcut({
+ fetchShortcutById: async (id: number) => {
+ const { shortcut } = await shortcutServiceClient.getShortcutById({
id: id,
});
if (!shortcut) {
throw new Error(`Shortcut with id ${id} not found`);
}
+ return shortcut;
+ },
+ getOrFetchShortcutByName: async (name: string) => {
+ const shortcutMap = get().shortcutMapByName;
+ if (shortcutMap[name]) {
+ return shortcutMap[name] as Shortcut;
+ }
- shortcutMap[id] = shortcut;
+ const { shortcut } = await shortcutServiceClient.getShortcut({
+ name,
+ });
+ if (!shortcut) {
+ throw new Error(`Shortcut with name ${name} not found`);
+ }
+
+ shortcutMap[name] = shortcut;
set(shortcutMap);
return shortcut;
},
- getShortcutById: (id: number) => {
- const shortcutMap = get().shortcutMapById;
- return shortcutMap[id] || unknownShortcut;
+ getShortcutByName: (name: string) => {
+ const shortcutMap = get().shortcutMapByName;
+ return shortcutMap[name] || unknownShortcut;
},
getShortcutList: () => {
- return Object.values(get().shortcutMapById);
+ return Object.values(get().shortcutMapByName);
},
createShortcut: async (shortcut: Shortcut) => {
const { shortcut: createdShortcut } = await shortcutServiceClient.createShortcut({
@@ -56,8 +67,8 @@ const useShortcutStore = create()((set, get) => ({
if (!createdShortcut) {
throw new Error(`Failed to create shortcut`);
}
- const shortcutMap = get().shortcutMapById;
- shortcutMap[createdShortcut.id] = createdShortcut;
+ const shortcutMap = get().shortcutMapByName;
+ shortcutMap[createdShortcut.name] = createdShortcut;
set(shortcutMap);
return createdShortcut;
},
@@ -69,17 +80,17 @@ const useShortcutStore = create()((set, get) => ({
if (!updatedShortcut) {
throw new Error(`Failed to update shortcut`);
}
- const shortcutMap = get().shortcutMapById;
- shortcutMap[updatedShortcut.id] = updatedShortcut;
+ const shortcutMap = get().shortcutMapByName;
+ shortcutMap[updatedShortcut.name] = updatedShortcut;
set(shortcutMap);
return updatedShortcut;
},
- deleteShortcut: async (id: number) => {
+ deleteShortcut: async (name: string) => {
await shortcutServiceClient.deleteShortcut({
- id: id,
+ name,
});
- const shortcutMap = get().shortcutMapById;
- delete shortcutMap[id];
+ const shortcutMap = get().shortcutMapByName;
+ delete shortcutMap[name];
set(shortcutMap);
},
}));
diff --git a/frontend/web/vite.config.ts b/frontend/web/vite.config.ts
index 28c6fab..eff5cfe 100644
--- a/frontend/web/vite.config.ts
+++ b/frontend/web/vite.config.ts
@@ -23,10 +23,6 @@ export default defineConfig({
target: devProxyServer,
xfwd: true,
},
- "^/s/": {
- target: devProxyServer,
- xfwd: true,
- },
},
},
resolve: {
diff --git a/proto/api/v2/shortcut_service.proto b/proto/api/v2/shortcut_service.proto
index 010b820..cee5afb 100644
--- a/proto/api/v2/shortcut_service.proto
+++ b/proto/api/v2/shortcut_service.proto
@@ -15,11 +15,13 @@ service ShortcutService {
rpc ListShortcuts(ListShortcutsRequest) returns (ListShortcutsResponse) {
option (google.api.http) = {get: "/api/v2/shortcuts"};
}
- // GetShortcut returns a shortcut by id.
+ // GetShortcut returns a shortcut by name.
rpc GetShortcut(GetShortcutRequest) returns (GetShortcutResponse) {
- option (google.api.http) = {get: "/api/v2/shortcuts/{id}"};
- option (google.api.method_signature) = "id";
+ option (google.api.http) = {get: "/api/v2/shortcuts/{name}"};
+ option (google.api.method_signature) = "name";
}
+ // GetShortcutById returns a shortcut by id.
+ rpc GetShortcutById(GetShortcutByIdRequest) returns (GetShortcutByIdResponse) {}
// CreateShortcut creates a shortcut.
rpc CreateShortcut(CreateShortcutRequest) returns (CreateShortcutResponse) {
option (google.api.http) = {
@@ -30,20 +32,20 @@ service ShortcutService {
// UpdateShortcut updates a shortcut.
rpc UpdateShortcut(UpdateShortcutRequest) returns (UpdateShortcutResponse) {
option (google.api.http) = {
- put: "/api/v2/shortcuts/{shortcut.id}"
+ put: "/api/v2/shortcuts/{shortcut.name}"
body: "shortcut"
};
option (google.api.method_signature) = "shortcut,update_mask";
}
- // DeleteShortcut deletes a shortcut by id.
+ // DeleteShortcut deletes a shortcut by name.
rpc DeleteShortcut(DeleteShortcutRequest) returns (DeleteShortcutResponse) {
- option (google.api.http) = {delete: "/api/v2/shortcuts/{id}"};
- option (google.api.method_signature) = "id";
+ option (google.api.http) = {delete: "/api/v2/shortcuts/{name}"};
+ option (google.api.method_signature) = "name";
}
// GetShortcutAnalytics returns the analytics for a shortcut.
rpc GetShortcutAnalytics(GetShortcutAnalyticsRequest) returns (GetShortcutAnalyticsResponse) {
- option (google.api.http) = {get: "/api/v2/shortcuts/{id}/analytics"};
- option (google.api.method_signature) = "id";
+ option (google.api.http) = {get: "/api/v2/shortcuts/{name}/analytics"};
+ option (google.api.method_signature) = "name";
}
}
@@ -90,13 +92,21 @@ message ListShortcutsResponse {
}
message GetShortcutRequest {
- int32 id = 1;
+ string name = 1;
}
message GetShortcutResponse {
Shortcut shortcut = 1;
}
+message GetShortcutByIdRequest {
+ int32 id = 1;
+}
+
+message GetShortcutByIdResponse {
+ Shortcut shortcut = 1;
+}
+
message CreateShortcutRequest {
Shortcut shortcut = 1;
}
@@ -116,13 +126,13 @@ message UpdateShortcutResponse {
}
message DeleteShortcutRequest {
- int32 id = 1;
+ string name = 1;
}
message DeleteShortcutResponse {}
message GetShortcutAnalyticsRequest {
- int32 id = 1;
+ string name = 1;
}
message GetShortcutAnalyticsResponse {
diff --git a/proto/gen/api/v2/README.md b/proto/gen/api/v2/README.md
index 8e7b170..5157b1a 100644
--- a/proto/gen/api/v2/README.md
+++ b/proto/gen/api/v2/README.md
@@ -83,6 +83,8 @@
- [GetShortcutAnalyticsRequest](#slash-api-v2-GetShortcutAnalyticsRequest)
- [GetShortcutAnalyticsResponse](#slash-api-v2-GetShortcutAnalyticsResponse)
- [GetShortcutAnalyticsResponse.AnalyticsItem](#slash-api-v2-GetShortcutAnalyticsResponse-AnalyticsItem)
+ - [GetShortcutByIdRequest](#slash-api-v2-GetShortcutByIdRequest)
+ - [GetShortcutByIdResponse](#slash-api-v2-GetShortcutByIdResponse)
- [GetShortcutRequest](#slash-api-v2-GetShortcutRequest)
- [GetShortcutResponse](#slash-api-v2-GetShortcutResponse)
- [ListShortcutsRequest](#slash-api-v2-ListShortcutsRequest)
@@ -1094,7 +1096,7 @@
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
-| id | [int32](#int32) | | |
+| name | [string](#string) | | |
@@ -1119,7 +1121,7 @@
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
-| id | [int32](#int32) | | |
+| name | [string](#string) | | |
@@ -1159,6 +1161,36 @@
+
+
+### GetShortcutByIdRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| id | [int32](#int32) | | |
+
+
+
+
+
+
+
+
+### GetShortcutByIdResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| shortcut | [Shortcut](#slash-api-v2-Shortcut) | | |
+
+
+
+
+
+
### GetShortcutRequest
@@ -1167,7 +1199,7 @@
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
-| id | [int32](#int32) | | |
+| name | [string](#string) | | |
@@ -1303,10 +1335,11 @@
| Method Name | Request Type | Response Type | Description |
| ----------- | ------------ | ------------- | ------------|
| ListShortcuts | [ListShortcutsRequest](#slash-api-v2-ListShortcutsRequest) | [ListShortcutsResponse](#slash-api-v2-ListShortcutsResponse) | ListShortcuts returns a list of shortcuts. |
-| GetShortcut | [GetShortcutRequest](#slash-api-v2-GetShortcutRequest) | [GetShortcutResponse](#slash-api-v2-GetShortcutResponse) | GetShortcut returns a shortcut by id. |
+| GetShortcut | [GetShortcutRequest](#slash-api-v2-GetShortcutRequest) | [GetShortcutResponse](#slash-api-v2-GetShortcutResponse) | GetShortcut returns a shortcut by name. |
+| GetShortcutById | [GetShortcutByIdRequest](#slash-api-v2-GetShortcutByIdRequest) | [GetShortcutByIdResponse](#slash-api-v2-GetShortcutByIdResponse) | GetShortcutById returns a shortcut by id. |
| CreateShortcut | [CreateShortcutRequest](#slash-api-v2-CreateShortcutRequest) | [CreateShortcutResponse](#slash-api-v2-CreateShortcutResponse) | CreateShortcut creates a shortcut. |
| UpdateShortcut | [UpdateShortcutRequest](#slash-api-v2-UpdateShortcutRequest) | [UpdateShortcutResponse](#slash-api-v2-UpdateShortcutResponse) | UpdateShortcut updates a shortcut. |
-| DeleteShortcut | [DeleteShortcutRequest](#slash-api-v2-DeleteShortcutRequest) | [DeleteShortcutResponse](#slash-api-v2-DeleteShortcutResponse) | DeleteShortcut deletes a shortcut by id. |
+| DeleteShortcut | [DeleteShortcutRequest](#slash-api-v2-DeleteShortcutRequest) | [DeleteShortcutResponse](#slash-api-v2-DeleteShortcutResponse) | DeleteShortcut deletes a shortcut by name. |
| GetShortcutAnalytics | [GetShortcutAnalyticsRequest](#slash-api-v2-GetShortcutAnalyticsRequest) | [GetShortcutAnalyticsResponse](#slash-api-v2-GetShortcutAnalyticsResponse) | GetShortcutAnalytics returns the analytics for a shortcut. |
diff --git a/proto/gen/api/v2/shortcut_service.pb.go b/proto/gen/api/v2/shortcut_service.pb.go
index d6271f3..8fa7417 100644
--- a/proto/gen/api/v2/shortcut_service.pb.go
+++ b/proto/gen/api/v2/shortcut_service.pb.go
@@ -319,7 +319,7 @@ type GetShortcutRequest struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
}
func (x *GetShortcutRequest) Reset() {
@@ -354,11 +354,11 @@ func (*GetShortcutRequest) Descriptor() ([]byte, []int) {
return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{4}
}
-func (x *GetShortcutRequest) GetId() int32 {
+func (x *GetShortcutRequest) GetName() string {
if x != nil {
- return x.Id
+ return x.Name
}
- return 0
+ return ""
}
type GetShortcutResponse struct {
@@ -408,6 +408,100 @@ func (x *GetShortcutResponse) GetShortcut() *Shortcut {
return nil
}
+type GetShortcutByIdRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (x *GetShortcutByIdRequest) Reset() {
+ *x = GetShortcutByIdRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetShortcutByIdRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetShortcutByIdRequest) ProtoMessage() {}
+
+func (x *GetShortcutByIdRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[6]
+ 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 GetShortcutByIdRequest.ProtoReflect.Descriptor instead.
+func (*GetShortcutByIdRequest) Descriptor() ([]byte, []int) {
+ return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *GetShortcutByIdRequest) GetId() int32 {
+ if x != nil {
+ return x.Id
+ }
+ return 0
+}
+
+type GetShortcutByIdResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Shortcut *Shortcut `protobuf:"bytes,1,opt,name=shortcut,proto3" json:"shortcut,omitempty"`
+}
+
+func (x *GetShortcutByIdResponse) Reset() {
+ *x = GetShortcutByIdResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetShortcutByIdResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetShortcutByIdResponse) ProtoMessage() {}
+
+func (x *GetShortcutByIdResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_api_v2_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 GetShortcutByIdResponse.ProtoReflect.Descriptor instead.
+func (*GetShortcutByIdResponse) Descriptor() ([]byte, []int) {
+ return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *GetShortcutByIdResponse) GetShortcut() *Shortcut {
+ if x != nil {
+ return x.Shortcut
+ }
+ return nil
+}
+
type CreateShortcutRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -419,7 +513,7 @@ type CreateShortcutRequest struct {
func (x *CreateShortcutRequest) Reset() {
*x = CreateShortcutRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[6]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -432,7 +526,7 @@ func (x *CreateShortcutRequest) String() string {
func (*CreateShortcutRequest) ProtoMessage() {}
func (x *CreateShortcutRequest) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[6]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -445,7 +539,7 @@ func (x *CreateShortcutRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateShortcutRequest.ProtoReflect.Descriptor instead.
func (*CreateShortcutRequest) Descriptor() ([]byte, []int) {
- return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{6}
+ return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{8}
}
func (x *CreateShortcutRequest) GetShortcut() *Shortcut {
@@ -466,7 +560,7 @@ type CreateShortcutResponse struct {
func (x *CreateShortcutResponse) Reset() {
*x = CreateShortcutResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[7]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -479,7 +573,7 @@ func (x *CreateShortcutResponse) String() string {
func (*CreateShortcutResponse) ProtoMessage() {}
func (x *CreateShortcutResponse) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[7]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -492,7 +586,7 @@ func (x *CreateShortcutResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateShortcutResponse.ProtoReflect.Descriptor instead.
func (*CreateShortcutResponse) Descriptor() ([]byte, []int) {
- return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{7}
+ return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{9}
}
func (x *CreateShortcutResponse) GetShortcut() *Shortcut {
@@ -514,7 +608,7 @@ type UpdateShortcutRequest struct {
func (x *UpdateShortcutRequest) Reset() {
*x = UpdateShortcutRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[8]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -527,7 +621,7 @@ func (x *UpdateShortcutRequest) String() string {
func (*UpdateShortcutRequest) ProtoMessage() {}
func (x *UpdateShortcutRequest) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[8]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -540,7 +634,7 @@ func (x *UpdateShortcutRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateShortcutRequest.ProtoReflect.Descriptor instead.
func (*UpdateShortcutRequest) Descriptor() ([]byte, []int) {
- return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{8}
+ return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{10}
}
func (x *UpdateShortcutRequest) GetShortcut() *Shortcut {
@@ -568,7 +662,7 @@ type UpdateShortcutResponse struct {
func (x *UpdateShortcutResponse) Reset() {
*x = UpdateShortcutResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[9]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -581,7 +675,7 @@ func (x *UpdateShortcutResponse) String() string {
func (*UpdateShortcutResponse) ProtoMessage() {}
func (x *UpdateShortcutResponse) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[9]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -594,7 +688,7 @@ func (x *UpdateShortcutResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateShortcutResponse.ProtoReflect.Descriptor instead.
func (*UpdateShortcutResponse) Descriptor() ([]byte, []int) {
- return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{9}
+ return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{11}
}
func (x *UpdateShortcutResponse) GetShortcut() *Shortcut {
@@ -609,13 +703,13 @@ type DeleteShortcutRequest struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
}
func (x *DeleteShortcutRequest) Reset() {
*x = DeleteShortcutRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[10]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -628,7 +722,7 @@ func (x *DeleteShortcutRequest) String() string {
func (*DeleteShortcutRequest) ProtoMessage() {}
func (x *DeleteShortcutRequest) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[10]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[12]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -641,14 +735,14 @@ func (x *DeleteShortcutRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteShortcutRequest.ProtoReflect.Descriptor instead.
func (*DeleteShortcutRequest) Descriptor() ([]byte, []int) {
- return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{10}
+ return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{12}
}
-func (x *DeleteShortcutRequest) GetId() int32 {
+func (x *DeleteShortcutRequest) GetName() string {
if x != nil {
- return x.Id
+ return x.Name
}
- return 0
+ return ""
}
type DeleteShortcutResponse struct {
@@ -660,7 +754,7 @@ type DeleteShortcutResponse struct {
func (x *DeleteShortcutResponse) Reset() {
*x = DeleteShortcutResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[11]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -673,7 +767,7 @@ func (x *DeleteShortcutResponse) String() string {
func (*DeleteShortcutResponse) ProtoMessage() {}
func (x *DeleteShortcutResponse) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[11]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[13]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -686,7 +780,7 @@ func (x *DeleteShortcutResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteShortcutResponse.ProtoReflect.Descriptor instead.
func (*DeleteShortcutResponse) Descriptor() ([]byte, []int) {
- return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{11}
+ return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{13}
}
type GetShortcutAnalyticsRequest struct {
@@ -694,13 +788,13 @@ type GetShortcutAnalyticsRequest struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
}
func (x *GetShortcutAnalyticsRequest) Reset() {
*x = GetShortcutAnalyticsRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[12]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -713,7 +807,7 @@ func (x *GetShortcutAnalyticsRequest) String() string {
func (*GetShortcutAnalyticsRequest) ProtoMessage() {}
func (x *GetShortcutAnalyticsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[12]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[14]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -726,14 +820,14 @@ func (x *GetShortcutAnalyticsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetShortcutAnalyticsRequest.ProtoReflect.Descriptor instead.
func (*GetShortcutAnalyticsRequest) Descriptor() ([]byte, []int) {
- return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{12}
+ return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{14}
}
-func (x *GetShortcutAnalyticsRequest) GetId() int32 {
+func (x *GetShortcutAnalyticsRequest) GetName() string {
if x != nil {
- return x.Id
+ return x.Name
}
- return 0
+ return ""
}
type GetShortcutAnalyticsResponse struct {
@@ -749,7 +843,7 @@ type GetShortcutAnalyticsResponse struct {
func (x *GetShortcutAnalyticsResponse) Reset() {
*x = GetShortcutAnalyticsResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[13]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -762,7 +856,7 @@ func (x *GetShortcutAnalyticsResponse) String() string {
func (*GetShortcutAnalyticsResponse) ProtoMessage() {}
func (x *GetShortcutAnalyticsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[13]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[15]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -775,7 +869,7 @@ func (x *GetShortcutAnalyticsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetShortcutAnalyticsResponse.ProtoReflect.Descriptor instead.
func (*GetShortcutAnalyticsResponse) Descriptor() ([]byte, []int) {
- return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{13}
+ return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{15}
}
func (x *GetShortcutAnalyticsResponse) GetReferences() []*GetShortcutAnalyticsResponse_AnalyticsItem {
@@ -811,7 +905,7 @@ type GetShortcutAnalyticsResponse_AnalyticsItem struct {
func (x *GetShortcutAnalyticsResponse_AnalyticsItem) Reset() {
*x = GetShortcutAnalyticsResponse_AnalyticsItem{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[14]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -824,7 +918,7 @@ func (x *GetShortcutAnalyticsResponse_AnalyticsItem) String() string {
func (*GetShortcutAnalyticsResponse_AnalyticsItem) ProtoMessage() {}
func (x *GetShortcutAnalyticsResponse_AnalyticsItem) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_shortcut_service_proto_msgTypes[14]
+ mi := &file_api_v2_shortcut_service_proto_msgTypes[16]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -837,7 +931,7 @@ func (x *GetShortcutAnalyticsResponse_AnalyticsItem) ProtoReflect() protoreflect
// Deprecated: Use GetShortcutAnalyticsResponse_AnalyticsItem.ProtoReflect.Descriptor instead.
func (*GetShortcutAnalyticsResponse_AnalyticsItem) Descriptor() ([]byte, []int) {
- return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{13, 0}
+ return file_api_v2_shortcut_service_proto_rawDescGZIP(), []int{15, 0}
}
func (x *GetShortcutAnalyticsResponse_AnalyticsItem) GetName() string {
@@ -913,131 +1007,146 @@ var file_api_v2_shortcut_service_proto_rawDesc = []byte{
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, 0x32, 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, 0x32, 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, 0x32, 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, 0x32,
- 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, 0x32, 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,
+ 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x22, 0x28, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x68,
+ 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 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, 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, 0x32, 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, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e,
- 0x76, 0x32, 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, 0x32, 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,
+ 0x75, 0x74, 0x52, 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x22, 0x28, 0x0a, 0x16,
+ 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x42, 0x79, 0x49, 0x64, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4d, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f,
+ 0x72, 0x74, 0x63, 0x75, 0x74, 0x42, 0x79, 0x49, 0x64, 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, 0x32, 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, 0x32, 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, 0x32, 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, 0x32, 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, 0x32, 0x2e, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52,
+ 0x08, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x22, 0x2b, 0x0a, 0x15, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 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, 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, 0x31, 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,
+ 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
+ 0x61, 0x6d, 0x65, 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, 0x32, 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, 0x32, 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, 0xcc,
- 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, 0x32, 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,
- 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 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, 0x32, 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, 0x32, 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, 0x32, 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,
- 0x32, 0x2f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d,
- 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, 0x32, 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, 0x32, 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, 0x32, 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, 0x32, 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, 0x32, 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, 0x32, 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, 0x32, 0x2e, 0x44, 0x65,
- 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75,
+ 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, 0x32, 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, 0xbc, 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, 0x32, 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, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 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, 0x32, 0x2f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x12, 0x7b, 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, 0x32, 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, 0x32, 0x2e, 0x47, 0x65, 0x74,
+ 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x27, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12,
+ 0x18, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75,
+ 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x60, 0x0a, 0x0f, 0x47, 0x65, 0x74,
+ 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x42, 0x79, 0x49, 0x64, 0x12, 0x24, 0x2e, 0x73,
+ 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x53,
+ 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76,
+ 0x32, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x42, 0x79, 0x49,
+ 0x64, 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, 0x32, 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, 0x32, 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, 0x32, 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, 0x32, 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,
- 0x32, 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, 0x32, 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, 0x32, 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, 0x32, 0x3b, 0x61, 0x70, 0x69,
- 0x76, 0x32, 0xa2, 0x02, 0x03, 0x53, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x53, 0x6c, 0x61, 0x73, 0x68,
- 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x5c,
- 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x5c, 0x41,
- 0x70, 0x69, 0x5c, 0x56, 0x32, 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, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x76, 0x32, 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, 0x32, 0x2f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x12, 0xa7,
+ 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, 0x32,
+ 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, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72,
+ 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 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, 0x2d, 0x3a, 0x08, 0x73, 0x68, 0x6f,
+ 0x72, 0x74, 0x63, 0x75, 0x74, 0x1a, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x73,
+ 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x2f, 0x7b, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63,
+ 0x75, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x84, 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, 0x32, 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, 0x32, 0x2e,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82,
+ 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x73,
+ 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12,
+ 0xa0, 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, 0x32, 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, 0x32, 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,
+ 0x31, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22,
+ 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74,
+ 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 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, 0x32, 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,
+ 0x32, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x53, 0x41, 0x58, 0xaa, 0x02, 0x0c,
+ 0x53, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x53,
+ 0x6c, 0x61, 0x73, 0x68, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18, 0x53, 0x6c,
+ 0x61, 0x73, 0x68, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 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, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -1052,7 +1161,7 @@ func file_api_v2_shortcut_service_proto_rawDescGZIP() []byte {
return file_api_v2_shortcut_service_proto_rawDescData
}
-var file_api_v2_shortcut_service_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
+var file_api_v2_shortcut_service_proto_msgTypes = make([]protoimpl.MessageInfo, 17)
var file_api_v2_shortcut_service_proto_goTypes = []interface{}{
(*Shortcut)(nil), // 0: slash.api.v2.Shortcut
(*OpenGraphMetadata)(nil), // 1: slash.api.v2.OpenGraphMetadata
@@ -1060,53 +1169,58 @@ var file_api_v2_shortcut_service_proto_goTypes = []interface{}{
(*ListShortcutsResponse)(nil), // 3: slash.api.v2.ListShortcutsResponse
(*GetShortcutRequest)(nil), // 4: slash.api.v2.GetShortcutRequest
(*GetShortcutResponse)(nil), // 5: slash.api.v2.GetShortcutResponse
- (*CreateShortcutRequest)(nil), // 6: slash.api.v2.CreateShortcutRequest
- (*CreateShortcutResponse)(nil), // 7: slash.api.v2.CreateShortcutResponse
- (*UpdateShortcutRequest)(nil), // 8: slash.api.v2.UpdateShortcutRequest
- (*UpdateShortcutResponse)(nil), // 9: slash.api.v2.UpdateShortcutResponse
- (*DeleteShortcutRequest)(nil), // 10: slash.api.v2.DeleteShortcutRequest
- (*DeleteShortcutResponse)(nil), // 11: slash.api.v2.DeleteShortcutResponse
- (*GetShortcutAnalyticsRequest)(nil), // 12: slash.api.v2.GetShortcutAnalyticsRequest
- (*GetShortcutAnalyticsResponse)(nil), // 13: slash.api.v2.GetShortcutAnalyticsResponse
- (*GetShortcutAnalyticsResponse_AnalyticsItem)(nil), // 14: slash.api.v2.GetShortcutAnalyticsResponse.AnalyticsItem
- (*timestamppb.Timestamp)(nil), // 15: google.protobuf.Timestamp
- (RowStatus)(0), // 16: slash.api.v2.RowStatus
- (Visibility)(0), // 17: slash.api.v2.Visibility
- (*fieldmaskpb.FieldMask)(nil), // 18: google.protobuf.FieldMask
+ (*GetShortcutByIdRequest)(nil), // 6: slash.api.v2.GetShortcutByIdRequest
+ (*GetShortcutByIdResponse)(nil), // 7: slash.api.v2.GetShortcutByIdResponse
+ (*CreateShortcutRequest)(nil), // 8: slash.api.v2.CreateShortcutRequest
+ (*CreateShortcutResponse)(nil), // 9: slash.api.v2.CreateShortcutResponse
+ (*UpdateShortcutRequest)(nil), // 10: slash.api.v2.UpdateShortcutRequest
+ (*UpdateShortcutResponse)(nil), // 11: slash.api.v2.UpdateShortcutResponse
+ (*DeleteShortcutRequest)(nil), // 12: slash.api.v2.DeleteShortcutRequest
+ (*DeleteShortcutResponse)(nil), // 13: slash.api.v2.DeleteShortcutResponse
+ (*GetShortcutAnalyticsRequest)(nil), // 14: slash.api.v2.GetShortcutAnalyticsRequest
+ (*GetShortcutAnalyticsResponse)(nil), // 15: slash.api.v2.GetShortcutAnalyticsResponse
+ (*GetShortcutAnalyticsResponse_AnalyticsItem)(nil), // 16: slash.api.v2.GetShortcutAnalyticsResponse.AnalyticsItem
+ (*timestamppb.Timestamp)(nil), // 17: google.protobuf.Timestamp
+ (RowStatus)(0), // 18: slash.api.v2.RowStatus
+ (Visibility)(0), // 19: slash.api.v2.Visibility
+ (*fieldmaskpb.FieldMask)(nil), // 20: google.protobuf.FieldMask
}
var file_api_v2_shortcut_service_proto_depIdxs = []int32{
- 15, // 0: slash.api.v2.Shortcut.created_time:type_name -> google.protobuf.Timestamp
- 15, // 1: slash.api.v2.Shortcut.updated_time:type_name -> google.protobuf.Timestamp
- 16, // 2: slash.api.v2.Shortcut.row_status:type_name -> slash.api.v2.RowStatus
- 17, // 3: slash.api.v2.Shortcut.visibility:type_name -> slash.api.v2.Visibility
+ 17, // 0: slash.api.v2.Shortcut.created_time:type_name -> google.protobuf.Timestamp
+ 17, // 1: slash.api.v2.Shortcut.updated_time:type_name -> google.protobuf.Timestamp
+ 18, // 2: slash.api.v2.Shortcut.row_status:type_name -> slash.api.v2.RowStatus
+ 19, // 3: slash.api.v2.Shortcut.visibility:type_name -> slash.api.v2.Visibility
1, // 4: slash.api.v2.Shortcut.og_metadata:type_name -> slash.api.v2.OpenGraphMetadata
0, // 5: slash.api.v2.ListShortcutsResponse.shortcuts:type_name -> slash.api.v2.Shortcut
0, // 6: slash.api.v2.GetShortcutResponse.shortcut:type_name -> slash.api.v2.Shortcut
- 0, // 7: slash.api.v2.CreateShortcutRequest.shortcut:type_name -> slash.api.v2.Shortcut
- 0, // 8: slash.api.v2.CreateShortcutResponse.shortcut:type_name -> slash.api.v2.Shortcut
- 0, // 9: slash.api.v2.UpdateShortcutRequest.shortcut:type_name -> slash.api.v2.Shortcut
- 18, // 10: slash.api.v2.UpdateShortcutRequest.update_mask:type_name -> google.protobuf.FieldMask
- 0, // 11: slash.api.v2.UpdateShortcutResponse.shortcut:type_name -> slash.api.v2.Shortcut
- 14, // 12: slash.api.v2.GetShortcutAnalyticsResponse.references:type_name -> slash.api.v2.GetShortcutAnalyticsResponse.AnalyticsItem
- 14, // 13: slash.api.v2.GetShortcutAnalyticsResponse.devices:type_name -> slash.api.v2.GetShortcutAnalyticsResponse.AnalyticsItem
- 14, // 14: slash.api.v2.GetShortcutAnalyticsResponse.browsers:type_name -> slash.api.v2.GetShortcutAnalyticsResponse.AnalyticsItem
- 2, // 15: slash.api.v2.ShortcutService.ListShortcuts:input_type -> slash.api.v2.ListShortcutsRequest
- 4, // 16: slash.api.v2.ShortcutService.GetShortcut:input_type -> slash.api.v2.GetShortcutRequest
- 6, // 17: slash.api.v2.ShortcutService.CreateShortcut:input_type -> slash.api.v2.CreateShortcutRequest
- 8, // 18: slash.api.v2.ShortcutService.UpdateShortcut:input_type -> slash.api.v2.UpdateShortcutRequest
- 10, // 19: slash.api.v2.ShortcutService.DeleteShortcut:input_type -> slash.api.v2.DeleteShortcutRequest
- 12, // 20: slash.api.v2.ShortcutService.GetShortcutAnalytics:input_type -> slash.api.v2.GetShortcutAnalyticsRequest
- 3, // 21: slash.api.v2.ShortcutService.ListShortcuts:output_type -> slash.api.v2.ListShortcutsResponse
- 5, // 22: slash.api.v2.ShortcutService.GetShortcut:output_type -> slash.api.v2.GetShortcutResponse
- 7, // 23: slash.api.v2.ShortcutService.CreateShortcut:output_type -> slash.api.v2.CreateShortcutResponse
- 9, // 24: slash.api.v2.ShortcutService.UpdateShortcut:output_type -> slash.api.v2.UpdateShortcutResponse
- 11, // 25: slash.api.v2.ShortcutService.DeleteShortcut:output_type -> slash.api.v2.DeleteShortcutResponse
- 13, // 26: slash.api.v2.ShortcutService.GetShortcutAnalytics:output_type -> slash.api.v2.GetShortcutAnalyticsResponse
- 21, // [21:27] is the sub-list for method output_type
- 15, // [15:21] is the sub-list for method input_type
- 15, // [15:15] is the sub-list for extension type_name
- 15, // [15:15] is the sub-list for extension extendee
- 0, // [0:15] is the sub-list for field type_name
+ 0, // 7: slash.api.v2.GetShortcutByIdResponse.shortcut:type_name -> slash.api.v2.Shortcut
+ 0, // 8: slash.api.v2.CreateShortcutRequest.shortcut:type_name -> slash.api.v2.Shortcut
+ 0, // 9: slash.api.v2.CreateShortcutResponse.shortcut:type_name -> slash.api.v2.Shortcut
+ 0, // 10: slash.api.v2.UpdateShortcutRequest.shortcut:type_name -> slash.api.v2.Shortcut
+ 20, // 11: slash.api.v2.UpdateShortcutRequest.update_mask:type_name -> google.protobuf.FieldMask
+ 0, // 12: slash.api.v2.UpdateShortcutResponse.shortcut:type_name -> slash.api.v2.Shortcut
+ 16, // 13: slash.api.v2.GetShortcutAnalyticsResponse.references:type_name -> slash.api.v2.GetShortcutAnalyticsResponse.AnalyticsItem
+ 16, // 14: slash.api.v2.GetShortcutAnalyticsResponse.devices:type_name -> slash.api.v2.GetShortcutAnalyticsResponse.AnalyticsItem
+ 16, // 15: slash.api.v2.GetShortcutAnalyticsResponse.browsers:type_name -> slash.api.v2.GetShortcutAnalyticsResponse.AnalyticsItem
+ 2, // 16: slash.api.v2.ShortcutService.ListShortcuts:input_type -> slash.api.v2.ListShortcutsRequest
+ 4, // 17: slash.api.v2.ShortcutService.GetShortcut:input_type -> slash.api.v2.GetShortcutRequest
+ 6, // 18: slash.api.v2.ShortcutService.GetShortcutById:input_type -> slash.api.v2.GetShortcutByIdRequest
+ 8, // 19: slash.api.v2.ShortcutService.CreateShortcut:input_type -> slash.api.v2.CreateShortcutRequest
+ 10, // 20: slash.api.v2.ShortcutService.UpdateShortcut:input_type -> slash.api.v2.UpdateShortcutRequest
+ 12, // 21: slash.api.v2.ShortcutService.DeleteShortcut:input_type -> slash.api.v2.DeleteShortcutRequest
+ 14, // 22: slash.api.v2.ShortcutService.GetShortcutAnalytics:input_type -> slash.api.v2.GetShortcutAnalyticsRequest
+ 3, // 23: slash.api.v2.ShortcutService.ListShortcuts:output_type -> slash.api.v2.ListShortcutsResponse
+ 5, // 24: slash.api.v2.ShortcutService.GetShortcut:output_type -> slash.api.v2.GetShortcutResponse
+ 7, // 25: slash.api.v2.ShortcutService.GetShortcutById:output_type -> slash.api.v2.GetShortcutByIdResponse
+ 9, // 26: slash.api.v2.ShortcutService.CreateShortcut:output_type -> slash.api.v2.CreateShortcutResponse
+ 11, // 27: slash.api.v2.ShortcutService.UpdateShortcut:output_type -> slash.api.v2.UpdateShortcutResponse
+ 13, // 28: slash.api.v2.ShortcutService.DeleteShortcut:output_type -> slash.api.v2.DeleteShortcutResponse
+ 15, // 29: slash.api.v2.ShortcutService.GetShortcutAnalytics:output_type -> slash.api.v2.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
}
func init() { file_api_v2_shortcut_service_proto_init() }
@@ -1189,7 +1303,7 @@ func file_api_v2_shortcut_service_proto_init() {
}
}
file_api_v2_shortcut_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CreateShortcutRequest); i {
+ switch v := v.(*GetShortcutByIdRequest); i {
case 0:
return &v.state
case 1:
@@ -1201,7 +1315,7 @@ func file_api_v2_shortcut_service_proto_init() {
}
}
file_api_v2_shortcut_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CreateShortcutResponse); i {
+ switch v := v.(*GetShortcutByIdResponse); i {
case 0:
return &v.state
case 1:
@@ -1213,7 +1327,7 @@ func file_api_v2_shortcut_service_proto_init() {
}
}
file_api_v2_shortcut_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateShortcutRequest); i {
+ switch v := v.(*CreateShortcutRequest); i {
case 0:
return &v.state
case 1:
@@ -1225,7 +1339,7 @@ func file_api_v2_shortcut_service_proto_init() {
}
}
file_api_v2_shortcut_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateShortcutResponse); i {
+ switch v := v.(*CreateShortcutResponse); i {
case 0:
return &v.state
case 1:
@@ -1237,7 +1351,7 @@ func file_api_v2_shortcut_service_proto_init() {
}
}
file_api_v2_shortcut_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DeleteShortcutRequest); i {
+ switch v := v.(*UpdateShortcutRequest); i {
case 0:
return &v.state
case 1:
@@ -1249,7 +1363,7 @@ func file_api_v2_shortcut_service_proto_init() {
}
}
file_api_v2_shortcut_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DeleteShortcutResponse); i {
+ switch v := v.(*UpdateShortcutResponse); i {
case 0:
return &v.state
case 1:
@@ -1261,7 +1375,7 @@ func file_api_v2_shortcut_service_proto_init() {
}
}
file_api_v2_shortcut_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetShortcutAnalyticsRequest); i {
+ switch v := v.(*DeleteShortcutRequest); i {
case 0:
return &v.state
case 1:
@@ -1273,7 +1387,7 @@ func file_api_v2_shortcut_service_proto_init() {
}
}
file_api_v2_shortcut_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*GetShortcutAnalyticsResponse); i {
+ switch v := v.(*DeleteShortcutResponse); i {
case 0:
return &v.state
case 1:
@@ -1285,6 +1399,30 @@ func file_api_v2_shortcut_service_proto_init() {
}
}
file_api_v2_shortcut_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetShortcutAnalyticsRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_api_v2_shortcut_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetShortcutAnalyticsResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_api_v2_shortcut_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetShortcutAnalyticsResponse_AnalyticsItem); i {
case 0:
return &v.state
@@ -1303,7 +1441,7 @@ func file_api_v2_shortcut_service_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_api_v2_shortcut_service_proto_rawDesc,
NumEnums: 0,
- NumMessages: 15,
+ NumMessages: 17,
NumExtensions: 0,
NumServices: 1,
},
diff --git a/proto/gen/api/v2/shortcut_service.pb.gw.go b/proto/gen/api/v2/shortcut_service.pb.gw.go
index 82ab319..6e9e3d0 100644
--- a/proto/gen/api/v2/shortcut_service.pb.gw.go
+++ b/proto/gen/api/v2/shortcut_service.pb.gw.go
@@ -60,14 +60,14 @@ func request_ShortcutService_GetShortcut_0(ctx context.Context, marshaler runtim
_ = err
)
- val, ok = pathParams["id"]
+ val, ok = pathParams["name"]
if !ok {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id")
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
}
- protoReq.Id, err = runtime.Int32(val)
+ protoReq.Name, err = runtime.String(val)
if err != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err)
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
}
msg, err := client.GetShortcut(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@@ -86,14 +86,14 @@ func local_request_ShortcutService_GetShortcut_0(ctx context.Context, marshaler
_ = err
)
- val, ok = pathParams["id"]
+ val, ok = pathParams["name"]
if !ok {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id")
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
}
- protoReq.Id, err = runtime.Int32(val)
+ protoReq.Name, err = runtime.String(val)
if err != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err)
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
}
msg, err := server.GetShortcut(ctx, &protoReq)
@@ -136,7 +136,7 @@ func local_request_ShortcutService_CreateShortcut_0(ctx context.Context, marshal
}
var (
- filter_ShortcutService_UpdateShortcut_0 = &utilities.DoubleArray{Encoding: map[string]int{"shortcut": 0, "id": 1}, Base: []int{1, 4, 5, 2, 0, 0, 0, 0}, Check: []int{0, 1, 1, 2, 4, 2, 2, 3}}
+ filter_ShortcutService_UpdateShortcut_0 = &utilities.DoubleArray{Encoding: map[string]int{"shortcut": 0, "name": 1}, Base: []int{1, 4, 5, 2, 0, 0, 0, 0}, Check: []int{0, 1, 1, 2, 4, 2, 2, 3}}
)
func request_ShortcutService_UpdateShortcut_0(ctx context.Context, marshaler runtime.Marshaler, client ShortcutServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
@@ -158,14 +158,14 @@ func request_ShortcutService_UpdateShortcut_0(ctx context.Context, marshaler run
_ = err
)
- val, ok = pathParams["shortcut.id"]
+ val, ok = pathParams["shortcut.name"]
if !ok {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "shortcut.id")
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "shortcut.name")
}
- err = runtime.PopulateFieldFromPath(&protoReq, "shortcut.id", val)
+ err = runtime.PopulateFieldFromPath(&protoReq, "shortcut.name", val)
if err != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "shortcut.id", err)
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "shortcut.name", err)
}
if err := req.ParseForm(); err != nil {
@@ -199,14 +199,14 @@ func local_request_ShortcutService_UpdateShortcut_0(ctx context.Context, marshal
_ = err
)
- val, ok = pathParams["shortcut.id"]
+ val, ok = pathParams["shortcut.name"]
if !ok {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "shortcut.id")
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "shortcut.name")
}
- err = runtime.PopulateFieldFromPath(&protoReq, "shortcut.id", val)
+ err = runtime.PopulateFieldFromPath(&protoReq, "shortcut.name", val)
if err != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "shortcut.id", err)
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "shortcut.name", err)
}
if err := req.ParseForm(); err != nil {
@@ -232,14 +232,14 @@ func request_ShortcutService_DeleteShortcut_0(ctx context.Context, marshaler run
_ = err
)
- val, ok = pathParams["id"]
+ val, ok = pathParams["name"]
if !ok {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id")
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
}
- protoReq.Id, err = runtime.Int32(val)
+ protoReq.Name, err = runtime.String(val)
if err != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err)
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
}
msg, err := client.DeleteShortcut(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@@ -258,14 +258,14 @@ func local_request_ShortcutService_DeleteShortcut_0(ctx context.Context, marshal
_ = err
)
- val, ok = pathParams["id"]
+ val, ok = pathParams["name"]
if !ok {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id")
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
}
- protoReq.Id, err = runtime.Int32(val)
+ protoReq.Name, err = runtime.String(val)
if err != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err)
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
}
msg, err := server.DeleteShortcut(ctx, &protoReq)
@@ -284,14 +284,14 @@ func request_ShortcutService_GetShortcutAnalytics_0(ctx context.Context, marshal
_ = err
)
- val, ok = pathParams["id"]
+ val, ok = pathParams["name"]
if !ok {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id")
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
}
- protoReq.Id, err = runtime.Int32(val)
+ protoReq.Name, err = runtime.String(val)
if err != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err)
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
}
msg, err := client.GetShortcutAnalytics(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@@ -310,14 +310,14 @@ func local_request_ShortcutService_GetShortcutAnalytics_0(ctx context.Context, m
_ = err
)
- val, ok = pathParams["id"]
+ val, ok = pathParams["name"]
if !ok {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id")
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
}
- protoReq.Id, err = runtime.Int32(val)
+ protoReq.Name, err = runtime.String(val)
if err != nil {
- return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err)
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
}
msg, err := server.GetShortcutAnalytics(ctx, &protoReq)
@@ -364,7 +364,7 @@ func RegisterShortcutServiceHandlerServer(ctx context.Context, mux *runtime.Serv
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
var err error
var annotatedContext context.Context
- annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/slash.api.v2.ShortcutService/GetShortcut", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{id}"))
+ annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/slash.api.v2.ShortcutService/GetShortcut", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{name}"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
@@ -414,7 +414,7 @@ func RegisterShortcutServiceHandlerServer(ctx context.Context, mux *runtime.Serv
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
var err error
var annotatedContext context.Context
- annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/slash.api.v2.ShortcutService/UpdateShortcut", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{shortcut.id}"))
+ annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/slash.api.v2.ShortcutService/UpdateShortcut", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{shortcut.name}"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
@@ -439,7 +439,7 @@ func RegisterShortcutServiceHandlerServer(ctx context.Context, mux *runtime.Serv
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
var err error
var annotatedContext context.Context
- annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/slash.api.v2.ShortcutService/DeleteShortcut", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{id}"))
+ annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/slash.api.v2.ShortcutService/DeleteShortcut", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{name}"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
@@ -464,7 +464,7 @@ func RegisterShortcutServiceHandlerServer(ctx context.Context, mux *runtime.Serv
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
var err error
var annotatedContext context.Context
- annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/slash.api.v2.ShortcutService/GetShortcutAnalytics", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{id}/analytics"))
+ annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/slash.api.v2.ShortcutService/GetShortcutAnalytics", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{name}/analytics"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
@@ -550,7 +550,7 @@ func RegisterShortcutServiceHandlerClient(ctx context.Context, mux *runtime.Serv
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
var err error
var annotatedContext context.Context
- annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/slash.api.v2.ShortcutService/GetShortcut", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{id}"))
+ annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/slash.api.v2.ShortcutService/GetShortcut", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{name}"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
@@ -594,7 +594,7 @@ func RegisterShortcutServiceHandlerClient(ctx context.Context, mux *runtime.Serv
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
var err error
var annotatedContext context.Context
- annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/slash.api.v2.ShortcutService/UpdateShortcut", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{shortcut.id}"))
+ annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/slash.api.v2.ShortcutService/UpdateShortcut", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{shortcut.name}"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
@@ -616,7 +616,7 @@ func RegisterShortcutServiceHandlerClient(ctx context.Context, mux *runtime.Serv
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
var err error
var annotatedContext context.Context
- annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/slash.api.v2.ShortcutService/DeleteShortcut", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{id}"))
+ annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/slash.api.v2.ShortcutService/DeleteShortcut", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{name}"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
@@ -638,7 +638,7 @@ func RegisterShortcutServiceHandlerClient(ctx context.Context, mux *runtime.Serv
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
var err error
var annotatedContext context.Context
- annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/slash.api.v2.ShortcutService/GetShortcutAnalytics", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{id}/analytics"))
+ annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/slash.api.v2.ShortcutService/GetShortcutAnalytics", runtime.WithHTTPPathPattern("/api/v2/shortcuts/{name}/analytics"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
@@ -660,15 +660,15 @@ func RegisterShortcutServiceHandlerClient(ctx context.Context, mux *runtime.Serv
var (
pattern_ShortcutService_ListShortcuts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v2", "shortcuts"}, ""))
- pattern_ShortcutService_GetShortcut_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v2", "shortcuts", "id"}, ""))
+ pattern_ShortcutService_GetShortcut_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v2", "shortcuts", "name"}, ""))
pattern_ShortcutService_CreateShortcut_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v2", "shortcuts"}, ""))
- pattern_ShortcutService_UpdateShortcut_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v2", "shortcuts", "shortcut.id"}, ""))
+ pattern_ShortcutService_UpdateShortcut_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v2", "shortcuts", "shortcut.name"}, ""))
- pattern_ShortcutService_DeleteShortcut_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v2", "shortcuts", "id"}, ""))
+ pattern_ShortcutService_DeleteShortcut_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v2", "shortcuts", "name"}, ""))
- pattern_ShortcutService_GetShortcutAnalytics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v2", "shortcuts", "id", "analytics"}, ""))
+ pattern_ShortcutService_GetShortcutAnalytics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v2", "shortcuts", "name", "analytics"}, ""))
)
var (
diff --git a/proto/gen/api/v2/shortcut_service_grpc.pb.go b/proto/gen/api/v2/shortcut_service_grpc.pb.go
index 83ff16e..acf34e8 100644
--- a/proto/gen/api/v2/shortcut_service_grpc.pb.go
+++ b/proto/gen/api/v2/shortcut_service_grpc.pb.go
@@ -21,6 +21,7 @@ const _ = grpc.SupportPackageIsVersion7
const (
ShortcutService_ListShortcuts_FullMethodName = "/slash.api.v2.ShortcutService/ListShortcuts"
ShortcutService_GetShortcut_FullMethodName = "/slash.api.v2.ShortcutService/GetShortcut"
+ ShortcutService_GetShortcutById_FullMethodName = "/slash.api.v2.ShortcutService/GetShortcutById"
ShortcutService_CreateShortcut_FullMethodName = "/slash.api.v2.ShortcutService/CreateShortcut"
ShortcutService_UpdateShortcut_FullMethodName = "/slash.api.v2.ShortcutService/UpdateShortcut"
ShortcutService_DeleteShortcut_FullMethodName = "/slash.api.v2.ShortcutService/DeleteShortcut"
@@ -33,13 +34,15 @@ const (
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 returns a shortcut by name.
GetShortcut(ctx context.Context, in *GetShortcutRequest, opts ...grpc.CallOption) (*GetShortcutResponse, error)
+ // GetShortcutById returns a shortcut by id.
+ GetShortcutById(ctx context.Context, in *GetShortcutByIdRequest, opts ...grpc.CallOption) (*GetShortcutByIdResponse, error)
// CreateShortcut creates a shortcut.
CreateShortcut(ctx context.Context, in *CreateShortcutRequest, opts ...grpc.CallOption) (*CreateShortcutResponse, error)
// UpdateShortcut updates a shortcut.
UpdateShortcut(ctx context.Context, in *UpdateShortcutRequest, opts ...grpc.CallOption) (*UpdateShortcutResponse, error)
- // DeleteShortcut deletes a shortcut by id.
+ // DeleteShortcut deletes a shortcut by name.
DeleteShortcut(ctx context.Context, in *DeleteShortcutRequest, opts ...grpc.CallOption) (*DeleteShortcutResponse, error)
// GetShortcutAnalytics returns the analytics for a shortcut.
GetShortcutAnalytics(ctx context.Context, in *GetShortcutAnalyticsRequest, opts ...grpc.CallOption) (*GetShortcutAnalyticsResponse, error)
@@ -71,6 +74,15 @@ func (c *shortcutServiceClient) GetShortcut(ctx context.Context, in *GetShortcut
return out, nil
}
+func (c *shortcutServiceClient) GetShortcutById(ctx context.Context, in *GetShortcutByIdRequest, opts ...grpc.CallOption) (*GetShortcutByIdResponse, error) {
+ out := new(GetShortcutByIdResponse)
+ err := c.cc.Invoke(ctx, ShortcutService_GetShortcutById_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *shortcutServiceClient) CreateShortcut(ctx context.Context, in *CreateShortcutRequest, opts ...grpc.CallOption) (*CreateShortcutResponse, error) {
out := new(CreateShortcutResponse)
err := c.cc.Invoke(ctx, ShortcutService_CreateShortcut_FullMethodName, in, out, opts...)
@@ -113,13 +125,15 @@ func (c *shortcutServiceClient) GetShortcutAnalytics(ctx context.Context, in *Ge
type ShortcutServiceServer interface {
// ListShortcuts returns a list of shortcuts.
ListShortcuts(context.Context, *ListShortcutsRequest) (*ListShortcutsResponse, error)
- // GetShortcut returns a shortcut by id.
+ // GetShortcut returns a shortcut by name.
GetShortcut(context.Context, *GetShortcutRequest) (*GetShortcutResponse, error)
+ // GetShortcutById returns a shortcut by id.
+ GetShortcutById(context.Context, *GetShortcutByIdRequest) (*GetShortcutByIdResponse, error)
// CreateShortcut creates a shortcut.
CreateShortcut(context.Context, *CreateShortcutRequest) (*CreateShortcutResponse, error)
// UpdateShortcut updates a shortcut.
UpdateShortcut(context.Context, *UpdateShortcutRequest) (*UpdateShortcutResponse, error)
- // DeleteShortcut deletes a shortcut by id.
+ // DeleteShortcut deletes a shortcut by name.
DeleteShortcut(context.Context, *DeleteShortcutRequest) (*DeleteShortcutResponse, error)
// GetShortcutAnalytics returns the analytics for a shortcut.
GetShortcutAnalytics(context.Context, *GetShortcutAnalyticsRequest) (*GetShortcutAnalyticsResponse, error)
@@ -136,6 +150,9 @@ func (UnimplementedShortcutServiceServer) ListShortcuts(context.Context, *ListSh
func (UnimplementedShortcutServiceServer) GetShortcut(context.Context, *GetShortcutRequest) (*GetShortcutResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetShortcut not implemented")
}
+func (UnimplementedShortcutServiceServer) GetShortcutById(context.Context, *GetShortcutByIdRequest) (*GetShortcutByIdResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetShortcutById not implemented")
+}
func (UnimplementedShortcutServiceServer) CreateShortcut(context.Context, *CreateShortcutRequest) (*CreateShortcutResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateShortcut not implemented")
}
@@ -197,6 +214,24 @@ func _ShortcutService_GetShortcut_Handler(srv interface{}, ctx context.Context,
return interceptor(ctx, in, info, handler)
}
+func _ShortcutService_GetShortcutById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetShortcutByIdRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ShortcutServiceServer).GetShortcutById(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: ShortcutService_GetShortcutById_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ShortcutServiceServer).GetShortcutById(ctx, req.(*GetShortcutByIdRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _ShortcutService_CreateShortcut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CreateShortcutRequest)
if err := dec(in); err != nil {
@@ -284,6 +319,10 @@ var ShortcutService_ServiceDesc = grpc.ServiceDesc{
MethodName: "GetShortcut",
Handler: _ShortcutService_GetShortcut_Handler,
},
+ {
+ MethodName: "GetShortcutById",
+ Handler: _ShortcutService_GetShortcutById_Handler,
+ },
{
MethodName: "CreateShortcut",
Handler: _ShortcutService_CreateShortcut_Handler,