From 48bcb89a4791a9e86f470163d25616e16a3f03ab Mon Sep 17 00:00:00 2001 From: Mason Huang Date: Sun, 12 Apr 2026 18:54:58 +0800 Subject: [PATCH] tests(contracts): use contract-api for Slack and Discord directories (#65280) --- extensions/discord/contract-api.ts | 4 ++ extensions/slack/contract-api.ts | 4 ++ .../plugins-core-extension-contract.ts | 39 ++++++++++++------- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/extensions/discord/contract-api.ts b/extensions/discord/contract-api.ts index 76ed3778504..84c1af73bb0 100644 --- a/extensions/discord/contract-api.ts +++ b/extensions/discord/contract-api.ts @@ -1,4 +1,8 @@ export { createThreadBindingManager } from "./src/monitor/thread-bindings.manager.js"; +export { + listDiscordDirectoryGroupsFromConfig, + listDiscordDirectoryPeersFromConfig, +} from "./src/directory-config.js"; export { normalizeCompatibilityConfig, legacyConfigRules } from "./src/doctor-contract.js"; export { collectRuntimeConfigAssignments, diff --git a/extensions/slack/contract-api.ts b/extensions/slack/contract-api.ts index dbd0586267e..6b5b5c85d23 100644 --- a/extensions/slack/contract-api.ts +++ b/extensions/slack/contract-api.ts @@ -1,4 +1,8 @@ export { normalizeCompatibilityConfig, legacyConfigRules } from "./src/doctor-contract.js"; +export { + listSlackDirectoryGroupsFromConfig, + listSlackDirectoryPeersFromConfig, +} from "./src/directory-config.js"; export { collectRuntimeConfigAssignments, secretTargetRegistryEntries, diff --git a/test/helpers/channels/plugins-core-extension-contract.ts b/test/helpers/channels/plugins-core-extension-contract.ts index 13cba6e78fd..5c0aec6a6c7 100644 --- a/test/helpers/channels/plugins-core-extension-contract.ts +++ b/test/helpers/channels/plugins-core-extension-contract.ts @@ -6,34 +6,43 @@ import type { } from "../../../src/channels/plugins/types.js"; import type { OpenClawConfig } from "../../../src/config/config.js"; import type { LineProbeResult } from "../../../src/plugin-sdk/line.js"; -import { loadBundledPluginApiSync } from "../../../src/test-utils/bundled-plugin-public-surface.js"; +import { + loadBundledPluginApiSync, + loadBundledPluginContractApiSync, +} from "../../../src/test-utils/bundled-plugin-public-surface.js"; import { withEnvAsync } from "../../../src/test-utils/env.js"; -type DiscordApiSurface = typeof import("@openclaw/discord/api.js"); +type DiscordContractApiSurface = Pick< + typeof import("@openclaw/discord/contract-api.js"), + "listDiscordDirectoryPeersFromConfig" | "listDiscordDirectoryGroupsFromConfig" +>; type DiscordProbe = import("@openclaw/discord/api.js").DiscordProbe; type DiscordTokenResolution = import("@openclaw/discord/api.js").DiscordTokenResolution; type IMessageProbe = import("@openclaw/imessage/runtime-api.js").IMessageProbe; type SignalProbe = import("@openclaw/signal/api.js").SignalProbe; -type SlackApiSurface = typeof import("@openclaw/slack/api.js"); +type SlackContractApiSurface = Pick< + typeof import("@openclaw/slack/contract-api.js"), + "listSlackDirectoryPeersFromConfig" | "listSlackDirectoryGroupsFromConfig" +>; type SlackProbe = import("@openclaw/slack/api.js").SlackProbe; type TelegramApiSurface = typeof import("@openclaw/telegram/api.js"); type TelegramProbe = import("@openclaw/telegram/api.js").TelegramProbe; type TelegramTokenResolution = import("@openclaw/telegram/api.js").TelegramTokenResolution; type WhatsAppApiSurface = typeof import("@openclaw/whatsapp/api.js"); -let discordApi: DiscordApiSurface | undefined; -let slackApi: SlackApiSurface | undefined; +let discordContractApi: DiscordContractApiSurface | undefined; +let slackContractApi: SlackContractApiSurface | undefined; let telegramApi: TelegramApiSurface | undefined; let whatsappApi: WhatsAppApiSurface | undefined; -function getDiscordApi(): DiscordApiSurface { - discordApi ??= loadBundledPluginApiSync("discord"); - return discordApi; +function getDiscordContractApi(): DiscordContractApiSurface { + discordContractApi ??= loadBundledPluginContractApiSync("discord"); + return discordContractApi; } -function getSlackApi(): SlackApiSurface { - slackApi ??= loadBundledPluginApiSync("slack"); - return slackApi; +function getSlackContractApi(): SlackContractApiSurface { + slackContractApi ??= loadBundledPluginContractApiSync("slack"); + return slackContractApi; } function getTelegramApi(): TelegramApiSurface { @@ -75,8 +84,8 @@ async function expectDirectoryIds( export function describeDiscordPluginsCoreExtensionContract() { describe("discord plugins-core extension contract", () => { - const listPeers = () => getDiscordApi().listDiscordDirectoryPeersFromConfig; - const listGroups = () => getDiscordApi().listDiscordDirectoryGroupsFromConfig; + const listPeers = () => getDiscordContractApi().listDiscordDirectoryPeersFromConfig; + const listGroups = () => getDiscordContractApi().listDiscordDirectoryGroupsFromConfig; it("DiscordProbe satisfies BaseProbeResult", () => { expectTypeOf().toMatchTypeOf(); @@ -176,8 +185,8 @@ export function describeDiscordPluginsCoreExtensionContract() { export function describeSlackPluginsCoreExtensionContract() { describe("slack plugins-core extension contract", () => { - const listPeers = () => getSlackApi().listSlackDirectoryPeersFromConfig; - const listGroups = () => getSlackApi().listSlackDirectoryGroupsFromConfig; + const listPeers = () => getSlackContractApi().listSlackDirectoryPeersFromConfig; + const listGroups = () => getSlackContractApi().listSlackDirectoryGroupsFromConfig; it("SlackProbe satisfies BaseProbeResult", () => { expectTypeOf().toMatchTypeOf();