import { getHeader } from 'h3' import { useRuntimeConfig, useRequestEvent } from 'nuxt/app' /** * 게임 별칭을 추출하는 유틸리티 함수 * @param host 호스트 문자열 * @param baseDomain 기본 도메인 * @returns 게임 별칭 또는 빈 문자열 */ const extractGameAliasFromHost = (host: string, baseDomain: string): string => { if (!host || !host.includes(baseDomain)) { return '' } const subdomain = host.split(':')[0] return subdomain && subdomain !== 'www' ? subdomain : '' } /** * 서버 사이드에서 게임 별칭을 가져오는 함수 * @param baseDomain 기본 도메인 * @returns 게임 별칭 또는 빈 문자열 */ const getGameAliasFromServer = (baseDomain: string): string => { try { const event = useRequestEvent() if (!event) { return '' } // 미들웨어에서 설정한 gameAlias가 있다면 우선 사용 if (event.context.gameAlias) { return event.context.gameAlias } const host = getHeader(event, 'host') || '' return extractGameAliasFromHost(host, baseDomain) } catch (error) { // eslint-disable-next-line no-console console.error('useGetGameAlias server error:', error) return '' } } /** * 클라이언트 사이드에서 게임 별칭을 가져오는 함수 * @param baseDomain 기본 도메인 * @returns 게임 별칭 또는 빈 문자열 */ const getGameAliasFromClient = (baseDomain: string): string => { try { const host = window.location.host return extractGameAliasFromHost(host, baseDomain) } catch (error) { // eslint-disable-next-line no-console console.error('useGetGameAlias client error:', error) return '' } } /** * 게임 별칭을 가져오는 컴포저블 함수 * 서버와 클라이언트 환경에서 모두 동작 * @returns 게임 별칭 문자열 */ export const useGetGameAlias = (): string => { const config = useRuntimeConfig() const baseDomain = (config.public.baseDomain || '.onstove.com') as string if (import.meta.client) { return getGameAliasFromClient(baseDomain) } return getGameAliasFromServer(baseDomain) }