Compare commits
2
Commits
308be9f05a
...
6293d588bc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6293d588bc | ||
|
|
2357421841 |
@@ -1,4 +1,3 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import express, {
|
import express, {
|
||||||
type Express,
|
type Express,
|
||||||
type NextFunction,
|
type NextFunction,
|
||||||
@@ -6,11 +5,12 @@ import express, {
|
|||||||
type Response,
|
type Response,
|
||||||
} from "express";
|
} from "express";
|
||||||
import helmet from "helmet";
|
import helmet from "helmet";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { createAnalysisRouter } from "../modules/analysis/index.js";
|
import { createAnalysisRouter } from "../modules/analysis/index.js";
|
||||||
|
import { createChatbotRouter } from "../modules/chatbot/index.js";
|
||||||
import { createConfigRouter } from "../modules/config/index.js";
|
import { createConfigRouter } from "../modules/config/index.js";
|
||||||
import { createDashboardRouter } from "../modules/dashboard/index.js";
|
import { createDashboardRouter } from "../modules/dashboard/index.js";
|
||||||
import { createHealthRouter } from "../modules/health/index.js";
|
import { createHealthRouter } from "../modules/health/index.js";
|
||||||
import { createChatbotRouter } from "../modules/chatbot/index.js";
|
|
||||||
import { createMediaRouter } from "../modules/media/index.js";
|
import { createMediaRouter } from "../modules/media/index.js";
|
||||||
import { createMessagesRouter } from "../modules/messages/index.js";
|
import { createMessagesRouter } from "../modules/messages/index.js";
|
||||||
import { createRecordingsRouter } from "../modules/recordings/index.js";
|
import { createRecordingsRouter } from "../modules/recordings/index.js";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { pgMessagesTable } from "../../shared/index.js";
|
|
||||||
import { createChildLogger } from "../../shared/logger/index.js";
|
|
||||||
import { and, desc, eq, ilike, type SQL } from "drizzle-orm";
|
import { and, desc, eq, ilike, type SQL } from "drizzle-orm";
|
||||||
import { getDatabase } from "../../shared/database/index.js";
|
import { getDatabase } from "../../shared/database/index.js";
|
||||||
|
import { pgMessagesTable } from "../../shared/index.js";
|
||||||
|
import { createChildLogger } from "../../shared/logger/index.js";
|
||||||
import {
|
import {
|
||||||
type MappedMessage,
|
type MappedMessage,
|
||||||
mapMessageRow,
|
mapMessageRow,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Request, Response, Router } from "express";
|
import type { Request, Response, Router } from "express";
|
||||||
import express from "express";
|
import express from "express";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { asyncHandler } from "../../shared/middlewares/index.js";
|
import { asyncHandler } from "../../shared/middlewares/index.js";
|
||||||
import { analysisService } from "./analysis.service.js";
|
import { analysisService } from "./analysis.service.js";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Request, Response } from "express";
|
import type { Request, Response } from "express";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { asyncHandler } from "../../shared/middlewares/index.js";
|
import { asyncHandler } from "../../shared/middlewares/index.js";
|
||||||
import { chatbotService } from "./chatbot.service.js";
|
import { chatbotService } from "./chatbot.service.js";
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { pgChatbotMessagesTable, pgMessagesTable } from "../../shared/index.js";
|
|
||||||
import { createChildLogger } from "../../shared/logger/index.js";
|
|
||||||
import { and, desc, eq, type SQL, sql } from "drizzle-orm";
|
import { and, desc, eq, type SQL, sql } from "drizzle-orm";
|
||||||
import { getDatabase } from "../../shared/database/index.js";
|
import { getDatabase } from "../../shared/database/index.js";
|
||||||
|
import { pgChatbotMessagesTable, pgMessagesTable } from "../../shared/index.js";
|
||||||
|
import { createChildLogger } from "../../shared/logger/index.js";
|
||||||
|
|
||||||
const logger = createChildLogger("chatbot.repository");
|
const logger = createChildLogger("chatbot.repository");
|
||||||
|
|
||||||
|
|||||||
@@ -10,11 +10,7 @@ import { chatRequestSchema } from "./chatbot.schema.js";
|
|||||||
export function createChatbotRouter(): Router {
|
export function createChatbotRouter(): Router {
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
router.post(
|
router.post("/chat", validateBody(chatRequestSchema), handleChatbotChat);
|
||||||
"/chat",
|
|
||||||
validateBody(chatRequestSchema),
|
|
||||||
handleChatbotChat,
|
|
||||||
);
|
|
||||||
router.get("/chat/history", getChatbotHistory);
|
router.get("/chat/history", getChatbotHistory);
|
||||||
router.delete("/chat/history", clearChatbotHistory);
|
router.delete("/chat/history", clearChatbotHistory);
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
import type { SQL } from "drizzle-orm";
|
||||||
|
import { sql } from "drizzle-orm";
|
||||||
|
import { getDatabase } from "../../shared/database/index.js";
|
||||||
import {
|
import {
|
||||||
pgChannelCulturesTable,
|
pgChannelCulturesTable,
|
||||||
pgMessagesTable,
|
pgMessagesTable,
|
||||||
@@ -5,9 +8,6 @@ import {
|
|||||||
pgUserReputationsTable,
|
pgUserReputationsTable,
|
||||||
pgVoiceRecordingsTable,
|
pgVoiceRecordingsTable,
|
||||||
} from "../../shared/index.js";
|
} from "../../shared/index.js";
|
||||||
import type { SQL } from "drizzle-orm";
|
|
||||||
import { sql } from "drizzle-orm";
|
|
||||||
import { getDatabase } from "../../shared/database/index.js";
|
|
||||||
import type { ListUsersQuery } from "./dashboard.service.js";
|
import type { ListUsersQuery } from "./dashboard.service.js";
|
||||||
|
|
||||||
export class DashboardRepository {
|
export class DashboardRepository {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Request, Response, Router } from "express";
|
import type { Request, Response, Router } from "express";
|
||||||
import express from "express";
|
import express from "express";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { asyncHandler } from "../../shared/middlewares/index.js";
|
import { asyncHandler } from "../../shared/middlewares/index.js";
|
||||||
import { dashboardService } from "./dashboard.service.js";
|
import { dashboardService } from "./dashboard.service.js";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import { sql } from "drizzle-orm";
|
import { sql } from "drizzle-orm";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { getDatabase } from "../../shared/database/index.js";
|
import { getDatabase } from "../../shared/database/index.js";
|
||||||
|
|
||||||
const logger = createChildLogger("health.repository");
|
const logger = createChildLogger("health.repository");
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Request, Response, Router } from "express";
|
import type { Request, Response, Router } from "express";
|
||||||
import express from "express";
|
import express from "express";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { asyncHandler, validateBody } from "../../shared/middlewares/index.js";
|
import { asyncHandler, validateBody } from "../../shared/middlewares/index.js";
|
||||||
import { mediaQueueSchema, mediaVolumeSchema } from "./media.schema.js";
|
import { mediaQueueSchema, mediaVolumeSchema } from "./media.schema.js";
|
||||||
import { getStatus, queue, setVolume, skip, stop } from "./media.service.js";
|
import { getStatus, queue, setVolume, skip, stop } from "./media.service.js";
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
import {
|
||||||
|
createChildLogger,
|
||||||
|
tryCommandThenFallback,
|
||||||
|
} from "../../shared/commandHelper.js";
|
||||||
import {
|
import {
|
||||||
COMMAND_MEDIA_QUEUE,
|
COMMAND_MEDIA_QUEUE,
|
||||||
COMMAND_MEDIA_SKIP,
|
COMMAND_MEDIA_SKIP,
|
||||||
@@ -5,10 +9,6 @@ import {
|
|||||||
COMMAND_MEDIA_VOLUME,
|
COMMAND_MEDIA_VOLUME,
|
||||||
MEDIA_STATUS_KEY,
|
MEDIA_STATUS_KEY,
|
||||||
} from "../../shared/index.js";
|
} from "../../shared/index.js";
|
||||||
import {
|
|
||||||
createChildLogger,
|
|
||||||
tryCommandThenFallback,
|
|
||||||
} from "../../shared/commandHelper.js";
|
|
||||||
import { publishCommand, readRedisStatus } from "../../shared/redis/index.js";
|
import { publishCommand, readRedisStatus } from "../../shared/redis/index.js";
|
||||||
|
|
||||||
const logger = createChildLogger("media.service");
|
const logger = createChildLogger("media.service");
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Request, Response } from "express";
|
import type { Request, Response } from "express";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { asyncHandler } from "../../shared/middlewares/index.js";
|
import { asyncHandler } from "../../shared/middlewares/index.js";
|
||||||
import { messageQuerySchema } from "./messages.schema.js";
|
import { messageQuerySchema } from "./messages.schema.js";
|
||||||
import { messagesService } from "./messages.service.js";
|
import { messagesService } from "./messages.service.js";
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
import type { PageResult } from "../../shared/index.js";
|
|
||||||
import { pgAttachmentsTable, pgMessagesTable } from "../../shared/index.js";
|
|
||||||
import { createChildLogger } from "../../shared/logger/index.js";
|
|
||||||
import {
|
import {
|
||||||
and,
|
and,
|
||||||
desc,
|
desc,
|
||||||
@@ -16,6 +13,9 @@ import {
|
|||||||
} from "drizzle-orm";
|
} from "drizzle-orm";
|
||||||
import { config } from "../../shared/config/index.js";
|
import { config } from "../../shared/config/index.js";
|
||||||
import { getDatabase } from "../../shared/database/index.js";
|
import { getDatabase } from "../../shared/database/index.js";
|
||||||
|
import type { PageResult } from "../../shared/index.js";
|
||||||
|
import { pgAttachmentsTable, pgMessagesTable } from "../../shared/index.js";
|
||||||
|
import { createChildLogger } from "../../shared/logger/index.js";
|
||||||
import { mapMessageRow } from "../../shared/utils/messageMapper.js";
|
import { mapMessageRow } from "../../shared/utils/messageMapper.js";
|
||||||
import type {
|
import type {
|
||||||
MessageCreate,
|
MessageCreate,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Request, Response, Router } from "express";
|
import type { Request, Response, Router } from "express";
|
||||||
import express from "express";
|
import express from "express";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { asyncHandler, validateBody } from "../../shared/middlewares/index.js";
|
import { asyncHandler, validateBody } from "../../shared/middlewares/index.js";
|
||||||
import {
|
import {
|
||||||
handleGetAttachmentsByChannel,
|
handleGetAttachmentsByChannel,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Request, Response, Router } from "express";
|
import type { Request, Response, Router } from "express";
|
||||||
import express from "express";
|
import express from "express";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { asyncHandler } from "../../shared/middlewares/index.js";
|
import { asyncHandler } from "../../shared/middlewares/index.js";
|
||||||
import { recordingsService } from "./recordings.service.js";
|
import { recordingsService } from "./recordings.service.js";
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { pgVoiceRecordingsTable } from "../../shared/index.js";
|
|
||||||
import { createChildLogger } from "../../shared/logger/index.js";
|
|
||||||
import { and, desc, eq, lt, type SQL } from "drizzle-orm";
|
import { and, desc, eq, lt, type SQL } from "drizzle-orm";
|
||||||
import { getDatabase } from "../../shared/database/index.js";
|
import { getDatabase } from "../../shared/database/index.js";
|
||||||
|
import { pgVoiceRecordingsTable } from "../../shared/index.js";
|
||||||
|
import { createChildLogger } from "../../shared/logger/index.js";
|
||||||
|
|
||||||
const logger = createChildLogger("recordings.service");
|
const logger = createChildLogger("recordings.service");
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Request, Response, Router } from "express";
|
import type { Request, Response, Router } from "express";
|
||||||
import express from "express";
|
import express from "express";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { asyncHandler } from "../../shared/middlewares/index.js";
|
import { asyncHandler } from "../../shared/middlewares/index.js";
|
||||||
import { uiStateService } from "./ui-state.service.js";
|
import { uiStateService } from "./ui-state.service.js";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import { sql } from "drizzle-orm";
|
import { sql } from "drizzle-orm";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { getDatabase } from "../../shared/database/index.js";
|
import { getDatabase } from "../../shared/database/index.js";
|
||||||
|
|
||||||
const logger = createChildLogger("ui-state.service");
|
const logger = createChildLogger("ui-state.service");
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Request, Response } from "express";
|
import type { Request, Response } from "express";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { asyncHandler } from "../../shared/middlewares/index.js";
|
import { asyncHandler } from "../../shared/middlewares/index.js";
|
||||||
import { publishCommandNoReply } from "../../shared/redis/index.js";
|
import { publishCommandNoReply } from "../../shared/redis/index.js";
|
||||||
import type { ConnectVoiceInput, VoiceCommandInput } from "./voice.schema.js";
|
import type { ConnectVoiceInput, VoiceCommandInput } from "./voice.schema.js";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Request, Response, Router } from "express";
|
import type { Request, Response, Router } from "express";
|
||||||
import express from "express";
|
import express from "express";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { asyncHandler, validateBody } from "../../shared/middlewares/index.js";
|
import { asyncHandler, validateBody } from "../../shared/middlewares/index.js";
|
||||||
import {
|
import {
|
||||||
handleConnectVoice,
|
handleConnectVoice,
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
import { eq } from "drizzle-orm";
|
||||||
|
import {
|
||||||
|
createChildLogger,
|
||||||
|
tryCommandThenFallback,
|
||||||
|
} from "../../shared/commandHelper.js";
|
||||||
|
import { getDatabase } from "../../shared/database/index.js";
|
||||||
import {
|
import {
|
||||||
COMMAND_GUILDS_LIST,
|
COMMAND_GUILDS_LIST,
|
||||||
COMMAND_GUILDS_TEXT_CHANNELS,
|
COMMAND_GUILDS_TEXT_CHANNELS,
|
||||||
@@ -8,12 +14,6 @@ import {
|
|||||||
pgMessagesTable,
|
pgMessagesTable,
|
||||||
VOICE_STATUS_KEY,
|
VOICE_STATUS_KEY,
|
||||||
} from "../../shared/index.js";
|
} from "../../shared/index.js";
|
||||||
import { eq } from "drizzle-orm";
|
|
||||||
import {
|
|
||||||
createChildLogger,
|
|
||||||
tryCommandThenFallback,
|
|
||||||
} from "../../shared/commandHelper.js";
|
|
||||||
import { getDatabase } from "../../shared/database/index.js";
|
|
||||||
import { publishCommand, readRedisStatus } from "../../shared/redis/index.js";
|
import { publishCommand, readRedisStatus } from "../../shared/redis/index.js";
|
||||||
|
|
||||||
const logger = createChildLogger("voice.service");
|
const logger = createChildLogger("voice.service");
|
||||||
|
|||||||
@@ -160,8 +160,6 @@ export const configSchema = z
|
|||||||
.default(30000)
|
.default(30000)
|
||||||
.describe("Timeout for individual LLM moderation calls"),
|
.describe("Timeout for individual LLM moderation calls"),
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ── AI Analysis Timing ──────────────────────────────────────────────
|
// ── AI Analysis Timing ──────────────────────────────────────────────
|
||||||
AI_ANALYSIS_DEBOUNCE_MS: z.coerce.number().positive().default(500),
|
AI_ANALYSIS_DEBOUNCE_MS: z.coerce.number().positive().default(500),
|
||||||
AI_ANALYSIS_RECOVERY_INTERVAL_MS: z.coerce
|
AI_ANALYSIS_RECOVERY_INTERVAL_MS: z.coerce
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { createChildLogger } from "../logger/index.js";
|
|
||||||
import { drizzle } from "drizzle-orm/node-postgres";
|
import { drizzle } from "drizzle-orm/node-postgres";
|
||||||
import type { Pool, PoolClient } from "pg";
|
import type { Pool, PoolClient } from "pg";
|
||||||
|
import { createChildLogger } from "../logger/index.js";
|
||||||
import { closePool, createPoolFromConfig } from "./pool.js";
|
import { closePool, createPoolFromConfig } from "./pool.js";
|
||||||
|
|
||||||
const logger = createChildLogger("database.init");
|
const logger = createChildLogger("database.init");
|
||||||
|
|||||||
@@ -592,5 +592,4 @@ export type DbRetentionPolicyInsert =
|
|||||||
|
|
||||||
// Chatbot Messages
|
// Chatbot Messages
|
||||||
export type ChatbotMessage = typeof chatbotMessagesTable.$inferSelect;
|
export type ChatbotMessage = typeof chatbotMessagesTable.$inferSelect;
|
||||||
export type ChatbotMessageInsert =
|
export type ChatbotMessageInsert = typeof chatbotMessagesTable.$inferInsert;
|
||||||
typeof chatbotMessagesTable.$inferInsert;
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { AppError, ValidationError } from "@/shared/errors/index";
|
|
||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { NextFunction, Request, Response } from "express";
|
import type { NextFunction, Request, Response } from "express";
|
||||||
import type { ZodSchema } from "zod";
|
import type { ZodSchema } from "zod";
|
||||||
|
import { AppError, ValidationError } from "@/shared/errors/index";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
|
|
||||||
const logger = createChildLogger("middleware");
|
const logger = createChildLogger("middleware");
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
import { randomUUID } from "node:crypto";
|
import { randomUUID } from "node:crypto";
|
||||||
|
import Redis from "ioredis";
|
||||||
|
import { config } from "../config/index.js";
|
||||||
import {
|
import {
|
||||||
BACKEND_COMMAND,
|
BACKEND_COMMAND,
|
||||||
BACKEND_COMMAND_REPLY_PREFIX,
|
BACKEND_COMMAND_REPLY_PREFIX,
|
||||||
@@ -6,8 +8,6 @@ import {
|
|||||||
type CommandReply,
|
type CommandReply,
|
||||||
} from "../index.js";
|
} from "../index.js";
|
||||||
import { createChildLogger } from "../logger/index.js";
|
import { createChildLogger } from "../logger/index.js";
|
||||||
import Redis from "ioredis";
|
|
||||||
import { config } from "../config/index.js";
|
|
||||||
|
|
||||||
const logger = createChildLogger("redis.command-channel");
|
const logger = createChildLogger("redis.command-channel");
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
import { DISCORD_CHANNEL_TO_WS_EVENT, DISCORD_VOICE_PCM } from "../shared/index.js";
|
|
||||||
import { createChildLogger } from "../shared/logger/index.js";
|
|
||||||
import Redis from "ioredis";
|
import Redis from "ioredis";
|
||||||
import { config } from "../shared/config/index.js";
|
import { config } from "../shared/config/index.js";
|
||||||
|
import {
|
||||||
|
DISCORD_CHANNEL_TO_WS_EVENT,
|
||||||
|
DISCORD_VOICE_PCM,
|
||||||
|
} from "../shared/index.js";
|
||||||
|
import { createChildLogger } from "../shared/logger/index.js";
|
||||||
import { broadcastBinary, broadcastEvent } from "./broadcast.js";
|
import { broadcastBinary, broadcastEvent } from "./broadcast.js";
|
||||||
|
|
||||||
const logger = createChildLogger("ws.redis-bridge");
|
const logger = createChildLogger("ws.redis-bridge");
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import type { Server } from "node:http";
|
import type { Server } from "node:http";
|
||||||
import { BACKEND_COMMAND, BACKEND_VOICE_TRANSMIT } from "../shared/index.js";
|
|
||||||
import { createChildLogger } from "../shared/logger/index.js";
|
|
||||||
import { WebSocket, WebSocketServer } from "ws";
|
import { WebSocket, WebSocketServer } from "ws";
|
||||||
import { config } from "../shared/config/index.js";
|
import { config } from "../shared/config/index.js";
|
||||||
|
import { BACKEND_COMMAND, BACKEND_VOICE_TRANSMIT } from "../shared/index.js";
|
||||||
|
import { createChildLogger } from "../shared/logger/index.js";
|
||||||
import { setBroadcastFunctions } from "./broadcast.js";
|
import { setBroadcastFunctions } from "./broadcast.js";
|
||||||
|
|
||||||
const logger = createChildLogger("ws.server");
|
const logger = createChildLogger("ws.server");
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
// ─── Shared Error Classes ────────────────────────────────────────────────────
|
// ─── Shared Error Classes ────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
||||||
import {
|
import {
|
||||||
AppError,
|
AppError,
|
||||||
ConfigError,
|
ConfigError,
|
||||||
@@ -6,7 +8,9 @@ import {
|
|||||||
NotFoundError,
|
NotFoundError,
|
||||||
UnauthorizedError,
|
UnauthorizedError,
|
||||||
ValidationError,
|
ValidationError,
|
||||||
} from "@bete/shared/errors";
|
} from "../src/shared/errors/index.js";
|
||||||
|
// ─── Backend middleware ──────────────────────────────────────────────────────
|
||||||
|
import { asyncHandler, requireParam } from "../src/shared/middlewares/index.js";
|
||||||
// ─── Shared utilities ─────────────────────────────────────────────────────────
|
// ─── Shared utilities ─────────────────────────────────────────────────────────
|
||||||
import {
|
import {
|
||||||
decodeCursor,
|
decodeCursor,
|
||||||
@@ -14,11 +18,7 @@ import {
|
|||||||
encodeCursor,
|
encodeCursor,
|
||||||
pageResult,
|
pageResult,
|
||||||
retryWithBackoff,
|
retryWithBackoff,
|
||||||
} from "@bete/shared/utils";
|
} from "../src/shared/utils/index.js";
|
||||||
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
||||||
|
|
||||||
// ─── Backend middleware ──────────────────────────────────────────────────────
|
|
||||||
import { asyncHandler, requireParam } from "../src/shared/middlewares/index.js";
|
|
||||||
|
|
||||||
// ═══════════════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════════════
|
||||||
// 1. AppError / Error Hierarchy Tests
|
// 1. AppError / Error Hierarchy Tests
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
|
import { fileURLToPath } from "node:url";
|
||||||
import { defineConfig } from "vitest/config";
|
import { defineConfig } from "vitest/config";
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
"@": fileURLToPath(new URL("./src", import.meta.url)),
|
||||||
|
},
|
||||||
|
},
|
||||||
test: {
|
test: {
|
||||||
globals: true,
|
globals: true,
|
||||||
environment: "node",
|
environment: "node",
|
||||||
include: ["src/**/*.test.ts"],
|
include: ["src/**/*.test.ts", "tests/**/*.test.ts"],
|
||||||
testTimeout: 15000,
|
testTimeout: 15000,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { ConfigError, DatabaseError } from "@/shared/errors/index";
|
|
||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import { Client } from "discord.js-selfbot-v13";
|
import { Client } from "discord.js-selfbot-v13";
|
||||||
import { inArray, lt } from "drizzle-orm";
|
import { inArray, lt } from "drizzle-orm";
|
||||||
import type { NodePgDatabase } from "drizzle-orm/node-postgres";
|
import type { NodePgDatabase } from "drizzle-orm/node-postgres";
|
||||||
|
import { ConfigError, DatabaseError } from "@/shared/errors/index";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { startPendingAIAnalysisWorker } from "../modules/ai-moderation/aiAnalyzer.js";
|
import { startPendingAIAnalysisWorker } from "../modules/ai-moderation/aiAnalyzer.js";
|
||||||
import { registerChannelTopicCapture } from "../modules/channel-topic/index.js";
|
import { registerChannelTopicCapture } from "../modules/channel-topic/index.js";
|
||||||
import { CommandHandler } from "../modules/command-handler/commandHandler.js";
|
import { CommandHandler } from "../modules/command-handler/commandHandler.js";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import { inArray, lt } from "drizzle-orm";
|
import { inArray, lt } from "drizzle-orm";
|
||||||
import type { NodePgDatabase } from "drizzle-orm/node-postgres";
|
import type { NodePgDatabase } from "drizzle-orm/node-postgres";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { config } from "../shared/config/config.js";
|
import { config } from "../shared/config/config.js";
|
||||||
import { getDatabase } from "../shared/database/drizzle.js";
|
import { getDatabase } from "../shared/database/drizzle.js";
|
||||||
import type * as schema from "../shared/database/schema.js";
|
import type * as schema from "../shared/database/schema.js";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Client } from "discord.js-selfbot-v13";
|
import type { Client } from "discord.js-selfbot-v13";
|
||||||
|
import type { createChildLogger } from "@/shared/logger/index";
|
||||||
import type { CommandHandler } from "../modules/command-handler/commandHandler.js";
|
import type { CommandHandler } from "../modules/command-handler/commandHandler.js";
|
||||||
import type { EventBroadcaster } from "../modules/event-broadcaster/index.js";
|
import type { EventBroadcaster } from "../modules/event-broadcaster/index.js";
|
||||||
import type { stopMetricsServer } from "../modules/gateway-metrics/index.js";
|
import type { stopMetricsServer } from "../modules/gateway-metrics/index.js";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Guild } from "discord.js-selfbot-v13";
|
import type { Guild } from "discord.js-selfbot-v13";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import type { MessageRecord } from "../message-capture/types.js";
|
import type { MessageRecord } from "../message-capture/types.js";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Client, PermissionString } from "discord.js-selfbot-v13";
|
import type { Client, PermissionString } from "discord.js-selfbot-v13";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import { messageStore } from "../message-capture/messageStore.js";
|
import { messageStore } from "../message-capture/messageStore.js";
|
||||||
import type { MessageRecord } from "../message-capture/types.js";
|
import type { MessageRecord } from "../message-capture/types.js";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Client } from "discord.js-selfbot-v13";
|
import type { Client } from "discord.js-selfbot-v13";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import type { MessageRecord } from "../message-capture/types.js";
|
import type { MessageRecord } from "../message-capture/types.js";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import { eq } from "drizzle-orm";
|
import { eq } from "drizzle-orm";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { getDatabase } from "../../shared/database/drizzle.js";
|
import { getDatabase } from "../../shared/database/drizzle.js";
|
||||||
import {
|
import {
|
||||||
type ChannelCulture,
|
type ChannelCulture,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import { encoding_for_model as encodingForModel } from "tiktoken";
|
import { encoding_for_model as encodingForModel } from "tiktoken";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import {
|
import {
|
||||||
formatMediaEvidenceForPrompt,
|
formatMediaEvidenceForPrompt,
|
||||||
renderDiscordMentions,
|
renderDiscordMentions,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import { LRUCache } from "lru-cache";
|
import { LRUCache } from "lru-cache";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import { LAST_ERROR } from "./moderationState.js";
|
import { LAST_ERROR } from "./moderationState.js";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import { and, desc, eq, sql } from "drizzle-orm";
|
import { and, desc, eq, sql } from "drizzle-orm";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import { getDatabase } from "../../shared/database/drizzle.js";
|
import { getDatabase } from "../../shared/database/drizzle.js";
|
||||||
import { messagesTable } from "../../shared/database/schema.js";
|
import { messagesTable } from "../../shared/database/schema.js";
|
||||||
|
|||||||
@@ -27,7 +27,16 @@ export function sanitizeDiscordTokens(content: string): string {
|
|||||||
if (!content.includes("<")) return content;
|
if (!content.includes("<")) return content;
|
||||||
return content.replace(
|
return content.replace(
|
||||||
DISCORD_TOKEN_RE,
|
DISCORD_TOKEN_RE,
|
||||||
(_full, emojiName, _emojiId, _userId, _roleId, _channelId, _time, _style) => {
|
(
|
||||||
|
_full,
|
||||||
|
emojiName,
|
||||||
|
_emojiId,
|
||||||
|
_userId,
|
||||||
|
_roleId,
|
||||||
|
_channelId,
|
||||||
|
_time,
|
||||||
|
_style,
|
||||||
|
) => {
|
||||||
if (emojiName) return `[emoji:${emojiName}]`;
|
if (emojiName) return `[emoji:${emojiName}]`;
|
||||||
// Capture groups tell us which alternative matched by position:
|
// Capture groups tell us which alternative matched by position:
|
||||||
// 3=user, 4=role, 5=channel, 6=time
|
// 3=user, 4=role, 5=channel, 6=time
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
export { startPendingAIAnalysisWorker } from "./aiAnalyzer.js";
|
|
||||||
export { runModerationAnalysis } from "./moderationOrchestrator.js";
|
|
||||||
export { buildSystemPrompt } from "./moderationPrompt.js";
|
|
||||||
export { sanitizeDiscordTokens } from "./discordTokens.js";
|
|
||||||
|
|
||||||
// ── Single-pass LLM pipeline exports ─────────────────────────────────────
|
// ── Single-pass LLM pipeline exports ─────────────────────────────────────
|
||||||
export type {
|
export type {
|
||||||
AnalysisInput,
|
AnalysisInput,
|
||||||
AnalysisResult,
|
AnalysisResult,
|
||||||
WorkerConfig,
|
|
||||||
MessageBatch,
|
MessageBatch,
|
||||||
|
WorkerConfig,
|
||||||
} from "./ai-analysis-worker.js";
|
} from "./ai-analysis-worker.js";
|
||||||
|
export { startPendingAIAnalysisWorker } from "./aiAnalyzer.js";
|
||||||
|
export { sanitizeDiscordTokens } from "./discordTokens.js";
|
||||||
|
export { runModerationAnalysis } from "./moderationOrchestrator.js";
|
||||||
|
export { buildSystemPrompt } from "./moderationPrompt.js";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import { LRUCache } from "lru-cache";
|
import { LRUCache } from "lru-cache";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import { messageStore } from "../message-capture/messageStore.js";
|
import { messageStore } from "../message-capture/messageStore.js";
|
||||||
import type {
|
import type {
|
||||||
@@ -99,9 +99,7 @@ async function processIndividualFallback(
|
|||||||
// retryable error — the recovery worker picks it up later. Producing a
|
// retryable error — the recovery worker picks it up later. Producing a
|
||||||
// regex/wordlist verdict here would reintroduce false positives.
|
// regex/wordlist verdict here would reintroduce false positives.
|
||||||
if (!analysisResult) {
|
if (!analysisResult) {
|
||||||
throw new Error(
|
throw new Error(`LLM analysis failed for message ${messageId}`);
|
||||||
`LLM analysis failed for message ${messageId}`,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Main thread: DB writes + broadcast
|
// Main thread: DB writes + broadcast
|
||||||
|
|||||||
@@ -5,9 +5,9 @@
|
|||||||
* Used by both mediaAnalysisClient.ts and moderationOrchestrator.ts.
|
* Used by both mediaAnalysisClient.ts and moderationOrchestrator.ts.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { renderDiscordMentions } from "../message-capture/messageMetadata.js";
|
||||||
import { messageStore } from "../message-capture/messageStore.js";
|
import { messageStore } from "../message-capture/messageStore.js";
|
||||||
import type { MessageRecord } from "../message-capture/types.js";
|
import type { MessageRecord } from "../message-capture/types.js";
|
||||||
import { renderDiscordMentions } from "../message-capture/messageMetadata.js";
|
|
||||||
import { sanitizeDiscordTokens } from "./discordTokens.js";
|
import { sanitizeDiscordTokens } from "./discordTokens.js";
|
||||||
|
|
||||||
/** Simple XML-escaping for content text. */
|
/** Simple XML-escaping for content text. */
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { z } from "zod";
|
import type { z } from "zod";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import type { AnalysisResult } from "../message-capture/types.js";
|
import type { AnalysisResult } from "../message-capture/types.js";
|
||||||
import type {
|
import type {
|
||||||
RecommendedActionSchema,
|
RecommendedActionSchema,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
|
|
||||||
const log = createChildLogger("moderationSchemas");
|
const log = createChildLogger("moderationSchemas");
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import type { Client } from "discord.js-selfbot-v13";
|
import type { Client } from "discord.js-selfbot-v13";
|
||||||
import { LRUCache } from "lru-cache";
|
import { LRUCache } from "lru-cache";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import type { EventBroadcaster } from "../event-broadcaster/index.js";
|
import type { EventBroadcaster } from "../event-broadcaster/index.js";
|
||||||
import type { MessageRecord } from "../message-capture/types.js";
|
import type { MessageRecord } from "../message-capture/types.js";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
import Redis from "ioredis";
|
||||||
import { createChildLogger } from "@/shared/logger/index";
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { createAbortControllerWithTimeout } from "@/shared/utils/index";
|
import { createAbortControllerWithTimeout } from "@/shared/utils/index";
|
||||||
import Redis from "ioredis";
|
|
||||||
|
|
||||||
const log = createChildLogger("searxng-search");
|
const log = createChildLogger("searxng-search");
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import { and, desc, eq, sql } from "drizzle-orm";
|
import { and, desc, eq, sql } from "drizzle-orm";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import { getDatabase } from "../../shared/database/drizzle.js";
|
import { getDatabase } from "../../shared/database/drizzle.js";
|
||||||
import { messagesTable } from "../../shared/database/schema.js";
|
import { messagesTable } from "../../shared/database/schema.js";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { createChildLogger } from "@/shared/logger/index";
|
|
||||||
import { eq } from "drizzle-orm";
|
import { eq } from "drizzle-orm";
|
||||||
|
import { createChildLogger } from "@/shared/logger/index";
|
||||||
import { getDatabase } from "../../shared/database/drizzle.js";
|
import { getDatabase } from "../../shared/database/drizzle.js";
|
||||||
import {
|
import {
|
||||||
type UserProfile,
|
type UserProfile,
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user