mirror of
https://github.com/discordjs/discord.js.git
synced 2026-06-01 16:40:07 +00:00
50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
const UserAgentManager = require('./UserAgentManager');
|
|
const RESTMethods = require('./RESTMethods');
|
|
const SequentialRequestHandler = require('./RequestHandlers/Sequential');
|
|
const APIRequest = require('./APIRequest');
|
|
const Constants = require('../../util/Constants');
|
|
|
|
class RESTManager {
|
|
|
|
constructor(client) {
|
|
this.client = client;
|
|
this.handlers = {};
|
|
this.userAgentManager = new UserAgentManager(this);
|
|
this.methods = new RESTMethods(this);
|
|
this.rateLimitedEndpoints = {};
|
|
this.globallyRateLimited = false;
|
|
}
|
|
|
|
push(handler, apiRequest) {
|
|
return new Promise((resolve, reject) => {
|
|
handler.push({
|
|
request: apiRequest,
|
|
resolve,
|
|
reject,
|
|
});
|
|
});
|
|
}
|
|
|
|
getRequestHandler() {
|
|
switch (this.client.options.api_request_method) {
|
|
case 'sequential':
|
|
return SequentialRequestHandler;
|
|
default:
|
|
throw Constants.Errors.INVALID_RATE_LIMIT_METHOD;
|
|
}
|
|
}
|
|
|
|
makeRequest(method, url, auth, data, file) {
|
|
const apiRequest = new APIRequest(this, method, url, auth, data, file);
|
|
|
|
if (!this.handlers[apiRequest.getEndpoint()]) {
|
|
const RequestHandlerType = this.getRequestHandler();
|
|
this.handlers[apiRequest.getEndpoint()] = new RequestHandlerType(this, apiRequest.getEndpoint());
|
|
}
|
|
|
|
return this.push(this.handlers[apiRequest.getEndpoint()], apiRequest);
|
|
}
|
|
}
|
|
|
|
module.exports = RESTManager;
|