Skip to content
This repository was archived by the owner on Apr 17, 2023. It is now read-only.

Commit 1395162

Browse files
committed
refactor(Rest): if retries are exceeded throw the last error
1 parent 560dbb7 commit 1395162

File tree

2 files changed

+17
-10
lines changed

2 files changed

+17
-10
lines changed

libs/rest/src/Error.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ export const CordisRestError = makeCordisError(
77
{
88
retryLimitExceeded: (request: string, attempts: number) => `Tried to "${request}" for ${attempts} times but all of them failed`,
99
mutexLock: (route: string) => `A mutex for the "${route}" bucket locked up but was told to not wait`,
10-
rateLimited: (request: string) => `A ratelimit was hit/prevented while "${request}"`,
11-
internal: (request: string) => `Discord raised an internal error on "${request}"`
10+
rateLimited: (request: string) => `A ratelimit was hit/prevented while "${request}"`
1211
}
1312
);
1413

libs/rest/src/struct/Rest.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,8 @@ export class Rest extends EventEmitter {
246246
const isGet = options.method.toLowerCase() === 'get';
247247
const shouldCache = options.cache && isGet;
248248

249+
let rejected: Promise<never>;
250+
249251
for (let retries = 0; retries <= this.retries; retries++) {
250252
try {
251253
if (shouldCache && this.cache.has(options.path)) {
@@ -273,21 +275,27 @@ export class Rest extends EventEmitter {
273275
const isRatelimit = e instanceof CordisRestError && e.code === 'rateLimited';
274276
isRetryAfterRatelimit = isRatelimit;
275277

276-
if (
277-
e instanceof HTTPError ||
278-
e.name === 'AbortError' ||
279-
(isRatelimit && !options.retryAfterRatelimit)
280-
) {
278+
if (e.name === 'AbortError') {
281279
return Promise.reject(e);
282280
}
283281

284-
if (e instanceof CordisRestError && e.code === 'internal') {
285-
await halt(1000);
282+
if (isRatelimit && !options.retryAfterRatelimit) {
283+
return Promise.reject(e);
286284
}
285+
286+
if (e instanceof HTTPError) {
287+
if (e.response.status >= 500 && e.response.status < 600) {
288+
await halt(1000);
289+
} else {
290+
return Promise.reject(e);
291+
}
292+
}
293+
294+
rejected = Promise.reject(e);
287295
}
288296
}
289297

290-
return Promise.reject(new CordisRestError('retryLimitExceeded', `${options.method.toUpperCase()} ${options.path}`, this.retries));
298+
return rejected!;
291299
}
292300

293301
/**

0 commit comments

Comments
 (0)