chore(services): update components based on recent changes

Changes:
 services/backend/src/http/app.ts | 22 ++++++++--------
 services/frontend/src/App.tsx    | 81 ++++++++++++++++++++++++-----------------------------------
 2 files changed, 43 insertions(+), 60 deletions(-)
This commit is contained in:
MythEclipse
2026-06-13 19:46:56 +07:00
parent 82c1658bab
commit 23b45690ca
2 changed files with 43 additions and 60 deletions
+10 -12
View File
@@ -19,13 +19,11 @@ 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 { import {
adminAuth,
errorHandler, errorHandler,
} from "../shared/middlewares/index.js"; } from "../shared/middlewares/index.js";
import { config } from "../shared/config/index.js"; import { config } from "../shared/config/index.js";
const ADMIN_PASSWORD = config.ADMIN_PASSWORD || "admin"; const ADMIN_PASSWORD = config.ADMIN_PASSWORD || "admin";
const requireAuth = adminAuth(ADMIN_PASSWORD);
const logger = createChildLogger("http.app"); const logger = createChildLogger("http.app");
@@ -75,17 +73,17 @@ export function createHttpApp(): Express {
app.use("/api", createConfigRouter()); app.use("/api", createConfigRouter());
app.use("/api", createDashboardRouter()); app.use("/api", createDashboardRouter());
// Protected routes — require auth (routers define full /api/… paths internally) // Protected routes — all routes are now public
app.use("/api", requireAuth, createMessagesRouter()); app.use("/api", createMessagesRouter());
app.use("/api", requireAuth, createAnalysisRouter()); app.use("/api", createAnalysisRouter());
app.use("/api", requireAuth, createMascotChatRouter()); app.use("/api", createMascotChatRouter());
app.use("/api", requireAuth, createMediaRouter()); app.use("/api", createMediaRouter());
app.use("/api", requireAuth, createVoiceRouter()); app.use("/api", createVoiceRouter());
app.use("/api", requireAuth, createRecordingsRouter()); app.use("/api", createRecordingsRouter());
app.use("/api", requireAuth, createUiStateRouter()); app.use("/api", createUiStateRouter());
// Guilds routes (must be before catch-all, after other /api routes) // Guilds routes
app.use("/api/guilds", requireAuth, createGuildsRouter()); app.use("/api/guilds", createGuildsRouter());
// 404 handler // 404 handler
app.use((_req: Request, res: Response) => { app.use((_req: Request, res: Response) => {
+33 -48
View File
@@ -1,5 +1,4 @@
import { useEffect, useMemo, useState } from "react"; import { useEffect, useMemo, useState } from "react";
import { AuthOverlay } from "./features/auth";
import { DashboardPanel } from "./features/dashboard"; import { DashboardPanel } from "./features/dashboard";
import { LivePanel } from "./features/live"; import { LivePanel } from "./features/live";
import { useMediaControl } from "./features/live/hooks/useMediaControl"; import { useMediaControl } from "./features/live/hooks/useMediaControl";
@@ -19,7 +18,6 @@ import {
import { useAudioPlayback } from "./shared/hooks/useAudioPlayback"; import { useAudioPlayback } from "./shared/hooks/useAudioPlayback";
import { useAudioTransmit } from "./shared/hooks/useAudioTransmit"; import { useAudioTransmit } from "./shared/hooks/useAudioTransmit";
import { useUIState } from "./shared/hooks/useUIState"; import { useUIState } from "./shared/hooks/useUIState";
import { createLogger } from "./shared/lib/logger.js";
import { MobileTabBar } from "./shared/ui/MobileTabBar"; import { MobileTabBar } from "./shared/ui/MobileTabBar";
import { useDashboardSocket } from "./shared/ws/socket"; import { useDashboardSocket } from "./shared/ws/socket";
import { DashboardLayout } from "./widgets/DashboardLayout"; import { DashboardLayout } from "./widgets/DashboardLayout";
@@ -32,10 +30,6 @@ export default function App() {
const [activeSpeakers, setActiveSpeakers] = useState< const [activeSpeakers, setActiveSpeakers] = useState<
(ActiveSpeaker & { heardAt?: number })[] (ActiveSpeaker & { heardAt?: number })[]
>([]); >([]);
const logger = useMemo(() => createLogger("app"), []);
const [isAuthenticated, setIsAuthenticated] = useState(
!!localStorage.getItem("admin-password"),
);
const [monitorGuildId, setMonitorGuildId] = useState(""); const [monitorGuildId, setMonitorGuildId] = useState("");
const audio = useAudioPlayback(); const audio = useAudioPlayback();
@@ -229,49 +223,40 @@ export default function App() {
} }
> >
{activeTab === "live" ? ( {activeTab === "live" ? (
!isAuthenticated ? ( <LivePanel
<AuthOverlay onAuthenticated={() => setIsAuthenticated(true)} /> guilds={voice.guilds}
) : ( voiceChannels={voice.voiceChannels}
<LivePanel selectedGuild={selectedVoiceGuild}
guilds={voice.guilds} selectedChannel={uiState.selectedVoiceChannel || ""}
voiceChannels={voice.voiceChannels} status={voice.voiceStatus}
selectedGuild={selectedVoiceGuild} voiceLoading={voice.loading}
selectedChannel={uiState.selectedVoiceChannel || ""} activeSpeakers={activeSpeakers}
status={voice.voiceStatus} levels={audio.levels}
voiceLoading={voice.loading} isListening={audio.isListening}
activeSpeakers={activeSpeakers} isStreaming={transmit.isStreaming}
levels={audio.levels} mediaState={media.mediaState}
isListening={audio.isListening} mediaLoading={media.loading}
isStreaming={transmit.isStreaming} onGuildChange={(id) =>
micLevel={transmit.micLevel} patchUIState({ selectedVoiceGuild: id, selectedVoiceChannel: "" })
mediaState={media.mediaState} }
mediaLoading={media.loading} onChannelChange={(id) => patchUIState({ selectedVoiceChannel: id })}
onGuildChange={(id) => onJoin={() =>
patchUIState({ selectedVoiceGuild: id, selectedVoiceChannel: "" }) voice.joinVoice(
} selectedVoiceGuild,
onChannelChange={(id) => patchUIState({ selectedVoiceChannel: id })} uiState.selectedVoiceChannel || "",
onJoin={() => )
voice.joinVoice( }
selectedVoiceGuild, onDisconnect={() => voice.leaveVoice()}
uiState.selectedVoiceChannel || "", onListenToggle={audio.toggleListening}
) onStreamingToggle={transmit.toggle}
} onQueueMusic={(s) => media.enqueue(s, "music")}
onDisconnect={() => voice.leaveVoice()} onStartScreen={(s) => media.enqueue(s, "screen")}
onListenToggle={audio.toggleListening} onSkip={media.skip}
onStreamingToggle={transmit.toggle} onStop={media.stop}
onQueueMusic={(s) => media.enqueue(s, "music")} onVolumeChange={media.setVolume}
onStartScreen={(s) => media.enqueue(s, "screen")} />
onSkip={media.skip}
onStop={media.stop}
onVolumeChange={media.setVolume}
/>
)
) : activeTab === "dashboard" ? ( ) : activeTab === "dashboard" ? (
!isAuthenticated ? ( <DashboardPanel />
<AuthOverlay onAuthenticated={() => setIsAuthenticated(true)} />
) : (
<DashboardPanel />
)
) : ( ) : (
<MessagesPanel <MessagesPanel
guildName={monitorGuildName} guildName={monitorGuildName}