Skip to content

Commit

Permalink
feat(Rest): show the data that is sent to Discord when an errors occurs
Browse files Browse the repository at this point in the history
Now you know what Discord means by your embed being wrong...
  • Loading branch information
vladfrangu committed May 29, 2021
1 parent e300518 commit 6339ac1
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 10 deletions.
15 changes: 12 additions & 3 deletions src/rest/DiscordAPIError.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* @extends Error
*/
class DiscordAPIError extends Error {
constructor(path, error, method, status) {
constructor(error, status, request) {
super();
const flattened = this.constructor.flattenErrors(error.errors || error).join('\n');
this.name = 'DiscordAPIError';
Expand All @@ -15,13 +15,13 @@ class DiscordAPIError extends Error {
* The HTTP method used for the request
* @type {string}
*/
this.method = method;
this.method = request.method;

/**
* The path of the request relative to the HTTP endpoint
* @type {string}
*/
this.path = path;
this.path = request.path;

/**
* HTTP error code returned by Discord
Expand All @@ -34,6 +34,15 @@ class DiscordAPIError extends Error {
* @type {number}
*/
this.httpStatus = status;

/**
* The data associated with the request that caused this error
* @type {HTTPErrorData}
*/
this.requestData = {
jsonData: request.options.data,
files: request.options.files ?? [],
};
}

/**
Expand Down
29 changes: 26 additions & 3 deletions src/rest/HTTPError.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* @extends Error
*/
class HTTPError extends Error {
constructor(message, name, code, method, path) {
constructor(message, name, code, request) {
super(message);

/**
Expand All @@ -24,13 +24,36 @@ class HTTPError extends Error {
* The HTTP method used for the request
* @type {string}
*/
this.method = method;
this.method = request.method;

/**
* The path of the request relative to the HTTP endpoint
* @type {string}
*/
this.path = path;
this.path = request.path;

/**
* The HTTP data that was sent to Discord
* @typedef {Object} HTTPErrorData
* @property {*} jsonData The JSON data that was sent
* @property {HTTPAttachmentData[]} files The files that were sent with this request, if any
*/

/**
* The attachment data that is sent to Discord
* @typedef {Object} HTTPAttachmentData
* @property {string} name The file name
* @property {Buffer} file The file buffer
*/

/**
* The data associated with the request that caused this error
* @type {HTTPErrorData}
*/
this.requestData = {
jsonData: request.options.data,
files: request.options.files ?? [],
};
}
}

Expand Down
8 changes: 4 additions & 4 deletions src/rest/RequestHandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ class RequestHandler {
} catch (error) {
// Retry the specified number of times for request abortions
if (request.retries === this.manager.client.options.retryLimit) {
throw new HTTPError(error.message, error.constructor.name, error.status, request.method, request.path);
throw new HTTPError(error.message, error.constructor.name, error.status, request);
}

request.retries++;
Expand Down Expand Up @@ -237,17 +237,17 @@ class RequestHandler {
try {
data = await parseResponse(res);
} catch (err) {
throw new HTTPError(err.message, err.constructor.name, err.status, request.method, request.path);
throw new HTTPError(err.message, err.constructor.name, err.status, request);
}

throw new DiscordAPIError(request.path, data, request.method, res.status);
throw new DiscordAPIError(data, res.status, request);
}

// Handle 5xx responses
if (res.status >= 500 && res.status < 600) {
// Retry the specified number of times for possible serverside issues
if (request.retries === this.manager.client.options.retryLimit) {
throw new HTTPError(res.statusText, res.constructor.name, res.status, request.method, request.path);
throw new HTTPError(res.statusText, res.constructor.name, res.status, request);
}

request.retries++;
Expand Down

0 comments on commit 6339ac1

Please sign in to comment.