From b58bbf8eb49bcf2fc461f818097c853a1c0ac652 Mon Sep 17 00:00:00 2001 From: Dogtiti <499960698@qq.com> Date: Sat, 6 Jul 2024 11:15:06 +0800 Subject: [PATCH 1/2] feat: optimize getHeaders --- app/client/api.ts | 77 +++++++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 32 deletions(-) diff --git a/app/client/api.ts b/app/client/api.ts index 41ccbd8e1c0..8c984105e1e 100644 --- a/app/client/api.ts +++ b/app/client/api.ts @@ -161,41 +161,54 @@ export function getHeaders() { "Content-Type": "application/json", Accept: "application/json", }; - const modelConfig = useChatStore.getState().currentSession().mask.modelConfig; - const isGoogle = modelConfig.providerName == ServiceProvider.Google; - const isAzure = modelConfig.providerName === ServiceProvider.Azure; - const isAnthropic = modelConfig.providerName === ServiceProvider.Anthropic; - const authHeader = isAzure - ? "api-key" - : isAnthropic - ? "x-api-key" - : "Authorization"; - const apiKey = isGoogle - ? accessStore.googleApiKey - : isAzure - ? accessStore.azureApiKey - : isAnthropic - ? accessStore.anthropicApiKey - : accessStore.openaiApiKey; + const clientConfig = getClientConfig(); - const makeBearer = (s: string) => - `${isAzure || isAnthropic ? "" : "Bearer "}${s.trim()}`; - const validString = (x: string) => x && x.length > 0; + function getConfig() { + const modelConfig = useChatStore.getState().currentSession() + .mask.modelConfig; + const isGoogle = modelConfig.providerName == ServiceProvider.Google; + const isAzure = modelConfig.providerName === ServiceProvider.Azure; + const isAnthropic = modelConfig.providerName === ServiceProvider.Anthropic; + const isEnabledAccessControl = accessStore.enabledAccessControl(); + const apiKey = isGoogle + ? accessStore.googleApiKey + : isAzure + ? accessStore.azureApiKey + : isAnthropic + ? accessStore.anthropicApiKey + : accessStore.openaiApiKey; + return { isGoogle, isAzure, isAnthropic, apiKey, isEnabledAccessControl }; + } + + function getAuthHeader(): string { + return isAzure ? "api-key" : isAnthropic ? "x-api-key" : "Authorization"; + } + + function getBearerToken(apiKey: string, noBearer: boolean = false): string { + return validString(apiKey) + ? `${noBearer ? "" : "Bearer "}${apiKey.trim()}` + : ""; + } + + function validString(x: string): boolean { + return x?.length > 0; + } + const { isGoogle, isAzure, isAnthropic, apiKey, isEnabledAccessControl } = + getConfig(); // when using google api in app, not set auth header - if (!(isGoogle && clientConfig?.isApp)) { - // use user's api key first - if (validString(apiKey)) { - headers[authHeader] = makeBearer(apiKey); - } else if ( - accessStore.enabledAccessControl() && - validString(accessStore.accessCode) - ) { - // access_code must send with header named `Authorization`, will using in auth middleware. - headers["Authorization"] = makeBearer( - ACCESS_CODE_PREFIX + accessStore.accessCode, - ); - } + if (isGoogle && clientConfig?.isApp) return headers; + + const authHeader = getAuthHeader(); + + const bearerToken = getBearerToken(apiKey, isAzure || isAnthropic); + + if (bearerToken) { + headers[authHeader] = bearerToken; + } else if (isEnabledAccessControl && validString(accessStore.accessCode)) { + headers["Authorization"] = getBearerToken( + ACCESS_CODE_PREFIX + accessStore.accessCode, + ); } return headers; From 700b06f9c5cc396b54aacebe0741e7d23ba56266 Mon Sep 17 00:00:00 2001 From: Dogtiti <499960698@qq.com> Date: Sat, 6 Jul 2024 11:16:00 +0800 Subject: [PATCH 2/2] feat: optimize getHeaders --- app/client/api.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/client/api.ts b/app/client/api.ts index 8c984105e1e..7256304f705 100644 --- a/app/client/api.ts +++ b/app/client/api.ts @@ -157,6 +157,7 @@ export class ClientApi { export function getHeaders() { const accessStore = useAccessStore.getState(); + const chatStore = useChatStore.getState(); const headers: Record = { "Content-Type": "application/json", Accept: "application/json", @@ -165,8 +166,7 @@ export function getHeaders() { const clientConfig = getClientConfig(); function getConfig() { - const modelConfig = useChatStore.getState().currentSession() - .mask.modelConfig; + const modelConfig = chatStore.currentSession().mask.modelConfig; const isGoogle = modelConfig.providerName == ServiceProvider.Google; const isAzure = modelConfig.providerName === ServiceProvider.Azure; const isAnthropic = modelConfig.providerName === ServiceProvider.Anthropic;