chore(auto): task completed - unknown
This commit is contained in:
@@ -18,7 +18,14 @@ import { createRecordingsRouter } from "../modules/recordings/recordings.routes.
|
|||||||
import { createUiStateRouter } from "../modules/ui-state/ui-state.routes.js";
|
import { createUiStateRouter } from "../modules/ui-state/ui-state.routes.js";
|
||||||
import { createGuildsRouter } from "../modules/voice/guilds.routes.js";
|
import { createGuildsRouter } from "../modules/voice/guilds.routes.js";
|
||||||
import { createVoiceRouter } from "../modules/voice/voice.routes.js";
|
import { createVoiceRouter } from "../modules/voice/voice.routes.js";
|
||||||
import { errorHandler } from "../shared/middlewares/index.js";
|
import {
|
||||||
|
adminAuth,
|
||||||
|
errorHandler,
|
||||||
|
} from "../shared/middlewares/index.js";
|
||||||
|
import { config } from "../shared/config/index.js";
|
||||||
|
|
||||||
|
const ADMIN_PASSWORD = config.ADMIN_PASSWORD || "admin";
|
||||||
|
const requireAuth = adminAuth(ADMIN_PASSWORD);
|
||||||
|
|
||||||
const logger = createChildLogger("http.app");
|
const logger = createChildLogger("http.app");
|
||||||
|
|
||||||
@@ -61,20 +68,24 @@ export function createHttpApp(): Express {
|
|||||||
// Health check (no auth required)
|
// Health check (no auth required)
|
||||||
app.use("/api", createHealthRouter());
|
app.use("/api", createHealthRouter());
|
||||||
|
|
||||||
// API routes
|
// Auth (no auth required)
|
||||||
app.use("/api", createAuthRouter());
|
app.use("/api", createAuthRouter());
|
||||||
|
|
||||||
|
// Public read-only endpoints
|
||||||
app.use("/api", createConfigRouter());
|
app.use("/api", createConfigRouter());
|
||||||
app.use("/api", createDashboardRouter());
|
app.use("/api", createDashboardRouter());
|
||||||
app.use("/api", createMessagesRouter());
|
|
||||||
app.use("/api", createAnalysisRouter());
|
// Protected routes — require auth (routers define full /api/… paths internally)
|
||||||
app.use("/api", createMascotChatRouter());
|
app.use("/api", requireAuth, createMessagesRouter());
|
||||||
app.use("/api", createMediaRouter());
|
app.use("/api", requireAuth, createAnalysisRouter());
|
||||||
app.use("/api", createVoiceRouter());
|
app.use("/api", requireAuth, createMascotChatRouter());
|
||||||
app.use("/api", createRecordingsRouter());
|
app.use("/api", requireAuth, createMediaRouter());
|
||||||
app.use("/api", createUiStateRouter());
|
app.use("/api", requireAuth, createVoiceRouter());
|
||||||
|
app.use("/api", requireAuth, createRecordingsRouter());
|
||||||
|
app.use("/api", requireAuth, createUiStateRouter());
|
||||||
|
|
||||||
// Guilds routes (must be before catch-all, after other /api routes)
|
// Guilds routes (must be before catch-all, after other /api routes)
|
||||||
app.use("/api/guilds", createGuildsRouter());
|
app.use("/api/guilds", requireAuth, createGuildsRouter());
|
||||||
|
|
||||||
// 404 handler
|
// 404 handler
|
||||||
app.use((_req: Request, res: Response) => {
|
app.use((_req: Request, res: Response) => {
|
||||||
|
|||||||
@@ -2,12 +2,7 @@ import { createChildLogger } from "@bete/shared/logger";
|
|||||||
import type { Request, Response } from "express";
|
import type { Request, Response } from "express";
|
||||||
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 {
|
import { connectVoice, disconnectVoice, getVoiceStatus } from "./voice.service.js";
|
||||||
connectVoice,
|
|
||||||
disconnectVoice,
|
|
||||||
getVoiceChannels,
|
|
||||||
getVoiceStatus,
|
|
||||||
} from "./voice.service.js";
|
|
||||||
|
|
||||||
const logger = createChildLogger("voice.controller");
|
const logger = createChildLogger("voice.controller");
|
||||||
|
|
||||||
@@ -48,15 +43,6 @@ export const handleDisconnectVoice = asyncHandler(
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
export const handleGetVoiceChannels = asyncHandler(
|
|
||||||
async (req: Request, res: Response) => {
|
|
||||||
const guildId = asString(req.params.guildId);
|
|
||||||
logger.debug({ guildId }, "Fetching voice channels");
|
|
||||||
const channels = await getVoiceChannels(guildId);
|
|
||||||
res.json(channels);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
export const handleVoiceCommand = asyncHandler(
|
export const handleVoiceCommand = asyncHandler(
|
||||||
async (req: Request, res: Response) => {
|
async (req: Request, res: Response) => {
|
||||||
const command = asString(req.body.command);
|
const command = asString(req.body.command);
|
||||||
|
|||||||
@@ -10,14 +10,14 @@ import {
|
|||||||
export function createVoiceRouter(): Router {
|
export function createVoiceRouter(): Router {
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
// GET /api/status
|
// GET /api/voice/status
|
||||||
router.get("/status", handleGetVoiceStatus);
|
router.get("/voice/status", handleGetVoiceStatus);
|
||||||
|
|
||||||
// POST /api/connect
|
// POST /api/voice/connect
|
||||||
router.post("/connect", handleConnectVoice);
|
router.post("/voice/connect", handleConnectVoice);
|
||||||
|
|
||||||
// POST /api/disconnect
|
// POST /api/voice/disconnect
|
||||||
router.post("/disconnect", handleDisconnectVoice);
|
router.post("/voice/disconnect", handleDisconnectVoice);
|
||||||
|
|
||||||
// POST /api/voice/command — send arbitrary voice command (transmit start/stop)
|
// POST /api/voice/command — send arbitrary voice command (transmit start/stop)
|
||||||
router.post("/voice/command", handleVoiceCommand);
|
router.post("/voice/command", handleVoiceCommand);
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import {
|
|||||||
DISCORD_THREAD_DELETED,
|
DISCORD_THREAD_DELETED,
|
||||||
DISCORD_THREAD_UPDATED,
|
DISCORD_THREAD_UPDATED,
|
||||||
DISCORD_VOICE_ACTIVE_USER,
|
DISCORD_VOICE_ACTIVE_USER,
|
||||||
|
DISCORD_VOICE_ANALYZED,
|
||||||
DISCORD_VOICE_PCM,
|
DISCORD_VOICE_PCM,
|
||||||
DISCORD_VOICE_STARTED,
|
DISCORD_VOICE_STARTED,
|
||||||
DISCORD_VOICE_STOPPED,
|
DISCORD_VOICE_STOPPED,
|
||||||
@@ -49,6 +50,7 @@ const SUBSCRIPTIONS: ChannelMapping[] = [
|
|||||||
},
|
},
|
||||||
{ channel: DISCORD_VOICE_ACTIVE_USER, eventType: "voice_active_user" },
|
{ channel: DISCORD_VOICE_ACTIVE_USER, eventType: "voice_active_user" },
|
||||||
{ channel: DISCORD_VOICE_PCM, eventType: "voice_pcm_data" },
|
{ channel: DISCORD_VOICE_PCM, eventType: "voice_pcm_data" },
|
||||||
|
{ channel: DISCORD_VOICE_ANALYZED, eventType: "voice_analyzed" },
|
||||||
{ channel: DISCORD_REACTION_ADDED, eventType: "reaction_added" },
|
{ channel: DISCORD_REACTION_ADDED, eventType: "reaction_added" },
|
||||||
{ channel: DISCORD_REACTION_REMOVED, eventType: "reaction_removed" },
|
{ channel: DISCORD_REACTION_REMOVED, eventType: "reaction_removed" },
|
||||||
{ channel: DISCORD_THREAD_CREATED, eventType: "thread_created" },
|
{ channel: DISCORD_THREAD_CREATED, eventType: "thread_created" },
|
||||||
|
|||||||
@@ -187,21 +187,21 @@ export function getTextChannels(guildId: string): Promise<Channel[]> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getVoiceStatus(): Promise<VoiceStatus> {
|
export function getVoiceStatus(): Promise<VoiceStatus> {
|
||||||
return request<VoiceStatus>("/api/status");
|
return request<VoiceStatus>("/api/voice/status");
|
||||||
}
|
}
|
||||||
|
|
||||||
export function connectVoice(
|
export function connectVoice(
|
||||||
guildId: string,
|
guildId: string,
|
||||||
channelId: string,
|
channelId: string,
|
||||||
): Promise<VoiceStatus> {
|
): Promise<VoiceStatus> {
|
||||||
return request<VoiceStatus>("/api/connect", {
|
return request<VoiceStatus>("/api/voice/connect", {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
body: JSON.stringify({ guildId, channelId }),
|
body: JSON.stringify({ guildId, channelId }),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function disconnectVoice(): Promise<VoiceStatus> {
|
export function disconnectVoice(): Promise<VoiceStatus> {
|
||||||
return request<VoiceStatus>("/api/disconnect", { method: "POST" });
|
return request<VoiceStatus>("/api/voice/disconnect", { method: "POST" });
|
||||||
}
|
}
|
||||||
|
|
||||||
// ─── Media ───────────────────────────────────────────────────────────────────
|
// ─── Media ───────────────────────────────────────────────────────────────────
|
||||||
|
|||||||
Reference in New Issue
Block a user