Files
openclaw/extensions/discord/src/gateway-logging.ts
Ayaan Zaidi 095e7b830a fix: let carbon own gateway reconnects (#59019)
* refactor(discord): let carbon own gateway reconnects

* fix: finalize Discord gateway reconnect landing (#59019)
2026-04-01 19:12:35 +05:30

68 lines
1.9 KiB
TypeScript

import type { EventEmitter } from "node:events";
import { logVerbose } from "openclaw/plugin-sdk/runtime-env";
import type { RuntimeEnv } from "openclaw/plugin-sdk/runtime-env";
type GatewayEmitter = Pick<EventEmitter, "on" | "removeListener">;
const INFO_DEBUG_MARKERS = [
"Gateway websocket closed",
"Gateway reconnect scheduled in",
"Gateway forcing fresh IDENTIFY after",
];
const shouldPromoteGatewayDebug = (message: string) =>
INFO_DEBUG_MARKERS.some((marker) => message.includes(marker));
const formatGatewayMetrics = (metrics: unknown) => {
if (metrics === null || metrics === undefined) {
return String(metrics);
}
if (typeof metrics === "string") {
return metrics;
}
if (typeof metrics === "number" || typeof metrics === "boolean" || typeof metrics === "bigint") {
return String(metrics);
}
try {
return JSON.stringify(metrics);
} catch {
return "[unserializable metrics]";
}
};
export function attachDiscordGatewayLogging(params: {
emitter?: GatewayEmitter;
runtime: RuntimeEnv;
}) {
const { emitter, runtime } = params;
if (!emitter) {
return () => {};
}
const onGatewayDebug = (msg: unknown) => {
const message = String(msg);
logVerbose(`discord gateway: ${message}`);
if (shouldPromoteGatewayDebug(message)) {
runtime.log?.(`discord gateway: ${message}`);
}
};
const onGatewayWarning = (warning: unknown) => {
logVerbose(`discord gateway warning: ${String(warning)}`);
};
const onGatewayMetrics = (metrics: unknown) => {
logVerbose(`discord gateway metrics: ${formatGatewayMetrics(metrics)}`);
};
emitter.on("debug", onGatewayDebug);
emitter.on("warning", onGatewayWarning);
emitter.on("metrics", onGatewayMetrics);
return () => {
emitter.removeListener("debug", onGatewayDebug);
emitter.removeListener("warning", onGatewayWarning);
emitter.removeListener("metrics", onGatewayMetrics);
};
}