import { createApp } from 'vue'; import i18n from '@common/common/i18n'; import '@common/cluster-common/src/assets/css/style.css'; import '@common/common/styles/css/reset.css'; import App from './App.vue'; import router from './router'; import { createPinia } from 'pinia'; import VueDOMPurifyHTML from 'vue-dompurify-html'; import { useClusterInAppStore } from '@common/cluster-common'; import useErrorStore from '@common/common/stores/error'; // 에러 스토어 불러오기 import { setCookieForDay } from '@common/common/utils'; import Cookies from 'js-cookie'; const domPurifySettings = { default: { ALLOWED_TAGS: ['b', 'span', 'p', 'font'], ALLOWED_ATTR: ['color', 'class', 'style'], // onclick, onerror 등은 금지 FORBID_TAGS: ['style', 'img', 'iframe', 'svg', 'script'], FORBID_ATTR: ['onerror', 'onload', 'onclick'], }, }; // 쿠키 기반 전역 함수 정의 (window as any).setToken = (token: string) => { const errorStore = useErrorStore(); const clusterInAppStore = useClusterInAppStore(); if (!token) { const errorData = { errorType: 'GLOBAL_ERROR' as const, errorAction: 'GO_MAIN' as const, errorMessage: '일시적인 오류가 발생했습니다. 앱을 다시 실행해주세요.', }; errorStore.setError(errorData); } else { if (Cookies.get('tokenValue')) { Cookies.remove('tokenValue'); } setCookieForDay('tokenValue', token); clusterInAppStore.isReadyInAppWebView = true; } }; (window as any).receiveJsonData = (data: string) => { try { const errorStore = useErrorStore(); const clusterInAppStore = useClusterInAppStore(); const jsonData = JSON.parse(data); const { token, declareDateTime } = jsonData; if (!token) { const errorData = { errorType: 'GLOBAL_ERROR' as const, errorAction: 'GO_MAIN' as const, errorMessage: '일시적인 오류가 발생했습니다. 앱을 다시 실행해주세요.', }; errorStore.setError(errorData); } else { setCookieForDay('tokenValue', token); setCookieForDay('declareDateTimeValue', declareDateTime ?? ''); clusterInAppStore.isReadyInAppWebView = true; clusterInAppStore.setInitData(); } setCookieForDay('declareDateTimeValue', declareDateTime ?? ''); } catch (e) { console.error('receiveJsonData parse error', e); } }; // // 웹뷰 브릿지 코드 전역 함수 설정 // (window as any).setToken = setToken; // (window as any).receiveJsonData = receiveJsonData; const app = createApp(App); const pinia = createPinia(); app.use(router); app.use(pinia); app.use(i18n); app.use(VueDOMPurifyHTML, domPurifySettings); app.mount('#app');