添加聊天框消息解析功能;优化请求头处理;更新部分 api base url

This commit is contained in:
2026-03-27 18:00:30 +08:00
parent 8713e5a468
commit a101e79750
11 changed files with 464 additions and 193 deletions
+19 -19
View File
@@ -1,9 +1,11 @@
import axios from "axios";
import axios, { AxiosHeaders, type InternalAxiosRequestConfig } from "axios";
import { config } from "@config/config";
import { useProjectStore } from "@/store/projectStore";
import { getAccessToken } from "@/lib/authToken";
import { signOut } from "next-auth/react";
import { useAuthStore } from "@/store/authStore";
import {
applyAuthContextHeaders,
type AuthContextHeaderOptions,
} from "@/lib/requestHeaders";
export const API_URL = process.env.NEXT_PUBLIC_API_URL || config.BACKEND_URL;
@@ -13,26 +15,24 @@ export const api = axios.create({
let isSigningOut = false;
const isMetaProjectsRequest = (request: {
const resolveRequestUrl = (request: {
baseURL?: string;
url?: string;
}) => {
const url = `${request.baseURL ?? ""}${request.url ?? ""}`;
return url.includes("/api/v1/meta/projects");
};
}) => `${request.baseURL ?? ""}${request.url ?? ""}`;
api.interceptors.request.use(async (request) => {
const accessToken = await getAccessToken();
if (accessToken) {
request.headers = request.headers ?? {};
request.headers.Authorization = `Bearer ${accessToken}`;
}
export interface ApiRequestConfig
extends InternalAxiosRequestConfig,
AuthContextHeaderOptions {}
const projectId = useProjectStore.getState().currentProjectId;
if (projectId && !isMetaProjectsRequest(request)) {
request.headers = request.headers ?? {};
request.headers["X-Project-Id"] = projectId;
}
api.interceptors.request.use(async (request: ApiRequestConfig) => {
const headers = new Headers(
request.headers
? AxiosHeaders.from(request.headers).toJSON() as Record<string, string>
: undefined,
);
await applyAuthContextHeaders(resolveRequestUrl(request), headers, request);
request.headers = AxiosHeaders.from(Object.fromEntries(headers.entries()));
return request;
});