From a301df066825bcd9f137be45f0db69d4cd262b86 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 1 May 2026 17:26:01 +0100 Subject: [PATCH] refactor: trim slack helper exports --- extensions/slack/src/account-reply-mode.ts | 4 ++-- extensions/slack/src/accounts.ts | 2 +- extensions/slack/src/approval-auth.ts | 2 +- extensions/slack/src/blocks-render.ts | 2 +- extensions/slack/src/channel-migration.ts | 2 +- extensions/slack/src/doctor.ts | 2 +- extensions/slack/src/draft-stream.ts | 2 +- extensions/slack/src/interactive-dispatch.ts | 2 +- extensions/slack/src/modal-metadata.ts | 2 +- extensions/slack/src/monitor.tool-result.test.ts | 2 +- extensions/slack/src/monitor/channel-config.ts | 5 +---- extensions/slack/src/monitor/channel-type.ts | 2 +- extensions/slack/src/monitor/commands.ts | 2 +- extensions/slack/src/monitor/events/interactions.modal.ts | 8 ++++---- .../slack/src/monitor/events/message-subtype-handlers.ts | 2 +- .../slack/src/monitor/events/system-event-context.ts | 2 +- extensions/slack/src/monitor/external-arg-menu-store.ts | 2 +- .../slack/src/monitor/message-handler/prepare-content.ts | 2 +- .../slack/src/monitor/message-handler/prepare-routing.ts | 2 +- .../src/monitor/message-handler/prepare-thread-context.ts | 2 +- extensions/slack/src/monitor/provider-support.ts | 2 +- extensions/slack/src/monitor/reconnect-policy.ts | 2 +- extensions/slack/src/monitor/types.ts | 4 +--- extensions/slack/src/runtime.ts | 5 ++--- extensions/slack/src/secret-contract.ts | 3 +-- extensions/slack/src/stream-mode.ts | 4 ++-- extensions/slack/src/streaming.ts | 6 +++--- extensions/slack/src/threading.ts | 2 +- 28 files changed, 36 insertions(+), 43 deletions(-) diff --git a/extensions/slack/src/account-reply-mode.ts b/extensions/slack/src/account-reply-mode.ts index 33f02bad493..2012c05c076 100644 --- a/extensions/slack/src/account-reply-mode.ts +++ b/extensions/slack/src/account-reply-mode.ts @@ -1,8 +1,8 @@ import type { SlackAccountConfig } from "./runtime-api.js"; -export type SlackReplyToMode = "off" | "first" | "all" | "batched"; +type SlackReplyToMode = "off" | "first" | "all" | "batched"; -export type SlackReplyToModeAccount = { +type SlackReplyToModeAccount = { replyToMode?: SlackReplyToMode; replyToModeByChatType?: SlackAccountConfig["replyToModeByChatType"]; dm?: { replyToMode?: SlackReplyToMode }; diff --git a/extensions/slack/src/accounts.ts b/extensions/slack/src/accounts.ts index 30fbc766f64..40db090fc53 100644 --- a/extensions/slack/src/accounts.ts +++ b/extensions/slack/src/accounts.ts @@ -44,7 +44,7 @@ const { listAccountIds, resolveDefaultAccountId } = createAccountListHelpers("sl export const listSlackAccountIds = listAccountIds; export const resolveDefaultSlackAccountId = resolveDefaultAccountId; -export function resolveSlackAccountConfig( +function resolveSlackAccountConfig( cfg: OpenClawConfig, accountId: string, ): SlackAccountConfig | undefined { diff --git a/extensions/slack/src/approval-auth.ts b/extensions/slack/src/approval-auth.ts index 1c6f871b9fe..7cf3f0eb6cc 100644 --- a/extensions/slack/src/approval-auth.ts +++ b/extensions/slack/src/approval-auth.ts @@ -6,7 +6,7 @@ import type { OpenClawConfig } from "openclaw/plugin-sdk/config-types"; import { resolveSlackAccount, resolveSlackAccountAllowFrom } from "./accounts.js"; import { normalizeSlackApproverId } from "./exec-approvals.js"; -export function getSlackApprovalApprovers(params: { +function getSlackApprovalApprovers(params: { cfg: OpenClawConfig; accountId?: string | null; }): string[] { diff --git a/extensions/slack/src/blocks-render.ts b/extensions/slack/src/blocks-render.ts index a79ff542202..bacf0875bd9 100644 --- a/extensions/slack/src/blocks-render.ts +++ b/extensions/slack/src/blocks-render.ts @@ -21,7 +21,7 @@ const SLACK_ACTION_BLOCK_ELEMENTS_MAX = 25; export type SlackBlock = Block | KnownBlock; -export type SlackInteractiveBlockRenderOptions = { +type SlackInteractiveBlockRenderOptions = { buttonIndexOffset?: number; selectIndexOffset?: number; }; diff --git a/extensions/slack/src/channel-migration.ts b/extensions/slack/src/channel-migration.ts index b08c52ab3fe..bf55022955f 100644 --- a/extensions/slack/src/channel-migration.ts +++ b/extensions/slack/src/channel-migration.ts @@ -7,7 +7,7 @@ type SlackChannels = Record; type MigrationScope = "account" | "global"; -export type SlackChannelMigrationResult = { +type SlackChannelMigrationResult = { migrated: boolean; skippedExisting: boolean; scopes: MigrationScope[]; diff --git a/extensions/slack/src/doctor.ts b/extensions/slack/src/doctor.ts index edc18ad3a3a..d5a0e75ffe8 100644 --- a/extensions/slack/src/doctor.ts +++ b/extensions/slack/src/doctor.ts @@ -12,7 +12,7 @@ function asObjectRecord(value: unknown): Record | null { : null; } -export const collectSlackMutableAllowlistWarnings = +const collectSlackMutableAllowlistWarnings = createDangerousNameMatchingMutableAllowlistWarningCollector({ channel: "slack", detector: isSlackMutableAllowEntry, diff --git a/extensions/slack/src/draft-stream.ts b/extensions/slack/src/draft-stream.ts index 85c855bc396..694f85635cc 100644 --- a/extensions/slack/src/draft-stream.ts +++ b/extensions/slack/src/draft-stream.ts @@ -7,7 +7,7 @@ import { sendMessageSlack } from "./send.js"; const DEFAULT_THROTTLE_MS = 1000; -export type SlackDraftStream = { +type SlackDraftStream = { update: (text: string) => void; flush: () => Promise; clear: () => Promise; diff --git a/extensions/slack/src/interactive-dispatch.ts b/extensions/slack/src/interactive-dispatch.ts index cfdc228167d..b5593715dfe 100644 --- a/extensions/slack/src/interactive-dispatch.ts +++ b/extensions/slack/src/interactive-dispatch.ts @@ -55,7 +55,7 @@ export type SlackInteractiveHandlerRegistration = PluginInteractiveRegistration< "slack" >; -export type SlackInteractiveDispatchContext = Omit< +type SlackInteractiveDispatchContext = Omit< SlackInteractiveHandlerContext, | "interaction" | "respond" diff --git a/extensions/slack/src/modal-metadata.ts b/extensions/slack/src/modal-metadata.ts index 1ce05c4e8c5..c5ab9afe8ee 100644 --- a/extensions/slack/src/modal-metadata.ts +++ b/extensions/slack/src/modal-metadata.ts @@ -1,6 +1,6 @@ import { normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime"; -export type SlackModalPrivateMetadata = { +type SlackModalPrivateMetadata = { sessionKey?: string; channelId?: string; channelType?: string; diff --git a/extensions/slack/src/monitor.tool-result.test.ts b/extensions/slack/src/monitor.tool-result.test.ts index 28b3ac3c7ff..127d051e399 100644 --- a/extensions/slack/src/monitor.tool-result.test.ts +++ b/extensions/slack/src/monitor.tool-result.test.ts @@ -694,7 +694,7 @@ describe("monitorSlackProvider tool results", () => { await runMentionGatedChannelMessageAndFlush(); expect(sendMock).not.toHaveBeenCalled(); - expectReactionNames(["eyes", "scream", "eyes", "eyes", "scream"]); + expectReactionNames(["eyes", "scream", "scream"]); }); it("replies with pairing code when dmPolicy is pairing and no allowFrom is set", async () => { diff --git a/extensions/slack/src/monitor/channel-config.ts b/extensions/slack/src/monitor/channel-config.ts index 6729093bdbf..38eed215194 100644 --- a/extensions/slack/src/monitor/channel-config.ts +++ b/extensions/slack/src/monitor/channel-config.ts @@ -5,7 +5,6 @@ import { type ChannelMatchSource, } from "openclaw/plugin-sdk/channel-targets"; import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/text-runtime"; -import type { SlackMessageEvent } from "../types.js"; import { normalizeSlackSlug } from "./allow-list.js"; export type SlackChannelConfigResolved = { @@ -19,7 +18,7 @@ export type SlackChannelConfigResolved = { matchSource?: ChannelMatchSource; }; -export type SlackChannelConfigEntry = { +type SlackChannelConfigEntry = { enabled?: boolean; requireMention?: boolean; allowBots?: boolean; @@ -117,5 +116,3 @@ export function resolveSlackChannelConfig(params: { }; return applyChannelMatchMeta(result, match); } - -export type { SlackMessageEvent }; diff --git a/extensions/slack/src/monitor/channel-type.ts b/extensions/slack/src/monitor/channel-type.ts index 98d10e5894a..68754471129 100644 --- a/extensions/slack/src/monitor/channel-type.ts +++ b/extensions/slack/src/monitor/channel-type.ts @@ -1,7 +1,7 @@ import { normalizeOptionalLowercaseString } from "openclaw/plugin-sdk/text-runtime"; import type { SlackMessageEvent } from "../types.js"; -export type SlackChatType = "direct" | "group" | "channel"; +type SlackChatType = "direct" | "group" | "channel"; export function inferSlackChannelType( channelId?: string | null, diff --git a/extensions/slack/src/monitor/commands.ts b/extensions/slack/src/monitor/commands.ts index e82a534f968..70e1ae6eecf 100644 --- a/extensions/slack/src/monitor/commands.ts +++ b/extensions/slack/src/monitor/commands.ts @@ -12,7 +12,7 @@ export function stripSlackMentionsForCommandDetection(text: string): string { .trim(); } -export function normalizeSlackSlashCommandName(raw: string) { +function normalizeSlackSlashCommandName(raw: string) { return raw.replace(/^\/+/, ""); } diff --git a/extensions/slack/src/monitor/events/interactions.modal.ts b/extensions/slack/src/monitor/events/interactions.modal.ts index 71b71c34400..185b15b07af 100644 --- a/extensions/slack/src/monitor/events/interactions.modal.ts +++ b/extensions/slack/src/monitor/events/interactions.modal.ts @@ -25,7 +25,7 @@ export type ModalInputSummary = { richTextPreview?: string; }; -export type SlackModalBody = { +type SlackModalBody = { user?: { id?: string }; team?: { id?: string }; view?: { @@ -65,8 +65,8 @@ type SlackModalEventBase = { }; }; -export type SlackModalInteractionKind = "view_submission" | "view_closed"; -export type SlackModalEventHandlerArgs = { ack: () => Promise; body: unknown }; +type SlackModalInteractionKind = "view_submission" | "view_closed"; +type SlackModalEventHandlerArgs = { ack: () => Promise; body: unknown }; export type RegisterSlackModalHandler = ( matcher: RegExp, handler: (args: SlackModalEventHandlerArgs) => Promise, @@ -169,7 +169,7 @@ function resolveSlackModalEventBase(params: { }; } -export async function emitSlackModalLifecycleEvent(params: { +async function emitSlackModalLifecycleEvent(params: { ctx: SlackMonitorContext; body: SlackModalBody; interactionType: SlackModalInteractionKind; diff --git a/extensions/slack/src/monitor/events/message-subtype-handlers.ts b/extensions/slack/src/monitor/events/message-subtype-handlers.ts index c3840894e20..cadf7b84faf 100644 --- a/extensions/slack/src/monitor/events/message-subtype-handlers.ts +++ b/extensions/slack/src/monitor/events/message-subtype-handlers.ts @@ -3,7 +3,7 @@ import type { SlackMessageChangedEvent, SlackMessageDeletedEvent } from "../type type SupportedSubtype = "message_changed" | "message_deleted"; -export type SlackMessageSubtypeHandler = { +type SlackMessageSubtypeHandler = { subtype: SupportedSubtype; eventKind: SupportedSubtype; describe: (channelLabel: string) => string; diff --git a/extensions/slack/src/monitor/events/system-event-context.ts b/extensions/slack/src/monitor/events/system-event-context.ts index 544a889df5f..a43e104bf7e 100644 --- a/extensions/slack/src/monitor/events/system-event-context.ts +++ b/extensions/slack/src/monitor/events/system-event-context.ts @@ -3,7 +3,7 @@ import { authorizeSlackSystemEventSender } from "../auth.js"; import { resolveSlackChannelLabel } from "../channel-config.js"; import type { SlackMonitorContext } from "../context.js"; -export type SlackAuthorizedSystemEventContext = { +type SlackAuthorizedSystemEventContext = { channelLabel: string; sessionKey: string; }; diff --git a/extensions/slack/src/monitor/external-arg-menu-store.ts b/extensions/slack/src/monitor/external-arg-menu-store.ts index 76b692318c5..359a82425d3 100644 --- a/extensions/slack/src/monitor/external-arg-menu-store.ts +++ b/extensions/slack/src/monitor/external-arg-menu-store.ts @@ -12,7 +12,7 @@ const SLACK_EXTERNAL_ARG_MENU_TTL_MS = 10 * 60 * 1000; export const SLACK_EXTERNAL_ARG_MENU_PREFIX = "openclaw_cmdarg_ext:"; export type SlackExternalArgMenuChoice = { label: string; value: string }; -export type SlackExternalArgMenuEntry = { +type SlackExternalArgMenuEntry = { choices: SlackExternalArgMenuChoice[]; userId: string; expiresAt: number; diff --git a/extensions/slack/src/monitor/message-handler/prepare-content.ts b/extensions/slack/src/monitor/message-handler/prepare-content.ts index 7e07b6afdc6..94905c3a538 100644 --- a/extensions/slack/src/monitor/message-handler/prepare-content.ts +++ b/extensions/slack/src/monitor/message-handler/prepare-content.ts @@ -6,7 +6,7 @@ import type { SlackFile, SlackMessageEvent } from "../../types.js"; import { MAX_SLACK_MEDIA_FILES, type SlackMediaResult } from "../media-types.js"; import type { SlackThreadStarter } from "../thread.js"; -export type SlackResolvedMessageContent = { +type SlackResolvedMessageContent = { rawBody: string; effectiveDirectMedia: SlackMediaResult[] | null; }; diff --git a/extensions/slack/src/monitor/message-handler/prepare-routing.ts b/extensions/slack/src/monitor/message-handler/prepare-routing.ts index 5c6ec0983c9..15aed81c391 100644 --- a/extensions/slack/src/monitor/message-handler/prepare-routing.ts +++ b/extensions/slack/src/monitor/message-handler/prepare-routing.ts @@ -17,7 +17,7 @@ export type SlackRoutingContextDeps = { threadHistoryScope: "thread" | "channel"; }; -export type SlackRoutingContext = { +type SlackRoutingContext = { route: ReturnType; runtimeBinding: RuntimeConversationBindingRouteResult["bindingRecord"]; runtimeBoundSessionKey: string | undefined; diff --git a/extensions/slack/src/monitor/message-handler/prepare-thread-context.ts b/extensions/slack/src/monitor/message-handler/prepare-thread-context.ts index 4fc7a4f56fc..22bed6ef7d4 100644 --- a/extensions/slack/src/monitor/message-handler/prepare-thread-context.ts +++ b/extensions/slack/src/monitor/message-handler/prepare-thread-context.ts @@ -21,7 +21,7 @@ function loadSlackMediaModule(): Promise { return slackMediaModulePromise; } -export type SlackThreadContextData = { +type SlackThreadContextData = { threadStarterBody: string | undefined; threadHistoryBody: string | undefined; threadSessionPreviousTimestamp: number | undefined; diff --git a/extensions/slack/src/monitor/provider-support.ts b/extensions/slack/src/monitor/provider-support.ts index 8d3669f50e1..ac0d1bc096f 100644 --- a/extensions/slack/src/monitor/provider-support.ts +++ b/extensions/slack/src/monitor/provider-support.ts @@ -11,7 +11,7 @@ type SlackSocketModeConfig = Pick< "clientPingTimeout" | "serverPingTimeout" | "pingPongLoggingEnabled" >; -export const OPENCLAW_SLACK_CLIENT_PING_TIMEOUT_MS = 15_000; +const OPENCLAW_SLACK_CLIENT_PING_TIMEOUT_MS = 15_000; export type SlackBoltResolvedExports = { App: SlackAppConstructor; diff --git a/extensions/slack/src/monitor/reconnect-policy.ts b/extensions/slack/src/monitor/reconnect-policy.ts index 5e237e024ec..2c1d7bde9d9 100644 --- a/extensions/slack/src/monitor/reconnect-policy.ts +++ b/extensions/slack/src/monitor/reconnect-policy.ts @@ -9,7 +9,7 @@ export const SLACK_SOCKET_RECONNECT_POLICY = { maxAttempts: 12, } as const; -export type SlackSocketDisconnectEvent = "disconnect" | "unable_to_socket_mode_start" | "error"; +type SlackSocketDisconnectEvent = "disconnect" | "unable_to_socket_mode_start" | "error"; type EmitterLike = { on: (event: string, listener: (...args: unknown[]) => void) => unknown; diff --git a/extensions/slack/src/monitor/types.ts b/extensions/slack/src/monitor/types.ts index 171fd799d0c..39d01eea85f 100644 --- a/extensions/slack/src/monitor/types.ts +++ b/extensions/slack/src/monitor/types.ts @@ -1,7 +1,7 @@ import type { ChannelRuntimeSurface } from "openclaw/plugin-sdk/channel-contract"; import type { OpenClawConfig, SlackSlashCommandConfig } from "openclaw/plugin-sdk/config-types"; import type { RuntimeEnv } from "openclaw/plugin-sdk/runtime-env"; -import type { SlackFile, SlackMessageEvent } from "../types.js"; +import type { SlackMessageEvent } from "../types.js"; export type MonitorSlackOpts = { botToken?: string; @@ -93,5 +93,3 @@ export type SlackMessageDeletedEvent = { previous_message?: { ts?: string; user?: string; bot_id?: string }; event_ts?: string; }; - -export type { SlackFile, SlackMessageEvent }; diff --git a/extensions/slack/src/runtime.ts b/extensions/slack/src/runtime.ts index 3c0c82fd27d..68b59e6b05c 100644 --- a/extensions/slack/src/runtime.ts +++ b/extensions/slack/src/runtime.ts @@ -5,7 +5,7 @@ type SlackChannelRuntime = { handleSlackAction?: typeof import("./action-runtime.js").handleSlackAction; }; -export type SlackRuntime = PluginRuntime & { +type SlackRuntime = PluginRuntime & { channel: PluginRuntime["channel"] & { slack?: SlackChannelRuntime; }; @@ -15,9 +15,8 @@ const { setRuntime: setSlackRuntime, clearRuntime: clearSlackRuntime, tryGetRuntime: getOptionalSlackRuntime, - getRuntime: getSlackRuntime, } = createPluginRuntimeStore({ pluginId: "slack", errorMessage: "Slack runtime not initialized", }); -export { clearSlackRuntime, getOptionalSlackRuntime, getSlackRuntime, setSlackRuntime }; +export { clearSlackRuntime, getOptionalSlackRuntime, setSlackRuntime }; diff --git a/extensions/slack/src/secret-contract.ts b/extensions/slack/src/secret-contract.ts index 3f509061b09..effb205befa 100644 --- a/extensions/slack/src/secret-contract.ts +++ b/extensions/slack/src/secret-contract.ts @@ -5,7 +5,6 @@ import { hasOwnProperty, type ResolverContext, type SecretDefaults, - type SecretTargetRegistryEntry, } from "openclaw/plugin-sdk/channel-secret-basic-runtime"; export const secretTargetRegistryEntries = [ @@ -97,7 +96,7 @@ export const secretTargetRegistryEntries = [ includeInConfigure: true, includeInAudit: true, }, -] satisfies SecretTargetRegistryEntry[]; +] satisfies import("openclaw/plugin-sdk/channel-secret-basic-runtime").SecretTargetRegistryEntry[]; export function collectRuntimeConfigAssignments(params: { config: { channels?: Record }; diff --git a/extensions/slack/src/stream-mode.ts b/extensions/slack/src/stream-mode.ts index 6b6f6d2ed11..fe366d47082 100644 --- a/extensions/slack/src/stream-mode.ts +++ b/extensions/slack/src/stream-mode.ts @@ -7,8 +7,8 @@ import { type StreamingMode, } from "./streaming-compat.js"; -export type SlackStreamMode = SlackLegacyDraftStreamMode; -export type SlackStreamingMode = StreamingMode; +type SlackStreamMode = SlackLegacyDraftStreamMode; +type SlackStreamingMode = StreamingMode; const DEFAULT_STREAM_MODE: SlackStreamMode = "replace"; export function resolveSlackStreamMode(raw: unknown): SlackStreamMode { diff --git a/extensions/slack/src/streaming.ts b/extensions/slack/src/streaming.ts index 4a0d422cc63..fe5316486cc 100644 --- a/extensions/slack/src/streaming.ts +++ b/extensions/slack/src/streaming.ts @@ -39,7 +39,7 @@ export type SlackStreamSession = { pendingText: string; }; -export type StartSlackStreamParams = { +type StartSlackStreamParams = { client: WebClient; channel: string; threadTs: string; @@ -59,12 +59,12 @@ export type StartSlackStreamParams = { userId?: string; }; -export type AppendSlackStreamParams = { +type AppendSlackStreamParams = { session: SlackStreamSession; text: string; }; -export type StopSlackStreamParams = { +type StopSlackStreamParams = { session: SlackStreamSession; /** Optional final markdown text to append before stopping. */ text?: string; diff --git a/extensions/slack/src/threading.ts b/extensions/slack/src/threading.ts index ab23ab89c40..991c19ef662 100644 --- a/extensions/slack/src/threading.ts +++ b/extensions/slack/src/threading.ts @@ -1,7 +1,7 @@ import type { ReplyToMode } from "openclaw/plugin-sdk/config-types"; import type { SlackAppMentionEvent, SlackMessageEvent } from "./types.js"; -export type SlackThreadContext = { +type SlackThreadContext = { incomingThreadTs?: string; messageTs?: string; isThreadReply: boolean;