From a81e3ee888fa7aa9b4f8f6bf7b435819d7a7340e Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 29 Apr 2026 19:04:22 +0100 Subject: [PATCH] fix(discord): bound application summary probes --- extensions/discord/src/probe.intents.test.ts | 22 +++++++++++++++++++- extensions/discord/src/probe.ts | 1 + 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/extensions/discord/src/probe.intents.test.ts b/extensions/discord/src/probe.intents.test.ts index 406ef42118d..59dc01a349f 100644 --- a/extensions/discord/src/probe.intents.test.ts +++ b/extensions/discord/src/probe.intents.test.ts @@ -1,6 +1,10 @@ import { withFetchPreconnect } from "openclaw/plugin-sdk/test-env"; import { describe, expect, it } from "vitest"; -import { fetchDiscordApplicationId, resolveDiscordPrivilegedIntentsFromFlags } from "./probe.js"; +import { + fetchDiscordApplicationId, + fetchDiscordApplicationSummary, + resolveDiscordPrivilegedIntentsFromFlags, +} from "./probe.js"; import { jsonResponse } from "./test-http-helpers.js"; describe("resolveDiscordPrivilegedIntentsFromFlags", () => { @@ -58,6 +62,22 @@ describe("resolveDiscordPrivilegedIntentsFromFlags", () => { expect(calls).toBe(2); }); + it("does not retry Cloudflare HTML rate limits during application summary probes", async () => { + let calls = 0; + const fetcher = withFetchPreconnect(async () => { + calls += 1; + return new Response("Error 1015", { + status: 429, + headers: { "content-type": "text/html" }, + }); + }); + + await expect( + fetchDiscordApplicationSummary("unparseable.token", 1_000, fetcher), + ).resolves.toBeUndefined(); + expect(calls).toBe(1); + }); + it("derives application id from parseable tokens before probing REST", async () => { let calls = 0; const fetcher = withFetchPreconnect(async () => { diff --git a/extensions/discord/src/probe.ts b/extensions/discord/src/probe.ts index 3b2dd1f3222..0582f65132e 100644 --- a/extensions/discord/src/probe.ts +++ b/extensions/discord/src/probe.ts @@ -49,6 +49,7 @@ async function fetchDiscordApplicationMe( "/oauth2/applications/@me", normalized, createDiscordTimeoutFetch(fetcher, timeoutMs), + { retry: { attempts: 1 } }, ); } catch { return undefined;