From ac68494dae9e2f79b1968b5f066d129cfc6e1869 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 27 Mar 2026 23:43:43 +0000 Subject: [PATCH] fix(ci): harden discord rate-limit helpers --- .../discord/src/monitor/provider.test.ts | 8 ++++++- .../discord/src/send.creates-thread.test.ts | 21 +++++++++++++------ extensions/discord/src/voice-message.ts | 7 ++++++- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/extensions/discord/src/monitor/provider.test.ts b/extensions/discord/src/monitor/provider.test.ts index 7af1f95f3bf..155d92202e7 100644 --- a/extensions/discord/src/monitor/provider.test.ts +++ b/extensions/discord/src/monitor/provider.test.ts @@ -45,12 +45,17 @@ function createCompatRateLimitError( body: { message: string; retry_after: number; global: boolean }, request?: Request, ): RateLimitError { + const compatRequest = + request ?? + new Request("https://discord.com/api/v10/applications/commands", { + method: "PUT", + }); const RateLimitErrorCtor = RateLimitError as unknown as new ( response: Response, body: { message: string; retry_after: number; global: boolean }, request?: Request, ) => RateLimitError; - return new RateLimitErrorCtor(response, body, request); + return new RateLimitErrorCtor(response, body, compatRequest); } function createConfigWithDiscordAccount(overrides: Record = {}): OpenClawConfig { @@ -653,6 +658,7 @@ describe("monitorDiscordProvider", () => { retry_after: 193.632, global: false, }, + request, ); rateLimitError.discordCode = 30034; clientHandleDeployRequestMock.mockRejectedValueOnce(rateLimitError); diff --git a/extensions/discord/src/send.creates-thread.test.ts b/extensions/discord/src/send.creates-thread.test.ts index d869f9fd836..30c6a4ed8d5 100644 --- a/extensions/discord/src/send.creates-thread.test.ts +++ b/extensions/discord/src/send.creates-thread.test.ts @@ -28,12 +28,17 @@ function createCompatRateLimitError( body: { message: string; retry_after: number; global: boolean }, request?: Request, ): RateLimitError { + const compatRequest = + request ?? + new Request("https://discord.com/api/v10/channels/789/messages", { + method: "POST", + }); const RateLimitErrorCtor = RateLimitError as unknown as new ( response: Response, body: { message: string; retry_after: number; global: boolean }, request?: Request, ) => RateLimitError; - return new RateLimitErrorCtor(response, body, request); + return new RateLimitErrorCtor(response, body, compatRequest); } beforeAll(async () => { @@ -436,11 +441,15 @@ function createMockRateLimitError(retryAfter = 0.001): RateLimitError { "X-RateLimit-Bucket": "test-bucket", }, }); - return createCompatRateLimitError(response, { - message: "You are being rate limited.", - retry_after: retryAfter, - global: false, - }); + return createCompatRateLimitError( + response, + { + message: "You are being rate limited.", + retry_after: retryAfter, + global: false, + }, + request, + ); } describe("retry rate limits", () => { diff --git a/extensions/discord/src/voice-message.ts b/extensions/discord/src/voice-message.ts index 9d8cf72d25a..ecd68f3b3d8 100644 --- a/extensions/discord/src/voice-message.ts +++ b/extensions/discord/src/voice-message.ts @@ -34,12 +34,17 @@ function createRateLimitError( body: { message: string; retry_after: number; global: boolean }, request?: Request, ): RateLimitError { + const compatRequest = + request ?? + new Request("https://discord.com/api/v10/channels/voice/messages", { + method: "POST", + }); const RateLimitErrorCtor = RateLimitError as unknown as new ( response: Response, body: { message: string; retry_after: number; global: boolean }, request?: Request, ) => RateLimitError; - return new RateLimitErrorCtor(response, body, request); + return new RateLimitErrorCtor(response, body, compatRequest); } export type VoiceMessageMetadata = {