/** * 개발: 채널 ID 입장 + 치지직 로그인 모두 허용 * 릴리즈(production): 치지직 로그인(세션)으로만 채널 룸 입장 * * 강제 오버라이드: * - DRINKMARBLE_ALLOW_CHANNEL_ID_JOIN=true → production에서도 채널 ID 입장 허용 * - DRINKMARBLE_REQUIRE_CHZZK_LOGIN=true → development에서도 로그인 필수 */ export function allowChannelIdJoin(): boolean { if (process.env.DRINKMARBLE_REQUIRE_CHZZK_LOGIN === 'true') return false; if (process.env.DRINKMARBLE_ALLOW_CHANNEL_ID_JOIN === 'true') return true; return process.env.NODE_ENV !== 'production'; } export function requireChzzkLoginForChannelRooms(): boolean { return !allowChannelIdJoin(); } export function isChzzkOAuthConfigured(): boolean { return Boolean( process.env.CHZZK_CLIENT_ID?.trim() && process.env.CHZZK_CLIENT_SECRET?.trim() && process.env.CHZZK_REDIRECT_URI?.trim(), ); } export function getChzzkOAuthConfig() { const clientId = process.env.CHZZK_CLIENT_ID?.trim() || ''; const clientSecret = process.env.CHZZK_CLIENT_SECRET?.trim() || ''; const redirectUri = process.env.CHZZK_REDIRECT_URI?.trim() || ''; if (!clientId || !clientSecret || !redirectUri) { throw new Error( '치지직 OAuth 환경변수(CHZZK_CLIENT_ID, CHZZK_CLIENT_SECRET, CHZZK_REDIRECT_URI)가 필요합니다.', ); } return { clientId, clientSecret, redirectUri }; } export function getAuthSessionSecret(): string { const explicit = process.env.AUTH_SESSION_SECRET?.trim(); if (explicit) return explicit; const fallback = process.env.CHZZK_CLIENT_SECRET?.trim(); if (fallback) return fallback; // 개발 전용 폴백 (production에서는 OAuth 설정이 있어야 함) return 'drinkmarble-dev-session-secret'; }