syntax = "proto3"; package devvit.plugin.redditapi.widgets; import "devvit/plugin/redditapi/common/common_msg.proto"; import "devvit/plugin/redditapi/widgets/widgets_msg.proto"; import "google/protobuf/empty.proto"; option go_package = "github.snooguts.net/reddit/reddit-devplatform-monorepo/go-common/generated/protos/types/devvit/plugin/redditapi"; option java_package = "com.reddit.devvit.plugin.redditapi.widgets"; // WIDGETS - https://www.reddit.com/dev/api#section_widgets service Widgets { // Add a button widget to a subreddit. // // @see {@link https://www.reddit.com/dev/api#POST_api_widget} rpc AddButtonWidget(AddButtonWidgetRequest) returns (ButtonWidget) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = JSON_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).request_kind_value = 'button'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Add an image widget to a subreddit. // // @see {@link https://www.reddit.com/dev/api#POST_api_widget} rpc AddImageWidget(AddImageWidgetRequest) returns (ImageWidget) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = JSON_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).request_kind_value = 'image'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Add a calendar widget to a subreddit. // // @see {@link https://www.reddit.com/dev/api#POST_api_widget} rpc AddCalendarWidget(AddCalendarWidgetRequest) returns (CalendarWidget) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = JSON_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).request_kind_value = 'calendar'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Add a text widget to a subreddit. // // @see {@link https://www.reddit.com/dev/api#POST_api_widget} rpc AddTextAreaWidget(AddTextAreaWidgetRequest) returns (TextAreaWidget) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = JSON_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).request_kind_value = 'textarea'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Add a community list widget to a subreddit. // // @see {@link https://www.reddit.com/dev/api#POST_api_widget} rpc AddCommunityListWidget(AddCommunityListWidgetRequest) returns (CommunityListWidget) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = JSON_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).request_kind_value = 'community-list'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Add a post flair widget to a subreddit. // // @see {@link https://www.reddit.com/dev/api#POST_api_widget} rpc AddPostFlairWidget(AddPostFlairWidgetRequest) returns (PostFlairWidget) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = JSON_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).request_kind_value = 'post-flair'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Add a custom widget to a subreddit. This is an experimental feature. // Custom widgets don't display on mobile devices. Customizations can break at any time // // @see {@link https://www.reddit.com/dev/api#POST_api_widget} rpc AddCustomWidget(AddCustomWidgetRequest) returns (CustomWidget) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = JSON_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).request_kind_value = 'custom'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Delete a widget from a subreddit. // // @see {@link https://www.reddit.com/dev/api#DELETE_api_widget_%7Bwidget_id%7D} rpc DeleteWidget(DeleteWidgetRequest) returns (google.protobuf.Empty) { option (devvit.plugin.redditapi.common.api_client_config).method = 'DELETE'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget/{id}'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Update a button widget on a subreddit. // // @see {@link https://www.reddit.com/dev/api#PUT_api_widget_%7Bwidget_id%7D} rpc UpdateButtonWidget(UpdateButtonWidgetRequest) returns (ButtonWidget) { option (devvit.plugin.redditapi.common.api_client_config).method = 'PUT'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget/{id}'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = JSON_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).request_kind_value = 'button'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Update an image widget on a subreddit. // // @see {@link https://www.reddit.com/dev/api#PUT_api_widget_%7Bwidget_id%7D} rpc UpdateImageWidget(UpdateImageWidgetRequest) returns (ImageWidget) { option (devvit.plugin.redditapi.common.api_client_config).method = 'PUT'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget/{id}'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = JSON_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).request_kind_value = 'image'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Update a calendar widget on a subreddit. // // @see {@link https://www.reddit.com/dev/api#PUT_api_widget_%7Bwidget_id%7D} rpc UpdateCalendarWidget(UpdateCalendarWidgetRequest) returns (CalendarWidget) { option (devvit.plugin.redditapi.common.api_client_config).method = 'PUT'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget/{id}'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = JSON_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).request_kind_value = 'calendar'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Update a text widget on a subreddit. // // @see {@link https://www.reddit.com/dev/api#PUT_api_widget_%7Bwidget_id%7D} rpc UpdateTextAreaWidget(UpdateTextAreaWidgetRequest) returns (TextAreaWidget) { option (devvit.plugin.redditapi.common.api_client_config).method = 'PUT'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget/{id}'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = JSON_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).request_kind_value = 'textarea'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Update a community list widget on a subreddit. // // @see {@link https://www.reddit.com/dev/api#PUT_api_widget_%7Bwidget_id%7D} rpc UpdateCommunityListWidget(UpdateCommunityListWidgetRequest) returns (UpdateCommunityListWidgetResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'PUT'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget/{id}'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = JSON_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).request_kind_value = 'community-list'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Update a post flair widget on a subreddit. // // @see {@link https://www.reddit.com/dev/api#PUT_api_widget_%7Bwidget_id%7D} rpc UpdatePostFlairWidget(UpdatePostFlairWidgetRequest) returns (PostFlairWidget) { option (devvit.plugin.redditapi.common.api_client_config).method = 'PUT'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget/{id}'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = JSON_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).request_kind_value = 'post-flair'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Update a custom widget on a subreddit. // // @see {@link https://www.reddit.com/dev/api#PUT_api_widget_%7Bwidget_id%7D} rpc UpdateCustomWidget(UpdateCustomWidgetRequest) returns (CustomWidget) { option (devvit.plugin.redditapi.common.api_client_config).method = 'PUT'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget/{id}'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = JSON_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).request_kind_value = 'custom'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Get an S3 upload lease for a widget image. This is used to upload images for image widgets. // // @see {@link https://www.reddit.com/dev/api#POST_api_widget_image_upload_s3} rpc GetWidgetImageUploadLease(GetWidgetImageUploadLeaseRequest) returns (GetWidgetImageUploadLeaseResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widget_image_upload_s3'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_CAMEL; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Update the order of widgets on a subreddit. // // @see {@link https://www.reddit.com/dev/api#PATCH_api_widget_order_%7Bsection%7D} rpc OrderWidgets(OrderWidgetsRequest) returns (google.protobuf.Empty) {} // Get a list of widgets on a subreddit. // // @see {@link https://www.reddit.com/dev/api#GET_api_widgets} rpc GetWidgets(GetWidgetsRequest) returns (GetWidgetsResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/widgets'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } }