729c7d86dc
- 所有 API 请求带 X-Client:desktop, server-core /auth 据此识别 source=desktop
35 lines
1.2 KiB
TypeScript
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;
|
|
}
|