[보안/인증] - 모든 player/queue API 라우트에 세션 가드 추가 (이전: /api/servers 만 보호) - NextAuth 환경변수 부팅 시점 검증, NEXTAUTH_SECRET 명시 - next.config.ts CSP/보안 헤더 추가, 잘못된 allowedDevOrigins 제거 - Redis 호스트 하드코딩 IP 제거(필수 env 로 강제) [안정성] - 봇 RPC 패턴(@/lib/api) 공용화: crypto.randomUUID requestId, JSON.parse 안전, EXPIRE 자동, 폴링 백오프 - SSE(@/lib/sse) 공용화: subscriber error 처리, JSON.parse 안전, 30초 keep-alive, abort/에러 정리 - pause API 양 끝(boolean) 정상화: 프론트 String() 캐스트 + 백엔드 .trim().toLowerCase() 비교 제거 - 봇 RedisClient: isPaused/index/seek/volume falsy 거부 → typeof 검사로 교체(0/false 정상 허용) [타입/품질] - next-auth 모듈 보강 → session.user.id, session.accessToken 타입 안전 - DiscordServer/Track/SearchTrack 공용 타입 도입, 컴포넌트 any 제거 - BigInt permissions 안전 검증(타입 가드) - Logger: NODE_ENV 게이트, error → stderr, ISO 기반 안전 timestamp - tsconfig target → ES2020 (BigInt 리터럴) [취약점] - next 16.2.2 → 16.2.4 (DoS/postcss XSS 패치) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
21 lines
651 B
TypeScript
21 lines
651 B
TypeScript
"use client";
|
|
import { ListMusic } from "lucide-react";
|
|
|
|
export default function LeftSidebar() {
|
|
return (
|
|
<aside className="w-60 bg-black p-6 flex flex-col gap-6">
|
|
<div className="flex items-center gap-2 text-neutral-400 font-medium">
|
|
<ListMusic size={20} />
|
|
<span>음악 봇 컨트롤</span>
|
|
</div>
|
|
|
|
<hr className="border-neutral-800" />
|
|
|
|
<p className="text-xs text-neutral-500 leading-relaxed">
|
|
상단 검색창에서 노래를 찾아 우측 대기열에 추가할 수 있습니다.
|
|
디스코드 음성 채널에 입장한 상태에서 사용해주세요.
|
|
</p>
|
|
</aside>
|
|
);
|
|
}
|