
























@@ -10,8 +10,13 @@ type SlackSocketModeConfig = Pick<
1010SlackSocketModeReceiverOptions,
1111"clientPingTimeout" | "serverPingTimeout" | "pingPongLoggingEnabled"
1212>;
13+type SlackSdkLogger = NonNullable<SlackSocketModeReceiverOptions["logger"]>;
14+type SlackSdkLogLevel = ReturnType<SlackSdkLogger["getLevel"]>;
13151416const OPENCLAW_SLACK_CLIENT_PING_TIMEOUT_MS = 15_000;
17+const SLACK_SOCKET_PONG_TIMEOUT_WARNING_PREFIX = "A pong wasn't received from the server";
18+const SLACK_SOCKET_LOG_LEVEL_IGNORED_WARNING_RE =
19+/^The logLevel given to .+ was ignored as you also gave logger$/;
15201621export type SlackBoltResolvedExports = {
1722App: SlackAppConstructor;
@@ -133,6 +138,42 @@ export function publishSlackDisconnectedStatus(
133138});
134139}
135140141+function isSlackSocketPongTimeoutWarning(args: readonly unknown[]) {
142+return (
143+typeof args[0] === "string" && args[0].startsWith(SLACK_SOCKET_PONG_TIMEOUT_WARNING_PREFIX)
144+);
145+}
146+147+function isSlackSocketSelfInflictedLoggerWarning(args: readonly unknown[]) {
148+return typeof args[0] === "string" && SLACK_SOCKET_LOG_LEVEL_IGNORED_WARNING_RE.test(args[0]);
149+}
150+151+export function createSlackSocketModeLogger(
152+sink: Pick<typeof console, "debug" | "info" | "warn" | "error"> = console,
153+): SlackSdkLogger {
154+let level = "info" as SlackSdkLogLevel;
155+let name = "socket-mode";
156+const prefix = () => `socket-mode:${name}`;
157+return {
158+debug: () => {},
159+info: () => {},
160+warn: (...args: unknown[]) => {
161+if (isSlackSocketPongTimeoutWarning(args) || isSlackSocketSelfInflictedLoggerWarning(args)) {
162+return;
163+}
164+sink.warn(prefix(), ...args);
165+},
166+error: (...args: unknown[]) => sink.error(prefix(), ...args),
167+setLevel: (nextLevel) => {
168+level = nextLevel;
169+},
170+getLevel: () => level,
171+setName: (nextName) => {
172+name = nextName;
173+},
174+};
175+}
176+136177function asRecord(value: unknown): Record<string, unknown> | undefined {
137178return value && typeof value === "object" && !Array.isArray(value)
138179 ? (value as Record<string, unknown>)
@@ -181,6 +222,7 @@ export function createSlackBoltApp(params: {
181222autoReconnectEnabled: false,
182223clientPingTimeout:
183224params.socketMode?.clientPingTimeout ?? OPENCLAW_SLACK_CLIENT_PING_TIMEOUT_MS,
225+logger: createSlackSocketModeLogger(),
184226installerOptions: {
185227clientOptions: params.clientOptions,
186228},
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。