import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import { fileURLToPath, URL } from 'node:url' // 豆包 ASR 鉴权信息(与 src/config/index.js 保持一致) const DOUBAO_APP_ID = '2542859186' const DOUBAO_ACCESS_TOKEN = 'a4h5fT3cVlBi82u93iEQlqT3c4MP6_8V' const DOUBAO_ASR_RESOURCE_ID = 'volc.bigasr.sauc.duration' // https://vite.dev/config/ export default defineConfig({ plugins: [vue()], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) } }, server: { host: '0.0.0.0', headers: { 'Cross-Origin-Opener-Policy': 'same-origin', 'Cross-Origin-Embedder-Policy': 'require-corp', }, proxy: { '/tts-api': { target: 'https://openspeech.bytedance.com', changeOrigin: true, rewrite: (path) => path.replace(/^\/tts-api/, '') }, '/ark-api': { target: 'https://ark.cn-beijing.volces.com', changeOrigin: true, rewrite: (path) => path.replace(/^\/ark-api/, '') }, '/dashscope-api': { target: 'https://dashscope.aliyuncs.com', changeOrigin: true, rewrite: (path) => path.replace(/^\/dashscope-api/, '') }, // ASR WebSocket 代理:在代理层注入鉴权 Header(浏览器 WS 不支持自定义 Header) '/asr-ws': { target: 'wss://openspeech.bytedance.com', changeOrigin: true, ws: true, rewrite: (path) => path.replace(/^\/asr-ws/, ''), configure: (proxy) => { proxy.on('proxyReqWs', (proxyReq) => { proxyReq.setHeader('X-Api-App-Key', DOUBAO_APP_ID) proxyReq.setHeader('X-Api-Access-Key', DOUBAO_ACCESS_TOKEN) proxyReq.setHeader('X-Api-Resource-Id', DOUBAO_ASR_RESOURCE_ID) proxyReq.setHeader('X-Api-Connect-Id', crypto.randomUUID()) }) } } } } })