UNPKG

tsraw

Version:

TypeScript Reddit API Wrapper

157 lines 12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TSRAW = void 0; const axios_1 = require("axios"); const utils_js_1 = require("./utils.js"); class TSRAW { rAxios; constructor(token) { this.rAxios = utils_js_1.axios.create({ baseURL: 'https://oauth.reddit.com/api/', headers: { 'content-type': 'application/x-www-form-urlencoded', 'Authorization': 'bearer ' + token } }); // TODO Work out why this.rAxios doesn't use the interceptor in utils this.rAxios.interceptors.response.use(undefined, (err) => { console.log(`rAxios: Failed request ${err.config.url}, ${err.code}, ${err.response.status}`); if (err.response.status >= 500 && err.config && !err.config.__isRetryRequest) { console.log(`Retrying...`); err.config.__isRetryRequest = true; return (0, utils_js_1.axios)(err.config); } throw err; }); } static async init(credentials) { const loginRequest = { url: 'https://www.reddit.com/api/v1/access_token', method: 'POST', auth: { username: credentials.client_id, password: credentials.client_secret }, data: new URLSearchParams({ grant_type: 'password', username: credentials.username, password: credentials.password }), headers: { 'User-Agent': credentials.user_agent, 'content-type': 'application/x-www-form-urlencoded', } }; const { access_token: token } = await (0, utils_js_1.rq)(loginRequest); return new TSRAW(token); } async rq(request, raw) { const URI = this.rAxios.getUri({ ...request, data: new URLSearchParams({ api_type: 'json', ...request.data }) }); try { const res = await this.rAxios({ ...request, data: new URLSearchParams({ api_type: 'json', ...request.data }) }); if (res.data?.json?.errors.length) { throw new Error(`RedditError: ${res.data.json.errors}`); } return raw ? res : res.data.json; } catch (cause) { if (cause.message.includes("RedditError")) { console.error(request.method, URI); console.error(request.data); } throw cause instanceof axios_1.AxiosError ? cause.toJSON() : cause; } } async submit(submission) { return (this.rq({ method: 'POST', url: 'submit', data: submission, })); } async edit(post) { return (this.rq({ method: 'POST', url: 'editusertext', // Use t3 for self post, t1 for comment // https://www.reddit.com/dev/api/#fullnames data: { text: post.text, thing_id: `t3_${post.id}` }, })); } async sticky(id) { return this.rq({ method: 'POST', url: 'set_subreddit_sticky', data: { id, state: true, }, }); } async getSettings(subreddit) { const url = `/r/${subreddit}/about/edit.json`; return (await this.rq({ baseURL: 'https://oauth.reddit.com', method: 'GET', url }, true)); } async getMe() { const url = `/api/me.json`; return (await this.rq({ baseURL: 'https://oauth.reddit.com', method: 'GET', url }, true)); } async updateSidebar(subreddit, description) { const oldSettings = (await this.getSettings(subreddit)).data.data; const newDescription = oldSettings.description.split('# Schedule')[0] + description; return this.rq({ method: 'POST', url: 'site_admin', data: { sr: oldSettings.subreddit_id, link_type: 'any', type: 'public', ...oldSettings, description: newDescription }, }); } async threads(params) { const { subreddit, sort = 'new', time = 'day', after, limit = 100 } = params; let url; if (!after) { url = `https://oauth.reddit.com/r/${subreddit}/${sort}/.json?limit=${limit}&t=${time}`; } else { url = `https://oauth.reddit.com/r/${subreddit}/${sort}/.json?limit=${limit}&t=${time}&after=${after}`; } const res = (await this.rq({ method: 'GET', url }, true)); return res.data.data.children; } async comments(params) { const { thread_id, sort = 'new', limit = 100, after } = params; let url; if (!after) { url = `https://oauth.reddit.com/comments/${thread_id}.json?limit=${limit}&sort=${sort}`; } else { url = `https://oauth.reddit.com/comments/${thread_id}.json?limit=${limit}&sort=${sort}&after=${after}`; } const res = await this.rq({ method: 'GET', url }, true); return res.data[1].data.children; } } exports.TSRAW = TSRAW; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVFNSQVcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvVFNSQVcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQXNEO0FBQ3RELHlDQUFzQztBQWtCdEMsTUFBYSxLQUFLO0lBQ1IsTUFBTSxDQUFBO0lBRWQsWUFBWSxLQUFhO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQUssQ0FBQyxNQUFNLENBQUM7WUFDekIsT0FBTyxFQUFFLCtCQUErQjtZQUN4QyxPQUFPLEVBQUU7Z0JBQ1AsY0FBYyxFQUFFLG1DQUFtQztnQkFDbkQsZUFBZSxFQUFFLFNBQVMsR0FBRyxLQUFLO2FBQ25DO1NBQ0YsQ0FBQyxDQUFBO1FBRUYscUVBQXFFO1FBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDNUQsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7WUFDNUYsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDN0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtnQkFDMUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQ25DLE9BQU8sSUFBQSxnQkFBSyxFQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzQixDQUFDO1lBQ0QsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUE2QjtRQUM3QyxNQUFNLFlBQVksR0FBRztZQUNuQixHQUFHLEVBQUUsNENBQTRDO1lBQ2pELE1BQU0sRUFBRSxNQUFNO1lBQ2QsSUFBSSxFQUFFO2dCQUNKLFFBQVEsRUFBRSxXQUFXLENBQUMsU0FBUztnQkFDL0IsUUFBUSxFQUFFLFdBQVcsQ0FBQyxhQUFhO2FBQ3BDO1lBQ0QsSUFBSSxFQUFFLElBQUksZUFBZSxDQUFDO2dCQUN4QixVQUFVLEVBQUUsVUFBVTtnQkFDdEIsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRO2dCQUM5QixRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVE7YUFDL0IsQ0FBQztZQUNGLE9BQU8sRUFBRTtnQkFDUCxZQUFZLEVBQUUsV0FBVyxDQUFDLFVBQVU7Z0JBQ3BDLGNBQWMsRUFBRSxtQ0FBbUM7YUFDcEQ7U0FDRixDQUFBO1FBRUQsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBYyxNQUFNLElBQUEsYUFBRSxFQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ2pFLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUVPLEtBQUssQ0FBQyxFQUFFLENBQXNCLE9BQTJCLEVBQUUsR0FBYTtRQUM5RSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUM3QixHQUFHLE9BQU87WUFDVixJQUFJLEVBQUUsSUFBSSxlQUFlLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2pFLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDNUIsR0FBRyxPQUFPO2dCQUNWLElBQUksRUFBRSxJQUFJLGVBQWUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDakUsQ0FBQyxDQUFBO1lBRUYsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7WUFDekQsQ0FBQztZQUVELE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBQ2xDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSyxLQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUE7Z0JBQ2xDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzdCLENBQUM7WUFDRCxNQUFNLEtBQUssWUFBWSxrQkFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtRQUM1RCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUUsVUFBc0I7UUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQWE7WUFDMUIsTUFBTSxFQUFFLE1BQU07WUFDZCxHQUFHLEVBQUUsUUFBUTtZQUNiLElBQUksRUFBRyxVQUFVO1NBQ2xCLENBQUMsQ0FBQyxDQUFBO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQUUsSUFBYztRQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBYTtZQUMxQixNQUFNLEVBQUUsTUFBTTtZQUNkLEdBQUcsRUFBRSxjQUFjO1lBQ25CLHVDQUF1QztZQUN2Qyw0Q0FBNEM7WUFDNUMsSUFBSSxFQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFO1NBQ3RELENBQUMsQ0FBQyxDQUFBO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUUsRUFBVTtRQUN0QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLEdBQUcsRUFBRSxzQkFBc0I7WUFDM0IsSUFBSSxFQUFHO2dCQUNMLEVBQUU7Z0JBQ0YsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFFLFNBQWlCO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxrQkFBa0IsQ0FBQTtRQUU3QyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFlO1lBQ2xDLE9BQU8sRUFBRSwwQkFBMEI7WUFDbkMsTUFBTSxFQUFFLEtBQUs7WUFDYixHQUFHO1NBQ0osRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ1gsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFBO1FBRTFCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQVk7WUFDL0IsT0FBTyxFQUFFLDBCQUEwQjtZQUNuQyxNQUFNLEVBQUUsS0FBSztZQUNiLEdBQUc7U0FDSixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDWCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBRSxTQUFpQixFQUFFLFdBQW1CO1FBQ3pELE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUNqRSxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUE7UUFDbkYsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2IsTUFBTSxFQUFFLE1BQU07WUFDZCxHQUFHLEVBQUUsWUFBWTtZQUNqQixJQUFJLEVBQUc7Z0JBQ0wsRUFBRSxFQUFFLFdBQVcsQ0FBQyxZQUFZO2dCQUM1QixTQUFTLEVBQUUsS0FBSztnQkFDaEIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsR0FBRyxXQUFXO2dCQUNkLFdBQVcsRUFBRSxjQUFjO2FBQzVCO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUUsTUFBa0I7UUFDL0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUE7UUFDNUUsSUFBSSxHQUFHLENBQUE7UUFFUCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxHQUFHLEdBQUcsOEJBQThCLFNBQVMsSUFBSSxJQUFJLGdCQUFnQixLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUE7UUFDeEYsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLEdBQUcsOEJBQThCLFNBQVMsSUFBSSxJQUFJLGdCQUFnQixLQUFLLE1BQU0sSUFBSSxVQUFVLEtBQUssRUFBRSxDQUFBO1FBQ3ZHLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBYztZQUN0QyxNQUFNLEVBQUUsS0FBSztZQUNiLEdBQUc7U0FDSixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7UUFFVCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQTtJQUMvQixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBRSxNQUFtQjtRQUNqQyxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRyxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUcsR0FBRyxNQUFNLENBQUE7UUFDL0QsSUFBSSxHQUFHLENBQUE7UUFFUCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxHQUFHLEdBQUcscUNBQXFDLFNBQVMsZUFBZSxLQUFLLFNBQVMsSUFBSSxFQUFFLENBQUE7UUFDekYsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLEdBQUcscUNBQXFDLFNBQVMsZUFBZSxLQUFLLFNBQVMsSUFBSSxVQUFVLEtBQUssRUFBRSxDQUFBO1FBQ3hHLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBRXJFLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFBO0lBQ2xDLENBQUM7Q0FDRjtBQTFLRCxzQkEwS0MifQ==