UNPKG

@r/api-client

Version:

node and browser reddit api library

204 lines (178 loc) 5.29 kB
import superagent from 'superagent'; import url from 'url'; import activities from './apis/activities'; import hidden from './apis/hidden'; import saved from './apis/saved'; import search from './apis/search'; import stylesheets from './apis/stylesheets'; import subreddits from './apis/subreddits'; import subscriptions from './apis/subscriptions'; import trophies from './apis/trophies'; import accounts from './apis/accounts'; import votes from './apis/votes'; import links from './apis/links'; import comments from './apis/comments'; import captcha from './apis/captcha'; import reports from './apis/reports'; import messages from './apis/messages'; import modListing from './apis/modListing'; import subredditRelationships from './apis/subredditRelationships'; import rules from './apis/rules'; import wiki from './apis/wiki'; import multis from './apis/multis'; import multiSubscriptions from './apis/multiSubscriptions'; import { APIResponse, MergedApiReponse } from './apis/APIResponse'; import { withQueryAndResult, afterResponse, beforeResponse, fetchAll, } from './apis/APIResponsePaging'; export const APIResponses = { APIResponse, MergedApiReponse, }; export const APIResponsePaging = { withQueryAndResult, afterResponse, beforeResponse, fetchAll, }; export const APIs = { activities, captcha, hidden, saved, search, stylesheets, subreddits, subscriptions, trophies, accounts, votes, links, comments, reports, messages, modListing, subredditRelationships, rules, wiki, multis, multiSubscriptions, }; import NoModelError from './errors/noModelError'; import ResponseError from './errors/responseError'; import { DisconnectedError } from './errors/responseError'; import ValidationError from './errors/validationError'; import NotImplementedError from './errors/notImplementedError'; export const errors = { NoModelError, ValidationError, ResponseError, DisconnectedError, NotImplementedError, }; import Account from './models/account'; import Award from './models/award'; import Base from './models/base'; import Block from './models/block'; import BlockedUser from './models/BlockedUser'; import Comment from './models2/Comment'; import Link from './models2/Link'; import Message from './models/message'; import PromoCampaign from './models/promocampaign'; import Preferences from './models/preferences'; import Subreddit from './models2/Subreddit'; import Subscription from './models/subscription'; import Vote from './models/vote'; import Report from './models/report'; import WikiPage from './models/wikiPage'; import WikiRevision from './models/wikiRevision'; import WikiPageListing from './models/wikiPageListing'; import WikiPageSettings from './models/wikiPageSettings'; import { SubscribedSubreddits, ModeratingSubreddits, ContributingSubreddits, } from './collections/SubredditLists'; import CommentsPage from './collections/CommentsPage'; import HiddenPostsAndComments from './collections/HiddenPostsAndComments'; import PostsFromSubreddit from './collections/PostsFromSubreddit'; import SavedPostsAndComments from './collections/SavedPostsAndComments'; import SearchQuery from './collections/SearchQuery'; export const models = { Account, Award, Base, Block, BlockedUser, Comment, Link, Message, PromoCampaign, Preferences, Subreddit, Subscription, Vote, Report, WikiPage, WikiRevision, WikiPageListing, WikiPageSettings, } export const collections = { CommentsPage, ContributingSubreddits, HiddenPostsAndComments, ModeratingSubreddits, PostsFromSubreddit, SavedPostsAndComments, SearchQuery, SubscribedSubreddits, }; const DEFAULT_API_ORIGIN = 'https://www.reddit.com'; const AUTHED_API_ORIGIN = 'https://oauth.reddit.com'; const SCOPES = 'history,identity,mysubreddits,read,subscribe,vote,submit,' + 'save,edit,account,creddits,flair,livemanage,modconfig,' + 'modcontributors,modflair,modlog,modothers,modposts,modself,' + 'modwiki,privatemessages,report,wikiedit,wikiread'; // Webpack 2 has an export bug where a library's export object does not state // that it is an es6 module. Without this tag defined on the exports object, // Webpack does not import the library correctly. export const __esModule = true; // shim event emitter. You can pass an instance in to the config // but we don't include it be default to keep the payload smaller const EventEmitterShim = { emit: () => {}, on: () => {}, off: () => {}, }; export default class Snoode { static APIs = Object.keys(APIs); constructor(config={}) { this.config = { origin: DEFAULT_API_ORIGIN, event: config.eventEmitter || EventEmitterShim, userAgent: 'snoodev2', appName: 'snoodev2', env: 'dev', ...config, }; this.event = this.config.event; for (let a in APIs) { this[a] = new APIs[a](this); } } withAuth (token, changeOrigin=true) { return new Snoode({ ...this.config, token, origin: changeOrigin ? AUTHED_API_ORIGIN : this.config.origin, }); } withConfig (config) { // Merge the new config onto the old and return a new instance return new Snoode({...this.config, ...config}); } }