UNPKG

systemprompt-mcp-reddit

Version:

A specialized Model Context Protocol (MCP) server that enables you to search, read, and interact with Reddit content, leveraging an AI Agent to help with each operation.

59 lines 2.63 kB
import { RedditError, } from "../../types/reddit.js"; import { RedditFetchService } from "./reddit-fetch-service.js"; import { transformSubreddit, transformSubscribedSubreddit, } from "../../utils/reddit-transformers.js"; export class RedditSubredditService extends RedditFetchService { constructor(baseUrl, authService, rateLimitDelay) { super(baseUrl, authService, rateLimitDelay); } async getSubredditInfo(subreddit) { try { const [aboutData, rulesData] = await Promise.all([ this.redditFetch(`/r/${subreddit}/about.json`), this.redditFetch(`/r/${subreddit}/about/rules.json`), ]); const subredditData = transformSubreddit({ ...aboutData.data, rules: rulesData.rules, }); return { allowedPostTypes: subredditData.allowedPostTypes, rules: subredditData.rules, titleRequirements: subredditData.postRequirements.title, bodyRequirements: subredditData.postRequirements.body, flairRequired: subredditData.postRequirements.flairRequired, }; } catch (error) { throw new RedditError(`Failed to fetch subreddit info: ${error instanceof Error ? error.message : "Unknown error"}`, "API_ERROR", error); } } /** * Fetches the list of subreddits the authenticated user is subscribed to * @param options Options for fetching subscribed subreddits * @returns Array of subscribed subreddits */ async fetchSubscribedSubreddits(options = {}) { try { const limit = options.limit || 100; let endpoint = `/subreddits/mine/subscriber.json?limit=${limit}`; if (options.after) { endpoint += `&after=${options.after}`; } const data = await this.redditFetch(endpoint); return (data.data.children || []).map((item) => transformSubscribedSubreddit(item.data)); } catch (error) { throw new RedditError(`Failed to fetch subscribed subreddits: ${error instanceof Error ? error.message : "Unknown error"}`, "API_ERROR", error); } } /** * Fetches available post flairs for a subreddit * @param subreddit The subreddit name (without r/ prefix) * @returns Array of available flairs */ async getFlairs(subreddit) { const response = await this.redditFetch(`/r/${subreddit}/api/link_flair_v2`); return response; } } //# sourceMappingURL=reddit-subreddit-service.js.map