Files
clawdbot/src/discord/gateway-logging.ts
Peter Steinberger c379191f80 chore: migrate to oxlint and oxfmt
Co-authored-by: Christoph Nakazawa <christoph.pojer@gmail.com>
2026-01-14 15:02:19 +00:00

63 lines
1.8 KiB
TypeScript

import type { EventEmitter } from "node:events";
import { logVerbose } from "../globals.js";
import type { RuntimeEnv } from "../runtime.js";
type GatewayEmitter = Pick<EventEmitter, "on" | "removeListener">;
const INFO_DEBUG_MARKERS = [
"WebSocket connection closed",
"Reconnecting with backoff",
"Attempting resume with backoff",
];
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);
};
}