diff --git a/cmd/ninja/cmd/plugin.go b/cmd/ninja/cmd/plugin.go index 6525681..f12843e 100644 --- a/cmd/ninja/cmd/plugin.go +++ b/cmd/ninja/cmd/plugin.go @@ -37,6 +37,7 @@ func newPluginCmd() *cobra.Command { newPluginBumpCmd(), newPluginVersionCmd(), newPluginTagsCmd(), + newPluginGalleryCmd(), ) return c } diff --git a/cmd/ninja/cmd/plugin_gallery.go b/cmd/ninja/cmd/plugin_gallery.go new file mode 100644 index 0000000..3d609ca --- /dev/null +++ b/cmd/ninja/cmd/plugin_gallery.go @@ -0,0 +1,339 @@ +package cmd + +import ( + "context" + "fmt" + "os" + "path/filepath" + "strings" + + "connectrpc.com/connect" + "github.com/spf13/cobra" + + core "git.dev.alexdunmow.com/block/core/plugin" + + v1 "git.dev.alexdunmow.com/block/cli/internal/api/orchestrator/v1" + "git.dev.alexdunmow.com/block/cli/internal/creds" + "git.dev.alexdunmow.com/block/cli/internal/orchclient" +) + +// maxScreenshotBytes mirrors the orchestrator's UploadScreenshot read cap +// (connect.WithReadMaxBytes(8<<20)); we reject oversize files client-side so +// the failure is a clear message instead of a truncated-stream RPC error. +const maxScreenshotBytes = 8 << 20 + +// newPluginGalleryCmd builds the `ninja plugin gallery` command group for +// curating a plugin/theme's registry screenshot gallery. Reads are public; +// writes require scope membership (or owning-account membership for a private +// plugin) — the orchestrator enforces this per-handler. The target plugin +// defaults to the one described by plugin.mod in the working directory; the +// --scope/--name flags override the coordinates so the gallery of any plugin +// you can manage can be curated from anywhere. +func newPluginGalleryCmd() *cobra.Command { + var scopeFlag, nameFlag string + cmd := &cobra.Command{ + Use: "gallery", + Short: "Manage a plugin's registry screenshot gallery", + Long: `Curate the screenshot gallery shown on a plugin or theme's registry +detail page. + +The target plugin defaults to the one described by plugin.mod in the current +directory. Use --scope/--name to target a different plugin. + +Subcommands: + list Show the current gallery (public read) + add Upload an image (png/jpg/jpeg/webp, <=8MiB, <=12 total) + remove Delete a screenshot + reorder ... Reorder the gallery (must list every current image once) + set-featured Mark one screenshot featured (drives the card preview)`, + } + cmd.PersistentFlags().StringVar(&scopeFlag, "scope", "", "Target scope slug (default: plugin.mod scope)") + cmd.PersistentFlags().StringVar(&nameFlag, "name", "", "Target plugin name (default: plugin.mod name)") + + cmd.AddCommand( + newGalleryListCmd(), + newGalleryAddCmd(), + newGalleryRemoveCmd(), + newGalleryReorderCmd(), + newGallerySetFeaturedCmd(), + ) + return cmd +} + +// galleryTarget is the resolved address of a plugin's gallery: a bare scope +// slug (no leading @), the plugin name, and — for a private plugin — the +// active account it belongs to. +type galleryTarget struct { + scopeSlug string + name string + private bool + accountID string +} + +// resolveGalleryTarget derives the target plugin from plugin.mod (when present +// in the working directory) with --scope/--name overrides. A missing plugin.mod +// is not fatal as long as the flags supply scope+name. +func resolveGalleryTarget(c *cobra.Command, hc creds.HostCreds) (galleryTarget, error) { + scopeFlag, _ := c.Flags().GetString("scope") + nameFlag, _ := c.Flags().GetString("name") + + var scope, name string + var private bool + if mod, err := readLocalMod(); err == nil { + scope = mod.Plugin.Scope + name = mod.Plugin.Name + private = mod.Plugin.Private + } + // Flag overrides. An explicit --scope names a public scope; the @private + // namespace is reached only via plugin.mod's private flag or by naming the + // private scope directly. + if scopeFlag != "" { + scope = scopeFlag + private = false + } + if nameFlag != "" { + name = nameFlag + } + + scopeSlug := strings.TrimPrefix(strings.TrimSpace(scope), "@") + if scopeSlug == core.PrivateScopeSlug { + private = true + } + + t := galleryTarget{scopeSlug: scopeSlug, name: strings.TrimSpace(name), private: private, accountID: hc.ActiveAccountID} + if t.name == "" { + return t, fmt.Errorf("no plugin name: run inside a plugin dir (with plugin.mod) or pass --name") + } + if t.private { + t.scopeSlug = core.PrivateScopeSlug + if t.accountID == "" { + return t, fmt.Errorf("private plugin gallery requires an active account; run `ninja account set `") + } + } else if t.scopeSlug == "" { + return t, fmt.Errorf("no scope: run inside a plugin dir (with plugin.mod) or pass --scope") + } + return t, nil +} + +// resolvePluginID looks up the target's registry plugin ID, which every write +// RPC keys on. Mirrors the publish flow's GetPlugin call (private plugins are +// addressed by the @private scope plus the active account). +func (t galleryTarget) resolvePluginID(ctx context.Context, cli *orchclient.Client) (string, error) { + req := &v1.GetPluginRequest{ScopeSlug: t.scopeSlug, Name: t.name} + if t.private { + req.ScopeSlug = core.PrivateScopeSlug + req.ActiveAccountId = t.accountID + } + pr, err := cli.Reg.GetPlugin(ctx, connect.NewRequest(req)) + if err != nil { + return "", fmt.Errorf("get plugin: %w", err) + } + return pr.Msg.Plugin.Id, nil +} + +func newGalleryListCmd() *cobra.Command { + return &cobra.Command{ + Use: "list", + Short: "Show the current gallery for the target plugin", + Args: cobra.NoArgs, + RunE: func(c *cobra.Command, _ []string) error { + cli, _, _, hc, err := resolveClient(c) + if err != nil { + return err + } + t, err := resolveGalleryTarget(c, hc) + if err != nil { + return err + } + resp, err := cli.Gallery.ListScreenshots(context.Background(), connect.NewRequest(&v1.ListScreenshotsRequest{ + ScopeSlug: t.scopeSlug, + PluginName: t.name, + })) + if err != nil { + return fmt.Errorf("list screenshots: %w", err) + } + shots := resp.Msg.Screenshots + if len(shots) == 0 { + fmt.Println("(no screenshots — add one with `ninja plugin gallery add `)") + return nil + } + for _, s := range shots { + marker := " " + if s.Featured { + marker = "*" + } + fmt.Printf("%2d.%s %s %s %s\n", s.Position, marker, s.Id, s.ContentType, s.Url) + } + fmt.Println("\n(* = featured — drives the registry card preview image)") + return nil + }, + } +} + +func newGalleryAddCmd() *cobra.Command { + return &cobra.Command{ + Use: "add ", + Short: "Upload an image to the gallery (png/jpg/jpeg/webp, <=8MiB)", + Args: cobra.ExactArgs(1), + RunE: func(c *cobra.Command, args []string) error { + cli, _, _, hc, err := resolveClient(c) + if err != nil { + return err + } + t, err := resolveGalleryTarget(c, hc) + if err != nil { + return err + } + path := args[0] + contentType, err := imageContentType(path) + if err != nil { + return err + } + data, err := os.ReadFile(path) + if err != nil { + return fmt.Errorf("read image: %w", err) + } + if len(data) == 0 { + return fmt.Errorf("%s is empty", path) + } + if len(data) > maxScreenshotBytes { + return fmt.Errorf("%s is %d bytes; the gallery limit is %d (8MiB)", path, len(data), maxScreenshotBytes) + } + ctx := context.Background() + pluginID, err := t.resolvePluginID(ctx, cli) + if err != nil { + return err + } + resp, err := cli.Gallery.UploadScreenshot(ctx, connect.NewRequest(&v1.UploadScreenshotRequest{ + PluginId: pluginID, + Image: data, + Filename: filepath.Base(path), + ContentType: contentType, + })) + if err != nil { + return fmt.Errorf("upload screenshot: %w", err) + } + s := resp.Msg.Screenshot + fmt.Printf("Uploaded %s (id=%s, position=%d)\n", filepath.Base(path), s.Id, s.Position) + return nil + }, + } +} + +func newGalleryRemoveCmd() *cobra.Command { + return &cobra.Command{ + Use: "remove ", + Short: "Delete a screenshot from the gallery", + Args: cobra.ExactArgs(1), + RunE: func(c *cobra.Command, args []string) error { + cli, _, _, hc, err := resolveClient(c) + if err != nil { + return err + } + t, err := resolveGalleryTarget(c, hc) + if err != nil { + return err + } + ctx := context.Background() + pluginID, err := t.resolvePluginID(ctx, cli) + if err != nil { + return err + } + if _, err := cli.Gallery.DeleteScreenshot(ctx, connect.NewRequest(&v1.DeleteScreenshotRequest{ + PluginId: pluginID, + ScreenshotId: args[0], + })); err != nil { + return fmt.Errorf("delete screenshot: %w", err) + } + fmt.Printf("Deleted screenshot %s\n", args[0]) + return nil + }, + } +} + +func newGalleryReorderCmd() *cobra.Command { + return &cobra.Command{ + Use: "reorder ...", + Short: "Reorder the gallery (list every current screenshot id exactly once)", + Args: cobra.MinimumNArgs(1), + RunE: func(c *cobra.Command, args []string) error { + cli, _, _, hc, err := resolveClient(c) + if err != nil { + return err + } + t, err := resolveGalleryTarget(c, hc) + if err != nil { + return err + } + ctx := context.Background() + pluginID, err := t.resolvePluginID(ctx, cli) + if err != nil { + return err + } + resp, err := cli.Gallery.ReorderScreenshots(ctx, connect.NewRequest(&v1.ReorderScreenshotsRequest{ + PluginId: pluginID, + ScreenshotIdsInOrder: args, + })) + if err != nil { + return fmt.Errorf("reorder screenshots: %w", err) + } + fmt.Println("Reordered. New order:") + for _, s := range resp.Msg.Screenshots { + marker := " " + if s.Featured { + marker = "*" + } + fmt.Printf("%2d.%s %s\n", s.Position, marker, s.Id) + } + return nil + }, + } +} + +func newGallerySetFeaturedCmd() *cobra.Command { + return &cobra.Command{ + Use: "set-featured ", + Short: "Mark one screenshot featured (drives the registry card preview)", + Args: cobra.ExactArgs(1), + RunE: func(c *cobra.Command, args []string) error { + cli, _, _, hc, err := resolveClient(c) + if err != nil { + return err + } + t, err := resolveGalleryTarget(c, hc) + if err != nil { + return err + } + ctx := context.Background() + pluginID, err := t.resolvePluginID(ctx, cli) + if err != nil { + return err + } + if _, err := cli.Gallery.SetFeaturedScreenshot(ctx, connect.NewRequest(&v1.SetFeaturedScreenshotRequest{ + PluginId: pluginID, + ScreenshotId: args[0], + })); err != nil { + return fmt.Errorf("set featured screenshot: %w", err) + } + fmt.Printf("Set screenshot %s as featured\n", args[0]) + return nil + }, + } +} + +// imageContentType maps a file's extension to the content type the gallery +// accepts, rejecting anything outside the png/jpg/jpeg/webp allowlist the +// orchestrator enforces. Detecting from the extension (rather than sniffing +// bytes) keeps the CLI's rejection message aligned with the server's rule. +func imageContentType(path string) (string, error) { + switch strings.ToLower(filepath.Ext(path)) { + case ".png": + return "image/png", nil + case ".jpg", ".jpeg": + return "image/jpeg", nil + case ".webp": + return "image/webp", nil + default: + return "", fmt.Errorf("unsupported image type %q: gallery accepts png, jpg, jpeg, webp", filepath.Ext(path)) + } +} diff --git a/cmd/ninja/cmd/plugin_gallery_test.go b/cmd/ninja/cmd/plugin_gallery_test.go new file mode 100644 index 0000000..f731518 --- /dev/null +++ b/cmd/ninja/cmd/plugin_gallery_test.go @@ -0,0 +1,191 @@ +package cmd + +import ( + "os" + "path/filepath" + "testing" + + "github.com/spf13/cobra" + + core "git.dev.alexdunmow.com/block/core/plugin" + "git.dev.alexdunmow.com/block/cli/internal/creds" +) + +func TestImageContentType(t *testing.T) { + cases := []struct { + path string + want string + wantErr bool + }{ + {path: "preview.png", want: "image/png"}, + {path: "shot.jpg", want: "image/jpeg"}, + {path: "shot.jpeg", want: "image/jpeg"}, + {path: "shot.webp", want: "image/webp"}, + {path: "SHOT.PNG", want: "image/png"}, // case-insensitive + {path: "dir/nested/x.jpg", want: "image/jpeg"}, + {path: "shot.gif", wantErr: true}, + {path: "shot.svg", wantErr: true}, + {path: "noext", wantErr: true}, + } + for _, c := range cases { + got, err := imageContentType(c.path) + if c.wantErr { + if err == nil { + t.Errorf("imageContentType(%q) = %q, want error", c.path, got) + } + continue + } + if err != nil { + t.Errorf("imageContentType(%q) err: %v", c.path, err) + continue + } + if got != c.want { + t.Errorf("imageContentType(%q) = %q, want %q", c.path, got, c.want) + } + } +} + +// galleryTestCmd builds a command carrying the --scope/--name flags exactly as +// the gallery parent registers them, so resolveGalleryTarget can read them. +func galleryTestCmd(scope, name string) *cobra.Command { + c := &cobra.Command{Use: "gallery"} + c.Flags().String("scope", "", "") + c.Flags().String("name", "", "") + if scope != "" { + _ = c.Flags().Set("scope", scope) + } + if name != "" { + _ = c.Flags().Set("name", name) + } + return c +} + +func writeGalleryMod(t *testing.T, dir, scope, name string, private bool) { + t.Helper() + m := &core.ModFile{Plugin: core.ModPlugin{ + Name: name, + Scope: scope, + Version: "0.1.0", + Private: private, + }} + if err := writeMod(filepath.Join(dir, "plugin.mod"), m); err != nil { + t.Fatalf("writeMod: %v", err) + } +} + +func TestResolveGalleryTarget_FromMod(t *testing.T) { + dir := t.TempDir() + t.Chdir(dir) + writeGalleryMod(t, dir, "@themes", "gotham", false) + + got, err := resolveGalleryTarget(galleryTestCmd("", ""), creds.HostCreds{}) + if err != nil { + t.Fatalf("resolveGalleryTarget: %v", err) + } + // Leading @ must be trimmed (ListScreenshots does not trim server-side). + if got.scopeSlug != "themes" || got.name != "gotham" || got.private { + t.Errorf("got %+v, want scopeSlug=themes name=gotham private=false", got) + } +} + +func TestResolveGalleryTarget_FlagOverride(t *testing.T) { + dir := t.TempDir() + t.Chdir(dir) + writeGalleryMod(t, dir, "@themes", "gotham", false) + + got, err := resolveGalleryTarget(galleryTestCmd("acme", "widget"), creds.HostCreds{}) + if err != nil { + t.Fatalf("resolveGalleryTarget: %v", err) + } + if got.scopeSlug != "acme" || got.name != "widget" { + t.Errorf("got %+v, want scopeSlug=acme name=widget", got) + } +} + +func TestResolveGalleryTarget_NoModNeedsFlags(t *testing.T) { + dir := t.TempDir() + t.Chdir(dir) // no plugin.mod written + + // Flags supply both coordinates → resolves without a plugin.mod. + got, err := resolveGalleryTarget(galleryTestCmd("acme", "widget"), creds.HostCreds{}) + if err != nil { + t.Fatalf("resolveGalleryTarget with flags: %v", err) + } + if got.scopeSlug != "acme" || got.name != "widget" { + t.Errorf("got %+v, want scopeSlug=acme name=widget", got) + } + + // No plugin.mod and no flags → an actionable error. + if _, err := resolveGalleryTarget(galleryTestCmd("", ""), creds.HostCreds{}); err == nil { + t.Error("expected error with no plugin.mod and no flags") + } +} + +func TestResolveGalleryTarget_MissingScope(t *testing.T) { + dir := t.TempDir() + t.Chdir(dir) + + // Name but no scope (public) → error naming the missing scope. + _, err := resolveGalleryTarget(galleryTestCmd("", "widget"), creds.HostCreds{}) + if err == nil { + t.Fatal("expected error for name without scope") + } +} + +func TestResolveGalleryTarget_PrivateFromMod(t *testing.T) { + dir := t.TempDir() + t.Chdir(dir) + writeGalleryMod(t, dir, "", "widget", true) + + // Private plugin without an active account → error. + if _, err := resolveGalleryTarget(galleryTestCmd("", ""), creds.HostCreds{}); err == nil { + t.Error("expected error: private gallery needs an active account") + } + + // With an active account, the scope resolves to the @private namespace. + got, err := resolveGalleryTarget(galleryTestCmd("", ""), creds.HostCreds{ActiveAccountID: "acct-1"}) + if err != nil { + t.Fatalf("resolveGalleryTarget private: %v", err) + } + if !got.private || got.scopeSlug != core.PrivateScopeSlug || got.accountID != "acct-1" { + t.Errorf("got %+v, want private=true scopeSlug=%s accountID=acct-1", got, core.PrivateScopeSlug) + } +} + +func TestResolveGalleryTarget_PrivateScopeNameImpliesPrivate(t *testing.T) { + dir := t.TempDir() + t.Chdir(dir) + + // Naming the private scope directly flips private on (and still needs an account). + got, err := resolveGalleryTarget(galleryTestCmd("@"+core.PrivateScopeSlug, "widget"), creds.HostCreds{ActiveAccountID: "acct-1"}) + if err != nil { + t.Fatalf("resolveGalleryTarget: %v", err) + } + if !got.private || got.scopeSlug != core.PrivateScopeSlug { + t.Errorf("got %+v, want private=true scopeSlug=%s", got, core.PrivateScopeSlug) + } +} + +func TestResolveGalleryTarget_ReadFileHelper(t *testing.T) { + // Guard that a valid image on disk round-trips through the same os.ReadFile + // path `add` uses (content-type derived from the extension). + dir := t.TempDir() + path := filepath.Join(dir, "preview.png") + if err := os.WriteFile(path, []byte("\x89PNG\r\n\x1a\nfake"), 0o644); err != nil { + t.Fatal(err) + } + ct, err := imageContentType(path) + if err != nil { + t.Fatalf("imageContentType: %v", err) + } + if ct != "image/png" { + t.Errorf("content type = %q, want image/png", ct) + } + data, err := os.ReadFile(path) + if err != nil { + t.Fatalf("read: %v", err) + } + if len(data) == 0 || len(data) > maxScreenshotBytes { + t.Errorf("unexpected size %d", len(data)) + } +} diff --git a/internal/api/orchestrator/v1/orchestratorv1connect/plugin_registry.connect.go b/internal/api/orchestrator/v1/orchestratorv1connect/plugin_registry.connect.go index 4ce19a2..3a521be 100644 --- a/internal/api/orchestrator/v1/orchestratorv1connect/plugin_registry.connect.go +++ b/internal/api/orchestrator/v1/orchestratorv1connect/plugin_registry.connect.go @@ -27,6 +27,10 @@ const ( PluginRegistryServiceName = "orchestrator.v1.PluginRegistryService" // PluginModerationServiceName is the fully-qualified name of the PluginModerationService service. PluginModerationServiceName = "orchestrator.v1.PluginModerationService" + // PluginGalleryServiceName is the fully-qualified name of the PluginGalleryService service. + PluginGalleryServiceName = "orchestrator.v1.PluginGalleryService" + // PluginReviewServiceName is the fully-qualified name of the PluginReviewService service. + PluginReviewServiceName = "orchestrator.v1.PluginReviewService" // PluginPublishServiceName is the fully-qualified name of the PluginPublishService service. PluginPublishServiceName = "orchestrator.v1.PluginPublishService" // PluginAuthServiceName is the fully-qualified name of the PluginAuthService service. @@ -107,6 +111,51 @@ const ( // PluginModerationServiceRequestChangesProcedure is the fully-qualified name of the // PluginModerationService's RequestChanges RPC. PluginModerationServiceRequestChangesProcedure = "/orchestrator.v1.PluginModerationService/RequestChanges" + // PluginModerationServiceListFlaggedReviewsProcedure is the fully-qualified name of the + // PluginModerationService's ListFlaggedReviews RPC. + PluginModerationServiceListFlaggedReviewsProcedure = "/orchestrator.v1.PluginModerationService/ListFlaggedReviews" + // PluginModerationServiceSoftDeleteReviewProcedure is the fully-qualified name of the + // PluginModerationService's SoftDeleteReview RPC. + PluginModerationServiceSoftDeleteReviewProcedure = "/orchestrator.v1.PluginModerationService/SoftDeleteReview" + // PluginModerationServiceSoftDeleteReplyProcedure is the fully-qualified name of the + // PluginModerationService's SoftDeleteReply RPC. + PluginModerationServiceSoftDeleteReplyProcedure = "/orchestrator.v1.PluginModerationService/SoftDeleteReply" + // PluginGalleryServiceListScreenshotsProcedure is the fully-qualified name of the + // PluginGalleryService's ListScreenshots RPC. + PluginGalleryServiceListScreenshotsProcedure = "/orchestrator.v1.PluginGalleryService/ListScreenshots" + // PluginGalleryServiceUploadScreenshotProcedure is the fully-qualified name of the + // PluginGalleryService's UploadScreenshot RPC. + PluginGalleryServiceUploadScreenshotProcedure = "/orchestrator.v1.PluginGalleryService/UploadScreenshot" + // PluginGalleryServiceDeleteScreenshotProcedure is the fully-qualified name of the + // PluginGalleryService's DeleteScreenshot RPC. + PluginGalleryServiceDeleteScreenshotProcedure = "/orchestrator.v1.PluginGalleryService/DeleteScreenshot" + // PluginGalleryServiceReorderScreenshotsProcedure is the fully-qualified name of the + // PluginGalleryService's ReorderScreenshots RPC. + PluginGalleryServiceReorderScreenshotsProcedure = "/orchestrator.v1.PluginGalleryService/ReorderScreenshots" + // PluginGalleryServiceSetFeaturedScreenshotProcedure is the fully-qualified name of the + // PluginGalleryService's SetFeaturedScreenshot RPC. + PluginGalleryServiceSetFeaturedScreenshotProcedure = "/orchestrator.v1.PluginGalleryService/SetFeaturedScreenshot" + // PluginReviewServiceListReviewsProcedure is the fully-qualified name of the PluginReviewService's + // ListReviews RPC. + PluginReviewServiceListReviewsProcedure = "/orchestrator.v1.PluginReviewService/ListReviews" + // PluginReviewServiceGetMyReviewProcedure is the fully-qualified name of the PluginReviewService's + // GetMyReview RPC. + PluginReviewServiceGetMyReviewProcedure = "/orchestrator.v1.PluginReviewService/GetMyReview" + // PluginReviewServiceUpsertReviewProcedure is the fully-qualified name of the PluginReviewService's + // UpsertReview RPC. + PluginReviewServiceUpsertReviewProcedure = "/orchestrator.v1.PluginReviewService/UpsertReview" + // PluginReviewServiceDeleteReviewProcedure is the fully-qualified name of the PluginReviewService's + // DeleteReview RPC. + PluginReviewServiceDeleteReviewProcedure = "/orchestrator.v1.PluginReviewService/DeleteReview" + // PluginReviewServiceReplyToReviewProcedure is the fully-qualified name of the + // PluginReviewService's ReplyToReview RPC. + PluginReviewServiceReplyToReviewProcedure = "/orchestrator.v1.PluginReviewService/ReplyToReview" + // PluginReviewServiceDeleteReplyProcedure is the fully-qualified name of the PluginReviewService's + // DeleteReply RPC. + PluginReviewServiceDeleteReplyProcedure = "/orchestrator.v1.PluginReviewService/DeleteReply" + // PluginReviewServiceFlagReviewProcedure is the fully-qualified name of the PluginReviewService's + // FlagReview RPC. + PluginReviewServiceFlagReviewProcedure = "/orchestrator.v1.PluginReviewService/FlagReview" // PluginPublishServicePublishVersionProcedure is the fully-qualified name of the // PluginPublishService's PublishVersion RPC. PluginPublishServicePublishVersionProcedure = "/orchestrator.v1.PluginPublishService/PublishVersion" @@ -714,6 +763,11 @@ type PluginModerationServiceClient interface { ApproveSubmission(context.Context, *connect.Request[v1.ApproveSubmissionRequest]) (*connect.Response[v1.ApproveSubmissionResponse], error) RejectSubmission(context.Context, *connect.Request[v1.RejectSubmissionRequest]) (*connect.Response[v1.RejectSubmissionResponse], error) RequestChanges(context.Context, *connect.Request[v1.RequestChangesRequest]) (*connect.Response[v1.RequestChangesResponse], error) + // Star-review moderation (ADR 0021). Unrelated to the submission queue + // above: these act on user reviews (PluginReviewService), not plugins. + ListFlaggedReviews(context.Context, *connect.Request[v1.ListFlaggedReviewsRequest]) (*connect.Response[v1.ListFlaggedReviewsResponse], error) + SoftDeleteReview(context.Context, *connect.Request[v1.SoftDeleteReviewRequest]) (*connect.Response[v1.SoftDeleteReviewResponse], error) + SoftDeleteReply(context.Context, *connect.Request[v1.SoftDeleteReplyRequest]) (*connect.Response[v1.SoftDeleteReplyResponse], error) } // NewPluginModerationServiceClient constructs a client for the @@ -751,6 +805,24 @@ func NewPluginModerationServiceClient(httpClient connect.HTTPClient, baseURL str connect.WithSchema(pluginModerationServiceMethods.ByName("RequestChanges")), connect.WithClientOptions(opts...), ), + listFlaggedReviews: connect.NewClient[v1.ListFlaggedReviewsRequest, v1.ListFlaggedReviewsResponse]( + httpClient, + baseURL+PluginModerationServiceListFlaggedReviewsProcedure, + connect.WithSchema(pluginModerationServiceMethods.ByName("ListFlaggedReviews")), + connect.WithClientOptions(opts...), + ), + softDeleteReview: connect.NewClient[v1.SoftDeleteReviewRequest, v1.SoftDeleteReviewResponse]( + httpClient, + baseURL+PluginModerationServiceSoftDeleteReviewProcedure, + connect.WithSchema(pluginModerationServiceMethods.ByName("SoftDeleteReview")), + connect.WithClientOptions(opts...), + ), + softDeleteReply: connect.NewClient[v1.SoftDeleteReplyRequest, v1.SoftDeleteReplyResponse]( + httpClient, + baseURL+PluginModerationServiceSoftDeleteReplyProcedure, + connect.WithSchema(pluginModerationServiceMethods.ByName("SoftDeleteReply")), + connect.WithClientOptions(opts...), + ), } } @@ -760,6 +832,9 @@ type pluginModerationServiceClient struct { approveSubmission *connect.Client[v1.ApproveSubmissionRequest, v1.ApproveSubmissionResponse] rejectSubmission *connect.Client[v1.RejectSubmissionRequest, v1.RejectSubmissionResponse] requestChanges *connect.Client[v1.RequestChangesRequest, v1.RequestChangesResponse] + listFlaggedReviews *connect.Client[v1.ListFlaggedReviewsRequest, v1.ListFlaggedReviewsResponse] + softDeleteReview *connect.Client[v1.SoftDeleteReviewRequest, v1.SoftDeleteReviewResponse] + softDeleteReply *connect.Client[v1.SoftDeleteReplyRequest, v1.SoftDeleteReplyResponse] } // ListPendingReviews calls orchestrator.v1.PluginModerationService.ListPendingReviews. @@ -782,6 +857,21 @@ func (c *pluginModerationServiceClient) RequestChanges(ctx context.Context, req return c.requestChanges.CallUnary(ctx, req) } +// ListFlaggedReviews calls orchestrator.v1.PluginModerationService.ListFlaggedReviews. +func (c *pluginModerationServiceClient) ListFlaggedReviews(ctx context.Context, req *connect.Request[v1.ListFlaggedReviewsRequest]) (*connect.Response[v1.ListFlaggedReviewsResponse], error) { + return c.listFlaggedReviews.CallUnary(ctx, req) +} + +// SoftDeleteReview calls orchestrator.v1.PluginModerationService.SoftDeleteReview. +func (c *pluginModerationServiceClient) SoftDeleteReview(ctx context.Context, req *connect.Request[v1.SoftDeleteReviewRequest]) (*connect.Response[v1.SoftDeleteReviewResponse], error) { + return c.softDeleteReview.CallUnary(ctx, req) +} + +// SoftDeleteReply calls orchestrator.v1.PluginModerationService.SoftDeleteReply. +func (c *pluginModerationServiceClient) SoftDeleteReply(ctx context.Context, req *connect.Request[v1.SoftDeleteReplyRequest]) (*connect.Response[v1.SoftDeleteReplyResponse], error) { + return c.softDeleteReply.CallUnary(ctx, req) +} + // PluginModerationServiceHandler is an implementation of the // orchestrator.v1.PluginModerationService service. type PluginModerationServiceHandler interface { @@ -789,6 +879,11 @@ type PluginModerationServiceHandler interface { ApproveSubmission(context.Context, *connect.Request[v1.ApproveSubmissionRequest]) (*connect.Response[v1.ApproveSubmissionResponse], error) RejectSubmission(context.Context, *connect.Request[v1.RejectSubmissionRequest]) (*connect.Response[v1.RejectSubmissionResponse], error) RequestChanges(context.Context, *connect.Request[v1.RequestChangesRequest]) (*connect.Response[v1.RequestChangesResponse], error) + // Star-review moderation (ADR 0021). Unrelated to the submission queue + // above: these act on user reviews (PluginReviewService), not plugins. + ListFlaggedReviews(context.Context, *connect.Request[v1.ListFlaggedReviewsRequest]) (*connect.Response[v1.ListFlaggedReviewsResponse], error) + SoftDeleteReview(context.Context, *connect.Request[v1.SoftDeleteReviewRequest]) (*connect.Response[v1.SoftDeleteReviewResponse], error) + SoftDeleteReply(context.Context, *connect.Request[v1.SoftDeleteReplyRequest]) (*connect.Response[v1.SoftDeleteReplyResponse], error) } // NewPluginModerationServiceHandler builds an HTTP handler from the service implementation. It @@ -822,6 +917,24 @@ func NewPluginModerationServiceHandler(svc PluginModerationServiceHandler, opts connect.WithSchema(pluginModerationServiceMethods.ByName("RequestChanges")), connect.WithHandlerOptions(opts...), ) + pluginModerationServiceListFlaggedReviewsHandler := connect.NewUnaryHandler( + PluginModerationServiceListFlaggedReviewsProcedure, + svc.ListFlaggedReviews, + connect.WithSchema(pluginModerationServiceMethods.ByName("ListFlaggedReviews")), + connect.WithHandlerOptions(opts...), + ) + pluginModerationServiceSoftDeleteReviewHandler := connect.NewUnaryHandler( + PluginModerationServiceSoftDeleteReviewProcedure, + svc.SoftDeleteReview, + connect.WithSchema(pluginModerationServiceMethods.ByName("SoftDeleteReview")), + connect.WithHandlerOptions(opts...), + ) + pluginModerationServiceSoftDeleteReplyHandler := connect.NewUnaryHandler( + PluginModerationServiceSoftDeleteReplyProcedure, + svc.SoftDeleteReply, + connect.WithSchema(pluginModerationServiceMethods.ByName("SoftDeleteReply")), + connect.WithHandlerOptions(opts...), + ) return "/orchestrator.v1.PluginModerationService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case PluginModerationServiceListPendingReviewsProcedure: @@ -832,6 +945,12 @@ func NewPluginModerationServiceHandler(svc PluginModerationServiceHandler, opts pluginModerationServiceRejectSubmissionHandler.ServeHTTP(w, r) case PluginModerationServiceRequestChangesProcedure: pluginModerationServiceRequestChangesHandler.ServeHTTP(w, r) + case PluginModerationServiceListFlaggedReviewsProcedure: + pluginModerationServiceListFlaggedReviewsHandler.ServeHTTP(w, r) + case PluginModerationServiceSoftDeleteReviewProcedure: + pluginModerationServiceSoftDeleteReviewHandler.ServeHTTP(w, r) + case PluginModerationServiceSoftDeleteReplyProcedure: + pluginModerationServiceSoftDeleteReplyHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -857,6 +976,420 @@ func (UnimplementedPluginModerationServiceHandler) RequestChanges(context.Contex return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginModerationService.RequestChanges is not implemented")) } +func (UnimplementedPluginModerationServiceHandler) ListFlaggedReviews(context.Context, *connect.Request[v1.ListFlaggedReviewsRequest]) (*connect.Response[v1.ListFlaggedReviewsResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginModerationService.ListFlaggedReviews is not implemented")) +} + +func (UnimplementedPluginModerationServiceHandler) SoftDeleteReview(context.Context, *connect.Request[v1.SoftDeleteReviewRequest]) (*connect.Response[v1.SoftDeleteReviewResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginModerationService.SoftDeleteReview is not implemented")) +} + +func (UnimplementedPluginModerationServiceHandler) SoftDeleteReply(context.Context, *connect.Request[v1.SoftDeleteReplyRequest]) (*connect.Response[v1.SoftDeleteReplyResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginModerationService.SoftDeleteReply is not implemented")) +} + +// PluginGalleryServiceClient is a client for the orchestrator.v1.PluginGalleryService service. +type PluginGalleryServiceClient interface { + ListScreenshots(context.Context, *connect.Request[v1.ListScreenshotsRequest]) (*connect.Response[v1.ListScreenshotsResponse], error) + UploadScreenshot(context.Context, *connect.Request[v1.UploadScreenshotRequest]) (*connect.Response[v1.UploadScreenshotResponse], error) + DeleteScreenshot(context.Context, *connect.Request[v1.DeleteScreenshotRequest]) (*connect.Response[v1.DeleteScreenshotResponse], error) + ReorderScreenshots(context.Context, *connect.Request[v1.ReorderScreenshotsRequest]) (*connect.Response[v1.ReorderScreenshotsResponse], error) + SetFeaturedScreenshot(context.Context, *connect.Request[v1.SetFeaturedScreenshotRequest]) (*connect.Response[v1.SetFeaturedScreenshotResponse], error) +} + +// NewPluginGalleryServiceClient constructs a client for the orchestrator.v1.PluginGalleryService +// service. By default, it uses the Connect protocol with the binary Protobuf Codec, asks for +// gzipped responses, and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply +// the connect.WithGRPC() or connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewPluginGalleryServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) PluginGalleryServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + pluginGalleryServiceMethods := v1.File_orchestrator_v1_plugin_registry_proto.Services().ByName("PluginGalleryService").Methods() + return &pluginGalleryServiceClient{ + listScreenshots: connect.NewClient[v1.ListScreenshotsRequest, v1.ListScreenshotsResponse]( + httpClient, + baseURL+PluginGalleryServiceListScreenshotsProcedure, + connect.WithSchema(pluginGalleryServiceMethods.ByName("ListScreenshots")), + connect.WithClientOptions(opts...), + ), + uploadScreenshot: connect.NewClient[v1.UploadScreenshotRequest, v1.UploadScreenshotResponse]( + httpClient, + baseURL+PluginGalleryServiceUploadScreenshotProcedure, + connect.WithSchema(pluginGalleryServiceMethods.ByName("UploadScreenshot")), + connect.WithClientOptions(opts...), + ), + deleteScreenshot: connect.NewClient[v1.DeleteScreenshotRequest, v1.DeleteScreenshotResponse]( + httpClient, + baseURL+PluginGalleryServiceDeleteScreenshotProcedure, + connect.WithSchema(pluginGalleryServiceMethods.ByName("DeleteScreenshot")), + connect.WithClientOptions(opts...), + ), + reorderScreenshots: connect.NewClient[v1.ReorderScreenshotsRequest, v1.ReorderScreenshotsResponse]( + httpClient, + baseURL+PluginGalleryServiceReorderScreenshotsProcedure, + connect.WithSchema(pluginGalleryServiceMethods.ByName("ReorderScreenshots")), + connect.WithClientOptions(opts...), + ), + setFeaturedScreenshot: connect.NewClient[v1.SetFeaturedScreenshotRequest, v1.SetFeaturedScreenshotResponse]( + httpClient, + baseURL+PluginGalleryServiceSetFeaturedScreenshotProcedure, + connect.WithSchema(pluginGalleryServiceMethods.ByName("SetFeaturedScreenshot")), + connect.WithClientOptions(opts...), + ), + } +} + +// pluginGalleryServiceClient implements PluginGalleryServiceClient. +type pluginGalleryServiceClient struct { + listScreenshots *connect.Client[v1.ListScreenshotsRequest, v1.ListScreenshotsResponse] + uploadScreenshot *connect.Client[v1.UploadScreenshotRequest, v1.UploadScreenshotResponse] + deleteScreenshot *connect.Client[v1.DeleteScreenshotRequest, v1.DeleteScreenshotResponse] + reorderScreenshots *connect.Client[v1.ReorderScreenshotsRequest, v1.ReorderScreenshotsResponse] + setFeaturedScreenshot *connect.Client[v1.SetFeaturedScreenshotRequest, v1.SetFeaturedScreenshotResponse] +} + +// ListScreenshots calls orchestrator.v1.PluginGalleryService.ListScreenshots. +func (c *pluginGalleryServiceClient) ListScreenshots(ctx context.Context, req *connect.Request[v1.ListScreenshotsRequest]) (*connect.Response[v1.ListScreenshotsResponse], error) { + return c.listScreenshots.CallUnary(ctx, req) +} + +// UploadScreenshot calls orchestrator.v1.PluginGalleryService.UploadScreenshot. +func (c *pluginGalleryServiceClient) UploadScreenshot(ctx context.Context, req *connect.Request[v1.UploadScreenshotRequest]) (*connect.Response[v1.UploadScreenshotResponse], error) { + return c.uploadScreenshot.CallUnary(ctx, req) +} + +// DeleteScreenshot calls orchestrator.v1.PluginGalleryService.DeleteScreenshot. +func (c *pluginGalleryServiceClient) DeleteScreenshot(ctx context.Context, req *connect.Request[v1.DeleteScreenshotRequest]) (*connect.Response[v1.DeleteScreenshotResponse], error) { + return c.deleteScreenshot.CallUnary(ctx, req) +} + +// ReorderScreenshots calls orchestrator.v1.PluginGalleryService.ReorderScreenshots. +func (c *pluginGalleryServiceClient) ReorderScreenshots(ctx context.Context, req *connect.Request[v1.ReorderScreenshotsRequest]) (*connect.Response[v1.ReorderScreenshotsResponse], error) { + return c.reorderScreenshots.CallUnary(ctx, req) +} + +// SetFeaturedScreenshot calls orchestrator.v1.PluginGalleryService.SetFeaturedScreenshot. +func (c *pluginGalleryServiceClient) SetFeaturedScreenshot(ctx context.Context, req *connect.Request[v1.SetFeaturedScreenshotRequest]) (*connect.Response[v1.SetFeaturedScreenshotResponse], error) { + return c.setFeaturedScreenshot.CallUnary(ctx, req) +} + +// PluginGalleryServiceHandler is an implementation of the orchestrator.v1.PluginGalleryService +// service. +type PluginGalleryServiceHandler interface { + ListScreenshots(context.Context, *connect.Request[v1.ListScreenshotsRequest]) (*connect.Response[v1.ListScreenshotsResponse], error) + UploadScreenshot(context.Context, *connect.Request[v1.UploadScreenshotRequest]) (*connect.Response[v1.UploadScreenshotResponse], error) + DeleteScreenshot(context.Context, *connect.Request[v1.DeleteScreenshotRequest]) (*connect.Response[v1.DeleteScreenshotResponse], error) + ReorderScreenshots(context.Context, *connect.Request[v1.ReorderScreenshotsRequest]) (*connect.Response[v1.ReorderScreenshotsResponse], error) + SetFeaturedScreenshot(context.Context, *connect.Request[v1.SetFeaturedScreenshotRequest]) (*connect.Response[v1.SetFeaturedScreenshotResponse], error) +} + +// NewPluginGalleryServiceHandler builds an HTTP handler from the service implementation. It returns +// the path on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewPluginGalleryServiceHandler(svc PluginGalleryServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + pluginGalleryServiceMethods := v1.File_orchestrator_v1_plugin_registry_proto.Services().ByName("PluginGalleryService").Methods() + pluginGalleryServiceListScreenshotsHandler := connect.NewUnaryHandler( + PluginGalleryServiceListScreenshotsProcedure, + svc.ListScreenshots, + connect.WithSchema(pluginGalleryServiceMethods.ByName("ListScreenshots")), + connect.WithHandlerOptions(opts...), + ) + pluginGalleryServiceUploadScreenshotHandler := connect.NewUnaryHandler( + PluginGalleryServiceUploadScreenshotProcedure, + svc.UploadScreenshot, + connect.WithSchema(pluginGalleryServiceMethods.ByName("UploadScreenshot")), + connect.WithHandlerOptions(opts...), + ) + pluginGalleryServiceDeleteScreenshotHandler := connect.NewUnaryHandler( + PluginGalleryServiceDeleteScreenshotProcedure, + svc.DeleteScreenshot, + connect.WithSchema(pluginGalleryServiceMethods.ByName("DeleteScreenshot")), + connect.WithHandlerOptions(opts...), + ) + pluginGalleryServiceReorderScreenshotsHandler := connect.NewUnaryHandler( + PluginGalleryServiceReorderScreenshotsProcedure, + svc.ReorderScreenshots, + connect.WithSchema(pluginGalleryServiceMethods.ByName("ReorderScreenshots")), + connect.WithHandlerOptions(opts...), + ) + pluginGalleryServiceSetFeaturedScreenshotHandler := connect.NewUnaryHandler( + PluginGalleryServiceSetFeaturedScreenshotProcedure, + svc.SetFeaturedScreenshot, + connect.WithSchema(pluginGalleryServiceMethods.ByName("SetFeaturedScreenshot")), + connect.WithHandlerOptions(opts...), + ) + return "/orchestrator.v1.PluginGalleryService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case PluginGalleryServiceListScreenshotsProcedure: + pluginGalleryServiceListScreenshotsHandler.ServeHTTP(w, r) + case PluginGalleryServiceUploadScreenshotProcedure: + pluginGalleryServiceUploadScreenshotHandler.ServeHTTP(w, r) + case PluginGalleryServiceDeleteScreenshotProcedure: + pluginGalleryServiceDeleteScreenshotHandler.ServeHTTP(w, r) + case PluginGalleryServiceReorderScreenshotsProcedure: + pluginGalleryServiceReorderScreenshotsHandler.ServeHTTP(w, r) + case PluginGalleryServiceSetFeaturedScreenshotProcedure: + pluginGalleryServiceSetFeaturedScreenshotHandler.ServeHTTP(w, r) + default: + http.NotFound(w, r) + } + }) +} + +// UnimplementedPluginGalleryServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedPluginGalleryServiceHandler struct{} + +func (UnimplementedPluginGalleryServiceHandler) ListScreenshots(context.Context, *connect.Request[v1.ListScreenshotsRequest]) (*connect.Response[v1.ListScreenshotsResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginGalleryService.ListScreenshots is not implemented")) +} + +func (UnimplementedPluginGalleryServiceHandler) UploadScreenshot(context.Context, *connect.Request[v1.UploadScreenshotRequest]) (*connect.Response[v1.UploadScreenshotResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginGalleryService.UploadScreenshot is not implemented")) +} + +func (UnimplementedPluginGalleryServiceHandler) DeleteScreenshot(context.Context, *connect.Request[v1.DeleteScreenshotRequest]) (*connect.Response[v1.DeleteScreenshotResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginGalleryService.DeleteScreenshot is not implemented")) +} + +func (UnimplementedPluginGalleryServiceHandler) ReorderScreenshots(context.Context, *connect.Request[v1.ReorderScreenshotsRequest]) (*connect.Response[v1.ReorderScreenshotsResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginGalleryService.ReorderScreenshots is not implemented")) +} + +func (UnimplementedPluginGalleryServiceHandler) SetFeaturedScreenshot(context.Context, *connect.Request[v1.SetFeaturedScreenshotRequest]) (*connect.Response[v1.SetFeaturedScreenshotResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginGalleryService.SetFeaturedScreenshot is not implemented")) +} + +// PluginReviewServiceClient is a client for the orchestrator.v1.PluginReviewService service. +type PluginReviewServiceClient interface { + ListReviews(context.Context, *connect.Request[v1.ListReviewsRequest]) (*connect.Response[v1.ListReviewsResponse], error) + GetMyReview(context.Context, *connect.Request[v1.GetMyReviewRequest]) (*connect.Response[v1.GetMyReviewResponse], error) + UpsertReview(context.Context, *connect.Request[v1.UpsertReviewRequest]) (*connect.Response[v1.UpsertReviewResponse], error) + DeleteReview(context.Context, *connect.Request[v1.DeleteReviewRequest]) (*connect.Response[v1.DeleteReviewResponse], error) + ReplyToReview(context.Context, *connect.Request[v1.ReplyToReviewRequest]) (*connect.Response[v1.ReplyToReviewResponse], error) + DeleteReply(context.Context, *connect.Request[v1.DeleteReplyRequest]) (*connect.Response[v1.DeleteReplyResponse], error) + FlagReview(context.Context, *connect.Request[v1.FlagReviewRequest]) (*connect.Response[v1.FlagReviewResponse], error) +} + +// NewPluginReviewServiceClient constructs a client for the orchestrator.v1.PluginReviewService +// service. By default, it uses the Connect protocol with the binary Protobuf Codec, asks for +// gzipped responses, and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply +// the connect.WithGRPC() or connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewPluginReviewServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) PluginReviewServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + pluginReviewServiceMethods := v1.File_orchestrator_v1_plugin_registry_proto.Services().ByName("PluginReviewService").Methods() + return &pluginReviewServiceClient{ + listReviews: connect.NewClient[v1.ListReviewsRequest, v1.ListReviewsResponse]( + httpClient, + baseURL+PluginReviewServiceListReviewsProcedure, + connect.WithSchema(pluginReviewServiceMethods.ByName("ListReviews")), + connect.WithClientOptions(opts...), + ), + getMyReview: connect.NewClient[v1.GetMyReviewRequest, v1.GetMyReviewResponse]( + httpClient, + baseURL+PluginReviewServiceGetMyReviewProcedure, + connect.WithSchema(pluginReviewServiceMethods.ByName("GetMyReview")), + connect.WithClientOptions(opts...), + ), + upsertReview: connect.NewClient[v1.UpsertReviewRequest, v1.UpsertReviewResponse]( + httpClient, + baseURL+PluginReviewServiceUpsertReviewProcedure, + connect.WithSchema(pluginReviewServiceMethods.ByName("UpsertReview")), + connect.WithClientOptions(opts...), + ), + deleteReview: connect.NewClient[v1.DeleteReviewRequest, v1.DeleteReviewResponse]( + httpClient, + baseURL+PluginReviewServiceDeleteReviewProcedure, + connect.WithSchema(pluginReviewServiceMethods.ByName("DeleteReview")), + connect.WithClientOptions(opts...), + ), + replyToReview: connect.NewClient[v1.ReplyToReviewRequest, v1.ReplyToReviewResponse]( + httpClient, + baseURL+PluginReviewServiceReplyToReviewProcedure, + connect.WithSchema(pluginReviewServiceMethods.ByName("ReplyToReview")), + connect.WithClientOptions(opts...), + ), + deleteReply: connect.NewClient[v1.DeleteReplyRequest, v1.DeleteReplyResponse]( + httpClient, + baseURL+PluginReviewServiceDeleteReplyProcedure, + connect.WithSchema(pluginReviewServiceMethods.ByName("DeleteReply")), + connect.WithClientOptions(opts...), + ), + flagReview: connect.NewClient[v1.FlagReviewRequest, v1.FlagReviewResponse]( + httpClient, + baseURL+PluginReviewServiceFlagReviewProcedure, + connect.WithSchema(pluginReviewServiceMethods.ByName("FlagReview")), + connect.WithClientOptions(opts...), + ), + } +} + +// pluginReviewServiceClient implements PluginReviewServiceClient. +type pluginReviewServiceClient struct { + listReviews *connect.Client[v1.ListReviewsRequest, v1.ListReviewsResponse] + getMyReview *connect.Client[v1.GetMyReviewRequest, v1.GetMyReviewResponse] + upsertReview *connect.Client[v1.UpsertReviewRequest, v1.UpsertReviewResponse] + deleteReview *connect.Client[v1.DeleteReviewRequest, v1.DeleteReviewResponse] + replyToReview *connect.Client[v1.ReplyToReviewRequest, v1.ReplyToReviewResponse] + deleteReply *connect.Client[v1.DeleteReplyRequest, v1.DeleteReplyResponse] + flagReview *connect.Client[v1.FlagReviewRequest, v1.FlagReviewResponse] +} + +// ListReviews calls orchestrator.v1.PluginReviewService.ListReviews. +func (c *pluginReviewServiceClient) ListReviews(ctx context.Context, req *connect.Request[v1.ListReviewsRequest]) (*connect.Response[v1.ListReviewsResponse], error) { + return c.listReviews.CallUnary(ctx, req) +} + +// GetMyReview calls orchestrator.v1.PluginReviewService.GetMyReview. +func (c *pluginReviewServiceClient) GetMyReview(ctx context.Context, req *connect.Request[v1.GetMyReviewRequest]) (*connect.Response[v1.GetMyReviewResponse], error) { + return c.getMyReview.CallUnary(ctx, req) +} + +// UpsertReview calls orchestrator.v1.PluginReviewService.UpsertReview. +func (c *pluginReviewServiceClient) UpsertReview(ctx context.Context, req *connect.Request[v1.UpsertReviewRequest]) (*connect.Response[v1.UpsertReviewResponse], error) { + return c.upsertReview.CallUnary(ctx, req) +} + +// DeleteReview calls orchestrator.v1.PluginReviewService.DeleteReview. +func (c *pluginReviewServiceClient) DeleteReview(ctx context.Context, req *connect.Request[v1.DeleteReviewRequest]) (*connect.Response[v1.DeleteReviewResponse], error) { + return c.deleteReview.CallUnary(ctx, req) +} + +// ReplyToReview calls orchestrator.v1.PluginReviewService.ReplyToReview. +func (c *pluginReviewServiceClient) ReplyToReview(ctx context.Context, req *connect.Request[v1.ReplyToReviewRequest]) (*connect.Response[v1.ReplyToReviewResponse], error) { + return c.replyToReview.CallUnary(ctx, req) +} + +// DeleteReply calls orchestrator.v1.PluginReviewService.DeleteReply. +func (c *pluginReviewServiceClient) DeleteReply(ctx context.Context, req *connect.Request[v1.DeleteReplyRequest]) (*connect.Response[v1.DeleteReplyResponse], error) { + return c.deleteReply.CallUnary(ctx, req) +} + +// FlagReview calls orchestrator.v1.PluginReviewService.FlagReview. +func (c *pluginReviewServiceClient) FlagReview(ctx context.Context, req *connect.Request[v1.FlagReviewRequest]) (*connect.Response[v1.FlagReviewResponse], error) { + return c.flagReview.CallUnary(ctx, req) +} + +// PluginReviewServiceHandler is an implementation of the orchestrator.v1.PluginReviewService +// service. +type PluginReviewServiceHandler interface { + ListReviews(context.Context, *connect.Request[v1.ListReviewsRequest]) (*connect.Response[v1.ListReviewsResponse], error) + GetMyReview(context.Context, *connect.Request[v1.GetMyReviewRequest]) (*connect.Response[v1.GetMyReviewResponse], error) + UpsertReview(context.Context, *connect.Request[v1.UpsertReviewRequest]) (*connect.Response[v1.UpsertReviewResponse], error) + DeleteReview(context.Context, *connect.Request[v1.DeleteReviewRequest]) (*connect.Response[v1.DeleteReviewResponse], error) + ReplyToReview(context.Context, *connect.Request[v1.ReplyToReviewRequest]) (*connect.Response[v1.ReplyToReviewResponse], error) + DeleteReply(context.Context, *connect.Request[v1.DeleteReplyRequest]) (*connect.Response[v1.DeleteReplyResponse], error) + FlagReview(context.Context, *connect.Request[v1.FlagReviewRequest]) (*connect.Response[v1.FlagReviewResponse], error) +} + +// NewPluginReviewServiceHandler builds an HTTP handler from the service implementation. It returns +// the path on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewPluginReviewServiceHandler(svc PluginReviewServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + pluginReviewServiceMethods := v1.File_orchestrator_v1_plugin_registry_proto.Services().ByName("PluginReviewService").Methods() + pluginReviewServiceListReviewsHandler := connect.NewUnaryHandler( + PluginReviewServiceListReviewsProcedure, + svc.ListReviews, + connect.WithSchema(pluginReviewServiceMethods.ByName("ListReviews")), + connect.WithHandlerOptions(opts...), + ) + pluginReviewServiceGetMyReviewHandler := connect.NewUnaryHandler( + PluginReviewServiceGetMyReviewProcedure, + svc.GetMyReview, + connect.WithSchema(pluginReviewServiceMethods.ByName("GetMyReview")), + connect.WithHandlerOptions(opts...), + ) + pluginReviewServiceUpsertReviewHandler := connect.NewUnaryHandler( + PluginReviewServiceUpsertReviewProcedure, + svc.UpsertReview, + connect.WithSchema(pluginReviewServiceMethods.ByName("UpsertReview")), + connect.WithHandlerOptions(opts...), + ) + pluginReviewServiceDeleteReviewHandler := connect.NewUnaryHandler( + PluginReviewServiceDeleteReviewProcedure, + svc.DeleteReview, + connect.WithSchema(pluginReviewServiceMethods.ByName("DeleteReview")), + connect.WithHandlerOptions(opts...), + ) + pluginReviewServiceReplyToReviewHandler := connect.NewUnaryHandler( + PluginReviewServiceReplyToReviewProcedure, + svc.ReplyToReview, + connect.WithSchema(pluginReviewServiceMethods.ByName("ReplyToReview")), + connect.WithHandlerOptions(opts...), + ) + pluginReviewServiceDeleteReplyHandler := connect.NewUnaryHandler( + PluginReviewServiceDeleteReplyProcedure, + svc.DeleteReply, + connect.WithSchema(pluginReviewServiceMethods.ByName("DeleteReply")), + connect.WithHandlerOptions(opts...), + ) + pluginReviewServiceFlagReviewHandler := connect.NewUnaryHandler( + PluginReviewServiceFlagReviewProcedure, + svc.FlagReview, + connect.WithSchema(pluginReviewServiceMethods.ByName("FlagReview")), + connect.WithHandlerOptions(opts...), + ) + return "/orchestrator.v1.PluginReviewService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case PluginReviewServiceListReviewsProcedure: + pluginReviewServiceListReviewsHandler.ServeHTTP(w, r) + case PluginReviewServiceGetMyReviewProcedure: + pluginReviewServiceGetMyReviewHandler.ServeHTTP(w, r) + case PluginReviewServiceUpsertReviewProcedure: + pluginReviewServiceUpsertReviewHandler.ServeHTTP(w, r) + case PluginReviewServiceDeleteReviewProcedure: + pluginReviewServiceDeleteReviewHandler.ServeHTTP(w, r) + case PluginReviewServiceReplyToReviewProcedure: + pluginReviewServiceReplyToReviewHandler.ServeHTTP(w, r) + case PluginReviewServiceDeleteReplyProcedure: + pluginReviewServiceDeleteReplyHandler.ServeHTTP(w, r) + case PluginReviewServiceFlagReviewProcedure: + pluginReviewServiceFlagReviewHandler.ServeHTTP(w, r) + default: + http.NotFound(w, r) + } + }) +} + +// UnimplementedPluginReviewServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedPluginReviewServiceHandler struct{} + +func (UnimplementedPluginReviewServiceHandler) ListReviews(context.Context, *connect.Request[v1.ListReviewsRequest]) (*connect.Response[v1.ListReviewsResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginReviewService.ListReviews is not implemented")) +} + +func (UnimplementedPluginReviewServiceHandler) GetMyReview(context.Context, *connect.Request[v1.GetMyReviewRequest]) (*connect.Response[v1.GetMyReviewResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginReviewService.GetMyReview is not implemented")) +} + +func (UnimplementedPluginReviewServiceHandler) UpsertReview(context.Context, *connect.Request[v1.UpsertReviewRequest]) (*connect.Response[v1.UpsertReviewResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginReviewService.UpsertReview is not implemented")) +} + +func (UnimplementedPluginReviewServiceHandler) DeleteReview(context.Context, *connect.Request[v1.DeleteReviewRequest]) (*connect.Response[v1.DeleteReviewResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginReviewService.DeleteReview is not implemented")) +} + +func (UnimplementedPluginReviewServiceHandler) ReplyToReview(context.Context, *connect.Request[v1.ReplyToReviewRequest]) (*connect.Response[v1.ReplyToReviewResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginReviewService.ReplyToReview is not implemented")) +} + +func (UnimplementedPluginReviewServiceHandler) DeleteReply(context.Context, *connect.Request[v1.DeleteReplyRequest]) (*connect.Response[v1.DeleteReplyResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginReviewService.DeleteReply is not implemented")) +} + +func (UnimplementedPluginReviewServiceHandler) FlagReview(context.Context, *connect.Request[v1.FlagReviewRequest]) (*connect.Response[v1.FlagReviewResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("orchestrator.v1.PluginReviewService.FlagReview is not implemented")) +} + // PluginPublishServiceClient is a client for the orchestrator.v1.PluginPublishService service. type PluginPublishServiceClient interface { PublishVersion(context.Context, *connect.Request[v1.PublishVersionRequest]) (*connect.Response[v1.PublishVersionResponse], error) diff --git a/internal/api/orchestrator/v1/plugin_registry.pb.go b/internal/api/orchestrator/v1/plugin_registry.pb.go index ad8c83b..3f60b33 100644 --- a/internal/api/orchestrator/v1/plugin_registry.pb.go +++ b/internal/api/orchestrator/v1/plugin_registry.pb.go @@ -175,12 +175,20 @@ type Plugin struct { LatestVersion string `protobuf:"bytes,13,opt,name=latest_version,json=latestVersion,proto3" json:"latest_version,omitempty"` Tags []string `protobuf:"bytes,14,rep,name=tags,proto3" json:"tags,omitempty"` // preview_image_url is the PUBLIC, unsigned, long-lived image URL for this - // plugin's latest non-yanked version preview (a PNG screenshot), usable - // directly as an . Empty when no preview has been published yet — - // the wizard card then degrades to display_name + tags (spec §5.2). + // plugin's card image, usable directly as an : the gallery's + // Featured screenshot when one exists, else the latest non-yanked version's + // preview.png. Empty when neither exists — the wizard card then degrades to + // display_name + tags (spec §5.2). PreviewImageUrl string `protobuf:"bytes,15,opt,name=preview_image_url,json=previewImageUrl,proto3" json:"preview_image_url,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // rating_avg/rating_count are the denormalised star-review aggregate over + // non-deleted reviews (0/0 when unreviewed). + RatingAvg float32 `protobuf:"fixed32,16,opt,name=rating_avg,json=ratingAvg,proto3" json:"rating_avg,omitempty"` + RatingCount int32 `protobuf:"varint,17,opt,name=rating_count,json=ratingCount,proto3" json:"rating_count,omitempty"` + // install_count is the number of distinct CMS instances currently recorded + // as installers of this plugin (registry_install_events grain). + InstallCount int32 `protobuf:"varint,18,opt,name=install_count,json=installCount,proto3" json:"install_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Plugin) Reset() { @@ -318,6 +326,109 @@ func (x *Plugin) GetPreviewImageUrl() string { return "" } +func (x *Plugin) GetRatingAvg() float32 { + if x != nil { + return x.RatingAvg + } + return 0 +} + +func (x *Plugin) GetRatingCount() int32 { + if x != nil { + return x.RatingCount + } + return 0 +} + +func (x *Plugin) GetInstallCount() int32 { + if x != nil { + return x.InstallCount + } + return 0 +} + +// PluginScreenshot is one image in a plugin's managed gallery. The gallery is +// per-plugin (not per-version); images arrive either from a published +// artifact's screenshots/ dir or from author uploads, and the author orders +// them and marks one Featured (the card image). +type PluginScreenshot struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // url is the public unsigned image URL (only public plugins serve gallery + // images in v1). + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + Featured bool `protobuf:"varint,3,opt,name=featured,proto3" json:"featured,omitempty"` + Position int32 `protobuf:"varint,4,opt,name=position,proto3" json:"position,omitempty"` + ContentType string `protobuf:"bytes,5,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PluginScreenshot) Reset() { + *x = PluginScreenshot{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PluginScreenshot) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PluginScreenshot) ProtoMessage() {} + +func (x *PluginScreenshot) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PluginScreenshot.ProtoReflect.Descriptor instead. +func (*PluginScreenshot) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{2} +} + +func (x *PluginScreenshot) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *PluginScreenshot) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *PluginScreenshot) GetFeatured() bool { + if x != nil { + return x.Featured + } + return false +} + +func (x *PluginScreenshot) GetPosition() int32 { + if x != nil { + return x.Position + } + return 0 +} + +func (x *PluginScreenshot) GetContentType() string { + if x != nil { + return x.ContentType + } + return "" +} + type Category struct { state protoimpl.MessageState `protogen:"open.v1"` Slug string `protobuf:"bytes,1,opt,name=slug,proto3" json:"slug,omitempty"` @@ -330,7 +441,7 @@ type Category struct { func (x *Category) Reset() { *x = Category{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[2] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -342,7 +453,7 @@ func (x *Category) String() string { func (*Category) ProtoMessage() {} func (x *Category) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[2] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -355,7 +466,7 @@ func (x *Category) ProtoReflect() protoreflect.Message { // Deprecated: Use Category.ProtoReflect.Descriptor instead. func (*Category) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{2} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{3} } func (x *Category) GetSlug() string { @@ -409,7 +520,7 @@ type Version struct { func (x *Version) Reset() { *x = Version{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[3] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -421,7 +532,7 @@ func (x *Version) String() string { func (*Version) ProtoMessage() {} func (x *Version) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[3] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -434,7 +545,7 @@ func (x *Version) ProtoReflect() protoreflect.Message { // Deprecated: Use Version.ProtoReflect.Descriptor instead. func (*Version) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{3} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{4} } func (x *Version) GetId() string { @@ -518,7 +629,7 @@ type Requirement struct { func (x *Requirement) Reset() { *x = Requirement{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[4] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -530,7 +641,7 @@ func (x *Requirement) String() string { func (*Requirement) ProtoMessage() {} func (x *Requirement) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[4] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -543,7 +654,7 @@ func (x *Requirement) ProtoReflect() protoreflect.Message { // Deprecated: Use Requirement.ProtoReflect.Descriptor instead. func (*Requirement) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{4} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{5} } func (x *Requirement) GetScopeSlug() string { @@ -577,7 +688,7 @@ type CreateScopeRequest struct { func (x *CreateScopeRequest) Reset() { *x = CreateScopeRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[5] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -589,7 +700,7 @@ func (x *CreateScopeRequest) String() string { func (*CreateScopeRequest) ProtoMessage() {} func (x *CreateScopeRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[5] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -602,7 +713,7 @@ func (x *CreateScopeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateScopeRequest.ProtoReflect.Descriptor instead. func (*CreateScopeRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{5} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{6} } func (x *CreateScopeRequest) GetSlug() string { @@ -628,7 +739,7 @@ type CreateScopeResponse struct { func (x *CreateScopeResponse) Reset() { *x = CreateScopeResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[6] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -640,7 +751,7 @@ func (x *CreateScopeResponse) String() string { func (*CreateScopeResponse) ProtoMessage() {} func (x *CreateScopeResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[6] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -653,7 +764,7 @@ func (x *CreateScopeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateScopeResponse.ProtoReflect.Descriptor instead. func (*CreateScopeResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{6} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{7} } func (x *CreateScopeResponse) GetScope() *Scope { @@ -671,7 +782,7 @@ type ListMyScopesRequest struct { func (x *ListMyScopesRequest) Reset() { *x = ListMyScopesRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[7] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -683,7 +794,7 @@ func (x *ListMyScopesRequest) String() string { func (*ListMyScopesRequest) ProtoMessage() {} func (x *ListMyScopesRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[7] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -696,7 +807,7 @@ func (x *ListMyScopesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMyScopesRequest.ProtoReflect.Descriptor instead. func (*ListMyScopesRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{7} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{8} } type ListMyScopesResponse struct { @@ -708,7 +819,7 @@ type ListMyScopesResponse struct { func (x *ListMyScopesResponse) Reset() { *x = ListMyScopesResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[8] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -720,7 +831,7 @@ func (x *ListMyScopesResponse) String() string { func (*ListMyScopesResponse) ProtoMessage() {} func (x *ListMyScopesResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[8] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -733,7 +844,7 @@ func (x *ListMyScopesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMyScopesResponse.ProtoReflect.Descriptor instead. func (*ListMyScopesResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{8} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{9} } func (x *ListMyScopesResponse) GetScopes() []*Scope { @@ -752,7 +863,7 @@ type GetScopeRequest struct { func (x *GetScopeRequest) Reset() { *x = GetScopeRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[9] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -764,7 +875,7 @@ func (x *GetScopeRequest) String() string { func (*GetScopeRequest) ProtoMessage() {} func (x *GetScopeRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[9] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -777,7 +888,7 @@ func (x *GetScopeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScopeRequest.ProtoReflect.Descriptor instead. func (*GetScopeRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{9} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{10} } func (x *GetScopeRequest) GetSlug() string { @@ -797,7 +908,7 @@ type GetScopeResponse struct { func (x *GetScopeResponse) Reset() { *x = GetScopeResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[10] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -809,7 +920,7 @@ func (x *GetScopeResponse) String() string { func (*GetScopeResponse) ProtoMessage() {} func (x *GetScopeResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[10] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -822,7 +933,7 @@ func (x *GetScopeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScopeResponse.ProtoReflect.Descriptor instead. func (*GetScopeResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{10} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{11} } func (x *GetScopeResponse) GetScope() *Scope { @@ -847,7 +958,7 @@ type ListMyPluginsRequest struct { func (x *ListMyPluginsRequest) Reset() { *x = ListMyPluginsRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[11] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -859,7 +970,7 @@ func (x *ListMyPluginsRequest) String() string { func (*ListMyPluginsRequest) ProtoMessage() {} func (x *ListMyPluginsRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[11] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -872,7 +983,7 @@ func (x *ListMyPluginsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMyPluginsRequest.ProtoReflect.Descriptor instead. func (*ListMyPluginsRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{11} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{12} } type ListMyPluginsResponse struct { @@ -884,7 +995,7 @@ type ListMyPluginsResponse struct { func (x *ListMyPluginsResponse) Reset() { *x = ListMyPluginsResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[12] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -896,7 +1007,7 @@ func (x *ListMyPluginsResponse) String() string { func (*ListMyPluginsResponse) ProtoMessage() {} func (x *ListMyPluginsResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[12] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -909,7 +1020,7 @@ func (x *ListMyPluginsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMyPluginsResponse.ProtoReflect.Descriptor instead. func (*ListMyPluginsResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{12} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{13} } func (x *ListMyPluginsResponse) GetPlugins() []*Plugin { @@ -941,7 +1052,7 @@ type CreatePluginRequest struct { func (x *CreatePluginRequest) Reset() { *x = CreatePluginRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[13] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -953,7 +1064,7 @@ func (x *CreatePluginRequest) String() string { func (*CreatePluginRequest) ProtoMessage() {} func (x *CreatePluginRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[13] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -966,7 +1077,7 @@ func (x *CreatePluginRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreatePluginRequest.ProtoReflect.Descriptor instead. func (*CreatePluginRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{13} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{14} } func (x *CreatePluginRequest) GetScopeSlug() string { @@ -1034,7 +1145,7 @@ type CreatePluginResponse struct { func (x *CreatePluginResponse) Reset() { *x = CreatePluginResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[14] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1046,7 +1157,7 @@ func (x *CreatePluginResponse) String() string { func (*CreatePluginResponse) ProtoMessage() {} func (x *CreatePluginResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[14] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1059,7 +1170,7 @@ func (x *CreatePluginResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreatePluginResponse.ProtoReflect.Descriptor instead. func (*CreatePluginResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{14} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{15} } func (x *CreatePluginResponse) GetPlugin() *Plugin { @@ -1083,7 +1194,7 @@ type GetPluginRequest struct { func (x *GetPluginRequest) Reset() { *x = GetPluginRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[15] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1095,7 +1206,7 @@ func (x *GetPluginRequest) String() string { func (*GetPluginRequest) ProtoMessage() {} func (x *GetPluginRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[15] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1108,7 +1219,7 @@ func (x *GetPluginRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPluginRequest.ProtoReflect.Descriptor instead. func (*GetPluginRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{15} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{16} } func (x *GetPluginRequest) GetScopeSlug() string { @@ -1133,17 +1244,19 @@ func (x *GetPluginRequest) GetActiveAccountId() string { } type GetPluginResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Plugin *Plugin `protobuf:"bytes,1,opt,name=plugin,proto3" json:"plugin,omitempty"` - Versions []*Version `protobuf:"bytes,2,rep,name=versions,proto3" json:"versions,omitempty"` - Channels map[string]string `protobuf:"bytes,3,rep,name=channels,proto3" json:"channels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + state protoimpl.MessageState `protogen:"open.v1"` + Plugin *Plugin `protobuf:"bytes,1,opt,name=plugin,proto3" json:"plugin,omitempty"` + Versions []*Version `protobuf:"bytes,2,rep,name=versions,proto3" json:"versions,omitempty"` + Channels map[string]string `protobuf:"bytes,3,rep,name=channels,proto3" json:"channels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // screenshots is the plugin's gallery in display order (Featured included). + Screenshots []*PluginScreenshot `protobuf:"bytes,4,rep,name=screenshots,proto3" json:"screenshots,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *GetPluginResponse) Reset() { *x = GetPluginResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[16] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1155,7 +1268,7 @@ func (x *GetPluginResponse) String() string { func (*GetPluginResponse) ProtoMessage() {} func (x *GetPluginResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[16] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1168,7 +1281,7 @@ func (x *GetPluginResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPluginResponse.ProtoReflect.Descriptor instead. func (*GetPluginResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{16} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{17} } func (x *GetPluginResponse) GetPlugin() *Plugin { @@ -1192,6 +1305,13 @@ func (x *GetPluginResponse) GetChannels() map[string]string { return nil } +func (x *GetPluginResponse) GetScreenshots() []*PluginScreenshot { + if x != nil { + return x.Screenshots + } + return nil +} + type ListPluginsRequest struct { state protoimpl.MessageState `protogen:"open.v1"` Limit int32 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"` @@ -1206,7 +1326,7 @@ type ListPluginsRequest struct { func (x *ListPluginsRequest) Reset() { *x = ListPluginsRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[17] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1218,7 +1338,7 @@ func (x *ListPluginsRequest) String() string { func (*ListPluginsRequest) ProtoMessage() {} func (x *ListPluginsRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[17] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1231,7 +1351,7 @@ func (x *ListPluginsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPluginsRequest.ProtoReflect.Descriptor instead. func (*ListPluginsRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{17} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{18} } func (x *ListPluginsRequest) GetLimit() int32 { @@ -1285,7 +1405,7 @@ type ListPluginsResponse struct { func (x *ListPluginsResponse) Reset() { *x = ListPluginsResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[18] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1297,7 +1417,7 @@ func (x *ListPluginsResponse) String() string { func (*ListPluginsResponse) ProtoMessage() {} func (x *ListPluginsResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[18] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1310,7 +1430,7 @@ func (x *ListPluginsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPluginsResponse.ProtoReflect.Descriptor instead. func (*ListPluginsResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{18} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{19} } func (x *ListPluginsResponse) GetPlugins() []*Plugin { @@ -1328,7 +1448,7 @@ type ListCategoriesRequest struct { func (x *ListCategoriesRequest) Reset() { *x = ListCategoriesRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[19] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1340,7 +1460,7 @@ func (x *ListCategoriesRequest) String() string { func (*ListCategoriesRequest) ProtoMessage() {} func (x *ListCategoriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[19] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1353,7 +1473,7 @@ func (x *ListCategoriesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListCategoriesRequest.ProtoReflect.Descriptor instead. func (*ListCategoriesRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{19} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{20} } type ListCategoriesResponse struct { @@ -1365,7 +1485,7 @@ type ListCategoriesResponse struct { func (x *ListCategoriesResponse) Reset() { *x = ListCategoriesResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[20] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1377,7 +1497,7 @@ func (x *ListCategoriesResponse) String() string { func (*ListCategoriesResponse) ProtoMessage() {} func (x *ListCategoriesResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[20] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1390,7 +1510,7 @@ func (x *ListCategoriesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListCategoriesResponse.ProtoReflect.Descriptor instead. func (*ListCategoriesResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{20} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{21} } func (x *ListCategoriesResponse) GetCategories() []*Category { @@ -1413,7 +1533,7 @@ type ListTagsRequest struct { func (x *ListTagsRequest) Reset() { *x = ListTagsRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[21] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1425,7 +1545,7 @@ func (x *ListTagsRequest) String() string { func (*ListTagsRequest) ProtoMessage() {} func (x *ListTagsRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[21] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1438,7 +1558,7 @@ func (x *ListTagsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTagsRequest.ProtoReflect.Descriptor instead. func (*ListTagsRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{21} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{22} } func (x *ListTagsRequest) GetKind() string { @@ -1464,7 +1584,7 @@ type ListTagsResponse struct { func (x *ListTagsResponse) Reset() { *x = ListTagsResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[22] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1476,7 +1596,7 @@ func (x *ListTagsResponse) String() string { func (*ListTagsResponse) ProtoMessage() {} func (x *ListTagsResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[22] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1489,7 +1609,7 @@ func (x *ListTagsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTagsResponse.ProtoReflect.Descriptor instead. func (*ListTagsResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{22} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{23} } func (x *ListTagsResponse) GetTags() []*TagCount { @@ -1509,7 +1629,7 @@ type TagCount struct { func (x *TagCount) Reset() { *x = TagCount{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[23] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1521,7 +1641,7 @@ func (x *TagCount) String() string { func (*TagCount) ProtoMessage() {} func (x *TagCount) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[23] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1534,7 +1654,7 @@ func (x *TagCount) ProtoReflect() protoreflect.Message { // Deprecated: Use TagCount.ProtoReflect.Descriptor instead. func (*TagCount) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{23} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{24} } func (x *TagCount) GetTag() string { @@ -1562,7 +1682,7 @@ type ListPrivatePluginsRequest struct { func (x *ListPrivatePluginsRequest) Reset() { *x = ListPrivatePluginsRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[24] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1574,7 +1694,7 @@ func (x *ListPrivatePluginsRequest) String() string { func (*ListPrivatePluginsRequest) ProtoMessage() {} func (x *ListPrivatePluginsRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[24] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1587,7 +1707,7 @@ func (x *ListPrivatePluginsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPrivatePluginsRequest.ProtoReflect.Descriptor instead. func (*ListPrivatePluginsRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{24} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{25} } func (x *ListPrivatePluginsRequest) GetAccountId() string { @@ -1606,7 +1726,7 @@ type ListPrivatePluginsResponse struct { func (x *ListPrivatePluginsResponse) Reset() { *x = ListPrivatePluginsResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[25] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1618,7 +1738,7 @@ func (x *ListPrivatePluginsResponse) String() string { func (*ListPrivatePluginsResponse) ProtoMessage() {} func (x *ListPrivatePluginsResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[25] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1631,7 +1751,7 @@ func (x *ListPrivatePluginsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPrivatePluginsResponse.ProtoReflect.Descriptor instead. func (*ListPrivatePluginsResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{25} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{26} } func (x *ListPrivatePluginsResponse) GetPlugins() []*PrivatePluginSummary { @@ -1660,7 +1780,7 @@ type PrivatePluginSummary struct { func (x *PrivatePluginSummary) Reset() { *x = PrivatePluginSummary{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[26] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1672,7 +1792,7 @@ func (x *PrivatePluginSummary) String() string { func (*PrivatePluginSummary) ProtoMessage() {} func (x *PrivatePluginSummary) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[26] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1685,7 +1805,7 @@ func (x *PrivatePluginSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use PrivatePluginSummary.ProtoReflect.Descriptor instead. func (*PrivatePluginSummary) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{26} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{27} } func (x *PrivatePluginSummary) GetPlugin() *Plugin { @@ -1719,7 +1839,7 @@ type DeletePrivatePluginRequest struct { func (x *DeletePrivatePluginRequest) Reset() { *x = DeletePrivatePluginRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[27] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1731,7 +1851,7 @@ func (x *DeletePrivatePluginRequest) String() string { func (*DeletePrivatePluginRequest) ProtoMessage() {} func (x *DeletePrivatePluginRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[27] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1744,7 +1864,7 @@ func (x *DeletePrivatePluginRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeletePrivatePluginRequest.ProtoReflect.Descriptor instead. func (*DeletePrivatePluginRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{27} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{28} } func (x *DeletePrivatePluginRequest) GetAccountId() string { @@ -1769,7 +1889,7 @@ type DeletePrivatePluginResponse struct { func (x *DeletePrivatePluginResponse) Reset() { *x = DeletePrivatePluginResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[28] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1781,7 +1901,7 @@ func (x *DeletePrivatePluginResponse) String() string { func (*DeletePrivatePluginResponse) ProtoMessage() {} func (x *DeletePrivatePluginResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[28] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1794,7 +1914,7 @@ func (x *DeletePrivatePluginResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeletePrivatePluginResponse.ProtoReflect.Descriptor instead. func (*DeletePrivatePluginResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{28} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{29} } type DeletePrivatePluginVersionRequest struct { @@ -1808,7 +1928,7 @@ type DeletePrivatePluginVersionRequest struct { func (x *DeletePrivatePluginVersionRequest) Reset() { *x = DeletePrivatePluginVersionRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[29] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1820,7 +1940,7 @@ func (x *DeletePrivatePluginVersionRequest) String() string { func (*DeletePrivatePluginVersionRequest) ProtoMessage() {} func (x *DeletePrivatePluginVersionRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[29] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1833,7 +1953,7 @@ func (x *DeletePrivatePluginVersionRequest) ProtoReflect() protoreflect.Message // Deprecated: Use DeletePrivatePluginVersionRequest.ProtoReflect.Descriptor instead. func (*DeletePrivatePluginVersionRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{29} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{30} } func (x *DeletePrivatePluginVersionRequest) GetAccountId() string { @@ -1865,7 +1985,7 @@ type DeletePrivatePluginVersionResponse struct { func (x *DeletePrivatePluginVersionResponse) Reset() { *x = DeletePrivatePluginVersionResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[30] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1877,7 +1997,7 @@ func (x *DeletePrivatePluginVersionResponse) String() string { func (*DeletePrivatePluginVersionResponse) ProtoMessage() {} func (x *DeletePrivatePluginVersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[30] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1890,7 +2010,7 @@ func (x *DeletePrivatePluginVersionResponse) ProtoReflect() protoreflect.Message // Deprecated: Use DeletePrivatePluginVersionResponse.ProtoReflect.Descriptor instead. func (*DeletePrivatePluginVersionResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{30} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{31} } type ListPrivatePluginInstallSitesRequest struct { @@ -1903,7 +2023,7 @@ type ListPrivatePluginInstallSitesRequest struct { func (x *ListPrivatePluginInstallSitesRequest) Reset() { *x = ListPrivatePluginInstallSitesRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[31] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1915,7 +2035,7 @@ func (x *ListPrivatePluginInstallSitesRequest) String() string { func (*ListPrivatePluginInstallSitesRequest) ProtoMessage() {} func (x *ListPrivatePluginInstallSitesRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[31] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1928,7 +2048,7 @@ func (x *ListPrivatePluginInstallSitesRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use ListPrivatePluginInstallSitesRequest.ProtoReflect.Descriptor instead. func (*ListPrivatePluginInstallSitesRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{31} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{32} } func (x *ListPrivatePluginInstallSitesRequest) GetAccountId() string { @@ -1954,7 +2074,7 @@ type ListPrivatePluginInstallSitesResponse struct { func (x *ListPrivatePluginInstallSitesResponse) Reset() { *x = ListPrivatePluginInstallSitesResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[32] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1966,7 +2086,7 @@ func (x *ListPrivatePluginInstallSitesResponse) String() string { func (*ListPrivatePluginInstallSitesResponse) ProtoMessage() {} func (x *ListPrivatePluginInstallSitesResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[32] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1979,7 +2099,7 @@ func (x *ListPrivatePluginInstallSitesResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use ListPrivatePluginInstallSitesResponse.ProtoReflect.Descriptor instead. func (*ListPrivatePluginInstallSitesResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{32} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{33} } func (x *ListPrivatePluginInstallSitesResponse) GetSites() []*PrivatePluginInstallSite { @@ -2001,7 +2121,7 @@ type PrivatePluginInstallSite struct { func (x *PrivatePluginInstallSite) Reset() { *x = PrivatePluginInstallSite{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[33] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2013,7 +2133,7 @@ func (x *PrivatePluginInstallSite) String() string { func (*PrivatePluginInstallSite) ProtoMessage() {} func (x *PrivatePluginInstallSite) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[33] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2026,7 +2146,7 @@ func (x *PrivatePluginInstallSite) ProtoReflect() protoreflect.Message { // Deprecated: Use PrivatePluginInstallSite.ProtoReflect.Descriptor instead. func (*PrivatePluginInstallSite) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{33} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{34} } func (x *PrivatePluginInstallSite) GetInstanceId() string { @@ -2068,7 +2188,7 @@ type GetVersionRequest struct { func (x *GetVersionRequest) Reset() { *x = GetVersionRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[34] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2080,7 +2200,7 @@ func (x *GetVersionRequest) String() string { func (*GetVersionRequest) ProtoMessage() {} func (x *GetVersionRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[34] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2093,7 +2213,7 @@ func (x *GetVersionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetVersionRequest.ProtoReflect.Descriptor instead. func (*GetVersionRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{34} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{35} } func (x *GetVersionRequest) GetScopeSlug() string { @@ -2129,7 +2249,7 @@ type GetVersionResponse struct { func (x *GetVersionResponse) Reset() { *x = GetVersionResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[35] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2141,7 +2261,7 @@ func (x *GetVersionResponse) String() string { func (*GetVersionResponse) ProtoMessage() {} func (x *GetVersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[35] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2154,7 +2274,7 @@ func (x *GetVersionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetVersionResponse.ProtoReflect.Descriptor instead. func (*GetVersionResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{35} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{36} } func (x *GetVersionResponse) GetVersion() *Version { @@ -2200,7 +2320,7 @@ type ResolveInstallRequest struct { func (x *ResolveInstallRequest) Reset() { *x = ResolveInstallRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[36] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2212,7 +2332,7 @@ func (x *ResolveInstallRequest) String() string { func (*ResolveInstallRequest) ProtoMessage() {} func (x *ResolveInstallRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[36] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2225,7 +2345,7 @@ func (x *ResolveInstallRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveInstallRequest.ProtoReflect.Descriptor instead. func (*ResolveInstallRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{36} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{37} } func (x *ResolveInstallRequest) GetScopeSlug() string { @@ -2279,7 +2399,7 @@ type ResolveInstallResponse struct { func (x *ResolveInstallResponse) Reset() { *x = ResolveInstallResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[37] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2291,7 +2411,7 @@ func (x *ResolveInstallResponse) String() string { func (*ResolveInstallResponse) ProtoMessage() {} func (x *ResolveInstallResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[37] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2304,7 +2424,7 @@ func (x *ResolveInstallResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveInstallResponse.ProtoReflect.Descriptor instead. func (*ResolveInstallResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{37} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{38} } func (x *ResolveInstallResponse) GetVersionId() string { @@ -2400,7 +2520,7 @@ type ListPrivatePluginsForInstanceRequest struct { func (x *ListPrivatePluginsForInstanceRequest) Reset() { *x = ListPrivatePluginsForInstanceRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[38] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2412,7 +2532,7 @@ func (x *ListPrivatePluginsForInstanceRequest) String() string { func (*ListPrivatePluginsForInstanceRequest) ProtoMessage() {} func (x *ListPrivatePluginsForInstanceRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[38] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2425,7 +2545,7 @@ func (x *ListPrivatePluginsForInstanceRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use ListPrivatePluginsForInstanceRequest.ProtoReflect.Descriptor instead. func (*ListPrivatePluginsForInstanceRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{38} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{39} } func (x *ListPrivatePluginsForInstanceRequest) GetInstanceId() string { @@ -2440,13 +2560,17 @@ type ResolveInstallForInstanceRequest struct { InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` PluginName string `protobuf:"bytes,2,opt,name=plugin_name,json=pluginName,proto3" json:"plugin_name,omitempty"` VersionOrChannel string `protobuf:"bytes,3,opt,name=version_or_channel,json=versionOrChannel,proto3" json:"version_or_channel,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // scope_slug selects the plugin's scope. Empty or "private" resolves the + // calling account's private plugin (the original behavior); any other value + // resolves a PUBLIC plugin in that scope (ADR 0021). + ScopeSlug string `protobuf:"bytes,4,opt,name=scope_slug,json=scopeSlug,proto3" json:"scope_slug,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ResolveInstallForInstanceRequest) Reset() { *x = ResolveInstallForInstanceRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[39] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2458,7 +2582,7 @@ func (x *ResolveInstallForInstanceRequest) String() string { func (*ResolveInstallForInstanceRequest) ProtoMessage() {} func (x *ResolveInstallForInstanceRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[39] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2471,7 +2595,7 @@ func (x *ResolveInstallForInstanceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveInstallForInstanceRequest.ProtoReflect.Descriptor instead. func (*ResolveInstallForInstanceRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{39} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{40} } func (x *ResolveInstallForInstanceRequest) GetInstanceId() string { @@ -2495,6 +2619,13 @@ func (x *ResolveInstallForInstanceRequest) GetVersionOrChannel() string { return "" } +func (x *ResolveInstallForInstanceRequest) GetScopeSlug() string { + if x != nil { + return x.ScopeSlug + } + return "" +} + type PendingReview struct { state protoimpl.MessageState `protogen:"open.v1"` ReviewId string `protobuf:"bytes,1,opt,name=review_id,json=reviewId,proto3" json:"review_id,omitempty"` @@ -2510,7 +2641,7 @@ type PendingReview struct { func (x *PendingReview) Reset() { *x = PendingReview{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[40] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2522,7 +2653,7 @@ func (x *PendingReview) String() string { func (*PendingReview) ProtoMessage() {} func (x *PendingReview) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[40] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2535,7 +2666,7 @@ func (x *PendingReview) ProtoReflect() protoreflect.Message { // Deprecated: Use PendingReview.ProtoReflect.Descriptor instead. func (*PendingReview) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{40} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{41} } func (x *PendingReview) GetReviewId() string { @@ -2596,7 +2727,7 @@ type SubmitForReviewRequest struct { func (x *SubmitForReviewRequest) Reset() { *x = SubmitForReviewRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[41] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2608,7 +2739,7 @@ func (x *SubmitForReviewRequest) String() string { func (*SubmitForReviewRequest) ProtoMessage() {} func (x *SubmitForReviewRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[41] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2621,7 +2752,7 @@ func (x *SubmitForReviewRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitForReviewRequest.ProtoReflect.Descriptor instead. func (*SubmitForReviewRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{41} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{42} } func (x *SubmitForReviewRequest) GetPluginId() string { @@ -2644,7 +2775,7 @@ type SubmitForReviewResponse struct { func (x *SubmitForReviewResponse) Reset() { *x = SubmitForReviewResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[42] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2656,7 +2787,7 @@ func (x *SubmitForReviewResponse) String() string { func (*SubmitForReviewResponse) ProtoMessage() {} func (x *SubmitForReviewResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[42] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2669,7 +2800,7 @@ func (x *SubmitForReviewResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitForReviewResponse.ProtoReflect.Descriptor instead. func (*SubmitForReviewResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{42} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{43} } func (x *SubmitForReviewResponse) GetVisibility() string { @@ -2689,7 +2820,7 @@ type ListPendingReviewsRequest struct { func (x *ListPendingReviewsRequest) Reset() { *x = ListPendingReviewsRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[43] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2701,7 +2832,7 @@ func (x *ListPendingReviewsRequest) String() string { func (*ListPendingReviewsRequest) ProtoMessage() {} func (x *ListPendingReviewsRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[43] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2714,7 +2845,7 @@ func (x *ListPendingReviewsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPendingReviewsRequest.ProtoReflect.Descriptor instead. func (*ListPendingReviewsRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{43} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{44} } func (x *ListPendingReviewsRequest) GetLimit() int32 { @@ -2740,7 +2871,7 @@ type ListPendingReviewsResponse struct { func (x *ListPendingReviewsResponse) Reset() { *x = ListPendingReviewsResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[44] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2752,7 +2883,7 @@ func (x *ListPendingReviewsResponse) String() string { func (*ListPendingReviewsResponse) ProtoMessage() {} func (x *ListPendingReviewsResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[44] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2765,7 +2896,7 @@ func (x *ListPendingReviewsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPendingReviewsResponse.ProtoReflect.Descriptor instead. func (*ListPendingReviewsResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{44} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{45} } func (x *ListPendingReviewsResponse) GetReviews() []*PendingReview { @@ -2785,7 +2916,7 @@ type ApproveSubmissionRequest struct { func (x *ApproveSubmissionRequest) Reset() { *x = ApproveSubmissionRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[45] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2797,7 +2928,7 @@ func (x *ApproveSubmissionRequest) String() string { func (*ApproveSubmissionRequest) ProtoMessage() {} func (x *ApproveSubmissionRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[45] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2810,7 +2941,7 @@ func (x *ApproveSubmissionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApproveSubmissionRequest.ProtoReflect.Descriptor instead. func (*ApproveSubmissionRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{45} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{46} } func (x *ApproveSubmissionRequest) GetPluginId() string { @@ -2835,7 +2966,7 @@ type ApproveSubmissionResponse struct { func (x *ApproveSubmissionResponse) Reset() { *x = ApproveSubmissionResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[46] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2847,7 +2978,7 @@ func (x *ApproveSubmissionResponse) String() string { func (*ApproveSubmissionResponse) ProtoMessage() {} func (x *ApproveSubmissionResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[46] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2860,7 +2991,7 @@ func (x *ApproveSubmissionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ApproveSubmissionResponse.ProtoReflect.Descriptor instead. func (*ApproveSubmissionResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{46} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{47} } type RejectSubmissionRequest struct { @@ -2873,7 +3004,7 @@ type RejectSubmissionRequest struct { func (x *RejectSubmissionRequest) Reset() { *x = RejectSubmissionRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[47] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2885,7 +3016,7 @@ func (x *RejectSubmissionRequest) String() string { func (*RejectSubmissionRequest) ProtoMessage() {} func (x *RejectSubmissionRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[47] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2898,7 +3029,7 @@ func (x *RejectSubmissionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RejectSubmissionRequest.ProtoReflect.Descriptor instead. func (*RejectSubmissionRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{47} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{48} } func (x *RejectSubmissionRequest) GetPluginId() string { @@ -2923,7 +3054,7 @@ type RejectSubmissionResponse struct { func (x *RejectSubmissionResponse) Reset() { *x = RejectSubmissionResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[48] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2935,7 +3066,7 @@ func (x *RejectSubmissionResponse) String() string { func (*RejectSubmissionResponse) ProtoMessage() {} func (x *RejectSubmissionResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[48] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2948,7 +3079,7 @@ func (x *RejectSubmissionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RejectSubmissionResponse.ProtoReflect.Descriptor instead. func (*RejectSubmissionResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{48} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{49} } type RequestChangesRequest struct { @@ -2961,7 +3092,7 @@ type RequestChangesRequest struct { func (x *RequestChangesRequest) Reset() { *x = RequestChangesRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[49] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2973,7 +3104,7 @@ func (x *RequestChangesRequest) String() string { func (*RequestChangesRequest) ProtoMessage() {} func (x *RequestChangesRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[49] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2986,7 +3117,7 @@ func (x *RequestChangesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RequestChangesRequest.ProtoReflect.Descriptor instead. func (*RequestChangesRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{49} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{50} } func (x *RequestChangesRequest) GetPluginId() string { @@ -3011,7 +3142,7 @@ type RequestChangesResponse struct { func (x *RequestChangesResponse) Reset() { *x = RequestChangesResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[50] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3023,7 +3154,7 @@ func (x *RequestChangesResponse) String() string { func (*RequestChangesResponse) ProtoMessage() {} func (x *RequestChangesResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[50] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3036,7 +3167,1851 @@ func (x *RequestChangesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RequestChangesResponse.ProtoReflect.Descriptor instead. func (*RequestChangesResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{50} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{51} +} + +type ListScreenshotsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ScopeSlug string `protobuf:"bytes,1,opt,name=scope_slug,json=scopeSlug,proto3" json:"scope_slug,omitempty"` + PluginName string `protobuf:"bytes,2,opt,name=plugin_name,json=pluginName,proto3" json:"plugin_name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListScreenshotsRequest) Reset() { + *x = ListScreenshotsRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListScreenshotsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListScreenshotsRequest) ProtoMessage() {} + +func (x *ListScreenshotsRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[52] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListScreenshotsRequest.ProtoReflect.Descriptor instead. +func (*ListScreenshotsRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{52} +} + +func (x *ListScreenshotsRequest) GetScopeSlug() string { + if x != nil { + return x.ScopeSlug + } + return "" +} + +func (x *ListScreenshotsRequest) GetPluginName() string { + if x != nil { + return x.PluginName + } + return "" +} + +type ListScreenshotsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Screenshots []*PluginScreenshot `protobuf:"bytes,1,rep,name=screenshots,proto3" json:"screenshots,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListScreenshotsResponse) Reset() { + *x = ListScreenshotsResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListScreenshotsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListScreenshotsResponse) ProtoMessage() {} + +func (x *ListScreenshotsResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[53] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListScreenshotsResponse.ProtoReflect.Descriptor instead. +func (*ListScreenshotsResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{53} +} + +func (x *ListScreenshotsResponse) GetScreenshots() []*PluginScreenshot { + if x != nil { + return x.Screenshots + } + return nil +} + +type UploadScreenshotRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + PluginId string `protobuf:"bytes,1,opt,name=plugin_id,json=pluginId,proto3" json:"plugin_id,omitempty"` + // image is the raw file bytes (≤ 8 MiB; png/jpg/jpeg/webp). + Image []byte `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"` + Filename string `protobuf:"bytes,3,opt,name=filename,proto3" json:"filename,omitempty"` + ContentType string `protobuf:"bytes,4,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UploadScreenshotRequest) Reset() { + *x = UploadScreenshotRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UploadScreenshotRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UploadScreenshotRequest) ProtoMessage() {} + +func (x *UploadScreenshotRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[54] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UploadScreenshotRequest.ProtoReflect.Descriptor instead. +func (*UploadScreenshotRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{54} +} + +func (x *UploadScreenshotRequest) GetPluginId() string { + if x != nil { + return x.PluginId + } + return "" +} + +func (x *UploadScreenshotRequest) GetImage() []byte { + if x != nil { + return x.Image + } + return nil +} + +func (x *UploadScreenshotRequest) GetFilename() string { + if x != nil { + return x.Filename + } + return "" +} + +func (x *UploadScreenshotRequest) GetContentType() string { + if x != nil { + return x.ContentType + } + return "" +} + +type UploadScreenshotResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Screenshot *PluginScreenshot `protobuf:"bytes,1,opt,name=screenshot,proto3" json:"screenshot,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UploadScreenshotResponse) Reset() { + *x = UploadScreenshotResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UploadScreenshotResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UploadScreenshotResponse) ProtoMessage() {} + +func (x *UploadScreenshotResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[55] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UploadScreenshotResponse.ProtoReflect.Descriptor instead. +func (*UploadScreenshotResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{55} +} + +func (x *UploadScreenshotResponse) GetScreenshot() *PluginScreenshot { + if x != nil { + return x.Screenshot + } + return nil +} + +type DeleteScreenshotRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + PluginId string `protobuf:"bytes,1,opt,name=plugin_id,json=pluginId,proto3" json:"plugin_id,omitempty"` + ScreenshotId string `protobuf:"bytes,2,opt,name=screenshot_id,json=screenshotId,proto3" json:"screenshot_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteScreenshotRequest) Reset() { + *x = DeleteScreenshotRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteScreenshotRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteScreenshotRequest) ProtoMessage() {} + +func (x *DeleteScreenshotRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[56] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteScreenshotRequest.ProtoReflect.Descriptor instead. +func (*DeleteScreenshotRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{56} +} + +func (x *DeleteScreenshotRequest) GetPluginId() string { + if x != nil { + return x.PluginId + } + return "" +} + +func (x *DeleteScreenshotRequest) GetScreenshotId() string { + if x != nil { + return x.ScreenshotId + } + return "" +} + +type DeleteScreenshotResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteScreenshotResponse) Reset() { + *x = DeleteScreenshotResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteScreenshotResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteScreenshotResponse) ProtoMessage() {} + +func (x *DeleteScreenshotResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[57] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteScreenshotResponse.ProtoReflect.Descriptor instead. +func (*DeleteScreenshotResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{57} +} + +type ReorderScreenshotsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + PluginId string `protobuf:"bytes,1,opt,name=plugin_id,json=pluginId,proto3" json:"plugin_id,omitempty"` + // screenshot_ids_in_order must name every current gallery image exactly once. + ScreenshotIdsInOrder []string `protobuf:"bytes,2,rep,name=screenshot_ids_in_order,json=screenshotIdsInOrder,proto3" json:"screenshot_ids_in_order,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReorderScreenshotsRequest) Reset() { + *x = ReorderScreenshotsRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReorderScreenshotsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReorderScreenshotsRequest) ProtoMessage() {} + +func (x *ReorderScreenshotsRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[58] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReorderScreenshotsRequest.ProtoReflect.Descriptor instead. +func (*ReorderScreenshotsRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{58} +} + +func (x *ReorderScreenshotsRequest) GetPluginId() string { + if x != nil { + return x.PluginId + } + return "" +} + +func (x *ReorderScreenshotsRequest) GetScreenshotIdsInOrder() []string { + if x != nil { + return x.ScreenshotIdsInOrder + } + return nil +} + +type ReorderScreenshotsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Screenshots []*PluginScreenshot `protobuf:"bytes,1,rep,name=screenshots,proto3" json:"screenshots,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReorderScreenshotsResponse) Reset() { + *x = ReorderScreenshotsResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReorderScreenshotsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReorderScreenshotsResponse) ProtoMessage() {} + +func (x *ReorderScreenshotsResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[59] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReorderScreenshotsResponse.ProtoReflect.Descriptor instead. +func (*ReorderScreenshotsResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{59} +} + +func (x *ReorderScreenshotsResponse) GetScreenshots() []*PluginScreenshot { + if x != nil { + return x.Screenshots + } + return nil +} + +type SetFeaturedScreenshotRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + PluginId string `protobuf:"bytes,1,opt,name=plugin_id,json=pluginId,proto3" json:"plugin_id,omitempty"` + ScreenshotId string `protobuf:"bytes,2,opt,name=screenshot_id,json=screenshotId,proto3" json:"screenshot_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SetFeaturedScreenshotRequest) Reset() { + *x = SetFeaturedScreenshotRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SetFeaturedScreenshotRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetFeaturedScreenshotRequest) ProtoMessage() {} + +func (x *SetFeaturedScreenshotRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[60] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetFeaturedScreenshotRequest.ProtoReflect.Descriptor instead. +func (*SetFeaturedScreenshotRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{60} +} + +func (x *SetFeaturedScreenshotRequest) GetPluginId() string { + if x != nil { + return x.PluginId + } + return "" +} + +func (x *SetFeaturedScreenshotRequest) GetScreenshotId() string { + if x != nil { + return x.ScreenshotId + } + return "" +} + +type SetFeaturedScreenshotResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SetFeaturedScreenshotResponse) Reset() { + *x = SetFeaturedScreenshotResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SetFeaturedScreenshotResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetFeaturedScreenshotResponse) ProtoMessage() {} + +func (x *SetFeaturedScreenshotResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[61] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetFeaturedScreenshotResponse.ProtoReflect.Descriptor instead. +func (*SetFeaturedScreenshotResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{61} +} + +type PluginReview struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + PluginId string `protobuf:"bytes,2,opt,name=plugin_id,json=pluginId,proto3" json:"plugin_id,omitempty"` + UserId string `protobuf:"bytes,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + AuthorDisplayName string `protobuf:"bytes,4,opt,name=author_display_name,json=authorDisplayName,proto3" json:"author_display_name,omitempty"` + Rating int32 `protobuf:"varint,5,opt,name=rating,proto3" json:"rating,omitempty"` // 1..5 + Title string `protobuf:"bytes,6,opt,name=title,proto3" json:"title,omitempty"` + Body string `protobuf:"bytes,7,opt,name=body,proto3" json:"body,omitempty"` + // version_at_review is the plugin version the reviewer's account had + // installed when the review was written (best effort; may be empty). + VersionAtReview string `protobuf:"bytes,8,opt,name=version_at_review,json=versionAtReview,proto3" json:"version_at_review,omitempty"` + Edited bool `protobuf:"varint,9,opt,name=edited,proto3" json:"edited,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + Reply *PluginReviewReply `protobuf:"bytes,12,opt,name=reply,proto3" json:"reply,omitempty"` // unset when no (non-deleted) reply exists + // deleted/deleted_reason are populated only in moderation views; public + // listings exclude soft-deleted reviews entirely. + Deleted bool `protobuf:"varint,13,opt,name=deleted,proto3" json:"deleted,omitempty"` + DeletedReason string `protobuf:"bytes,14,opt,name=deleted_reason,json=deletedReason,proto3" json:"deleted_reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PluginReview) Reset() { + *x = PluginReview{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PluginReview) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PluginReview) ProtoMessage() {} + +func (x *PluginReview) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[62] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PluginReview.ProtoReflect.Descriptor instead. +func (*PluginReview) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{62} +} + +func (x *PluginReview) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *PluginReview) GetPluginId() string { + if x != nil { + return x.PluginId + } + return "" +} + +func (x *PluginReview) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *PluginReview) GetAuthorDisplayName() string { + if x != nil { + return x.AuthorDisplayName + } + return "" +} + +func (x *PluginReview) GetRating() int32 { + if x != nil { + return x.Rating + } + return 0 +} + +func (x *PluginReview) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *PluginReview) GetBody() string { + if x != nil { + return x.Body + } + return "" +} + +func (x *PluginReview) GetVersionAtReview() string { + if x != nil { + return x.VersionAtReview + } + return "" +} + +func (x *PluginReview) GetEdited() bool { + if x != nil { + return x.Edited + } + return false +} + +func (x *PluginReview) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *PluginReview) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +func (x *PluginReview) GetReply() *PluginReviewReply { + if x != nil { + return x.Reply + } + return nil +} + +func (x *PluginReview) GetDeleted() bool { + if x != nil { + return x.Deleted + } + return false +} + +func (x *PluginReview) GetDeletedReason() string { + if x != nil { + return x.DeletedReason + } + return "" +} + +type PluginReviewReply struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + AuthorDisplayName string `protobuf:"bytes,2,opt,name=author_display_name,json=authorDisplayName,proto3" json:"author_display_name,omitempty"` + Body string `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"` + Edited bool `protobuf:"varint,4,opt,name=edited,proto3" json:"edited,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PluginReviewReply) Reset() { + *x = PluginReviewReply{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PluginReviewReply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PluginReviewReply) ProtoMessage() {} + +func (x *PluginReviewReply) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[63] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PluginReviewReply.ProtoReflect.Descriptor instead. +func (*PluginReviewReply) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{63} +} + +func (x *PluginReviewReply) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *PluginReviewReply) GetAuthorDisplayName() string { + if x != nil { + return x.AuthorDisplayName + } + return "" +} + +func (x *PluginReviewReply) GetBody() string { + if x != nil { + return x.Body + } + return "" +} + +func (x *PluginReviewReply) GetEdited() bool { + if x != nil { + return x.Edited + } + return false +} + +func (x *PluginReviewReply) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +type ReviewAggregate struct { + state protoimpl.MessageState `protogen:"open.v1"` + RatingAvg float32 `protobuf:"fixed32,1,opt,name=rating_avg,json=ratingAvg,proto3" json:"rating_avg,omitempty"` + RatingCount int32 `protobuf:"varint,2,opt,name=rating_count,json=ratingCount,proto3" json:"rating_count,omitempty"` + // count1..count5 are the per-star histogram buckets. + Count1 int32 `protobuf:"varint,3,opt,name=count1,proto3" json:"count1,omitempty"` + Count2 int32 `protobuf:"varint,4,opt,name=count2,proto3" json:"count2,omitempty"` + Count3 int32 `protobuf:"varint,5,opt,name=count3,proto3" json:"count3,omitempty"` + Count4 int32 `protobuf:"varint,6,opt,name=count4,proto3" json:"count4,omitempty"` + Count5 int32 `protobuf:"varint,7,opt,name=count5,proto3" json:"count5,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReviewAggregate) Reset() { + *x = ReviewAggregate{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReviewAggregate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReviewAggregate) ProtoMessage() {} + +func (x *ReviewAggregate) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[64] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReviewAggregate.ProtoReflect.Descriptor instead. +func (*ReviewAggregate) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{64} +} + +func (x *ReviewAggregate) GetRatingAvg() float32 { + if x != nil { + return x.RatingAvg + } + return 0 +} + +func (x *ReviewAggregate) GetRatingCount() int32 { + if x != nil { + return x.RatingCount + } + return 0 +} + +func (x *ReviewAggregate) GetCount1() int32 { + if x != nil { + return x.Count1 + } + return 0 +} + +func (x *ReviewAggregate) GetCount2() int32 { + if x != nil { + return x.Count2 + } + return 0 +} + +func (x *ReviewAggregate) GetCount3() int32 { + if x != nil { + return x.Count3 + } + return 0 +} + +func (x *ReviewAggregate) GetCount4() int32 { + if x != nil { + return x.Count4 + } + return 0 +} + +func (x *ReviewAggregate) GetCount5() int32 { + if x != nil { + return x.Count5 + } + return 0 +} + +type ListReviewsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ScopeSlug string `protobuf:"bytes,1,opt,name=scope_slug,json=scopeSlug,proto3" json:"scope_slug,omitempty"` + PluginName string `protobuf:"bytes,2,opt,name=plugin_name,json=pluginName,proto3" json:"plugin_name,omitempty"` + Limit int32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` // 0 → server default + Offset int32 `protobuf:"varint,4,opt,name=offset,proto3" json:"offset,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListReviewsRequest) Reset() { + *x = ListReviewsRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListReviewsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListReviewsRequest) ProtoMessage() {} + +func (x *ListReviewsRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[65] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListReviewsRequest.ProtoReflect.Descriptor instead. +func (*ListReviewsRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{65} +} + +func (x *ListReviewsRequest) GetScopeSlug() string { + if x != nil { + return x.ScopeSlug + } + return "" +} + +func (x *ListReviewsRequest) GetPluginName() string { + if x != nil { + return x.PluginName + } + return "" +} + +func (x *ListReviewsRequest) GetLimit() int32 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *ListReviewsRequest) GetOffset() int32 { + if x != nil { + return x.Offset + } + return 0 +} + +type ListReviewsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Reviews []*PluginReview `protobuf:"bytes,1,rep,name=reviews,proto3" json:"reviews,omitempty"` + Aggregate *ReviewAggregate `protobuf:"bytes,2,opt,name=aggregate,proto3" json:"aggregate,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListReviewsResponse) Reset() { + *x = ListReviewsResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListReviewsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListReviewsResponse) ProtoMessage() {} + +func (x *ListReviewsResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[66] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListReviewsResponse.ProtoReflect.Descriptor instead. +func (*ListReviewsResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{66} +} + +func (x *ListReviewsResponse) GetReviews() []*PluginReview { + if x != nil { + return x.Reviews + } + return nil +} + +func (x *ListReviewsResponse) GetAggregate() *ReviewAggregate { + if x != nil { + return x.Aggregate + } + return nil +} + +type GetMyReviewRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + PluginId string `protobuf:"bytes,1,opt,name=plugin_id,json=pluginId,proto3" json:"plugin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetMyReviewRequest) Reset() { + *x = GetMyReviewRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetMyReviewRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMyReviewRequest) ProtoMessage() {} + +func (x *GetMyReviewRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[67] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMyReviewRequest.ProtoReflect.Descriptor instead. +func (*GetMyReviewRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{67} +} + +func (x *GetMyReviewRequest) GetPluginId() string { + if x != nil { + return x.PluginId + } + return "" +} + +type GetMyReviewResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Review *PluginReview `protobuf:"bytes,1,opt,name=review,proto3" json:"review,omitempty"` // unset when the caller has no review + // eligible reports whether the caller may write a review (verified install + // on their account, not a scope member). The form UI keys off this. + Eligible bool `protobuf:"varint,2,opt,name=eligible,proto3" json:"eligible,omitempty"` + // ineligible_reason is a human-readable explanation when eligible = false + // ("no install on your account", "authors cannot review their own plugin"). + IneligibleReason string `protobuf:"bytes,3,opt,name=ineligible_reason,json=ineligibleReason,proto3" json:"ineligible_reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetMyReviewResponse) Reset() { + *x = GetMyReviewResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetMyReviewResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMyReviewResponse) ProtoMessage() {} + +func (x *GetMyReviewResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[68] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMyReviewResponse.ProtoReflect.Descriptor instead. +func (*GetMyReviewResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{68} +} + +func (x *GetMyReviewResponse) GetReview() *PluginReview { + if x != nil { + return x.Review + } + return nil +} + +func (x *GetMyReviewResponse) GetEligible() bool { + if x != nil { + return x.Eligible + } + return false +} + +func (x *GetMyReviewResponse) GetIneligibleReason() string { + if x != nil { + return x.IneligibleReason + } + return "" +} + +type UpsertReviewRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + PluginId string `protobuf:"bytes,1,opt,name=plugin_id,json=pluginId,proto3" json:"plugin_id,omitempty"` + Rating int32 `protobuf:"varint,2,opt,name=rating,proto3" json:"rating,omitempty"` // 1..5, required + Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` + Body string `protobuf:"bytes,4,opt,name=body,proto3" json:"body,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpsertReviewRequest) Reset() { + *x = UpsertReviewRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpsertReviewRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpsertReviewRequest) ProtoMessage() {} + +func (x *UpsertReviewRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[69] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpsertReviewRequest.ProtoReflect.Descriptor instead. +func (*UpsertReviewRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{69} +} + +func (x *UpsertReviewRequest) GetPluginId() string { + if x != nil { + return x.PluginId + } + return "" +} + +func (x *UpsertReviewRequest) GetRating() int32 { + if x != nil { + return x.Rating + } + return 0 +} + +func (x *UpsertReviewRequest) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *UpsertReviewRequest) GetBody() string { + if x != nil { + return x.Body + } + return "" +} + +type UpsertReviewResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Review *PluginReview `protobuf:"bytes,1,opt,name=review,proto3" json:"review,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpsertReviewResponse) Reset() { + *x = UpsertReviewResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpsertReviewResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpsertReviewResponse) ProtoMessage() {} + +func (x *UpsertReviewResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[70] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpsertReviewResponse.ProtoReflect.Descriptor instead. +func (*UpsertReviewResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{70} +} + +func (x *UpsertReviewResponse) GetReview() *PluginReview { + if x != nil { + return x.Review + } + return nil +} + +type DeleteReviewRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + PluginId string `protobuf:"bytes,1,opt,name=plugin_id,json=pluginId,proto3" json:"plugin_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteReviewRequest) Reset() { + *x = DeleteReviewRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteReviewRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteReviewRequest) ProtoMessage() {} + +func (x *DeleteReviewRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[71] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteReviewRequest.ProtoReflect.Descriptor instead. +func (*DeleteReviewRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{71} +} + +func (x *DeleteReviewRequest) GetPluginId() string { + if x != nil { + return x.PluginId + } + return "" +} + +type DeleteReviewResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteReviewResponse) Reset() { + *x = DeleteReviewResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteReviewResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteReviewResponse) ProtoMessage() {} + +func (x *DeleteReviewResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[72] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteReviewResponse.ProtoReflect.Descriptor instead. +func (*DeleteReviewResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{72} +} + +type ReplyToReviewRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ReviewId string `protobuf:"bytes,1,opt,name=review_id,json=reviewId,proto3" json:"review_id,omitempty"` + Body string `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReplyToReviewRequest) Reset() { + *x = ReplyToReviewRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReplyToReviewRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReplyToReviewRequest) ProtoMessage() {} + +func (x *ReplyToReviewRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[73] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReplyToReviewRequest.ProtoReflect.Descriptor instead. +func (*ReplyToReviewRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{73} +} + +func (x *ReplyToReviewRequest) GetReviewId() string { + if x != nil { + return x.ReviewId + } + return "" +} + +func (x *ReplyToReviewRequest) GetBody() string { + if x != nil { + return x.Body + } + return "" +} + +type ReplyToReviewResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Reply *PluginReviewReply `protobuf:"bytes,1,opt,name=reply,proto3" json:"reply,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReplyToReviewResponse) Reset() { + *x = ReplyToReviewResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[74] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReplyToReviewResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReplyToReviewResponse) ProtoMessage() {} + +func (x *ReplyToReviewResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[74] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReplyToReviewResponse.ProtoReflect.Descriptor instead. +func (*ReplyToReviewResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{74} +} + +func (x *ReplyToReviewResponse) GetReply() *PluginReviewReply { + if x != nil { + return x.Reply + } + return nil +} + +type DeleteReplyRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ReviewId string `protobuf:"bytes,1,opt,name=review_id,json=reviewId,proto3" json:"review_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteReplyRequest) Reset() { + *x = DeleteReplyRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteReplyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteReplyRequest) ProtoMessage() {} + +func (x *DeleteReplyRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[75] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteReplyRequest.ProtoReflect.Descriptor instead. +func (*DeleteReplyRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{75} +} + +func (x *DeleteReplyRequest) GetReviewId() string { + if x != nil { + return x.ReviewId + } + return "" +} + +type DeleteReplyResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteReplyResponse) Reset() { + *x = DeleteReplyResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteReplyResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteReplyResponse) ProtoMessage() {} + +func (x *DeleteReplyResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[76] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteReplyResponse.ProtoReflect.Descriptor instead. +func (*DeleteReplyResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{76} +} + +type FlagReviewRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ReviewId string `protobuf:"bytes,1,opt,name=review_id,json=reviewId,proto3" json:"review_id,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` // required + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FlagReviewRequest) Reset() { + *x = FlagReviewRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FlagReviewRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlagReviewRequest) ProtoMessage() {} + +func (x *FlagReviewRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[77] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlagReviewRequest.ProtoReflect.Descriptor instead. +func (*FlagReviewRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{77} +} + +func (x *FlagReviewRequest) GetReviewId() string { + if x != nil { + return x.ReviewId + } + return "" +} + +func (x *FlagReviewRequest) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +type FlagReviewResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FlagReviewResponse) Reset() { + *x = FlagReviewResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FlagReviewResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlagReviewResponse) ProtoMessage() {} + +func (x *FlagReviewResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[78] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlagReviewResponse.ProtoReflect.Descriptor instead. +func (*FlagReviewResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{78} +} + +type FlaggedReview struct { + state protoimpl.MessageState `protogen:"open.v1"` + Review *PluginReview `protobuf:"bytes,1,opt,name=review,proto3" json:"review,omitempty"` + ScopeSlug string `protobuf:"bytes,2,opt,name=scope_slug,json=scopeSlug,proto3" json:"scope_slug,omitempty"` + PluginName string `protobuf:"bytes,3,opt,name=plugin_name,json=pluginName,proto3" json:"plugin_name,omitempty"` + FlagCount int32 `protobuf:"varint,4,opt,name=flag_count,json=flagCount,proto3" json:"flag_count,omitempty"` + // flag_reasons carries the open flags' reasons, newest first. + FlagReasons []string `protobuf:"bytes,5,rep,name=flag_reasons,json=flagReasons,proto3" json:"flag_reasons,omitempty"` + FirstFlaggedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=first_flagged_at,json=firstFlaggedAt,proto3" json:"first_flagged_at,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FlaggedReview) Reset() { + *x = FlaggedReview{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[79] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FlaggedReview) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlaggedReview) ProtoMessage() {} + +func (x *FlaggedReview) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[79] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlaggedReview.ProtoReflect.Descriptor instead. +func (*FlaggedReview) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{79} +} + +func (x *FlaggedReview) GetReview() *PluginReview { + if x != nil { + return x.Review + } + return nil +} + +func (x *FlaggedReview) GetScopeSlug() string { + if x != nil { + return x.ScopeSlug + } + return "" +} + +func (x *FlaggedReview) GetPluginName() string { + if x != nil { + return x.PluginName + } + return "" +} + +func (x *FlaggedReview) GetFlagCount() int32 { + if x != nil { + return x.FlagCount + } + return 0 +} + +func (x *FlaggedReview) GetFlagReasons() []string { + if x != nil { + return x.FlagReasons + } + return nil +} + +func (x *FlaggedReview) GetFirstFlaggedAt() *timestamppb.Timestamp { + if x != nil { + return x.FirstFlaggedAt + } + return nil +} + +type ListFlaggedReviewsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Limit int32 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"` + Offset int32 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListFlaggedReviewsRequest) Reset() { + *x = ListFlaggedReviewsRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListFlaggedReviewsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListFlaggedReviewsRequest) ProtoMessage() {} + +func (x *ListFlaggedReviewsRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[80] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListFlaggedReviewsRequest.ProtoReflect.Descriptor instead. +func (*ListFlaggedReviewsRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{80} +} + +func (x *ListFlaggedReviewsRequest) GetLimit() int32 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *ListFlaggedReviewsRequest) GetOffset() int32 { + if x != nil { + return x.Offset + } + return 0 +} + +type ListFlaggedReviewsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Reviews []*FlaggedReview `protobuf:"bytes,1,rep,name=reviews,proto3" json:"reviews,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListFlaggedReviewsResponse) Reset() { + *x = ListFlaggedReviewsResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[81] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListFlaggedReviewsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListFlaggedReviewsResponse) ProtoMessage() {} + +func (x *ListFlaggedReviewsResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[81] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListFlaggedReviewsResponse.ProtoReflect.Descriptor instead. +func (*ListFlaggedReviewsResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{81} +} + +func (x *ListFlaggedReviewsResponse) GetReviews() []*FlaggedReview { + if x != nil { + return x.Reviews + } + return nil +} + +type SoftDeleteReviewRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ReviewId string `protobuf:"bytes,1,opt,name=review_id,json=reviewId,proto3" json:"review_id,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` // required — audit trail + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SoftDeleteReviewRequest) Reset() { + *x = SoftDeleteReviewRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[82] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SoftDeleteReviewRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SoftDeleteReviewRequest) ProtoMessage() {} + +func (x *SoftDeleteReviewRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[82] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SoftDeleteReviewRequest.ProtoReflect.Descriptor instead. +func (*SoftDeleteReviewRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{82} +} + +func (x *SoftDeleteReviewRequest) GetReviewId() string { + if x != nil { + return x.ReviewId + } + return "" +} + +func (x *SoftDeleteReviewRequest) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +type SoftDeleteReviewResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SoftDeleteReviewResponse) Reset() { + *x = SoftDeleteReviewResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[83] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SoftDeleteReviewResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SoftDeleteReviewResponse) ProtoMessage() {} + +func (x *SoftDeleteReviewResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[83] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SoftDeleteReviewResponse.ProtoReflect.Descriptor instead. +func (*SoftDeleteReviewResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{83} +} + +type SoftDeleteReplyRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ReviewId string `protobuf:"bytes,1,opt,name=review_id,json=reviewId,proto3" json:"review_id,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` // required — audit trail + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SoftDeleteReplyRequest) Reset() { + *x = SoftDeleteReplyRequest{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[84] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SoftDeleteReplyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SoftDeleteReplyRequest) ProtoMessage() {} + +func (x *SoftDeleteReplyRequest) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[84] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SoftDeleteReplyRequest.ProtoReflect.Descriptor instead. +func (*SoftDeleteReplyRequest) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{84} +} + +func (x *SoftDeleteReplyRequest) GetReviewId() string { + if x != nil { + return x.ReviewId + } + return "" +} + +func (x *SoftDeleteReplyRequest) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +type SoftDeleteReplyResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SoftDeleteReplyResponse) Reset() { + *x = SoftDeleteReplyResponse{} + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[85] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SoftDeleteReplyResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SoftDeleteReplyResponse) ProtoMessage() {} + +func (x *SoftDeleteReplyResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[85] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SoftDeleteReplyResponse.ProtoReflect.Descriptor instead. +func (*SoftDeleteReplyResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{85} } type PublishVersionRequest struct { @@ -3053,7 +5028,7 @@ type PublishVersionRequest struct { func (x *PublishVersionRequest) Reset() { *x = PublishVersionRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[51] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3065,7 +5040,7 @@ func (x *PublishVersionRequest) String() string { func (*PublishVersionRequest) ProtoMessage() {} func (x *PublishVersionRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[51] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[86] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3078,7 +5053,7 @@ func (x *PublishVersionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PublishVersionRequest.ProtoReflect.Descriptor instead. func (*PublishVersionRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{51} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{86} } func (x *PublishVersionRequest) GetPluginId() string { @@ -3134,7 +5109,7 @@ type PublishVersionResponse struct { func (x *PublishVersionResponse) Reset() { *x = PublishVersionResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[52] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3146,7 +5121,7 @@ func (x *PublishVersionResponse) String() string { func (*PublishVersionResponse) ProtoMessage() {} func (x *PublishVersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[52] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[87] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3159,7 +5134,7 @@ func (x *PublishVersionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PublishVersionResponse.ProtoReflect.Descriptor instead. func (*PublishVersionResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{52} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{87} } func (x *PublishVersionResponse) GetVersion() *Version { @@ -3192,7 +5167,7 @@ type StartDeviceRequest struct { func (x *StartDeviceRequest) Reset() { *x = StartDeviceRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[53] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3204,7 +5179,7 @@ func (x *StartDeviceRequest) String() string { func (*StartDeviceRequest) ProtoMessage() {} func (x *StartDeviceRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[53] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[88] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3217,7 +5192,7 @@ func (x *StartDeviceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartDeviceRequest.ProtoReflect.Descriptor instead. func (*StartDeviceRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{53} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{88} } func (x *StartDeviceRequest) GetScopes() []string { @@ -3240,7 +5215,7 @@ type StartDeviceResponse struct { func (x *StartDeviceResponse) Reset() { *x = StartDeviceResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[54] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3252,7 +5227,7 @@ func (x *StartDeviceResponse) String() string { func (*StartDeviceResponse) ProtoMessage() {} func (x *StartDeviceResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[54] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[89] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3265,7 +5240,7 @@ func (x *StartDeviceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartDeviceResponse.ProtoReflect.Descriptor instead. func (*StartDeviceResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{54} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{89} } func (x *StartDeviceResponse) GetDeviceCode() string { @@ -3312,7 +5287,7 @@ type PollDeviceRequest struct { func (x *PollDeviceRequest) Reset() { *x = PollDeviceRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[55] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3324,7 +5299,7 @@ func (x *PollDeviceRequest) String() string { func (*PollDeviceRequest) ProtoMessage() {} func (x *PollDeviceRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[55] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[90] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3337,7 +5312,7 @@ func (x *PollDeviceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PollDeviceRequest.ProtoReflect.Descriptor instead. func (*PollDeviceRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{55} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{90} } func (x *PollDeviceRequest) GetDeviceCode() string { @@ -3357,7 +5332,7 @@ type PollDeviceResponse struct { func (x *PollDeviceResponse) Reset() { *x = PollDeviceResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[56] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3369,7 +5344,7 @@ func (x *PollDeviceResponse) String() string { func (*PollDeviceResponse) ProtoMessage() {} func (x *PollDeviceResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[56] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[91] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3382,7 +5357,7 @@ func (x *PollDeviceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PollDeviceResponse.ProtoReflect.Descriptor instead. func (*PollDeviceResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{56} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{91} } func (x *PollDeviceResponse) GetAccessToken() string { @@ -3408,7 +5383,7 @@ type ApproveDeviceRequest struct { func (x *ApproveDeviceRequest) Reset() { *x = ApproveDeviceRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[57] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3420,7 +5395,7 @@ func (x *ApproveDeviceRequest) String() string { func (*ApproveDeviceRequest) ProtoMessage() {} func (x *ApproveDeviceRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[57] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[92] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3433,7 +5408,7 @@ func (x *ApproveDeviceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApproveDeviceRequest.ProtoReflect.Descriptor instead. func (*ApproveDeviceRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{57} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{92} } func (x *ApproveDeviceRequest) GetUserCode() string { @@ -3451,7 +5426,7 @@ type ApproveDeviceResponse struct { func (x *ApproveDeviceResponse) Reset() { *x = ApproveDeviceResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[58] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3463,7 +5438,7 @@ func (x *ApproveDeviceResponse) String() string { func (*ApproveDeviceResponse) ProtoMessage() {} func (x *ApproveDeviceResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[58] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[93] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3476,7 +5451,7 @@ func (x *ApproveDeviceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ApproveDeviceResponse.ProtoReflect.Descriptor instead. func (*ApproveDeviceResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{58} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{93} } type DenyDeviceRequest struct { @@ -3488,7 +5463,7 @@ type DenyDeviceRequest struct { func (x *DenyDeviceRequest) Reset() { *x = DenyDeviceRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[59] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3500,7 +5475,7 @@ func (x *DenyDeviceRequest) String() string { func (*DenyDeviceRequest) ProtoMessage() {} func (x *DenyDeviceRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[59] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[94] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3513,7 +5488,7 @@ func (x *DenyDeviceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DenyDeviceRequest.ProtoReflect.Descriptor instead. func (*DenyDeviceRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{59} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{94} } func (x *DenyDeviceRequest) GetUserCode() string { @@ -3531,7 +5506,7 @@ type DenyDeviceResponse struct { func (x *DenyDeviceResponse) Reset() { *x = DenyDeviceResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[60] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3543,7 +5518,7 @@ func (x *DenyDeviceResponse) String() string { func (*DenyDeviceResponse) ProtoMessage() {} func (x *DenyDeviceResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[60] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[95] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3556,7 +5531,7 @@ func (x *DenyDeviceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DenyDeviceResponse.ProtoReflect.Descriptor instead. func (*DenyDeviceResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{60} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{95} } type GetDeviceStatusRequest struct { @@ -3568,7 +5543,7 @@ type GetDeviceStatusRequest struct { func (x *GetDeviceStatusRequest) Reset() { *x = GetDeviceStatusRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[61] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3580,7 +5555,7 @@ func (x *GetDeviceStatusRequest) String() string { func (*GetDeviceStatusRequest) ProtoMessage() {} func (x *GetDeviceStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[61] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[96] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3593,7 +5568,7 @@ func (x *GetDeviceStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDeviceStatusRequest.ProtoReflect.Descriptor instead. func (*GetDeviceStatusRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{61} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{96} } func (x *GetDeviceStatusRequest) GetUserCode() string { @@ -3615,7 +5590,7 @@ type GetDeviceStatusResponse struct { func (x *GetDeviceStatusResponse) Reset() { *x = GetDeviceStatusResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[62] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3627,7 +5602,7 @@ func (x *GetDeviceStatusResponse) String() string { func (*GetDeviceStatusResponse) ProtoMessage() {} func (x *GetDeviceStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[62] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[97] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3640,7 +5615,7 @@ func (x *GetDeviceStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDeviceStatusResponse.ProtoReflect.Descriptor instead. func (*GetDeviceStatusResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{62} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{97} } func (x *GetDeviceStatusResponse) GetValid() bool { @@ -3679,7 +5654,7 @@ type WhoamiRequest struct { func (x *WhoamiRequest) Reset() { *x = WhoamiRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[63] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3691,7 +5666,7 @@ func (x *WhoamiRequest) String() string { func (*WhoamiRequest) ProtoMessage() {} func (x *WhoamiRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[63] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[98] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3704,7 +5679,7 @@ func (x *WhoamiRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WhoamiRequest.ProtoReflect.Descriptor instead. func (*WhoamiRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{63} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{98} } type WhoamiResponse struct { @@ -3718,7 +5693,7 @@ type WhoamiResponse struct { func (x *WhoamiResponse) Reset() { *x = WhoamiResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[64] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3730,7 +5705,7 @@ func (x *WhoamiResponse) String() string { func (*WhoamiResponse) ProtoMessage() {} func (x *WhoamiResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[64] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[99] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3743,7 +5718,7 @@ func (x *WhoamiResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WhoamiResponse.ProtoReflect.Descriptor instead. func (*WhoamiResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{64} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{99} } func (x *WhoamiResponse) GetUserId() string { @@ -3783,7 +5758,7 @@ type MyAccount struct { func (x *MyAccount) Reset() { *x = MyAccount{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[65] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3795,7 +5770,7 @@ func (x *MyAccount) String() string { func (*MyAccount) ProtoMessage() {} func (x *MyAccount) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[65] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[100] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3808,7 +5783,7 @@ func (x *MyAccount) ProtoReflect() protoreflect.Message { // Deprecated: Use MyAccount.ProtoReflect.Descriptor instead. func (*MyAccount) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{65} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{100} } func (x *MyAccount) GetId() string { @@ -3840,7 +5815,7 @@ type ListMyAccountsForCLIRequest struct { func (x *ListMyAccountsForCLIRequest) Reset() { *x = ListMyAccountsForCLIRequest{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[66] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3852,7 +5827,7 @@ func (x *ListMyAccountsForCLIRequest) String() string { func (*ListMyAccountsForCLIRequest) ProtoMessage() {} func (x *ListMyAccountsForCLIRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[66] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[101] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3865,7 +5840,7 @@ func (x *ListMyAccountsForCLIRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMyAccountsForCLIRequest.ProtoReflect.Descriptor instead. func (*ListMyAccountsForCLIRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{66} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{101} } type ListMyAccountsForCLIResponse struct { @@ -3877,7 +5852,7 @@ type ListMyAccountsForCLIResponse struct { func (x *ListMyAccountsForCLIResponse) Reset() { *x = ListMyAccountsForCLIResponse{} - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[67] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3889,7 +5864,7 @@ func (x *ListMyAccountsForCLIResponse) String() string { func (*ListMyAccountsForCLIResponse) ProtoMessage() {} func (x *ListMyAccountsForCLIResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[67] + mi := &file_orchestrator_v1_plugin_registry_proto_msgTypes[102] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3902,7 +5877,7 @@ func (x *ListMyAccountsForCLIResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMyAccountsForCLIResponse.ProtoReflect.Descriptor instead. func (*ListMyAccountsForCLIResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{67} + return file_orchestrator_v1_plugin_registry_proto_rawDescGZIP(), []int{102} } func (x *ListMyAccountsForCLIResponse) GetAccounts() []*MyAccount { @@ -3922,7 +5897,7 @@ const file_orchestrator_v1_plugin_registry_proto_rawDesc = "" + "\x04slug\x18\x02 \x01(\tR\x04slug\x12!\n" + "\fdisplay_name\x18\x03 \x01(\tR\vdisplayName\x129\n" + "\n" + - "created_at\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\"\x90\x04\n" + + "created_at\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\"\xf7\x04\n" + "\x06Plugin\x12\x0e\n" + "\x02id\x18\x01 \x01(\tR\x02id\x12\x1d\n" + "\n" + @@ -3945,7 +5920,17 @@ const file_orchestrator_v1_plugin_registry_proto_rawDesc = "" + "\x10owner_account_id\x18\f \x01(\tR\x0eownerAccountId\x12%\n" + "\x0elatest_version\x18\r \x01(\tR\rlatestVersion\x12\x12\n" + "\x04tags\x18\x0e \x03(\tR\x04tags\x12*\n" + - "\x11preview_image_url\x18\x0f \x01(\tR\x0fpreviewImageUrl\"\x82\x01\n" + + "\x11preview_image_url\x18\x0f \x01(\tR\x0fpreviewImageUrl\x12\x1d\n" + + "\n" + + "rating_avg\x18\x10 \x01(\x02R\tratingAvg\x12!\n" + + "\frating_count\x18\x11 \x01(\x05R\vratingCount\x12#\n" + + "\rinstall_count\x18\x12 \x01(\x05R\finstallCount\"\x8f\x01\n" + + "\x10PluginScreenshot\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x10\n" + + "\x03url\x18\x02 \x01(\tR\x03url\x12\x1a\n" + + "\bfeatured\x18\x03 \x01(\bR\bfeatured\x12\x1a\n" + + "\bposition\x18\x04 \x01(\x05R\bposition\x12!\n" + + "\fcontent_type\x18\x05 \x01(\tR\vcontentType\"\x82\x01\n" + "\bCategory\x12\x12\n" + "\x04slug\x18\x01 \x01(\tR\x04slug\x12!\n" + "\fdisplay_name\x18\x02 \x01(\tR\vdisplayName\x12 \n" + @@ -4006,11 +5991,12 @@ const file_orchestrator_v1_plugin_registry_proto_rawDesc = "" + "\n" + "scope_slug\x18\x01 \x01(\tR\tscopeSlug\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12*\n" + - "\x11active_account_id\x18\x03 \x01(\tR\x0factiveAccountId\"\x85\x02\n" + + "\x11active_account_id\x18\x03 \x01(\tR\x0factiveAccountId\"\xca\x02\n" + "\x11GetPluginResponse\x12/\n" + "\x06plugin\x18\x01 \x01(\v2\x17.orchestrator.v1.PluginR\x06plugin\x124\n" + "\bversions\x18\x02 \x03(\v2\x18.orchestrator.v1.VersionR\bversions\x12L\n" + - "\bchannels\x18\x03 \x03(\v20.orchestrator.v1.GetPluginResponse.ChannelsEntryR\bchannels\x1a;\n" + + "\bchannels\x18\x03 \x03(\v20.orchestrator.v1.GetPluginResponse.ChannelsEntryR\bchannels\x12C\n" + + "\vscreenshots\x18\x04 \x03(\v2!.orchestrator.v1.PluginScreenshotR\vscreenshots\x1a;\n" + "\rChannelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xa0\x01\n" + @@ -4115,13 +6101,15 @@ const file_orchestrator_v1_plugin_registry_proto_rawDesc = "" + "abiVersion\"G\n" + "$ListPrivatePluginsForInstanceRequest\x12\x1f\n" + "\vinstance_id\x18\x01 \x01(\tR\n" + - "instanceId\"\x92\x01\n" + + "instanceId\"\xb1\x01\n" + " ResolveInstallForInstanceRequest\x12\x1f\n" + "\vinstance_id\x18\x01 \x01(\tR\n" + "instanceId\x12\x1f\n" + "\vplugin_name\x18\x02 \x01(\tR\n" + "pluginName\x12,\n" + - "\x12version_or_channel\x18\x03 \x01(\tR\x10versionOrChannel\"\xa9\x02\n" + + "\x12version_or_channel\x18\x03 \x01(\tR\x10versionOrChannel\x12\x1d\n" + + "\n" + + "scope_slug\x18\x04 \x01(\tR\tscopeSlug\"\xa9\x02\n" + "\rPendingReview\x12\x1b\n" + "\treview_id\x18\x01 \x01(\tR\breviewId\x12\x1b\n" + "\tplugin_id\x18\x02 \x01(\tR\bpluginId\x12\x1d\n" + @@ -4154,7 +6142,131 @@ const file_orchestrator_v1_plugin_registry_proto_rawDesc = "" + "\x15RequestChangesRequest\x12\x1b\n" + "\tplugin_id\x18\x01 \x01(\tR\bpluginId\x12\x16\n" + "\x06reason\x18\x02 \x01(\tR\x06reason\"\x18\n" + - "\x16RequestChangesResponse\"\xc2\x01\n" + + "\x16RequestChangesResponse\"X\n" + + "\x16ListScreenshotsRequest\x12\x1d\n" + + "\n" + + "scope_slug\x18\x01 \x01(\tR\tscopeSlug\x12\x1f\n" + + "\vplugin_name\x18\x02 \x01(\tR\n" + + "pluginName\"^\n" + + "\x17ListScreenshotsResponse\x12C\n" + + "\vscreenshots\x18\x01 \x03(\v2!.orchestrator.v1.PluginScreenshotR\vscreenshots\"\x8b\x01\n" + + "\x17UploadScreenshotRequest\x12\x1b\n" + + "\tplugin_id\x18\x01 \x01(\tR\bpluginId\x12\x14\n" + + "\x05image\x18\x02 \x01(\fR\x05image\x12\x1a\n" + + "\bfilename\x18\x03 \x01(\tR\bfilename\x12!\n" + + "\fcontent_type\x18\x04 \x01(\tR\vcontentType\"]\n" + + "\x18UploadScreenshotResponse\x12A\n" + + "\n" + + "screenshot\x18\x01 \x01(\v2!.orchestrator.v1.PluginScreenshotR\n" + + "screenshot\"[\n" + + "\x17DeleteScreenshotRequest\x12\x1b\n" + + "\tplugin_id\x18\x01 \x01(\tR\bpluginId\x12#\n" + + "\rscreenshot_id\x18\x02 \x01(\tR\fscreenshotId\"\x1a\n" + + "\x18DeleteScreenshotResponse\"o\n" + + "\x19ReorderScreenshotsRequest\x12\x1b\n" + + "\tplugin_id\x18\x01 \x01(\tR\bpluginId\x125\n" + + "\x17screenshot_ids_in_order\x18\x02 \x03(\tR\x14screenshotIdsInOrder\"a\n" + + "\x1aReorderScreenshotsResponse\x12C\n" + + "\vscreenshots\x18\x01 \x03(\v2!.orchestrator.v1.PluginScreenshotR\vscreenshots\"`\n" + + "\x1cSetFeaturedScreenshotRequest\x12\x1b\n" + + "\tplugin_id\x18\x01 \x01(\tR\bpluginId\x12#\n" + + "\rscreenshot_id\x18\x02 \x01(\tR\fscreenshotId\"\x1f\n" + + "\x1dSetFeaturedScreenshotResponse\"\xfb\x03\n" + + "\fPluginReview\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x1b\n" + + "\tplugin_id\x18\x02 \x01(\tR\bpluginId\x12\x17\n" + + "\auser_id\x18\x03 \x01(\tR\x06userId\x12.\n" + + "\x13author_display_name\x18\x04 \x01(\tR\x11authorDisplayName\x12\x16\n" + + "\x06rating\x18\x05 \x01(\x05R\x06rating\x12\x14\n" + + "\x05title\x18\x06 \x01(\tR\x05title\x12\x12\n" + + "\x04body\x18\a \x01(\tR\x04body\x12*\n" + + "\x11version_at_review\x18\b \x01(\tR\x0fversionAtReview\x12\x16\n" + + "\x06edited\x18\t \x01(\bR\x06edited\x129\n" + + "\n" + + "created_at\x18\n" + + " \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\x129\n" + + "\n" + + "updated_at\x18\v \x01(\v2\x1a.google.protobuf.TimestampR\tupdatedAt\x128\n" + + "\x05reply\x18\f \x01(\v2\".orchestrator.v1.PluginReviewReplyR\x05reply\x12\x18\n" + + "\adeleted\x18\r \x01(\bR\adeleted\x12%\n" + + "\x0edeleted_reason\x18\x0e \x01(\tR\rdeletedReason\"\xba\x01\n" + + "\x11PluginReviewReply\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12.\n" + + "\x13author_display_name\x18\x02 \x01(\tR\x11authorDisplayName\x12\x12\n" + + "\x04body\x18\x03 \x01(\tR\x04body\x12\x16\n" + + "\x06edited\x18\x04 \x01(\bR\x06edited\x129\n" + + "\n" + + "created_at\x18\x05 \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\"\xcb\x01\n" + + "\x0fReviewAggregate\x12\x1d\n" + + "\n" + + "rating_avg\x18\x01 \x01(\x02R\tratingAvg\x12!\n" + + "\frating_count\x18\x02 \x01(\x05R\vratingCount\x12\x16\n" + + "\x06count1\x18\x03 \x01(\x05R\x06count1\x12\x16\n" + + "\x06count2\x18\x04 \x01(\x05R\x06count2\x12\x16\n" + + "\x06count3\x18\x05 \x01(\x05R\x06count3\x12\x16\n" + + "\x06count4\x18\x06 \x01(\x05R\x06count4\x12\x16\n" + + "\x06count5\x18\a \x01(\x05R\x06count5\"\x82\x01\n" + + "\x12ListReviewsRequest\x12\x1d\n" + + "\n" + + "scope_slug\x18\x01 \x01(\tR\tscopeSlug\x12\x1f\n" + + "\vplugin_name\x18\x02 \x01(\tR\n" + + "pluginName\x12\x14\n" + + "\x05limit\x18\x03 \x01(\x05R\x05limit\x12\x16\n" + + "\x06offset\x18\x04 \x01(\x05R\x06offset\"\x8e\x01\n" + + "\x13ListReviewsResponse\x127\n" + + "\areviews\x18\x01 \x03(\v2\x1d.orchestrator.v1.PluginReviewR\areviews\x12>\n" + + "\taggregate\x18\x02 \x01(\v2 .orchestrator.v1.ReviewAggregateR\taggregate\"1\n" + + "\x12GetMyReviewRequest\x12\x1b\n" + + "\tplugin_id\x18\x01 \x01(\tR\bpluginId\"\x95\x01\n" + + "\x13GetMyReviewResponse\x125\n" + + "\x06review\x18\x01 \x01(\v2\x1d.orchestrator.v1.PluginReviewR\x06review\x12\x1a\n" + + "\beligible\x18\x02 \x01(\bR\beligible\x12+\n" + + "\x11ineligible_reason\x18\x03 \x01(\tR\x10ineligibleReason\"t\n" + + "\x13UpsertReviewRequest\x12\x1b\n" + + "\tplugin_id\x18\x01 \x01(\tR\bpluginId\x12\x16\n" + + "\x06rating\x18\x02 \x01(\x05R\x06rating\x12\x14\n" + + "\x05title\x18\x03 \x01(\tR\x05title\x12\x12\n" + + "\x04body\x18\x04 \x01(\tR\x04body\"M\n" + + "\x14UpsertReviewResponse\x125\n" + + "\x06review\x18\x01 \x01(\v2\x1d.orchestrator.v1.PluginReviewR\x06review\"2\n" + + "\x13DeleteReviewRequest\x12\x1b\n" + + "\tplugin_id\x18\x01 \x01(\tR\bpluginId\"\x16\n" + + "\x14DeleteReviewResponse\"G\n" + + "\x14ReplyToReviewRequest\x12\x1b\n" + + "\treview_id\x18\x01 \x01(\tR\breviewId\x12\x12\n" + + "\x04body\x18\x02 \x01(\tR\x04body\"Q\n" + + "\x15ReplyToReviewResponse\x128\n" + + "\x05reply\x18\x01 \x01(\v2\".orchestrator.v1.PluginReviewReplyR\x05reply\"1\n" + + "\x12DeleteReplyRequest\x12\x1b\n" + + "\treview_id\x18\x01 \x01(\tR\breviewId\"\x15\n" + + "\x13DeleteReplyResponse\"H\n" + + "\x11FlagReviewRequest\x12\x1b\n" + + "\treview_id\x18\x01 \x01(\tR\breviewId\x12\x16\n" + + "\x06reason\x18\x02 \x01(\tR\x06reason\"\x14\n" + + "\x12FlagReviewResponse\"\x8e\x02\n" + + "\rFlaggedReview\x125\n" + + "\x06review\x18\x01 \x01(\v2\x1d.orchestrator.v1.PluginReviewR\x06review\x12\x1d\n" + + "\n" + + "scope_slug\x18\x02 \x01(\tR\tscopeSlug\x12\x1f\n" + + "\vplugin_name\x18\x03 \x01(\tR\n" + + "pluginName\x12\x1d\n" + + "\n" + + "flag_count\x18\x04 \x01(\x05R\tflagCount\x12!\n" + + "\fflag_reasons\x18\x05 \x03(\tR\vflagReasons\x12D\n" + + "\x10first_flagged_at\x18\x06 \x01(\v2\x1a.google.protobuf.TimestampR\x0efirstFlaggedAt\"I\n" + + "\x19ListFlaggedReviewsRequest\x12\x14\n" + + "\x05limit\x18\x01 \x01(\x05R\x05limit\x12\x16\n" + + "\x06offset\x18\x02 \x01(\x05R\x06offset\"V\n" + + "\x1aListFlaggedReviewsResponse\x128\n" + + "\areviews\x18\x01 \x03(\v2\x1e.orchestrator.v1.FlaggedReviewR\areviews\"N\n" + + "\x17SoftDeleteReviewRequest\x12\x1b\n" + + "\treview_id\x18\x01 \x01(\tR\breviewId\x12\x16\n" + + "\x06reason\x18\x02 \x01(\tR\x06reason\"\x1a\n" + + "\x18SoftDeleteReviewResponse\"M\n" + + "\x16SoftDeleteReplyRequest\x12\x1b\n" + + "\treview_id\x18\x01 \x01(\tR\breviewId\x12\x16\n" + + "\x06reason\x18\x02 \x01(\tR\x06reason\"\x19\n" + + "\x17SoftDeleteReplyResponse\"\xc2\x01\n" + "\x15PublishVersionRequest\x12\x1b\n" + "\tplugin_id\x18\x01 \x01(\tR\bpluginId\x12\x18\n" + "\aversion\x18\x02 \x01(\tR\aversion\x12\x18\n" + @@ -4236,12 +6348,30 @@ const file_orchestrator_v1_plugin_registry_proto_rawDesc = "" + "\x1aDeletePrivatePluginVersion\x122.orchestrator.v1.DeletePrivatePluginVersionRequest\x1a3.orchestrator.v1.DeletePrivatePluginVersionResponse\x12\x8e\x01\n" + "\x1dListPrivatePluginInstallSites\x125.orchestrator.v1.ListPrivatePluginInstallSitesRequest\x1a6.orchestrator.v1.ListPrivatePluginInstallSitesResponse\x12\x83\x01\n" + "\x1dListPrivatePluginsForInstance\x125.orchestrator.v1.ListPrivatePluginsForInstanceRequest\x1a+.orchestrator.v1.ListPrivatePluginsResponse\x12w\n" + - "\x19ResolveInstallForInstance\x121.orchestrator.v1.ResolveInstallForInstanceRequest\x1a'.orchestrator.v1.ResolveInstallResponse2\xc0\x03\n" + + "\x19ResolveInstallForInstance\x121.orchestrator.v1.ResolveInstallForInstanceRequest\x1a'.orchestrator.v1.ResolveInstallResponse2\xfe\x05\n" + "\x17PluginModerationService\x12m\n" + "\x12ListPendingReviews\x12*.orchestrator.v1.ListPendingReviewsRequest\x1a+.orchestrator.v1.ListPendingReviewsResponse\x12j\n" + "\x11ApproveSubmission\x12).orchestrator.v1.ApproveSubmissionRequest\x1a*.orchestrator.v1.ApproveSubmissionResponse\x12g\n" + "\x10RejectSubmission\x12(.orchestrator.v1.RejectSubmissionRequest\x1a).orchestrator.v1.RejectSubmissionResponse\x12a\n" + - "\x0eRequestChanges\x12&.orchestrator.v1.RequestChangesRequest\x1a'.orchestrator.v1.RequestChangesResponse2y\n" + + "\x0eRequestChanges\x12&.orchestrator.v1.RequestChangesRequest\x1a'.orchestrator.v1.RequestChangesResponse\x12m\n" + + "\x12ListFlaggedReviews\x12*.orchestrator.v1.ListFlaggedReviewsRequest\x1a+.orchestrator.v1.ListFlaggedReviewsResponse\x12g\n" + + "\x10SoftDeleteReview\x12(.orchestrator.v1.SoftDeleteReviewRequest\x1a).orchestrator.v1.SoftDeleteReviewResponse\x12d\n" + + "\x0fSoftDeleteReply\x12'.orchestrator.v1.SoftDeleteReplyRequest\x1a(.orchestrator.v1.SoftDeleteReplyResponse2\xb5\x04\n" + + "\x14PluginGalleryService\x12d\n" + + "\x0fListScreenshots\x12'.orchestrator.v1.ListScreenshotsRequest\x1a(.orchestrator.v1.ListScreenshotsResponse\x12g\n" + + "\x10UploadScreenshot\x12(.orchestrator.v1.UploadScreenshotRequest\x1a).orchestrator.v1.UploadScreenshotResponse\x12g\n" + + "\x10DeleteScreenshot\x12(.orchestrator.v1.DeleteScreenshotRequest\x1a).orchestrator.v1.DeleteScreenshotResponse\x12m\n" + + "\x12ReorderScreenshots\x12*.orchestrator.v1.ReorderScreenshotsRequest\x1a+.orchestrator.v1.ReorderScreenshotsResponse\x12v\n" + + "\x15SetFeaturedScreenshot\x12-.orchestrator.v1.SetFeaturedScreenshotRequest\x1a..orchestrator.v1.SetFeaturedScreenshotResponse2\x94\x05\n" + + "\x13PluginReviewService\x12X\n" + + "\vListReviews\x12#.orchestrator.v1.ListReviewsRequest\x1a$.orchestrator.v1.ListReviewsResponse\x12X\n" + + "\vGetMyReview\x12#.orchestrator.v1.GetMyReviewRequest\x1a$.orchestrator.v1.GetMyReviewResponse\x12[\n" + + "\fUpsertReview\x12$.orchestrator.v1.UpsertReviewRequest\x1a%.orchestrator.v1.UpsertReviewResponse\x12[\n" + + "\fDeleteReview\x12$.orchestrator.v1.DeleteReviewRequest\x1a%.orchestrator.v1.DeleteReviewResponse\x12^\n" + + "\rReplyToReview\x12%.orchestrator.v1.ReplyToReviewRequest\x1a&.orchestrator.v1.ReplyToReviewResponse\x12X\n" + + "\vDeleteReply\x12#.orchestrator.v1.DeleteReplyRequest\x1a$.orchestrator.v1.DeleteReplyResponse\x12U\n" + + "\n" + + "FlagReview\x12\".orchestrator.v1.FlagReviewRequest\x1a#.orchestrator.v1.FlagReviewResponse2y\n" + "\x14PluginPublishService\x12a\n" + "\x0ePublishVersion\x12&.orchestrator.v1.PublishVersionRequest\x1a'.orchestrator.v1.PublishVersionResponse2\xa1\x05\n" + "\x11PluginAuthService\x12X\n" + @@ -4269,175 +6399,256 @@ func file_orchestrator_v1_plugin_registry_proto_rawDescGZIP() []byte { } var file_orchestrator_v1_plugin_registry_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_orchestrator_v1_plugin_registry_proto_msgTypes = make([]protoimpl.MessageInfo, 70) +var file_orchestrator_v1_plugin_registry_proto_msgTypes = make([]protoimpl.MessageInfo, 105) var file_orchestrator_v1_plugin_registry_proto_goTypes = []any{ (PluginVisibility)(0), // 0: orchestrator.v1.PluginVisibility (*Scope)(nil), // 1: orchestrator.v1.Scope (*Plugin)(nil), // 2: orchestrator.v1.Plugin - (*Category)(nil), // 3: orchestrator.v1.Category - (*Version)(nil), // 4: orchestrator.v1.Version - (*Requirement)(nil), // 5: orchestrator.v1.Requirement - (*CreateScopeRequest)(nil), // 6: orchestrator.v1.CreateScopeRequest - (*CreateScopeResponse)(nil), // 7: orchestrator.v1.CreateScopeResponse - (*ListMyScopesRequest)(nil), // 8: orchestrator.v1.ListMyScopesRequest - (*ListMyScopesResponse)(nil), // 9: orchestrator.v1.ListMyScopesResponse - (*GetScopeRequest)(nil), // 10: orchestrator.v1.GetScopeRequest - (*GetScopeResponse)(nil), // 11: orchestrator.v1.GetScopeResponse - (*ListMyPluginsRequest)(nil), // 12: orchestrator.v1.ListMyPluginsRequest - (*ListMyPluginsResponse)(nil), // 13: orchestrator.v1.ListMyPluginsResponse - (*CreatePluginRequest)(nil), // 14: orchestrator.v1.CreatePluginRequest - (*CreatePluginResponse)(nil), // 15: orchestrator.v1.CreatePluginResponse - (*GetPluginRequest)(nil), // 16: orchestrator.v1.GetPluginRequest - (*GetPluginResponse)(nil), // 17: orchestrator.v1.GetPluginResponse - (*ListPluginsRequest)(nil), // 18: orchestrator.v1.ListPluginsRequest - (*ListPluginsResponse)(nil), // 19: orchestrator.v1.ListPluginsResponse - (*ListCategoriesRequest)(nil), // 20: orchestrator.v1.ListCategoriesRequest - (*ListCategoriesResponse)(nil), // 21: orchestrator.v1.ListCategoriesResponse - (*ListTagsRequest)(nil), // 22: orchestrator.v1.ListTagsRequest - (*ListTagsResponse)(nil), // 23: orchestrator.v1.ListTagsResponse - (*TagCount)(nil), // 24: orchestrator.v1.TagCount - (*ListPrivatePluginsRequest)(nil), // 25: orchestrator.v1.ListPrivatePluginsRequest - (*ListPrivatePluginsResponse)(nil), // 26: orchestrator.v1.ListPrivatePluginsResponse - (*PrivatePluginSummary)(nil), // 27: orchestrator.v1.PrivatePluginSummary - (*DeletePrivatePluginRequest)(nil), // 28: orchestrator.v1.DeletePrivatePluginRequest - (*DeletePrivatePluginResponse)(nil), // 29: orchestrator.v1.DeletePrivatePluginResponse - (*DeletePrivatePluginVersionRequest)(nil), // 30: orchestrator.v1.DeletePrivatePluginVersionRequest - (*DeletePrivatePluginVersionResponse)(nil), // 31: orchestrator.v1.DeletePrivatePluginVersionResponse - (*ListPrivatePluginInstallSitesRequest)(nil), // 32: orchestrator.v1.ListPrivatePluginInstallSitesRequest - (*ListPrivatePluginInstallSitesResponse)(nil), // 33: orchestrator.v1.ListPrivatePluginInstallSitesResponse - (*PrivatePluginInstallSite)(nil), // 34: orchestrator.v1.PrivatePluginInstallSite - (*GetVersionRequest)(nil), // 35: orchestrator.v1.GetVersionRequest - (*GetVersionResponse)(nil), // 36: orchestrator.v1.GetVersionResponse - (*ResolveInstallRequest)(nil), // 37: orchestrator.v1.ResolveInstallRequest - (*ResolveInstallResponse)(nil), // 38: orchestrator.v1.ResolveInstallResponse - (*ListPrivatePluginsForInstanceRequest)(nil), // 39: orchestrator.v1.ListPrivatePluginsForInstanceRequest - (*ResolveInstallForInstanceRequest)(nil), // 40: orchestrator.v1.ResolveInstallForInstanceRequest - (*PendingReview)(nil), // 41: orchestrator.v1.PendingReview - (*SubmitForReviewRequest)(nil), // 42: orchestrator.v1.SubmitForReviewRequest - (*SubmitForReviewResponse)(nil), // 43: orchestrator.v1.SubmitForReviewResponse - (*ListPendingReviewsRequest)(nil), // 44: orchestrator.v1.ListPendingReviewsRequest - (*ListPendingReviewsResponse)(nil), // 45: orchestrator.v1.ListPendingReviewsResponse - (*ApproveSubmissionRequest)(nil), // 46: orchestrator.v1.ApproveSubmissionRequest - (*ApproveSubmissionResponse)(nil), // 47: orchestrator.v1.ApproveSubmissionResponse - (*RejectSubmissionRequest)(nil), // 48: orchestrator.v1.RejectSubmissionRequest - (*RejectSubmissionResponse)(nil), // 49: orchestrator.v1.RejectSubmissionResponse - (*RequestChangesRequest)(nil), // 50: orchestrator.v1.RequestChangesRequest - (*RequestChangesResponse)(nil), // 51: orchestrator.v1.RequestChangesResponse - (*PublishVersionRequest)(nil), // 52: orchestrator.v1.PublishVersionRequest - (*PublishVersionResponse)(nil), // 53: orchestrator.v1.PublishVersionResponse - (*StartDeviceRequest)(nil), // 54: orchestrator.v1.StartDeviceRequest - (*StartDeviceResponse)(nil), // 55: orchestrator.v1.StartDeviceResponse - (*PollDeviceRequest)(nil), // 56: orchestrator.v1.PollDeviceRequest - (*PollDeviceResponse)(nil), // 57: orchestrator.v1.PollDeviceResponse - (*ApproveDeviceRequest)(nil), // 58: orchestrator.v1.ApproveDeviceRequest - (*ApproveDeviceResponse)(nil), // 59: orchestrator.v1.ApproveDeviceResponse - (*DenyDeviceRequest)(nil), // 60: orchestrator.v1.DenyDeviceRequest - (*DenyDeviceResponse)(nil), // 61: orchestrator.v1.DenyDeviceResponse - (*GetDeviceStatusRequest)(nil), // 62: orchestrator.v1.GetDeviceStatusRequest - (*GetDeviceStatusResponse)(nil), // 63: orchestrator.v1.GetDeviceStatusResponse - (*WhoamiRequest)(nil), // 64: orchestrator.v1.WhoamiRequest - (*WhoamiResponse)(nil), // 65: orchestrator.v1.WhoamiResponse - (*MyAccount)(nil), // 66: orchestrator.v1.MyAccount - (*ListMyAccountsForCLIRequest)(nil), // 67: orchestrator.v1.ListMyAccountsForCLIRequest - (*ListMyAccountsForCLIResponse)(nil), // 68: orchestrator.v1.ListMyAccountsForCLIResponse - nil, // 69: orchestrator.v1.GetPluginResponse.ChannelsEntry - nil, // 70: orchestrator.v1.PrivatePluginSummary.ChannelVersionsEntry - (*timestamppb.Timestamp)(nil), // 71: google.protobuf.Timestamp + (*PluginScreenshot)(nil), // 3: orchestrator.v1.PluginScreenshot + (*Category)(nil), // 4: orchestrator.v1.Category + (*Version)(nil), // 5: orchestrator.v1.Version + (*Requirement)(nil), // 6: orchestrator.v1.Requirement + (*CreateScopeRequest)(nil), // 7: orchestrator.v1.CreateScopeRequest + (*CreateScopeResponse)(nil), // 8: orchestrator.v1.CreateScopeResponse + (*ListMyScopesRequest)(nil), // 9: orchestrator.v1.ListMyScopesRequest + (*ListMyScopesResponse)(nil), // 10: orchestrator.v1.ListMyScopesResponse + (*GetScopeRequest)(nil), // 11: orchestrator.v1.GetScopeRequest + (*GetScopeResponse)(nil), // 12: orchestrator.v1.GetScopeResponse + (*ListMyPluginsRequest)(nil), // 13: orchestrator.v1.ListMyPluginsRequest + (*ListMyPluginsResponse)(nil), // 14: orchestrator.v1.ListMyPluginsResponse + (*CreatePluginRequest)(nil), // 15: orchestrator.v1.CreatePluginRequest + (*CreatePluginResponse)(nil), // 16: orchestrator.v1.CreatePluginResponse + (*GetPluginRequest)(nil), // 17: orchestrator.v1.GetPluginRequest + (*GetPluginResponse)(nil), // 18: orchestrator.v1.GetPluginResponse + (*ListPluginsRequest)(nil), // 19: orchestrator.v1.ListPluginsRequest + (*ListPluginsResponse)(nil), // 20: orchestrator.v1.ListPluginsResponse + (*ListCategoriesRequest)(nil), // 21: orchestrator.v1.ListCategoriesRequest + (*ListCategoriesResponse)(nil), // 22: orchestrator.v1.ListCategoriesResponse + (*ListTagsRequest)(nil), // 23: orchestrator.v1.ListTagsRequest + (*ListTagsResponse)(nil), // 24: orchestrator.v1.ListTagsResponse + (*TagCount)(nil), // 25: orchestrator.v1.TagCount + (*ListPrivatePluginsRequest)(nil), // 26: orchestrator.v1.ListPrivatePluginsRequest + (*ListPrivatePluginsResponse)(nil), // 27: orchestrator.v1.ListPrivatePluginsResponse + (*PrivatePluginSummary)(nil), // 28: orchestrator.v1.PrivatePluginSummary + (*DeletePrivatePluginRequest)(nil), // 29: orchestrator.v1.DeletePrivatePluginRequest + (*DeletePrivatePluginResponse)(nil), // 30: orchestrator.v1.DeletePrivatePluginResponse + (*DeletePrivatePluginVersionRequest)(nil), // 31: orchestrator.v1.DeletePrivatePluginVersionRequest + (*DeletePrivatePluginVersionResponse)(nil), // 32: orchestrator.v1.DeletePrivatePluginVersionResponse + (*ListPrivatePluginInstallSitesRequest)(nil), // 33: orchestrator.v1.ListPrivatePluginInstallSitesRequest + (*ListPrivatePluginInstallSitesResponse)(nil), // 34: orchestrator.v1.ListPrivatePluginInstallSitesResponse + (*PrivatePluginInstallSite)(nil), // 35: orchestrator.v1.PrivatePluginInstallSite + (*GetVersionRequest)(nil), // 36: orchestrator.v1.GetVersionRequest + (*GetVersionResponse)(nil), // 37: orchestrator.v1.GetVersionResponse + (*ResolveInstallRequest)(nil), // 38: orchestrator.v1.ResolveInstallRequest + (*ResolveInstallResponse)(nil), // 39: orchestrator.v1.ResolveInstallResponse + (*ListPrivatePluginsForInstanceRequest)(nil), // 40: orchestrator.v1.ListPrivatePluginsForInstanceRequest + (*ResolveInstallForInstanceRequest)(nil), // 41: orchestrator.v1.ResolveInstallForInstanceRequest + (*PendingReview)(nil), // 42: orchestrator.v1.PendingReview + (*SubmitForReviewRequest)(nil), // 43: orchestrator.v1.SubmitForReviewRequest + (*SubmitForReviewResponse)(nil), // 44: orchestrator.v1.SubmitForReviewResponse + (*ListPendingReviewsRequest)(nil), // 45: orchestrator.v1.ListPendingReviewsRequest + (*ListPendingReviewsResponse)(nil), // 46: orchestrator.v1.ListPendingReviewsResponse + (*ApproveSubmissionRequest)(nil), // 47: orchestrator.v1.ApproveSubmissionRequest + (*ApproveSubmissionResponse)(nil), // 48: orchestrator.v1.ApproveSubmissionResponse + (*RejectSubmissionRequest)(nil), // 49: orchestrator.v1.RejectSubmissionRequest + (*RejectSubmissionResponse)(nil), // 50: orchestrator.v1.RejectSubmissionResponse + (*RequestChangesRequest)(nil), // 51: orchestrator.v1.RequestChangesRequest + (*RequestChangesResponse)(nil), // 52: orchestrator.v1.RequestChangesResponse + (*ListScreenshotsRequest)(nil), // 53: orchestrator.v1.ListScreenshotsRequest + (*ListScreenshotsResponse)(nil), // 54: orchestrator.v1.ListScreenshotsResponse + (*UploadScreenshotRequest)(nil), // 55: orchestrator.v1.UploadScreenshotRequest + (*UploadScreenshotResponse)(nil), // 56: orchestrator.v1.UploadScreenshotResponse + (*DeleteScreenshotRequest)(nil), // 57: orchestrator.v1.DeleteScreenshotRequest + (*DeleteScreenshotResponse)(nil), // 58: orchestrator.v1.DeleteScreenshotResponse + (*ReorderScreenshotsRequest)(nil), // 59: orchestrator.v1.ReorderScreenshotsRequest + (*ReorderScreenshotsResponse)(nil), // 60: orchestrator.v1.ReorderScreenshotsResponse + (*SetFeaturedScreenshotRequest)(nil), // 61: orchestrator.v1.SetFeaturedScreenshotRequest + (*SetFeaturedScreenshotResponse)(nil), // 62: orchestrator.v1.SetFeaturedScreenshotResponse + (*PluginReview)(nil), // 63: orchestrator.v1.PluginReview + (*PluginReviewReply)(nil), // 64: orchestrator.v1.PluginReviewReply + (*ReviewAggregate)(nil), // 65: orchestrator.v1.ReviewAggregate + (*ListReviewsRequest)(nil), // 66: orchestrator.v1.ListReviewsRequest + (*ListReviewsResponse)(nil), // 67: orchestrator.v1.ListReviewsResponse + (*GetMyReviewRequest)(nil), // 68: orchestrator.v1.GetMyReviewRequest + (*GetMyReviewResponse)(nil), // 69: orchestrator.v1.GetMyReviewResponse + (*UpsertReviewRequest)(nil), // 70: orchestrator.v1.UpsertReviewRequest + (*UpsertReviewResponse)(nil), // 71: orchestrator.v1.UpsertReviewResponse + (*DeleteReviewRequest)(nil), // 72: orchestrator.v1.DeleteReviewRequest + (*DeleteReviewResponse)(nil), // 73: orchestrator.v1.DeleteReviewResponse + (*ReplyToReviewRequest)(nil), // 74: orchestrator.v1.ReplyToReviewRequest + (*ReplyToReviewResponse)(nil), // 75: orchestrator.v1.ReplyToReviewResponse + (*DeleteReplyRequest)(nil), // 76: orchestrator.v1.DeleteReplyRequest + (*DeleteReplyResponse)(nil), // 77: orchestrator.v1.DeleteReplyResponse + (*FlagReviewRequest)(nil), // 78: orchestrator.v1.FlagReviewRequest + (*FlagReviewResponse)(nil), // 79: orchestrator.v1.FlagReviewResponse + (*FlaggedReview)(nil), // 80: orchestrator.v1.FlaggedReview + (*ListFlaggedReviewsRequest)(nil), // 81: orchestrator.v1.ListFlaggedReviewsRequest + (*ListFlaggedReviewsResponse)(nil), // 82: orchestrator.v1.ListFlaggedReviewsResponse + (*SoftDeleteReviewRequest)(nil), // 83: orchestrator.v1.SoftDeleteReviewRequest + (*SoftDeleteReviewResponse)(nil), // 84: orchestrator.v1.SoftDeleteReviewResponse + (*SoftDeleteReplyRequest)(nil), // 85: orchestrator.v1.SoftDeleteReplyRequest + (*SoftDeleteReplyResponse)(nil), // 86: orchestrator.v1.SoftDeleteReplyResponse + (*PublishVersionRequest)(nil), // 87: orchestrator.v1.PublishVersionRequest + (*PublishVersionResponse)(nil), // 88: orchestrator.v1.PublishVersionResponse + (*StartDeviceRequest)(nil), // 89: orchestrator.v1.StartDeviceRequest + (*StartDeviceResponse)(nil), // 90: orchestrator.v1.StartDeviceResponse + (*PollDeviceRequest)(nil), // 91: orchestrator.v1.PollDeviceRequest + (*PollDeviceResponse)(nil), // 92: orchestrator.v1.PollDeviceResponse + (*ApproveDeviceRequest)(nil), // 93: orchestrator.v1.ApproveDeviceRequest + (*ApproveDeviceResponse)(nil), // 94: orchestrator.v1.ApproveDeviceResponse + (*DenyDeviceRequest)(nil), // 95: orchestrator.v1.DenyDeviceRequest + (*DenyDeviceResponse)(nil), // 96: orchestrator.v1.DenyDeviceResponse + (*GetDeviceStatusRequest)(nil), // 97: orchestrator.v1.GetDeviceStatusRequest + (*GetDeviceStatusResponse)(nil), // 98: orchestrator.v1.GetDeviceStatusResponse + (*WhoamiRequest)(nil), // 99: orchestrator.v1.WhoamiRequest + (*WhoamiResponse)(nil), // 100: orchestrator.v1.WhoamiResponse + (*MyAccount)(nil), // 101: orchestrator.v1.MyAccount + (*ListMyAccountsForCLIRequest)(nil), // 102: orchestrator.v1.ListMyAccountsForCLIRequest + (*ListMyAccountsForCLIResponse)(nil), // 103: orchestrator.v1.ListMyAccountsForCLIResponse + nil, // 104: orchestrator.v1.GetPluginResponse.ChannelsEntry + nil, // 105: orchestrator.v1.PrivatePluginSummary.ChannelVersionsEntry + (*timestamppb.Timestamp)(nil), // 106: google.protobuf.Timestamp } var file_orchestrator_v1_plugin_registry_proto_depIdxs = []int32{ - 71, // 0: orchestrator.v1.Scope.created_at:type_name -> google.protobuf.Timestamp - 0, // 1: orchestrator.v1.Plugin.visibility:type_name -> orchestrator.v1.PluginVisibility - 71, // 2: orchestrator.v1.Plugin.updated_at:type_name -> google.protobuf.Timestamp - 71, // 3: orchestrator.v1.Version.published_at:type_name -> google.protobuf.Timestamp - 1, // 4: orchestrator.v1.CreateScopeResponse.scope:type_name -> orchestrator.v1.Scope - 1, // 5: orchestrator.v1.ListMyScopesResponse.scopes:type_name -> orchestrator.v1.Scope - 1, // 6: orchestrator.v1.GetScopeResponse.scope:type_name -> orchestrator.v1.Scope - 2, // 7: orchestrator.v1.GetScopeResponse.plugins:type_name -> orchestrator.v1.Plugin - 2, // 8: orchestrator.v1.ListMyPluginsResponse.plugins:type_name -> orchestrator.v1.Plugin - 0, // 9: orchestrator.v1.CreatePluginRequest.visibility:type_name -> orchestrator.v1.PluginVisibility - 2, // 10: orchestrator.v1.CreatePluginResponse.plugin:type_name -> orchestrator.v1.Plugin - 2, // 11: orchestrator.v1.GetPluginResponse.plugin:type_name -> orchestrator.v1.Plugin - 4, // 12: orchestrator.v1.GetPluginResponse.versions:type_name -> orchestrator.v1.Version - 69, // 13: orchestrator.v1.GetPluginResponse.channels:type_name -> orchestrator.v1.GetPluginResponse.ChannelsEntry - 2, // 14: orchestrator.v1.ListPluginsResponse.plugins:type_name -> orchestrator.v1.Plugin - 3, // 15: orchestrator.v1.ListCategoriesResponse.categories:type_name -> orchestrator.v1.Category - 24, // 16: orchestrator.v1.ListTagsResponse.tags:type_name -> orchestrator.v1.TagCount - 27, // 17: orchestrator.v1.ListPrivatePluginsResponse.plugins:type_name -> orchestrator.v1.PrivatePluginSummary - 2, // 18: orchestrator.v1.PrivatePluginSummary.plugin:type_name -> orchestrator.v1.Plugin - 70, // 19: orchestrator.v1.PrivatePluginSummary.channel_versions:type_name -> orchestrator.v1.PrivatePluginSummary.ChannelVersionsEntry - 34, // 20: orchestrator.v1.ListPrivatePluginInstallSitesResponse.sites:type_name -> orchestrator.v1.PrivatePluginInstallSite - 4, // 21: orchestrator.v1.GetVersionResponse.version:type_name -> orchestrator.v1.Version - 5, // 22: orchestrator.v1.GetVersionResponse.requires:type_name -> orchestrator.v1.Requirement - 5, // 23: orchestrator.v1.ResolveInstallResponse.requires:type_name -> orchestrator.v1.Requirement - 71, // 24: orchestrator.v1.PendingReview.submitted_at:type_name -> google.protobuf.Timestamp - 41, // 25: orchestrator.v1.ListPendingReviewsResponse.reviews:type_name -> orchestrator.v1.PendingReview - 4, // 26: orchestrator.v1.PublishVersionResponse.version:type_name -> orchestrator.v1.Version - 66, // 27: orchestrator.v1.ListMyAccountsForCLIResponse.accounts:type_name -> orchestrator.v1.MyAccount - 6, // 28: orchestrator.v1.PluginScopeService.CreateScope:input_type -> orchestrator.v1.CreateScopeRequest - 8, // 29: orchestrator.v1.PluginScopeService.ListMyScopes:input_type -> orchestrator.v1.ListMyScopesRequest - 10, // 30: orchestrator.v1.PluginScopeService.GetScope:input_type -> orchestrator.v1.GetScopeRequest - 12, // 31: orchestrator.v1.PluginScopeService.ListMyPlugins:input_type -> orchestrator.v1.ListMyPluginsRequest - 14, // 32: orchestrator.v1.PluginRegistryService.CreatePlugin:input_type -> orchestrator.v1.CreatePluginRequest - 16, // 33: orchestrator.v1.PluginRegistryService.GetPlugin:input_type -> orchestrator.v1.GetPluginRequest - 18, // 34: orchestrator.v1.PluginRegistryService.ListPlugins:input_type -> orchestrator.v1.ListPluginsRequest - 35, // 35: orchestrator.v1.PluginRegistryService.GetVersion:input_type -> orchestrator.v1.GetVersionRequest - 37, // 36: orchestrator.v1.PluginRegistryService.ResolveInstall:input_type -> orchestrator.v1.ResolveInstallRequest - 20, // 37: orchestrator.v1.PluginRegistryService.ListCategories:input_type -> orchestrator.v1.ListCategoriesRequest - 22, // 38: orchestrator.v1.PluginRegistryService.ListTags:input_type -> orchestrator.v1.ListTagsRequest - 42, // 39: orchestrator.v1.PluginRegistryService.SubmitForReview:input_type -> orchestrator.v1.SubmitForReviewRequest - 25, // 40: orchestrator.v1.PluginRegistryService.ListPrivatePlugins:input_type -> orchestrator.v1.ListPrivatePluginsRequest - 28, // 41: orchestrator.v1.PluginRegistryService.DeletePrivatePlugin:input_type -> orchestrator.v1.DeletePrivatePluginRequest - 30, // 42: orchestrator.v1.PluginRegistryService.DeletePrivatePluginVersion:input_type -> orchestrator.v1.DeletePrivatePluginVersionRequest - 32, // 43: orchestrator.v1.PluginRegistryService.ListPrivatePluginInstallSites:input_type -> orchestrator.v1.ListPrivatePluginInstallSitesRequest - 39, // 44: orchestrator.v1.PluginRegistryService.ListPrivatePluginsForInstance:input_type -> orchestrator.v1.ListPrivatePluginsForInstanceRequest - 40, // 45: orchestrator.v1.PluginRegistryService.ResolveInstallForInstance:input_type -> orchestrator.v1.ResolveInstallForInstanceRequest - 44, // 46: orchestrator.v1.PluginModerationService.ListPendingReviews:input_type -> orchestrator.v1.ListPendingReviewsRequest - 46, // 47: orchestrator.v1.PluginModerationService.ApproveSubmission:input_type -> orchestrator.v1.ApproveSubmissionRequest - 48, // 48: orchestrator.v1.PluginModerationService.RejectSubmission:input_type -> orchestrator.v1.RejectSubmissionRequest - 50, // 49: orchestrator.v1.PluginModerationService.RequestChanges:input_type -> orchestrator.v1.RequestChangesRequest - 52, // 50: orchestrator.v1.PluginPublishService.PublishVersion:input_type -> orchestrator.v1.PublishVersionRequest - 54, // 51: orchestrator.v1.PluginAuthService.StartDevice:input_type -> orchestrator.v1.StartDeviceRequest - 56, // 52: orchestrator.v1.PluginAuthService.PollDevice:input_type -> orchestrator.v1.PollDeviceRequest - 58, // 53: orchestrator.v1.PluginAuthService.ApproveDevice:input_type -> orchestrator.v1.ApproveDeviceRequest - 60, // 54: orchestrator.v1.PluginAuthService.DenyDevice:input_type -> orchestrator.v1.DenyDeviceRequest - 62, // 55: orchestrator.v1.PluginAuthService.GetDeviceStatus:input_type -> orchestrator.v1.GetDeviceStatusRequest - 64, // 56: orchestrator.v1.PluginAuthService.Whoami:input_type -> orchestrator.v1.WhoamiRequest - 67, // 57: orchestrator.v1.PluginAuthService.ListMyAccountsForCLI:input_type -> orchestrator.v1.ListMyAccountsForCLIRequest - 7, // 58: orchestrator.v1.PluginScopeService.CreateScope:output_type -> orchestrator.v1.CreateScopeResponse - 9, // 59: orchestrator.v1.PluginScopeService.ListMyScopes:output_type -> orchestrator.v1.ListMyScopesResponse - 11, // 60: orchestrator.v1.PluginScopeService.GetScope:output_type -> orchestrator.v1.GetScopeResponse - 13, // 61: orchestrator.v1.PluginScopeService.ListMyPlugins:output_type -> orchestrator.v1.ListMyPluginsResponse - 15, // 62: orchestrator.v1.PluginRegistryService.CreatePlugin:output_type -> orchestrator.v1.CreatePluginResponse - 17, // 63: orchestrator.v1.PluginRegistryService.GetPlugin:output_type -> orchestrator.v1.GetPluginResponse - 19, // 64: orchestrator.v1.PluginRegistryService.ListPlugins:output_type -> orchestrator.v1.ListPluginsResponse - 36, // 65: orchestrator.v1.PluginRegistryService.GetVersion:output_type -> orchestrator.v1.GetVersionResponse - 38, // 66: orchestrator.v1.PluginRegistryService.ResolveInstall:output_type -> orchestrator.v1.ResolveInstallResponse - 21, // 67: orchestrator.v1.PluginRegistryService.ListCategories:output_type -> orchestrator.v1.ListCategoriesResponse - 23, // 68: orchestrator.v1.PluginRegistryService.ListTags:output_type -> orchestrator.v1.ListTagsResponse - 43, // 69: orchestrator.v1.PluginRegistryService.SubmitForReview:output_type -> orchestrator.v1.SubmitForReviewResponse - 26, // 70: orchestrator.v1.PluginRegistryService.ListPrivatePlugins:output_type -> orchestrator.v1.ListPrivatePluginsResponse - 29, // 71: orchestrator.v1.PluginRegistryService.DeletePrivatePlugin:output_type -> orchestrator.v1.DeletePrivatePluginResponse - 31, // 72: orchestrator.v1.PluginRegistryService.DeletePrivatePluginVersion:output_type -> orchestrator.v1.DeletePrivatePluginVersionResponse - 33, // 73: orchestrator.v1.PluginRegistryService.ListPrivatePluginInstallSites:output_type -> orchestrator.v1.ListPrivatePluginInstallSitesResponse - 26, // 74: orchestrator.v1.PluginRegistryService.ListPrivatePluginsForInstance:output_type -> orchestrator.v1.ListPrivatePluginsResponse - 38, // 75: orchestrator.v1.PluginRegistryService.ResolveInstallForInstance:output_type -> orchestrator.v1.ResolveInstallResponse - 45, // 76: orchestrator.v1.PluginModerationService.ListPendingReviews:output_type -> orchestrator.v1.ListPendingReviewsResponse - 47, // 77: orchestrator.v1.PluginModerationService.ApproveSubmission:output_type -> orchestrator.v1.ApproveSubmissionResponse - 49, // 78: orchestrator.v1.PluginModerationService.RejectSubmission:output_type -> orchestrator.v1.RejectSubmissionResponse - 51, // 79: orchestrator.v1.PluginModerationService.RequestChanges:output_type -> orchestrator.v1.RequestChangesResponse - 53, // 80: orchestrator.v1.PluginPublishService.PublishVersion:output_type -> orchestrator.v1.PublishVersionResponse - 55, // 81: orchestrator.v1.PluginAuthService.StartDevice:output_type -> orchestrator.v1.StartDeviceResponse - 57, // 82: orchestrator.v1.PluginAuthService.PollDevice:output_type -> orchestrator.v1.PollDeviceResponse - 59, // 83: orchestrator.v1.PluginAuthService.ApproveDevice:output_type -> orchestrator.v1.ApproveDeviceResponse - 61, // 84: orchestrator.v1.PluginAuthService.DenyDevice:output_type -> orchestrator.v1.DenyDeviceResponse - 63, // 85: orchestrator.v1.PluginAuthService.GetDeviceStatus:output_type -> orchestrator.v1.GetDeviceStatusResponse - 65, // 86: orchestrator.v1.PluginAuthService.Whoami:output_type -> orchestrator.v1.WhoamiResponse - 68, // 87: orchestrator.v1.PluginAuthService.ListMyAccountsForCLI:output_type -> orchestrator.v1.ListMyAccountsForCLIResponse - 58, // [58:88] is the sub-list for method output_type - 28, // [28:58] is the sub-list for method input_type - 28, // [28:28] is the sub-list for extension type_name - 28, // [28:28] is the sub-list for extension extendee - 0, // [0:28] is the sub-list for field type_name + 106, // 0: orchestrator.v1.Scope.created_at:type_name -> google.protobuf.Timestamp + 0, // 1: orchestrator.v1.Plugin.visibility:type_name -> orchestrator.v1.PluginVisibility + 106, // 2: orchestrator.v1.Plugin.updated_at:type_name -> google.protobuf.Timestamp + 106, // 3: orchestrator.v1.Version.published_at:type_name -> google.protobuf.Timestamp + 1, // 4: orchestrator.v1.CreateScopeResponse.scope:type_name -> orchestrator.v1.Scope + 1, // 5: orchestrator.v1.ListMyScopesResponse.scopes:type_name -> orchestrator.v1.Scope + 1, // 6: orchestrator.v1.GetScopeResponse.scope:type_name -> orchestrator.v1.Scope + 2, // 7: orchestrator.v1.GetScopeResponse.plugins:type_name -> orchestrator.v1.Plugin + 2, // 8: orchestrator.v1.ListMyPluginsResponse.plugins:type_name -> orchestrator.v1.Plugin + 0, // 9: orchestrator.v1.CreatePluginRequest.visibility:type_name -> orchestrator.v1.PluginVisibility + 2, // 10: orchestrator.v1.CreatePluginResponse.plugin:type_name -> orchestrator.v1.Plugin + 2, // 11: orchestrator.v1.GetPluginResponse.plugin:type_name -> orchestrator.v1.Plugin + 5, // 12: orchestrator.v1.GetPluginResponse.versions:type_name -> orchestrator.v1.Version + 104, // 13: orchestrator.v1.GetPluginResponse.channels:type_name -> orchestrator.v1.GetPluginResponse.ChannelsEntry + 3, // 14: orchestrator.v1.GetPluginResponse.screenshots:type_name -> orchestrator.v1.PluginScreenshot + 2, // 15: orchestrator.v1.ListPluginsResponse.plugins:type_name -> orchestrator.v1.Plugin + 4, // 16: orchestrator.v1.ListCategoriesResponse.categories:type_name -> orchestrator.v1.Category + 25, // 17: orchestrator.v1.ListTagsResponse.tags:type_name -> orchestrator.v1.TagCount + 28, // 18: orchestrator.v1.ListPrivatePluginsResponse.plugins:type_name -> orchestrator.v1.PrivatePluginSummary + 2, // 19: orchestrator.v1.PrivatePluginSummary.plugin:type_name -> orchestrator.v1.Plugin + 105, // 20: orchestrator.v1.PrivatePluginSummary.channel_versions:type_name -> orchestrator.v1.PrivatePluginSummary.ChannelVersionsEntry + 35, // 21: orchestrator.v1.ListPrivatePluginInstallSitesResponse.sites:type_name -> orchestrator.v1.PrivatePluginInstallSite + 5, // 22: orchestrator.v1.GetVersionResponse.version:type_name -> orchestrator.v1.Version + 6, // 23: orchestrator.v1.GetVersionResponse.requires:type_name -> orchestrator.v1.Requirement + 6, // 24: orchestrator.v1.ResolveInstallResponse.requires:type_name -> orchestrator.v1.Requirement + 106, // 25: orchestrator.v1.PendingReview.submitted_at:type_name -> google.protobuf.Timestamp + 42, // 26: orchestrator.v1.ListPendingReviewsResponse.reviews:type_name -> orchestrator.v1.PendingReview + 3, // 27: orchestrator.v1.ListScreenshotsResponse.screenshots:type_name -> orchestrator.v1.PluginScreenshot + 3, // 28: orchestrator.v1.UploadScreenshotResponse.screenshot:type_name -> orchestrator.v1.PluginScreenshot + 3, // 29: orchestrator.v1.ReorderScreenshotsResponse.screenshots:type_name -> orchestrator.v1.PluginScreenshot + 106, // 30: orchestrator.v1.PluginReview.created_at:type_name -> google.protobuf.Timestamp + 106, // 31: orchestrator.v1.PluginReview.updated_at:type_name -> google.protobuf.Timestamp + 64, // 32: orchestrator.v1.PluginReview.reply:type_name -> orchestrator.v1.PluginReviewReply + 106, // 33: orchestrator.v1.PluginReviewReply.created_at:type_name -> google.protobuf.Timestamp + 63, // 34: orchestrator.v1.ListReviewsResponse.reviews:type_name -> orchestrator.v1.PluginReview + 65, // 35: orchestrator.v1.ListReviewsResponse.aggregate:type_name -> orchestrator.v1.ReviewAggregate + 63, // 36: orchestrator.v1.GetMyReviewResponse.review:type_name -> orchestrator.v1.PluginReview + 63, // 37: orchestrator.v1.UpsertReviewResponse.review:type_name -> orchestrator.v1.PluginReview + 64, // 38: orchestrator.v1.ReplyToReviewResponse.reply:type_name -> orchestrator.v1.PluginReviewReply + 63, // 39: orchestrator.v1.FlaggedReview.review:type_name -> orchestrator.v1.PluginReview + 106, // 40: orchestrator.v1.FlaggedReview.first_flagged_at:type_name -> google.protobuf.Timestamp + 80, // 41: orchestrator.v1.ListFlaggedReviewsResponse.reviews:type_name -> orchestrator.v1.FlaggedReview + 5, // 42: orchestrator.v1.PublishVersionResponse.version:type_name -> orchestrator.v1.Version + 101, // 43: orchestrator.v1.ListMyAccountsForCLIResponse.accounts:type_name -> orchestrator.v1.MyAccount + 7, // 44: orchestrator.v1.PluginScopeService.CreateScope:input_type -> orchestrator.v1.CreateScopeRequest + 9, // 45: orchestrator.v1.PluginScopeService.ListMyScopes:input_type -> orchestrator.v1.ListMyScopesRequest + 11, // 46: orchestrator.v1.PluginScopeService.GetScope:input_type -> orchestrator.v1.GetScopeRequest + 13, // 47: orchestrator.v1.PluginScopeService.ListMyPlugins:input_type -> orchestrator.v1.ListMyPluginsRequest + 15, // 48: orchestrator.v1.PluginRegistryService.CreatePlugin:input_type -> orchestrator.v1.CreatePluginRequest + 17, // 49: orchestrator.v1.PluginRegistryService.GetPlugin:input_type -> orchestrator.v1.GetPluginRequest + 19, // 50: orchestrator.v1.PluginRegistryService.ListPlugins:input_type -> orchestrator.v1.ListPluginsRequest + 36, // 51: orchestrator.v1.PluginRegistryService.GetVersion:input_type -> orchestrator.v1.GetVersionRequest + 38, // 52: orchestrator.v1.PluginRegistryService.ResolveInstall:input_type -> orchestrator.v1.ResolveInstallRequest + 21, // 53: orchestrator.v1.PluginRegistryService.ListCategories:input_type -> orchestrator.v1.ListCategoriesRequest + 23, // 54: orchestrator.v1.PluginRegistryService.ListTags:input_type -> orchestrator.v1.ListTagsRequest + 43, // 55: orchestrator.v1.PluginRegistryService.SubmitForReview:input_type -> orchestrator.v1.SubmitForReviewRequest + 26, // 56: orchestrator.v1.PluginRegistryService.ListPrivatePlugins:input_type -> orchestrator.v1.ListPrivatePluginsRequest + 29, // 57: orchestrator.v1.PluginRegistryService.DeletePrivatePlugin:input_type -> orchestrator.v1.DeletePrivatePluginRequest + 31, // 58: orchestrator.v1.PluginRegistryService.DeletePrivatePluginVersion:input_type -> orchestrator.v1.DeletePrivatePluginVersionRequest + 33, // 59: orchestrator.v1.PluginRegistryService.ListPrivatePluginInstallSites:input_type -> orchestrator.v1.ListPrivatePluginInstallSitesRequest + 40, // 60: orchestrator.v1.PluginRegistryService.ListPrivatePluginsForInstance:input_type -> orchestrator.v1.ListPrivatePluginsForInstanceRequest + 41, // 61: orchestrator.v1.PluginRegistryService.ResolveInstallForInstance:input_type -> orchestrator.v1.ResolveInstallForInstanceRequest + 45, // 62: orchestrator.v1.PluginModerationService.ListPendingReviews:input_type -> orchestrator.v1.ListPendingReviewsRequest + 47, // 63: orchestrator.v1.PluginModerationService.ApproveSubmission:input_type -> orchestrator.v1.ApproveSubmissionRequest + 49, // 64: orchestrator.v1.PluginModerationService.RejectSubmission:input_type -> orchestrator.v1.RejectSubmissionRequest + 51, // 65: orchestrator.v1.PluginModerationService.RequestChanges:input_type -> orchestrator.v1.RequestChangesRequest + 81, // 66: orchestrator.v1.PluginModerationService.ListFlaggedReviews:input_type -> orchestrator.v1.ListFlaggedReviewsRequest + 83, // 67: orchestrator.v1.PluginModerationService.SoftDeleteReview:input_type -> orchestrator.v1.SoftDeleteReviewRequest + 85, // 68: orchestrator.v1.PluginModerationService.SoftDeleteReply:input_type -> orchestrator.v1.SoftDeleteReplyRequest + 53, // 69: orchestrator.v1.PluginGalleryService.ListScreenshots:input_type -> orchestrator.v1.ListScreenshotsRequest + 55, // 70: orchestrator.v1.PluginGalleryService.UploadScreenshot:input_type -> orchestrator.v1.UploadScreenshotRequest + 57, // 71: orchestrator.v1.PluginGalleryService.DeleteScreenshot:input_type -> orchestrator.v1.DeleteScreenshotRequest + 59, // 72: orchestrator.v1.PluginGalleryService.ReorderScreenshots:input_type -> orchestrator.v1.ReorderScreenshotsRequest + 61, // 73: orchestrator.v1.PluginGalleryService.SetFeaturedScreenshot:input_type -> orchestrator.v1.SetFeaturedScreenshotRequest + 66, // 74: orchestrator.v1.PluginReviewService.ListReviews:input_type -> orchestrator.v1.ListReviewsRequest + 68, // 75: orchestrator.v1.PluginReviewService.GetMyReview:input_type -> orchestrator.v1.GetMyReviewRequest + 70, // 76: orchestrator.v1.PluginReviewService.UpsertReview:input_type -> orchestrator.v1.UpsertReviewRequest + 72, // 77: orchestrator.v1.PluginReviewService.DeleteReview:input_type -> orchestrator.v1.DeleteReviewRequest + 74, // 78: orchestrator.v1.PluginReviewService.ReplyToReview:input_type -> orchestrator.v1.ReplyToReviewRequest + 76, // 79: orchestrator.v1.PluginReviewService.DeleteReply:input_type -> orchestrator.v1.DeleteReplyRequest + 78, // 80: orchestrator.v1.PluginReviewService.FlagReview:input_type -> orchestrator.v1.FlagReviewRequest + 87, // 81: orchestrator.v1.PluginPublishService.PublishVersion:input_type -> orchestrator.v1.PublishVersionRequest + 89, // 82: orchestrator.v1.PluginAuthService.StartDevice:input_type -> orchestrator.v1.StartDeviceRequest + 91, // 83: orchestrator.v1.PluginAuthService.PollDevice:input_type -> orchestrator.v1.PollDeviceRequest + 93, // 84: orchestrator.v1.PluginAuthService.ApproveDevice:input_type -> orchestrator.v1.ApproveDeviceRequest + 95, // 85: orchestrator.v1.PluginAuthService.DenyDevice:input_type -> orchestrator.v1.DenyDeviceRequest + 97, // 86: orchestrator.v1.PluginAuthService.GetDeviceStatus:input_type -> orchestrator.v1.GetDeviceStatusRequest + 99, // 87: orchestrator.v1.PluginAuthService.Whoami:input_type -> orchestrator.v1.WhoamiRequest + 102, // 88: orchestrator.v1.PluginAuthService.ListMyAccountsForCLI:input_type -> orchestrator.v1.ListMyAccountsForCLIRequest + 8, // 89: orchestrator.v1.PluginScopeService.CreateScope:output_type -> orchestrator.v1.CreateScopeResponse + 10, // 90: orchestrator.v1.PluginScopeService.ListMyScopes:output_type -> orchestrator.v1.ListMyScopesResponse + 12, // 91: orchestrator.v1.PluginScopeService.GetScope:output_type -> orchestrator.v1.GetScopeResponse + 14, // 92: orchestrator.v1.PluginScopeService.ListMyPlugins:output_type -> orchestrator.v1.ListMyPluginsResponse + 16, // 93: orchestrator.v1.PluginRegistryService.CreatePlugin:output_type -> orchestrator.v1.CreatePluginResponse + 18, // 94: orchestrator.v1.PluginRegistryService.GetPlugin:output_type -> orchestrator.v1.GetPluginResponse + 20, // 95: orchestrator.v1.PluginRegistryService.ListPlugins:output_type -> orchestrator.v1.ListPluginsResponse + 37, // 96: orchestrator.v1.PluginRegistryService.GetVersion:output_type -> orchestrator.v1.GetVersionResponse + 39, // 97: orchestrator.v1.PluginRegistryService.ResolveInstall:output_type -> orchestrator.v1.ResolveInstallResponse + 22, // 98: orchestrator.v1.PluginRegistryService.ListCategories:output_type -> orchestrator.v1.ListCategoriesResponse + 24, // 99: orchestrator.v1.PluginRegistryService.ListTags:output_type -> orchestrator.v1.ListTagsResponse + 44, // 100: orchestrator.v1.PluginRegistryService.SubmitForReview:output_type -> orchestrator.v1.SubmitForReviewResponse + 27, // 101: orchestrator.v1.PluginRegistryService.ListPrivatePlugins:output_type -> orchestrator.v1.ListPrivatePluginsResponse + 30, // 102: orchestrator.v1.PluginRegistryService.DeletePrivatePlugin:output_type -> orchestrator.v1.DeletePrivatePluginResponse + 32, // 103: orchestrator.v1.PluginRegistryService.DeletePrivatePluginVersion:output_type -> orchestrator.v1.DeletePrivatePluginVersionResponse + 34, // 104: orchestrator.v1.PluginRegistryService.ListPrivatePluginInstallSites:output_type -> orchestrator.v1.ListPrivatePluginInstallSitesResponse + 27, // 105: orchestrator.v1.PluginRegistryService.ListPrivatePluginsForInstance:output_type -> orchestrator.v1.ListPrivatePluginsResponse + 39, // 106: orchestrator.v1.PluginRegistryService.ResolveInstallForInstance:output_type -> orchestrator.v1.ResolveInstallResponse + 46, // 107: orchestrator.v1.PluginModerationService.ListPendingReviews:output_type -> orchestrator.v1.ListPendingReviewsResponse + 48, // 108: orchestrator.v1.PluginModerationService.ApproveSubmission:output_type -> orchestrator.v1.ApproveSubmissionResponse + 50, // 109: orchestrator.v1.PluginModerationService.RejectSubmission:output_type -> orchestrator.v1.RejectSubmissionResponse + 52, // 110: orchestrator.v1.PluginModerationService.RequestChanges:output_type -> orchestrator.v1.RequestChangesResponse + 82, // 111: orchestrator.v1.PluginModerationService.ListFlaggedReviews:output_type -> orchestrator.v1.ListFlaggedReviewsResponse + 84, // 112: orchestrator.v1.PluginModerationService.SoftDeleteReview:output_type -> orchestrator.v1.SoftDeleteReviewResponse + 86, // 113: orchestrator.v1.PluginModerationService.SoftDeleteReply:output_type -> orchestrator.v1.SoftDeleteReplyResponse + 54, // 114: orchestrator.v1.PluginGalleryService.ListScreenshots:output_type -> orchestrator.v1.ListScreenshotsResponse + 56, // 115: orchestrator.v1.PluginGalleryService.UploadScreenshot:output_type -> orchestrator.v1.UploadScreenshotResponse + 58, // 116: orchestrator.v1.PluginGalleryService.DeleteScreenshot:output_type -> orchestrator.v1.DeleteScreenshotResponse + 60, // 117: orchestrator.v1.PluginGalleryService.ReorderScreenshots:output_type -> orchestrator.v1.ReorderScreenshotsResponse + 62, // 118: orchestrator.v1.PluginGalleryService.SetFeaturedScreenshot:output_type -> orchestrator.v1.SetFeaturedScreenshotResponse + 67, // 119: orchestrator.v1.PluginReviewService.ListReviews:output_type -> orchestrator.v1.ListReviewsResponse + 69, // 120: orchestrator.v1.PluginReviewService.GetMyReview:output_type -> orchestrator.v1.GetMyReviewResponse + 71, // 121: orchestrator.v1.PluginReviewService.UpsertReview:output_type -> orchestrator.v1.UpsertReviewResponse + 73, // 122: orchestrator.v1.PluginReviewService.DeleteReview:output_type -> orchestrator.v1.DeleteReviewResponse + 75, // 123: orchestrator.v1.PluginReviewService.ReplyToReview:output_type -> orchestrator.v1.ReplyToReviewResponse + 77, // 124: orchestrator.v1.PluginReviewService.DeleteReply:output_type -> orchestrator.v1.DeleteReplyResponse + 79, // 125: orchestrator.v1.PluginReviewService.FlagReview:output_type -> orchestrator.v1.FlagReviewResponse + 88, // 126: orchestrator.v1.PluginPublishService.PublishVersion:output_type -> orchestrator.v1.PublishVersionResponse + 90, // 127: orchestrator.v1.PluginAuthService.StartDevice:output_type -> orchestrator.v1.StartDeviceResponse + 92, // 128: orchestrator.v1.PluginAuthService.PollDevice:output_type -> orchestrator.v1.PollDeviceResponse + 94, // 129: orchestrator.v1.PluginAuthService.ApproveDevice:output_type -> orchestrator.v1.ApproveDeviceResponse + 96, // 130: orchestrator.v1.PluginAuthService.DenyDevice:output_type -> orchestrator.v1.DenyDeviceResponse + 98, // 131: orchestrator.v1.PluginAuthService.GetDeviceStatus:output_type -> orchestrator.v1.GetDeviceStatusResponse + 100, // 132: orchestrator.v1.PluginAuthService.Whoami:output_type -> orchestrator.v1.WhoamiResponse + 103, // 133: orchestrator.v1.PluginAuthService.ListMyAccountsForCLI:output_type -> orchestrator.v1.ListMyAccountsForCLIResponse + 89, // [89:134] is the sub-list for method output_type + 44, // [44:89] is the sub-list for method input_type + 44, // [44:44] is the sub-list for extension type_name + 44, // [44:44] is the sub-list for extension extendee + 0, // [0:44] is the sub-list for field type_name } func init() { file_orchestrator_v1_plugin_registry_proto_init() } @@ -4451,9 +6662,9 @@ func file_orchestrator_v1_plugin_registry_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_orchestrator_v1_plugin_registry_proto_rawDesc), len(file_orchestrator_v1_plugin_registry_proto_rawDesc)), NumEnums: 1, - NumMessages: 70, + NumMessages: 105, NumExtensions: 0, - NumServices: 5, + NumServices: 7, }, GoTypes: file_orchestrator_v1_plugin_registry_proto_goTypes, DependencyIndexes: file_orchestrator_v1_plugin_registry_proto_depIdxs, diff --git a/internal/orchclient/client.go b/internal/orchclient/client.go index c5df5bb..921b3cf 100644 --- a/internal/orchclient/client.go +++ b/internal/orchclient/client.go @@ -11,10 +11,11 @@ import ( type Client struct { Host string Token string - Auth orchestratorv1connect.PluginAuthServiceClient - Scope orchestratorv1connect.PluginScopeServiceClient - Reg orchestratorv1connect.PluginRegistryServiceClient - Pub orchestratorv1connect.PluginPublishServiceClient + Auth orchestratorv1connect.PluginAuthServiceClient + Scope orchestratorv1connect.PluginScopeServiceClient + Reg orchestratorv1connect.PluginRegistryServiceClient + Pub orchestratorv1connect.PluginPublishServiceClient + Gallery orchestratorv1connect.PluginGalleryServiceClient } func New(host, token string) *Client { @@ -27,6 +28,7 @@ func New(host, token string) *Client { c.Scope = orchestratorv1connect.NewPluginScopeServiceClient(httpClient, host, opts...) c.Reg = orchestratorv1connect.NewPluginRegistryServiceClient(httpClient, host, opts...) c.Pub = orchestratorv1connect.NewPluginPublishServiceClient(httpClient, host, opts...) + c.Gallery = orchestratorv1connect.NewPluginGalleryServiceClient(httpClient, host, opts...) return c } diff --git a/proto/orchestrator/v1/plugin_registry.proto b/proto/orchestrator/v1/plugin_registry.proto index 7930153..42a5efb 100644 --- a/proto/orchestrator/v1/plugin_registry.proto +++ b/proto/orchestrator/v1/plugin_registry.proto @@ -49,6 +49,36 @@ service PluginModerationService { rpc ApproveSubmission(ApproveSubmissionRequest) returns (ApproveSubmissionResponse); rpc RejectSubmission(RejectSubmissionRequest) returns (RejectSubmissionResponse); rpc RequestChanges(RequestChangesRequest) returns (RequestChangesResponse); + + // Star-review moderation (ADR 0021). Unrelated to the submission queue + // above: these act on user reviews (PluginReviewService), not plugins. + rpc ListFlaggedReviews(ListFlaggedReviewsRequest) returns (ListFlaggedReviewsResponse); + rpc SoftDeleteReview(SoftDeleteReviewRequest) returns (SoftDeleteReviewResponse); + rpc SoftDeleteReply(SoftDeleteReplyRequest) returns (SoftDeleteReplyResponse); +} + +// PluginGalleryService manages a plugin's screenshot gallery. Reads are +// public; writes require scope (or owning-account) membership, enforced +// in-handler. +service PluginGalleryService { + rpc ListScreenshots(ListScreenshotsRequest) returns (ListScreenshotsResponse); + rpc UploadScreenshot(UploadScreenshotRequest) returns (UploadScreenshotResponse); + rpc DeleteScreenshot(DeleteScreenshotRequest) returns (DeleteScreenshotResponse); + rpc ReorderScreenshots(ReorderScreenshotsRequest) returns (ReorderScreenshotsResponse); + rpc SetFeaturedScreenshot(SetFeaturedScreenshotRequest) returns (SetFeaturedScreenshotResponse); +} + +// PluginReviewService is the star-review surface for PUBLIC plugins +// (ADR 0021): verified-install gating, one review per user, author replies, +// user flags. Reads are public; writes require a logged-in orchestrator user. +service PluginReviewService { + rpc ListReviews(ListReviewsRequest) returns (ListReviewsResponse); + rpc GetMyReview(GetMyReviewRequest) returns (GetMyReviewResponse); + rpc UpsertReview(UpsertReviewRequest) returns (UpsertReviewResponse); + rpc DeleteReview(DeleteReviewRequest) returns (DeleteReviewResponse); + rpc ReplyToReview(ReplyToReviewRequest) returns (ReplyToReviewResponse); + rpc DeleteReply(DeleteReplyRequest) returns (DeleteReplyResponse); + rpc FlagReview(FlagReviewRequest) returns (FlagReviewResponse); } // PluginPublishService is called by the ninja CLI to publish a version. @@ -117,10 +147,32 @@ message Plugin { string latest_version = 13; repeated string tags = 14; // preview_image_url is the PUBLIC, unsigned, long-lived image URL for this - // plugin's latest non-yanked version preview (a PNG screenshot), usable - // directly as an . Empty when no preview has been published yet — - // the wizard card then degrades to display_name + tags (spec §5.2). + // plugin's card image, usable directly as an : the gallery's + // Featured screenshot when one exists, else the latest non-yanked version's + // preview.png. Empty when neither exists — the wizard card then degrades to + // display_name + tags (spec §5.2). string preview_image_url = 15; + // rating_avg/rating_count are the denormalised star-review aggregate over + // non-deleted reviews (0/0 when unreviewed). + float rating_avg = 16; + int32 rating_count = 17; + // install_count is the number of distinct CMS instances currently recorded + // as installers of this plugin (registry_install_events grain). + int32 install_count = 18; +} + +// PluginScreenshot is one image in a plugin's managed gallery. The gallery is +// per-plugin (not per-version); images arrive either from a published +// artifact's screenshots/ dir or from author uploads, and the author orders +// them and marks one Featured (the card image). +message PluginScreenshot { + string id = 1; + // url is the public unsigned image URL (only public plugins serve gallery + // images in v1). + string url = 2; + bool featured = 3; + int32 position = 4; + string content_type = 5; } message Category { @@ -199,6 +251,8 @@ message GetPluginResponse { Plugin plugin = 1; repeated Version versions = 2; map channels = 3; + // screenshots is the plugin's gallery in display order (Featured included). + repeated PluginScreenshot screenshots = 4; } message ListPluginsRequest { @@ -323,8 +377,10 @@ message ResolveInstallResponse { // --- Instance-authenticated request shapes --- // The instance proves its identity with the per-account X-CMS-Secret header; // instance_id selects the instance whose owning account scopes the call. No -// active_account_id / user JWT is needed. These cover only private plugins — -// public plugins use the anonymous ListPlugins / ResolveInstall. +// active_account_id / user JWT is needed. Listing covers only private plugins +// (public plugins use the anonymous ListPlugins); resolve accepts BOTH — the +// instance identity is what lets the registry record the install event, which +// backs public install counts and verified-install review gating (ADR 0021). message ListPrivatePluginsForInstanceRequest { string instance_id = 1; @@ -334,6 +390,10 @@ message ResolveInstallForInstanceRequest { string instance_id = 1; string plugin_name = 2; string version_or_channel = 3; + // scope_slug selects the plugin's scope. Empty or "private" resolves the + // calling account's private plugin (the original behavior); any other value + // resolves a PUBLIC plugin in that scope (ADR 0021). + string scope_slug = 4; } // --- Review / moderation --- @@ -385,6 +445,180 @@ message RequestChangesRequest { } message RequestChangesResponse {} +// --- Gallery service --- + +message ListScreenshotsRequest { + string scope_slug = 1; + string plugin_name = 2; +} +message ListScreenshotsResponse { + repeated PluginScreenshot screenshots = 1; +} + +message UploadScreenshotRequest { + string plugin_id = 1; + // image is the raw file bytes (≤ 8 MiB; png/jpg/jpeg/webp). + bytes image = 2; + string filename = 3; + string content_type = 4; +} +message UploadScreenshotResponse { + PluginScreenshot screenshot = 1; +} + +message DeleteScreenshotRequest { + string plugin_id = 1; + string screenshot_id = 2; +} +message DeleteScreenshotResponse {} + +message ReorderScreenshotsRequest { + string plugin_id = 1; + // screenshot_ids_in_order must name every current gallery image exactly once. + repeated string screenshot_ids_in_order = 2; +} +message ReorderScreenshotsResponse { + repeated PluginScreenshot screenshots = 1; +} + +message SetFeaturedScreenshotRequest { + string plugin_id = 1; + string screenshot_id = 2; +} +message SetFeaturedScreenshotResponse {} + +// --- Star reviews (ADR 0021) --- + +message PluginReview { + string id = 1; + string plugin_id = 2; + string user_id = 3; + string author_display_name = 4; + int32 rating = 5; // 1..5 + string title = 6; + string body = 7; + // version_at_review is the plugin version the reviewer's account had + // installed when the review was written (best effort; may be empty). + string version_at_review = 8; + bool edited = 9; + google.protobuf.Timestamp created_at = 10; + google.protobuf.Timestamp updated_at = 11; + PluginReviewReply reply = 12; // unset when no (non-deleted) reply exists + // deleted/deleted_reason are populated only in moderation views; public + // listings exclude soft-deleted reviews entirely. + bool deleted = 13; + string deleted_reason = 14; +} + +message PluginReviewReply { + string id = 1; + string author_display_name = 2; + string body = 3; + bool edited = 4; + google.protobuf.Timestamp created_at = 5; +} + +message ReviewAggregate { + float rating_avg = 1; + int32 rating_count = 2; + // count1..count5 are the per-star histogram buckets. + int32 count1 = 3; + int32 count2 = 4; + int32 count3 = 5; + int32 count4 = 6; + int32 count5 = 7; +} + +message ListReviewsRequest { + string scope_slug = 1; + string plugin_name = 2; + int32 limit = 3; // 0 → server default + int32 offset = 4; +} +message ListReviewsResponse { + repeated PluginReview reviews = 1; + ReviewAggregate aggregate = 2; +} + +message GetMyReviewRequest { + string plugin_id = 1; +} +message GetMyReviewResponse { + PluginReview review = 1; // unset when the caller has no review + // eligible reports whether the caller may write a review (verified install + // on their account, not a scope member). The form UI keys off this. + bool eligible = 2; + // ineligible_reason is a human-readable explanation when eligible = false + // ("no install on your account", "authors cannot review their own plugin"). + string ineligible_reason = 3; +} + +message UpsertReviewRequest { + string plugin_id = 1; + int32 rating = 2; // 1..5, required + string title = 3; + string body = 4; +} +message UpsertReviewResponse { + PluginReview review = 1; +} + +message DeleteReviewRequest { + string plugin_id = 1; +} +message DeleteReviewResponse {} + +message ReplyToReviewRequest { + string review_id = 1; + string body = 2; +} +message ReplyToReviewResponse { + PluginReviewReply reply = 1; +} + +message DeleteReplyRequest { + string review_id = 1; +} +message DeleteReplyResponse {} + +message FlagReviewRequest { + string review_id = 1; + string reason = 2; // required +} +message FlagReviewResponse {} + +// --- Review moderation (superadmin) --- + +message FlaggedReview { + PluginReview review = 1; + string scope_slug = 2; + string plugin_name = 3; + int32 flag_count = 4; + // flag_reasons carries the open flags' reasons, newest first. + repeated string flag_reasons = 5; + google.protobuf.Timestamp first_flagged_at = 6; +} + +message ListFlaggedReviewsRequest { + int32 limit = 1; + int32 offset = 2; +} +message ListFlaggedReviewsResponse { + repeated FlaggedReview reviews = 1; +} + +message SoftDeleteReviewRequest { + string review_id = 1; + string reason = 2; // required — audit trail +} +message SoftDeleteReviewResponse {} + +message SoftDeleteReplyRequest { + string review_id = 1; + string reason = 2; // required — audit trail +} +message SoftDeleteReplyResponse {} + // --- Publish service --- message PublishVersionRequest {