refactor: migrate discord-gateway from winston to @bete/shared/logger and utils

- Replace all local logger imports (../../shared/logger/logger.js) with @bete/shared/logger across 26 files
- Remove winston dependency, add pino to discord-gateway package.json
- Delete shared/logger/logger.ts (winston-based, 132 lines) and serialization.ts (109 lines)
- Replace local retryWithBackoff imports with @bete/shared/utils across 6 files
- Delete shared/utils/retry.ts (42 lines)
- Add CustomLogger type alias to @bete/shared/logger for backwards compatibility
- Remove logger param from all retryWithBackoff calls and uploadToTele interfaces
- Frontend: convert entity type files to re-exports from shared/api/client.ts
- Full monorepo typecheck clean (4/4 packages)

35 files changed, 42 insertions(+), 488 deletions(-)
This commit is contained in:
MythEclipse
2026-06-02 21:23:12 +07:00
parent 2d79d8aefd
commit 19028cf244
35 changed files with 42 additions and 488 deletions
@@ -4,8 +4,8 @@ import type { Client } from "discord.js-selfbot-v13";
import { AbortError } from "p-retry";
import { Piscina } from "piscina";
import { config } from "../../shared/config/config.js";
import { createChildLogger } from "../../shared/logger/logger.js";
import { retryWithBackoff } from "../../shared/utils/retry.js";
import { createChildLogger } from "@bete/shared/logger";
import { retryWithBackoff } from "@bete/shared/utils";
import type { EventBroadcaster } from "../event-broadcaster/index.js";
import { invalidateAnalyticsCache } from "../message-capture/analyticsStore.js";
import { isAgeRestrictedMetadata } from "../message-capture/messageMetadata.js";
@@ -380,7 +380,6 @@ async function processIndividualFallback(
retries: 0,
minTimeout: 0,
maxTimeout: 0,
logger,
},
);
@@ -1,6 +1,6 @@
import type { Client, PermissionString } from "discord.js-selfbot-v13";
import { config } from "../../shared/config/config.js";
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
import { createModerationAction } from "../message-capture/messageStore.js";
import type { MessageRecord } from "../message-capture/types.js";
@@ -1,4 +1,4 @@
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
import { getCachedText, upsertCachedText } from "./textCacheStore.js";
import { llmDetectBadwords } from "./llmClient.js";
@@ -8,9 +8,9 @@
import OpenAI from "openai";
import { config } from "../../shared/config/config.js";
import { retryWithBackoff } from "../../shared/utils/retry.js";
import { retryWithBackoff } from "@bete/shared/utils";
import { withLlmConcurrency } from "./concurrencyLimiter.js";
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
const log = createChildLogger("llm-client");
@@ -136,7 +136,6 @@ export async function llmChat(
minTimeout: 0,
maxTimeout: 0,
factor: 2,
logger: log,
},
);
}
@@ -2,8 +2,8 @@ import type { ChatCompletion } from "openai/resources/chat/completions";
import { AbortError } from "p-retry";
import { z } from "zod";
import { config } from "../../shared/config/config.js";
import { createChildLogger } from "../../shared/logger/logger.js";
import { retryWithBackoff } from "../../shared/utils/retry.js";
import { createChildLogger } from "@bete/shared/logger";
import { retryWithBackoff } from "@bete/shared/utils";
import { resizeImageForVision } from "../attachment-upload/imageResizer.js";
import { extractMessageMediaEvidence } from "../message-capture/messageMetadata.js";
import type {
@@ -677,7 +677,6 @@ async function callModerationLLM(
minTimeout: 3000,
maxTimeout: 8000,
factor: 2,
logger: log,
},
);
parsed = analysis.parsed;
@@ -10,7 +10,7 @@
* Enables full audit trail and debugging of moderation decisions.
*/
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
import type { AnalysisResult } from "../message-capture/types.js";
const logger = createChildLogger("response-logger");
@@ -1,5 +1,5 @@
import { executeAll, executeGet } from "../../shared/database/drizzle.js";
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
const logger = createChildLogger("sticker-cache");
@@ -1,6 +1,6 @@
import { createHash } from "node:crypto";
import { executeAll, executeGet } from "../../shared/database/drizzle.js";
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
const logger = createChildLogger("text-cache-store");
@@ -1,6 +1,6 @@
import { resolve } from "node:dns/promises";
import { isIP } from "node:net";
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
const log = createChildLogger("urlFetcher");
@@ -1,5 +1,5 @@
import { config } from "../../shared/config/config.js";
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
import { uploadToTele } from "./teleUpload.js";
import {
updateAttachmentAsFailedUpload,
@@ -45,7 +45,6 @@ export async function uploadAttachmentToTele(
uploadUrl: config.TELE_UPLOAD_URL,
timeoutMs: config.ATTACHMENT_UPLOAD_TIMEOUT_MS,
retries: 0,
logger,
});
return result.url;
@@ -1,5 +1,5 @@
import sharp from "sharp";
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
const log = createChildLogger("imageResizer");
@@ -1,5 +1,4 @@
import type { CustomLogger } from "../../shared/logger/logger.js";
import { retryWithBackoff } from "../../shared/utils/retry.js";
import { retryWithBackoff } from "@bete/shared/utils";
export interface TeleUploadResponse {
download_url: string;
@@ -37,7 +36,6 @@ export async function uploadToTele(input: {
uploadUrl: string;
timeoutMs?: number;
retries: number;
logger: CustomLogger;
}): Promise<TeleUploadResult> {
const {
buffer,
@@ -46,7 +44,6 @@ export async function uploadToTele(input: {
uploadUrl,
timeoutMs,
retries,
logger,
} = input;
const response = await retryWithBackoff(
@@ -77,7 +74,6 @@ export async function uploadToTele(input: {
retries,
minTimeout: 0,
maxTimeout: 0,
logger,
},
);
@@ -1,7 +1,7 @@
import type { Client } from "discord.js-selfbot-v13";
import Redis from "ioredis";
import { config } from "../../shared/config/config.js";
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
import { discordPlayer } from "../voice-recording/player.js";
import type { VoiceController } from "../voice-recording/voiceController.js";
@@ -1,5 +1,5 @@
import Redis from "ioredis";
import type { CustomLogger } from "../../shared/logger/logger.js";
import type { CustomLogger } from "@bete/shared/logger";
export interface DiscordGatewayEvent {
type: string;
@@ -1,5 +1,5 @@
import { executeAll, executeGet } from "../../shared/database/drizzle.js";
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
import type { MessageRecord } from "./types.js";
const logger = createChildLogger("analytics-store");
@@ -1,5 +1,5 @@
import type { WebSocket } from "ws";
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
import type { MediaState } from "../voice-recording/mediaTypes.js";
import type {
AnalysisQueueStatus,
@@ -1,6 +1,6 @@
import type { Client, Message } from "discord.js-selfbot-v13";
import { config } from "../../shared/config/config.js";
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
import { queueMessageAnalysis } from "../ai-moderation/aiAnalyzer.js";
import { processAttachmentUpload } from "../attachment-upload/attachmentUploader.js";
import type { EventBroadcaster } from "../event-broadcaster/eventBroadcaster.js";
@@ -17,7 +17,7 @@ import {
moderationActionsTable,
retentionPoliciesTable,
} from "../../shared/database/schema.js";
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
import { decodeCursor, encodeCursor } from "../message-capture/pagination.js";
import type {
AttachmentRecord,
@@ -11,7 +11,7 @@ import {
} from "@discordjs/voice";
import type { Client, VoiceChannel } from "discord.js-selfbot-v13";
import { config } from "../../shared/config/config.js";
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
import { PacketFilter } from "./packetFilter.js";
import { subscribeToAudioStream } from "./recorder/audioStream.js";
import { OpusDecoder } from "./recorder/decoder.js";
@@ -26,7 +26,7 @@ import {
type RecordingSession,
} from "./recorder/sessionRecording.js";
import { uploadRecordingSegment } from "./recorder/uploader.js";
import { retryWithBackoff } from "../../shared/utils/retry.js";
import { retryWithBackoff } from "@bete/shared/utils";
import type { PcmBroadcaster } from "../message-capture/types.js";
const logger = createChildLogger("recorder");
@@ -95,7 +95,6 @@ export async function startRecording(
retries: 0,
minTimeout: 0,
maxTimeout: 0,
logger,
},
);
logger.info("Connected to voice channel. Recording started");
@@ -6,7 +6,7 @@ import {
updateVoiceRecordingAsFailed,
updateVoiceRecordingAsUploaded,
} from "../../../shared/database/voiceRecordingRepo.js";
import { createChildLogger } from "../../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
import { uploadToTele } from "../teleUpload.js";
const logger = createChildLogger("recording-uploader");
@@ -61,7 +61,6 @@ export async function uploadRecordingSegment(input: {
contentType: "audio/ogg",
uploadUrl: config.TELE_UPLOAD_URL,
retries: 0,
logger,
});
const downloadUrl = uploadResult.url;
@@ -1,5 +1,4 @@
import type { CustomLogger } from "../../shared/logger/logger.js";
import { retryWithBackoff } from "../../shared/utils/retry.js";
import { retryWithBackoff } from "@bete/shared/utils";
export interface TeleUploadResponse {
download_url: string;
@@ -37,7 +36,6 @@ export async function uploadToTele(input: {
uploadUrl: string;
timeoutMs?: number;
retries: number;
logger: CustomLogger;
}): Promise<TeleUploadResult> {
const {
buffer,
@@ -46,7 +44,6 @@ export async function uploadToTele(input: {
uploadUrl,
timeoutMs,
retries,
logger,
} = input;
const response = await retryWithBackoff(
@@ -77,7 +74,6 @@ export async function uploadToTele(input: {
retries,
minTimeout: 0,
maxTimeout: 0,
logger,
},
);
@@ -1,7 +1,7 @@
import { getVoiceConnection, type VoiceConnection } from "@discordjs/voice";
import type { Client, Guild, VoiceChannel } from "discord.js-selfbot-v13";
import { AppError } from "@bete/shared/errors";
import { createChildLogger } from "../../shared/logger/logger.js";
import { createChildLogger } from "@bete/shared/logger";
import { discordPlayer } from "./player.js";
import { startRecording, stopRecording } from "./recorder.js";