tsraw
Version:
TypeScript Reddit API Wrapper
157 lines • 12 kB
JavaScript
;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVFNSQVcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvVFNSQVcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQXNEO0FBQ3RELHlDQUFzQztBQWtCdEMsTUFBYSxLQUFLO0lBQ1IsTUFBTSxDQUFBO0lBRWQsWUFBWSxLQUFhO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQUssQ0FBQyxNQUFNLENBQUM7WUFDekIsT0FBTyxFQUFFLCtCQUErQjtZQUN4QyxPQUFPLEVBQUU7Z0JBQ1AsY0FBYyxFQUFFLG1DQUFtQztnQkFDbkQsZUFBZSxFQUFFLFNBQVMsR0FBRyxLQUFLO2FBQ25DO1NBQ0YsQ0FBQyxDQUFBO1FBRUYscUVBQXFFO1FBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDNUQsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7WUFDNUYsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDN0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtnQkFDMUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQ25DLE9BQU8sSUFBQSxnQkFBSyxFQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzQixDQUFDO1lBQ0QsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFD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