This commit is contained in:
eric
2026-03-29 03:49:29 -05:00
parent 22061fb3c8
commit 7cab3f27b8
8 changed files with 99 additions and 17 deletions

View File

@@ -1,11 +1,12 @@
/**
* 将 HTTP API 根地址转为 WebSocket 根(用于 /android/scrcpy/ws
* next dev 下若未设置 NEXT_PUBLIC_API_URL浏览器会连到 :3000WebSocket 升级通常无法被中间件代理;
* 真流调试请设 NEXT_PUBLIC_API_URL 指向 uvicorn例如 http://127.0.0.1:8001
* next devHTTP 可走 middleware rewrite但 WebSocket 升级通常不会转发,故在常见 dev 端口直连 uvicorn与 middleware API_PROXY_TARGET 默认一致)。
*/
const DEFAULT_DEV_API_PORT = "8001";
export function httpApiBaseToWsBase(apiBase: string): string {
if (typeof window === "undefined") return "ws://127.0.0.1:8001";
if (typeof window === "undefined") return `ws://127.0.0.1:${DEFAULT_DEV_API_PORT}`;
const base = (apiBase || "").trim();
if (base) {
try {
@@ -16,6 +17,24 @@ export function httpApiBaseToWsBase(apiBase: string): string {
/* ignore */
}
}
const pub =
typeof process !== "undefined" && process.env.NEXT_PUBLIC_API_URL
? String(process.env.NEXT_PUBLIC_API_URL).trim()
: "";
if (pub) {
try {
const u = new URL(pub, window.location.href);
const proto = u.protocol === "https:" ? "wss:" : "ws:";
return `${proto}//${u.host}`;
} catch {
/* ignore */
}
}
const port = window.location.port;
if (port === "3000" || port === "3001") {
const h = window.location.hostname || "127.0.0.1";
return `ws://${h}:${DEFAULT_DEV_API_PORT}`;
}
const { protocol, host } = window.location;
const proto = protocol === "https:" ? "wss:" : "ws:";
return `${proto}//${host}`;