Files
agent-desktop/console/src/api/authHeaders.ts
T
Pine 729c7d86dc feat(opc): 客户端标记 X-Client:desktop(来源零推断)
- 所有 API 请求带 X-Client:desktop, server-core /auth 据此识别 source=desktop
2026-08-25 16:32:25 +08:00

35 lines
1.2 KiB
TypeScript

import { getApiToken } from "./config";
import { useAuthStore } from "../auth/authStore";
/** Authorization + X-Agent-Id + X-Port-Id for API requests. Caller sets Content-Type when needed. */
export function buildAuthHeaders(): Record<string, string> {
const headers: Record<string, string> = {};
// 客户端来源:server-core /auth 据此识别用户来源(desktop)→source,零推断
headers["X-Client"] = "desktop";
const token = getApiToken();
if (token) {
headers.Authorization = `Bearer ${token}`;
}
// 当前端口身份:后端据此把智能体工作区按端口隔离
const port = useAuthStore.getState().user?.port;
if (port) {
headers["X-Port-Id"] = port;
}
try {
// Read from sessionStorage first (per-tab agent), fall back to localStorage
const agentStorage =
sessionStorage.getItem("qwenpaw-agent-storage") ||
localStorage.getItem("qwenpaw-agent-storage");
if (agentStorage) {
const parsed = JSON.parse(agentStorage);
const selectedAgent = parsed?.state?.selectedAgent;
if (selectedAgent) {
headers["X-Agent-Id"] = selectedAgent;
}
}
} catch (error) {
console.warn("Failed to get selected agent from storage:", error);
}
return headers;
}