From 4aca379dc5fc31ccf8c4dbadaed20228aec19fe0 Mon Sep 17 00:00:00 2001 From: Tak Hoffman <781889+Takhoffman@users.noreply.github.com> Date: Wed, 18 Mar 2026 15:01:10 -0500 Subject: [PATCH] refactor: migrate discord messaging ownership --- src/channels/discord/plugin-sdk-bridge.ts | 8 -------- src/plugin-sdk/channel-import-guardrails.test.ts | 12 ++++++++++++ src/plugin-sdk/discord.ts | 16 ++++++++-------- src/plugin-sdk/subpaths.test.ts | 3 +++ 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/channels/discord/plugin-sdk-bridge.ts b/src/channels/discord/plugin-sdk-bridge.ts index 60bfac1ab4e..8db5b1c20fb 100644 --- a/src/channels/discord/plugin-sdk-bridge.ts +++ b/src/channels/discord/plugin-sdk-bridge.ts @@ -18,20 +18,12 @@ export { export { DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, - fetchChannelInfoDiscord, fetchVoiceStatusDiscord, getGateway, getPresence, hasAnyGuildPermissionDiscord, kickMemberDiscord, - listGuildChannelsDiscord, - listGuildEmojisDiscord, - listPinsDiscord, - listScheduledEventsDiscord, - listThreadsDiscord, monitorDiscordProvider, probeDiscord, - readMessagesDiscord, - searchMessagesDiscord, unpinMessageDiscord, } from "../../../extensions/discord/runtime-api.js"; diff --git a/src/plugin-sdk/channel-import-guardrails.test.ts b/src/plugin-sdk/channel-import-guardrails.test.ts index ad6b0c453d5..243572e557b 100644 --- a/src/plugin-sdk/channel-import-guardrails.test.ts +++ b/src/plugin-sdk/channel-import-guardrails.test.ts @@ -407,6 +407,18 @@ describe("channel import guardrails", () => { expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/runtime-api\.js";/); }); + it("keeps Discord messaging ownership on extension public seams", () => { + const text = readSource("src/plugin-sdk/discord.ts"); + const bridgeImports = [...text.matchAll(/import(?: type)?\s*\{[\s\S]*?\}\s*from\s+"[^"]+";/g)] + .map((match) => match[0]) + .filter((statement) => statement.includes("../channels/discord/plugin-sdk-bridge.js")) + .join("\n"); + expect(bridgeImports).not.toMatch( + /\b(?:fetchChannelInfoDiscord|listGuildChannelsDiscord|listGuildEmojisDiscord|listPinsDiscord|listScheduledEventsDiscord|listThreadsDiscord|readMessagesDiscord|searchMessagesDiscord)\b/, + ); + expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/runtime-api\.js";/); + }); + it("keeps channel helper modules off their own SDK barrels", () => { for (const source of SAME_CHANNEL_SDK_GUARDS) { const text = readSource(source.path); diff --git a/src/plugin-sdk/discord.ts b/src/plugin-sdk/discord.ts index a2e4af6daf0..d2c744ef552 100644 --- a/src/plugin-sdk/discord.ts +++ b/src/plugin-sdk/discord.ts @@ -32,10 +32,16 @@ import { fetchMessageDiscord, fetchReactionsDiscord, fetchRoleInfoDiscord, + fetchChannelInfoDiscord, getThreadBindingManager, listDiscordDirectoryGroupsLive, listDiscordDirectoryPeersLive, listThreadBindingsBySessionKey, + listGuildChannelsDiscord, + listGuildEmojisDiscord, + listPinsDiscord, + listScheduledEventsDiscord, + listThreadsDiscord, moveChannelDiscord, pinMessageDiscord, reactMessageDiscord, @@ -62,6 +68,8 @@ import { unbindThreadBindingsBySessionKey, uploadEmojiDiscord, uploadStickerDiscord, + readMessagesDiscord, + searchMessagesDiscord, } from "../../extensions/discord/runtime-api.js"; import { normalizeExplicitDiscordSessionKey } from "../../extensions/discord/session-key-api.js"; import type { @@ -82,21 +90,13 @@ import { import { DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, - fetchChannelInfoDiscord, fetchVoiceStatusDiscord, getGateway, getPresence, hasAnyGuildPermissionDiscord, kickMemberDiscord, - listGuildChannelsDiscord, - listGuildEmojisDiscord, - listPinsDiscord, - listScheduledEventsDiscord, - listThreadsDiscord, monitorDiscordProvider, probeDiscord, - readMessagesDiscord, - searchMessagesDiscord, unpinMessageDiscord, } from "../channels/discord/plugin-sdk-bridge.js"; diff --git a/src/plugin-sdk/subpaths.test.ts b/src/plugin-sdk/subpaths.test.ts index 3c81596e942..8b46659cc7f 100644 --- a/src/plugin-sdk/subpaths.test.ts +++ b/src/plugin-sdk/subpaths.test.ts @@ -272,7 +272,10 @@ describe("plugin-sdk subpath exports", () => { expect(typeof discordSdk.listDiscordDirectoryPeersFromConfig).toBe("function"); expect(typeof discordSdk.listDiscordDirectoryGroupsLive).toBe("function"); expect(typeof discordSdk.listDiscordDirectoryPeersLive).toBe("function"); + expect(typeof discordSdk.fetchChannelInfoDiscord).toBe("function"); + expect(typeof discordSdk.listThreadsDiscord).toBe("function"); expect(typeof discordSdk.normalizeDiscordOutboundTarget).toBe("function"); + expect(typeof discordSdk.readMessagesDiscord).toBe("function"); expect(typeof discordSdk.resolveDiscordChannelId).toBe("function"); expect(typeof discordSdk.sendMessageDiscord).toBe("function"); expect(typeof discordSdk.getThreadBindingManager).toBe("function");