style(gateway,backend): clear all biome warnings (no warnings left behind)

Address every remaining biome lint/format warning across both services
so the codebase ships warning-free:

- textCacheStore: drop unused deleteExpiredQdrantPoints import; hash
  image cache key (sha256[:32]) so long/base64 URLs no longer blow the
  text_analysis_cache PK B-tree 8191-byte index (was aborting the media
  analysis lock INSERT).
- bootstrap: drop unused unhandledRejection promise param.
- moderationOrchestrator: drop unused  destructure at L197.
- mediaDownloader / textBatchProcessor / transmitter: replace non-null
  assertions with proper null guards (stickerName ?? '', urlImages.get
  guard, backpressureQueue.shift guard).
- backend utils: throw lastError ?? fallback instead of lastError!.
- message-capture: remove unused  (retentionDb),  (moderationActionsDb,
  reviewsDb); simplify renderDiscordMentions guard to optional chain.
- transmitter: remove dead write-only  field + its assignments.

No behavior change beyond the cache-key hashing (now deterministic
fixed-length) and the intentional null-safety guards.
This commit is contained in:
asepharyana
2026-08-15 23:18:33 +07:00
parent c590a8be27
commit 416c690ebc
11 changed files with 12 additions and 17 deletions
+1 -1
View File
@@ -108,5 +108,5 @@ export async function retryWithBackoff<T>(
});
}
}
throw lastError!;
throw lastError ?? new Error("Request failed after all retries");
}
@@ -315,7 +315,7 @@ export async function initializeDiscordGateway() {
gracefulShutdown("uncaughtException");
});
process.on("unhandledRejection", (reason, promise) => {
process.on("unhandledRejection", (reason) => {
const err =
reason instanceof Error ? reason : new Error(String(reason ?? "unknown"));
const code = (err as NodeJS.ErrnoException).code ?? "";
@@ -450,7 +450,7 @@ export async function downloadMediaCandidate(
if (candidate.customEmojiId || candidate.stickerName) {
const vck = candidate.customEmojiId
? makeCustomEmojiCacheKey(candidate.customEmojiId)
: makeStickerCacheKey(candidate.stickerName!);
: makeStickerCacheKey(candidate.stickerName ?? "");
const cached = await getCachedMediaAnalysis(vck);
if (cached) {
const existing = mediaAnalysisMap.get(targetId) ?? [];
@@ -194,7 +194,7 @@ export async function runModerationAnalysis(
if (embeddings && embeddings.length === texts.length) {
// index-aligned with semanticCandidates
for (let i = 0; i < semanticCandidates.length; i++) {
const { target, cacheKey } = semanticCandidates[i];
const { cacheKey } = semanticCandidates[i];
embeddingsByKey.set(cacheKey, embeddings[i]);
}
@@ -249,7 +249,8 @@ export async function runTextOnlyBatch(
if (pics.length === 0) return { id: msg.id, lines: [] as string[] };
const lines = await Promise.all(
pics.map(async (url) => {
const img = urlImages.get(url)!;
const img = urlImages.get(url);
if (!img) return null;
try {
const { data: resizedBuffer, mimeType: resizedMime } =
await resizeImageForVision(img.data, maxDim);
@@ -3,7 +3,6 @@ import { createChildLogger } from "@/shared/logger/index";
import { executeAll, executeGet } from "../../shared/database/drizzle.js";
import { findBestEmbeddingMatch } from "./embeddingClient.js";
import {
deleteExpiredQdrantPoints,
deleteQdrantPoint,
deleteQdrantPointsByContentHash,
isQdrantConfigured,
@@ -515,7 +515,7 @@ export function renderDiscordMentions(
content: string,
metadata: string | null | undefined,
): string {
if (!content || !content.includes("<")) return content;
if (!content?.includes("<")) return content;
const parsed = parseRichMessageMetadata(metadata);
const roleName = new Map(
(parsed?.mentionedRoles ?? []).map((r) => [r.id, r.name] as const),
@@ -1,4 +1,4 @@
import { and, desc, eq, inArray, type SQL, sql } from "drizzle-orm";
import { and, desc, eq, inArray, type SQL } from "drizzle-orm";
import type { NodePgDatabase } from "drizzle-orm/node-postgres";
import type * as schema from "../../shared/database/schema.js";
import { moderationActionsTable } from "../../shared/database/schema.js";
@@ -1,4 +1,4 @@
import { and, eq, isNull, or } from "drizzle-orm";
import { and, eq, isNull } from "drizzle-orm";
import type { NodePgDatabase } from "drizzle-orm/node-postgres";
import { createChildLogger, type Logger } from "@/shared/logger/index";
import type * as schema from "../../shared/database/schema.js";
@@ -1,4 +1,4 @@
import { and, desc, eq, inArray, type SQL, sql } from "drizzle-orm";
import { and, desc, eq, inArray, type SQL } from "drizzle-orm";
import type { NodePgDatabase } from "drizzle-orm/node-postgres";
import type * as schema from "../../shared/database/schema.js";
import { messageReviewsTable } from "../../shared/database/schema.js";
@@ -27,8 +27,6 @@ export class VoiceTransmitter {
private gate = Promise.resolve();
/** Set true before sending SIGTERM so exit handler knows it's intentional */
private _expectedExit = false;
/** True while the underlying stream is in a drain state (backpressure) */
private draining = false;
/**
* Start listening for PCM audio data from Redis and stream to Discord
@@ -179,15 +177,13 @@ export class VoiceTransmitter {
const canContinue = stream.write(pcmBuffer);
// Backpressure: queue until drain
if (!canContinue) {
this.draining = true;
stream.once("drain", () => {
this.draining = false;
// Re-acquire stream reference (could have been replaced by restart)
const currentStream = this.pcmStream;
if (!currentStream || !this.isActive) return;
// Flush queued chunks
while (this.backpressureQueue.length > 0) {
const queued = this.backpressureQueue.shift()!;
const queued = this.backpressureQueue.shift();
if (!queued) break;
try {
if (!currentStream.write(queued)) break;
} catch (err) {
@@ -237,7 +233,6 @@ export class VoiceTransmitter {
this.isActive = false;
this.backpressureQueue = [];
this.draining = false;
if (this.pcmStream) {
this.pcmStream.removeAllListeners("drain");