65 lines
2.5 KiB
TypeScript
65 lines
2.5 KiB
TypeScript
import { defineConfig, createLogger } from 'vite';
|
|
import react from '@vitejs/plugin-react';
|
|
|
|
// WebSocket proxy 재연결/종료 시 발생하는 ECONNRESET·EPIPE 는 정상 TCP 이벤트이므로 로그 억제
|
|
const SUPPRESS = ['ECONNRESET', 'EPIPE', 'ws proxy socket error'];
|
|
const logger = createLogger();
|
|
const _origError = logger.error.bind(logger);
|
|
logger.error = (msg, opts) => {
|
|
if (SUPPRESS.some(s => msg.includes(s))) return;
|
|
_origError(msg, opts);
|
|
};
|
|
|
|
export default defineConfig({
|
|
customLogger: logger,
|
|
plugins: [react()],
|
|
resolve: {
|
|
dedupe: ['lightweight-charts'],
|
|
},
|
|
optimizeDeps: {
|
|
include: ['react', 'react-dom'],
|
|
},
|
|
server: {
|
|
proxy: {
|
|
// ── 모바일 APK 정보/다운로드 → exdev (로컬 QR·PC 다운로드가 exdev APK 사용) ──
|
|
'/api/mobile-app': {
|
|
target: process.env.VITE_MOBILE_APP_PROXY_TARGET || 'http://exdev.co.kr',
|
|
changeOrigin: true,
|
|
secure: true,
|
|
},
|
|
|
|
// ── GoldenChart Backend API 프록시 ───────────────────────────
|
|
'/api': {
|
|
target: 'http://localhost:8080',
|
|
changeOrigin: true,
|
|
ws: true, // STOMP SockJS (/api/ws/trading)
|
|
},
|
|
|
|
// ── REST API 프록시 (CORS 우회) ──────────────────────────────
|
|
'/upbit-api': {
|
|
target: 'https://api.upbit.com',
|
|
changeOrigin: true,
|
|
rewrite: (path) => path.replace(/^\/upbit-api/, ''),
|
|
headers: { Accept: 'application/json' },
|
|
},
|
|
|
|
// ── WebSocket 프록시 (Origin 차단 우회) ──────────────────────
|
|
// 브라우저 → ws://localhost:PORT/upbit-ws → wss://api.upbit.com/websocket/v1
|
|
'/upbit-ws': {
|
|
target: 'wss://api.upbit.com',
|
|
changeOrigin: true,
|
|
ws: true,
|
|
rewrite: () => '/websocket/v1',
|
|
// ECONNRESET 은 Upbit 서버가 연결을 정상 종료할 때 발생하는 TCP 이벤트
|
|
// (페이지 새로고침/재연결 시 정상 현상) → 로그 억제
|
|
configure: (proxy) => {
|
|
proxy.on('error', (err: Error & { code?: string }) => {
|
|
if (err.code === 'ECONNRESET' || err.code === 'EPIPE') return; // 정상 종료 → 무시
|
|
console.error('[upbit-ws proxy]', err.message);
|
|
});
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|