From 733ac82d5dffabc622fb59e06d06e83396734dc6 Mon Sep 17 00:00:00 2001 From: ckohen Date: Sat, 5 Feb 2022 05:30:55 -0800 Subject: [PATCH] fix(rest): sublimit all requests on unhandled routes (#7366) --- .../rest/__tests__/RequestHandler.test.ts | 21 +++++++++++++++---- packages/rest/src/lib/utils/utils.ts | 3 ++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/rest/__tests__/RequestHandler.test.ts b/packages/rest/__tests__/RequestHandler.test.ts index f89bf1105..d1e2c89e2 100644 --- a/packages/rest/__tests__/RequestHandler.test.ts +++ b/packages/rest/__tests__/RequestHandler.test.ts @@ -166,7 +166,7 @@ nock(`${DefaultRestOptions.api}/v${DefaultRestOptions.version}`) ]; }) .get('/unexpected') - .times(2) + .times(3) .reply((): nock.ReplyFnResult => { if (unexpected429) { unexpected429 = false; @@ -310,9 +310,22 @@ test('Handle sublimits', async () => { }); test('Handle unexpected 429', async () => { - const previous = Date.now(); - expect(await api.get('/unexpected')).toStrictEqual({ test: true }); - expect(Date.now()).toBeGreaterThanOrEqual(previous + 1000); + const previous = performance.now(); + let firstResolvedTime: number; + let secondResolvedTime: number; + const unexepectedSublimit = api.get('/unexpected').then((res) => { + firstResolvedTime = performance.now(); + return res; + }); + const queuedSublimit = api.get('/unexpected').then((res) => { + secondResolvedTime = performance.now(); + return res; + }); + + expect(await unexepectedSublimit).toStrictEqual({ test: true }); + expect(await queuedSublimit).toStrictEqual({ test: true }); + expect(performance.now()).toBeGreaterThanOrEqual(previous + 1000); + expect(secondResolvedTime).toBeGreaterThan(firstResolvedTime); }); test('Handle unexpected 429 cloudflare', async () => { diff --git a/packages/rest/src/lib/utils/utils.ts b/packages/rest/src/lib/utils/utils.ts index 2310e88bd..91b5df32a 100644 --- a/packages/rest/src/lib/utils/utils.ts +++ b/packages/rest/src/lib/utils/utils.ts @@ -33,5 +33,6 @@ export function hasSublimit(bucketRoute: string, body?: unknown, method?: string return ['name', 'topic'].some((key) => Reflect.has(castedBody, key)); } - return false; + // If we are checking if a request has a sublimit on a route not checked above, sublimit all requests to avoid a flood of 429s + return true; }