Files
yn/scripts/dev-proxy.ts
T

25 lines
1.0 KiB
TypeScript

import type { ProxyOptions } from 'vite'
import { createRequestOriginGuard } from '../src/main/server/request-origin'
export function createDevProxy (target: string): ProxyOptions {
const backend = new URL(target)
return {
target,
changeOrigin: true,
// Vite runs bypass before both HTTP proxying and WebSocket upgrades. Validate
// first: blindly rewriting Origin would turn Vite into a cross-site gateway.
bypass (req) {
const { localAddress, localPort } = req.socket
if (!localAddress || !localPort) return false
const checkOrigin = createRequestOriginGuard(localPort, localAddress)
if (!checkOrigin(req.headers, false, req.headers.upgrade?.toLowerCase() === 'websocket')) return false
if (req.headers.origin?.startsWith('http')) req.headers.origin = backend.origin
if (req.headers.referer?.startsWith('http')) {
const referer = new URL(req.headers.referer)
req.headers.referer = backend.origin + referer.pathname + referer.search
}
}
}
}