syntax = "proto3"; package devvit.plugin.redditapi.subreddits; import "devvit/plugin/redditapi/common/common_msg.proto"; import "devvit/plugin/redditapi/subreddits/subreddits_msg.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/wrappers.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.subreddits"; // SUBREDDITS - https://www.reddit.com/dev/api#section_subreddits service Subreddits { // https://www.reddit.com/dev/api#GET_about_\{where\} rpc AboutWhere(AboutWhereRequest) returns (devvit.plugin.redditapi.common.Listing) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/about/{where}?after={after}&before={before}&count={count}&limit={limit}&show={show}&user={user}'; option (devvit.plugin.redditapi.common.api_client_config).use_custom_response_parser = true; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; option (devvit.plugin.redditapi.common.api_client_config).validate_without_enforcement = true; } // https://www.reddit.com/dev/api#POST_api_delete_sr_banner rpc DeleteSrBanner(BasicSubredditRequest) returns (devvit.plugin.redditapi.common.JsonStatus) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/delete_sr_banner'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // https://www.reddit.com/dev/api#POST_api_delete_sr_header rpc DeleteSrHeader(BasicSubredditRequest) returns (devvit.plugin.redditapi.common.JsonStatus) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/delete_sr_header'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // https://www.reddit.com/dev/api#POST_api_delete_sr_icon rpc DeleteSrIcon(BasicSubredditRequest) returns (devvit.plugin.redditapi.common.JsonStatus) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/delete_sr_icon'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // https://www.reddit.com/dev/api#POST_api_delete_sr_img rpc DeleteSrImg(DeleteSrImgRequest) returns (devvit.plugin.redditapi.common.JsonStatus) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/delete_sr_img'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE; option (devvit.plugin.redditapi.common.api_client_config).enforce_json = true; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // https://www.reddit.com/dev/api#POST_api_search_reddit_names rpc SearchRedditNames(BasicSearchRequest) returns (SearchRedditNamesResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/api/search_reddit_names'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE; } // https://www.reddit.com/dev/api#POST_api_search_subreddits rpc SearchSubreddits(BasicSearchRequest) returns (SearchSubredditsResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/api/search_subreddits'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE; } // https://www.reddit.com/dev/api#POST_api_site_admin rpc SiteAdmin(SiteAdminRequest) returns (devvit.plugin.redditapi.common.JsonStatus) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/api/site_admin'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE; option (devvit.plugin.redditapi.common.api_client_config).enforce_json = true; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'sr'; } // https://www.reddit.com/dev/api#GET_api_submit_text rpc SubmitText(BasicSubredditRequest) returns (SubmitTextResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/submit_text'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // TODO: this seems to return a Listing, not a SubredditAutocompleteResponse. // https://www.reddit.com/dev/api#GET_api_subreddit_autocomplete_v2 rpc SubredditAutocomplete(SubredditAutocompleteRequest) returns (SubredditAutocompleteResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/api/subreddit_autocomplete_v2?include_over_18={include_over_18}&include_profiles={include_profiles}&limit={limit}&query={query}&search_query_id={search_query_id}&typeahead_active={typeahead_active}'; } // https://www.reddit.com/dev/api#POST_api_subreddit_stylesheet rpc SubredditStylesheet(SubredditStylesheetRequest) returns (devvit.plugin.redditapi.common.JsonStatus) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/subreddit_stylesheet'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE; option (devvit.plugin.redditapi.common.api_client_config).enforce_json = true; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // https://www.reddit.com/dev/api#POST_api_subscribe rpc Subscribe(SubscribeRequest) returns (google.protobuf.Empty); // https://www.reddit.com/dev/api#POST_api_upload_sr_img rpc UploadSrImg(UploadSrImgRequest) returns (UploadSrImgResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/upload_sr_img'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // https://www.reddit.com/dev/api#GET_api_v1_\{subreddit\}_post_requirements rpc SubredditPostRequirements(BasicSubredditRequest) returns (SubredditPostRequirementsResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/api/v1/{subreddit}/post_requirements'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // https://www.reddit.com/dev/api#GET_r_\{subreddit\}_about rpc SubredditAbout(BasicSubredditRequest) returns (SubredditAboutResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/about?quarantine_optin=1&gated_optin=1'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; option (devvit.plugin.redditapi.common.api_client_config).validate_without_enforcement = true; } // https://www.reddit.com/dev/api#GET_r_\{subreddit\}_about_edit rpc SubredditAboutEdit(SubredditAboutEditRequest) returns (SubredditAboutEditResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/about/edit?created={created}&location={location}'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // https://www.reddit.com/dev/api#GET_r_\{subreddit\}_about_rules rpc SubredditAboutRules(BasicSubredditRequest) returns (SubredditAboutRulesResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/about/rules'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Add a subreddit rule. rpc AddSubredditRule(AddSubredditRuleRequest) returns (google.protobuf.Empty) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/api/add_subreddit_rule'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'r'; } // Update an existing subreddit rule. rpc UpdateSubredditRule(UpdateSubredditRuleRequest) returns (google.protobuf.Empty) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/api/update_subreddit_rule'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'r'; } // Remove a subreddit rule. rpc RemoveSubredditRule(RemoveSubredditRuleRequest) returns (google.protobuf.Empty) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/api/remove_subreddit_rule'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'r'; } // Reorder subreddit rules. rpc ReorderSubredditRules(ReorderSubredditRulesRequest) returns (google.protobuf.Empty) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/api/reorder_subreddit_rules'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'r'; } // https://www.reddit.com/dev/api#GET_r_\{subreddit\}_about_traffic rpc SubredditAboutTraffic(BasicSubredditRequest) returns (SubredditAboutTrafficResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/about/traffic'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // https://www.reddit.com/dev/api#GET_sidebar rpc Sidebar(BasicSubredditRequest) returns (google.protobuf.StringValue) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/sidebar'; option (devvit.plugin.redditapi.common.api_client_config).use_custom_response_parser = true; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // https://www.reddit.com/dev/api#GET_sticky rpc Sticky(StickyRequest) returns (StickyResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/sticky?num={num}'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // https://www.reddit.com/dev/api#GET_subreddits_mine_\{where\} rpc SubredditsMineWhere(BasicWhereRequest) returns (devvit.plugin.redditapi.common.Listing) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/subreddits/mine/{where}?after={after}&before={before}&count={count}&limit={limit}&show={show}'; } // https://www.reddit.com/dev/api#GET_subreddits_search // Make Wrapped rpc SubredditsSearch(SubredditsSearchRequest) returns (SubredditsSearchResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/subreddits/search?after={after}&before={before}&count={count}&limit={limit}&q={q}&search_query_id={search_query_id}&show={show}&show_users={show_users}&sort={sort}&typeahead_active={typeahead_active}'; } // https://www.reddit.com/dev/api#GET_subreddits_\{where\} rpc SubredditsWhere(BasicWhereRequest) returns (SubredditsSearchResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/subreddits/{where}?after={after}&before={before}&count={count}&limit={limit}&show={show}'; } // https://www.reddit.com/dev/api#GET_users_search rpc UsersSearch(UsersSearchRequest) returns (UserSearchResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/users/search?after={after}&before={before}&count={count}&limit={limit}&q={q}&search_query_id={search_query_id}&show={show}&sort={sort}&typeahead_active={typeahead_active}'; } // https://www.reddit.com/dev/api#GET_users_\{where\} rpc UsersWhere(BasicWhereRequest) returns (SubredditsSearchResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/users/{where}?after={after}&before={before}&count={count}&limit={limit}&show={show}'; } // Add a removal reason to a subreddit. // // POST /api/v1/{subreddit}/removal_reasons rpc SubredditAddRemovalReason(SubredditAddRemovalReasonRequest) returns (SubredditAddRemovalReasonResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'POST'; option (devvit.plugin.redditapi.common.api_client_config).path = '/api/v1/{subreddit}/removal_reasons'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE; option (devvit.plugin.redditapi.common.api_client_config).enforce_json = true; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Get the list of subreddit's removal reasons. // // GET /api/v1/{subreddit}/removal_reasons rpc SubredditGetRemovalReasons(SubredditGetRemovalReasonsRequest) returns (SubredditGetRemovalReasonsResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'GET'; option (devvit.plugin.redditapi.common.api_client_config).path = '/api/v1/{subreddit}/removal_reasons'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Update an existing removal reason. // // PUT /api/v1/{subreddit}/removal_reasons/{reason_id} rpc SubredditUpdateRemovalReason(SubredditUpdateRemovalReasonRequest) returns (SubredditUpdateRemovalReasonResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'PUT'; option (devvit.plugin.redditapi.common.api_client_config).path = '/api/v1/{subreddit}/removal_reasons/{reason_id}'; option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE; option (devvit.plugin.redditapi.common.api_client_config).enforce_json = true; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Delete an existing removal reason. // // DELETE /api/v1/{subreddit}/removal_reasons/{reason_id} rpc SubredditDeleteRemovalReason(SubredditDeleteRemovalReasonRequest) returns (SubredditDeleteRemovalReasonResponse) { option (devvit.plugin.redditapi.common.api_client_config).method = 'DELETE'; option (devvit.plugin.redditapi.common.api_client_config).path = '/api/v1/{subreddit}/removal_reasons/{reason_id}'; option (devvit.plugin.redditapi.common.api_client_config).validate_subreddit_context = 'subreddit'; } // Get highlighted posts in a subreddit. rpc GetHighlightedPosts(GetHighlightedPostsRequest) returns (GetHighlightedPostsResponse); // Reorder highlighted posts in a subreddit. rpc ReorderHighlightedPosts(ReorderHighlightedPostsRequest) returns (ReorderHighlightedPostsResponse); }