mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-10 08:33:30 +01:00
52 lines
1.5 KiB
JavaScript
52 lines
1.5 KiB
JavaScript
const UserAgentManager = require('./UserAgentManager');
|
|
const RESTMethods = require('./RESTMethods');
|
|
const SequentialRequestHandler = require('./RequestHandlers/Sequential');
|
|
const BurstRequestHandler = require('./RequestHandlers/Burst');
|
|
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;
|
|
case 'burst':
|
|
return BurstRequestHandler;
|
|
default:
|
|
throw new Error(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;
|