77 lines
2.1 KiB
TypeScript
77 lines
2.1 KiB
TypeScript
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)
|
|
}
|