This repository has been archived on 2025-11-04. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
qoverflow/server/utils/api.js

39 lines
1.1 KiB
JavaScript

const superagent = require('superagent');
const Throttle = require('superagent-throttle');
const throttle = new Throttle({
active: true,
rate: 5,
ratePer: 1000,
concurrent: 2,
});
const cleanObject = (data) => Object.fromEntries(Object.entries(data).filter(([, v]) => v));
const stringifyQuery = (data = {}) =>
Object.fromEntries(
Object.entries(data).map(([k, v]) => [
k,
typeof v === 'object' ? JSON.stringify(cleanObject(v)) : v,
])
);
const createRequest = async (op, endpoint, data) => {
let request = superagent[op](`${process.env.API_URL}${endpoint}`)
.use(throttle.plugin())
.set('Authorization', `bearer ${process.env.API_KEY}`);
if (data)
if (op === 'get' || op === 'delete') request = request.query(stringifyQuery(data));
else if (op === 'post' || op === 'patch') request = request.send(data);
return request
.then((res) => {
return res.body;
})
.catch((err) => {
return err.response?.body || { error: 'Error' };
});
};
module.exports = createRequest;