refactor: migrate discord status ownership

This commit is contained in:
Tak Hoffman 2026-03-18 15:07:09 -05:00
parent 347610d1c7
commit 4390533672
No known key found for this signature in database
4 changed files with 18 additions and 8 deletions

View File

@ -7,7 +7,6 @@ export type {
} from "../../../extensions/discord/api.js";
export {
collectDiscordStatusIssues,
inspectDiscordAccount,
listDiscordAccountIds,
resolveDiscordAccount,
@ -16,14 +15,11 @@ export {
resolveDiscordGroupToolPolicy,
} from "../../../extensions/discord/api.js";
export {
DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS,
DISCORD_DEFAULT_LISTENER_TIMEOUT_MS,
fetchVoiceStatusDiscord,
getGateway,
getPresence,
hasAnyGuildPermissionDiscord,
kickMemberDiscord,
monitorDiscordProvider,
probeDiscord,
unpinMessageDiscord,
} from "../../../extensions/discord/runtime-api.js";

View File

@ -431,6 +431,19 @@ describe("channel import guardrails", () => {
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/runtime-api\.js";/);
});
it("keeps Discord status 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(?:collectDiscordStatusIssues|probeDiscord|DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS|DISCORD_DEFAULT_LISTENER_TIMEOUT_MS)\b/,
);
expect(text).toMatch(/from\s+"..\/..\/extensions\/discord\/api\.js";/);
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);

View File

@ -1,5 +1,6 @@
import {
createDiscordActionGate,
collectDiscordStatusIssues,
listDiscordDirectoryGroupsFromConfig,
listDiscordDirectoryPeersFromConfig,
looksLikeDiscordTargetId,
@ -59,6 +60,9 @@ import {
resolveThreadBindingInactivityExpiresAt,
resolveThreadBindingMaxAgeExpiresAt,
resolveThreadBindingMaxAgeMs,
DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS,
DISCORD_DEFAULT_LISTENER_TIMEOUT_MS,
probeDiscord,
sendMessageDiscord,
sendDiscordComponentMessage,
sendPollDiscord,
@ -84,7 +88,6 @@ import type {
ResolvedDiscordAccount,
} from "../channels/discord/plugin-sdk-bridge.js";
import {
collectDiscordStatusIssues,
inspectDiscordAccount,
listDiscordAccountIds,
resolveDefaultDiscordAccountId,
@ -92,11 +95,8 @@ import {
resolveDiscordGroupToolPolicy,
} from "../channels/discord/plugin-sdk-bridge.js";
import {
DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS,
DISCORD_DEFAULT_LISTENER_TIMEOUT_MS,
hasAnyGuildPermissionDiscord,
kickMemberDiscord,
probeDiscord,
unpinMessageDiscord,
} from "../channels/discord/plugin-sdk-bridge.js";

View File

@ -279,6 +279,7 @@ describe("plugin-sdk subpath exports", () => {
expect(typeof discordSdk.listThreadsDiscord).toBe("function");
expect(typeof discordSdk.monitorDiscordProvider).toBe("function");
expect(typeof discordSdk.normalizeDiscordOutboundTarget).toBe("function");
expect(typeof discordSdk.probeDiscord).toBe("function");
expect(typeof discordSdk.readMessagesDiscord).toBe("function");
expect(typeof discordSdk.resolveDiscordChannelId).toBe("function");
expect(typeof discordSdk.sendMessageDiscord).toBe("function");