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
JavaScript
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