/** * Represents a notification from Reddit's inbox * Types can include: comment_reply, post_reply, username_mention, etc. */ export interface RedditNotification { /** * The full ID of the notification, including type prefix: * t1_ = Comment * t3_ = Post/Link * t4_ = Message/Notification * Format: {type_prefix}_{base36_id} */ id: string; /** * The type of notification * Common values: "comment_reply", "post_reply", "username_mention" */ type: "comment_reply" | "post_reply" | "username_mention" | "message" | "other"; /** Unix timestamp of when the notification was created */ created_utc: number; /** The subreddit where the notification originated */ subreddit: string; /** Title of the post (only present for post_reply types) */ title?: string; /** Subject line of the notification */ subject: string; /** Content of the reply/message */ body?: string; /** Username of the person who triggered the notification */ author: string; /** * The full ID of the content being referenced (post or comment), including type prefix: * t1_ = Comment (for comment replies) * t3_ = Post/Link (for post replies) * Format: {type_prefix}_{base36_id} */ parent_id: string; /** * Reddit URL path to the content * Format for comments: /r/{subreddit}/comments/{post_id}/{comment_id} * Format for posts: /r/{subreddit}/comments/{post_id} */ permalink: string; /** Whether the notification has been read */ unread: boolean; } /** * Represents a private message from Reddit */ export interface RedditMessage { /** Full message ID with t4_ prefix */ id: string; /** Type will always be "message" */ type: "message"; /** Subject line of the message */ subject: string; /** ID of the message thread (usually same as message ID) */ parent_id: string; /** Username of message sender */ author: string; /** Content of the message */ body: string; /** Unix timestamp when message was sent */ created_utc: number; /** Whether the message has been read */ unread: boolean; } /** * Represents detailed information about a subreddit * This matches Reddit's GET /r/{subreddit}/about endpoint */ export interface SubredditInfo { /** * Subreddit's unique ID * Should include t5_ prefix for API calls */ id: string; /** * Internal name with prefix * Format: t5_{base36_id} */ name: string; /** The subreddit name as shown in URLs (without /r/) */ display_name: string; /** The full title of the subreddit shown in the header */ title: string; /** Subreddit's sidebar text/description (in Markdown) */ description: string; /** Number of subscribers to the subreddit */ subscribers: number; /** Unix timestamp of when the subreddit was created */ created_utc: number; /** Relative URL path to the subreddit */ url: string; /** Whether the subreddit is marked as NSFW */ over18: boolean; /** URL to the subreddit's icon image */ icon_img?: string; /** Whether the current user is subscribed to this subreddit */ user_is_subscriber: boolean; /** Whether the current user is a moderator of this subreddit */ user_is_moderator: boolean; /** List of rules for the subreddit */ rules?: SubredditRule[]; /** Requirements for posting in the subreddit */ post_requirements?: PostRequirements; } /** * Represents a rule in a subreddit * These appear in the subreddit's rules page and when reporting content */ export interface SubredditRule { /** Type of rule (e.g., "link", "comment", "all") */ kind: string; /** Full description of the rule */ description: string; /** Short title of the rule */ short_name: string; /** Text shown when reporting this rule violation */ violation_reason: string; /** Unix timestamp when the rule was created */ created_utc: number; /** Order in which rules are displayed */ priority: number; } /** * Requirements that must be met to post in a subreddit * These are checked by AutoModerator and Reddit's spam filters */ export interface PostRequirements { /** Regular expressions that titles must match */ title_regexes: string[]; /** Regular expressions that post bodies must match */ body_regexes: string[]; /** Strings that are not allowed in titles */ title_blacklisted_strings: string[]; /** Strings that are not allowed in post bodies */ body_blacklisted_strings: string[]; /** Strings that must appear in titles */ title_required_strings: string[]; /** Strings that must appear in post bodies */ body_required_strings: string[]; /** Whether posts must have a flair assigned */ is_flair_required: boolean; /** Domains that are not allowed to be posted */ domain_blacklist: string[]; /** If set, only these domains are allowed to be posted */ domain_whitelist: string[]; /** Minimum combined karma (link + comment) required to post */ min_combined_karma: number; /** Minimum account age in days required to post */ account_age_min_days: number; } /** * User preferences as returned by Reddit's /api/v1/me/prefs endpoint */ export interface UserPreferences { /** Whether to receive notifications */ enable_notifications: boolean; /** Whether to view NSFW content */ show_nsfw: boolean; /** Default sort method for comments */ default_comment_sort: "best" | "top" | "new" | "controversial" | "old" | "qa"; /** UI theme preference */ theme: "light" | "dark" | "auto"; /** Interface language code */ language: string; } /** * Information about a Reddit user * Matches Reddit's GET /user/{username}/about endpoint */ export interface UserInfo { /** * User's unique ID * Format: t2_{base36_id} */ id: string; /** Username */ name: string; /** Unix timestamp when the account was created */ created_utc: number; /** Karma earned from comments */ comment_karma: number; /** Karma earned from posts */ link_karma: number; /** Whether the user has Reddit Premium */ is_gold: boolean; /** Whether the user is a moderator of any subreddit */ is_mod: boolean; /** Whether the user's email is verified */ has_verified_email: boolean; /** User's preference settings */ preferences: UserPreferences; } /** * Parameters for filtering Reddit search results * Used in Reddit's /search endpoint */ export interface SearchFilters { /** Time period to restrict results to */ time?: "hour" | "day" | "week" | "month" | "year" | "all"; /** How to sort the results */ sort?: "relevance" | "hot" | "top" | "new" | "comments"; /** Type of content to return */ type?: "link" | "self" | "image" | "video"; /** Whether to search only within a specific subreddit */ restrict_sr?: boolean; /** Whether to include NSFW results */ include_over_18?: boolean; /** Maximum number of results to return */ limit?: number; } /** * Represents a post in search results * Subset of Reddit's Link object type */ export interface PostSearchResult { /** * Post's unique ID * Should include t3_ prefix for API calls */ id: string; /** Post title */ title: string; /** Username of post author */ author: string; /** Subreddit the post is in */ subreddit: string; /** Unix timestamp when post was created */ created_utc: number; /** Net upvotes (upvotes - downvotes) */ score: number; /** Number of comments on the post */ num_comments: number; /** Relative URL path to the post */ permalink: string; /** URL that the post links to (or post URL for self posts) */ url: string; /** Whether this is a text/self post */ is_self: boolean; /** Whether this is a video post */ is_video: boolean; /** URL to the post's thumbnail image */ thumbnail?: string; /** Text content for self posts */ selftext?: string; /** Post's flair information */ flair?: { text: string; background_color: string; text_color: string; }; } /** * Represents a user in search results * Subset of Reddit's Account object type */ export interface UserSearchResult { /** * User's unique ID * Should include t2_ prefix for API calls */ id: string; /** Username */ name: string; /** Unix timestamp when account was created */ created_utc: number; /** Karma earned from comments */ comment_karma: number; /** Karma earned from posts */ link_karma: number; /** Whether user has Reddit Premium */ is_gold: boolean; /** Whether user moderates any subreddits */ is_mod: boolean; /** Whether user's email is verified */ verified: boolean; /** URL to user's profile image */ profile_img?: string; /** User's profile description */ description?: string; } /** * Represents a subreddit in search results * Subset of Reddit's Subreddit object type */ export interface SubredditSearchResult { /** * Subreddit's unique ID * Should include t5_ prefix for API calls */ id: string; /** * Internal name with prefix * Format: t5_{base36_id} */ name: string; /** Subreddit name as shown in URLs */ display_name: string; /** Full title shown in subreddit header */ title: string; /** Sidebar text/description */ description: string; /** Number of subscribers */ subscribers: number; /** Unix timestamp when subreddit was created */ created_utc: number; /** Whether subreddit is marked as NSFW */ over18: boolean; /** Whether current user is subscribed */ user_is_subscriber: boolean; /** URL to subreddit's icon */ icon_img?: string; /** URL to subreddit's banner image */ banner_img?: string; /** Subreddit's theme color */ primary_color?: string; /** Number of users currently viewing the subreddit */ active_user_count?: number; } /** * Container for Reddit search results * Can include posts, subreddits, and users */ export interface SearchResults { /** The search query that was performed */ query: string; /** The filters that were applied */ filters: SearchFilters; /** Post search results */ posts?: { results: PostSearchResult[]; total_count: number; next_page_token?: string; }; /** Subreddit search results */ subreddits?: { results: SubredditSearchResult[]; total_count: number; next_page_token?: string; }; /** User search results */ users?: { results: UserSearchResult[]; total_count: number; next_page_token?: string; }; } /** * Top-level configuration data structure * Contains the main data needed for the Reddit client */ export interface RedditConfigData { /** User's notifications (excluding private messages) */ notifications: RedditNotification[]; /** User's private messages */ messages: RedditMessage[]; /** List of subreddits the user is subscribed to */ subscribedSubreddits: SubredditInfo[]; /** Information about the current user */ user: UserInfo; } export declare const mockRedditConfig: RedditConfigData;