discord-authorize
Version:
A node module for easy authentication with Discord
80 lines • 3.47 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const axios_1 = __importDefault(require("axios"));
const errors_1 = require("../errors");
const getType_1 = __importDefault(require("../util/getType"));
let baseURL = "https://discord.com/api/v10";
/**
* Makes a request to the Discord API.
* @private
* @param {string} method - HTTP method.
* @param {string} endpoint - API endpoint.
* @param {AxiosRequestConfig} options - Request configuration options.
* @returns {Promise<AxiosResponse>} - Response from the API.
* @throws {Error} - If the request fails.
*/
async function request(method, endpoint, accessToken, options = {}) {
if ((0, getType_1.default)(accessToken) !== "string") {
const censoredAccessToken = accessToken.substring(0, 5) + "...";
throw new errors_1.InvalidAccessTokenError(`The access token: ${censoredAccessToken} is invalid`);
}
const headers = {
...(options.headers || {}),
Authorization: `Bearer ${accessToken}`,
};
const requestOptions = {
...options,
method,
url: `${baseURL}${endpoint}`,
headers,
};
if (method === "GET" && options.params) {
requestOptions.params = options.params;
}
else if (["PUT", "POST", "PATCH"].includes(method)) {
// For PUT, POST, and PATCH methods, pass the request data
requestOptions.data = options.data;
}
try {
const response = await axios_1.default.request(requestOptions);
return response;
}
catch (error) {
const errorMessage = errors_1.errorMessages[error?.response.status] ||
`Status ${error?.response.status} is not handled yet.`;
const sEM = errors_1.statusCodedErrorMessages[error?.response.data.code];
if (error?.response.data &&
error?.response.data.message &&
error?.response.data.code === 0) {
switch (error?.response.status) {
case 401:
throw new errors_1.InvalidAccessTokenError(`${errorMessage}`, JSON.stringify(error?.response.data));
case 404:
throw new errors_1.NotFoundError(`${errorMessage}`, JSON.stringify(error?.response.data));
case 400:
throw new errors_1.BadRequestError(`${errorMessage}`, JSON.stringify(error?.response.data));
case 429:
throw new errors_1.RateLimitedError(`${errorMessage}`, JSON.stringify(error?.response.data));
case 500:
throw new errors_1.DiscordAPIError(`${errorMessage}`, JSON.stringify(error?.response.data));
case 403:
throw new errors_1.UnauthorizedError(`${errorMessage}`, JSON.stringify(error?.response.data));
default:
throw new Error(`${errorMessage} Response Data: ${JSON.stringify(error?.response.data)}`);
}
}
else if (error?.response.data &&
error?.response.data.message &&
error?.response.data.code !== 0) {
throw new errors_1.DiscordAPIError(sEM, error?.response.data);
}
else {
throw new Error(errorMessage);
}
}
}
exports.default = request;
//# sourceMappingURL=requestHandler.js.map