feat: optimize getHeaders

This commit is contained in:
Dogtiti 2024-07-06 11:15:06 +08:00
parent 2d1f522aaf
commit b58bbf8eb4
1 changed files with 46 additions and 33 deletions

View File

@ -161,41 +161,54 @@ export function getHeaders() {
"Content-Type": "application/json", "Content-Type": "application/json",
Accept: "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;
const clientConfig = getClientConfig();
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 // when using google api in app, not set auth header
if (!(isGoogle && clientConfig?.isApp)) { if (isGoogle && clientConfig?.isApp) return headers;
// use user's api key first
if (validString(apiKey)) { const authHeader = getAuthHeader();
headers[authHeader] = makeBearer(apiKey);
} else if ( const bearerToken = getBearerToken(apiKey, isAzure || isAnthropic);
accessStore.enabledAccessControl() &&
validString(accessStore.accessCode) if (bearerToken) {
) { headers[authHeader] = bearerToken;
// access_code must send with header named `Authorization`, will using in auth middleware. } else if (isEnabledAccessControl && validString(accessStore.accessCode)) {
headers["Authorization"] = makeBearer( headers["Authorization"] = getBearerToken(
ACCESS_CODE_PREFIX + accessStore.accessCode, ACCESS_CODE_PREFIX + accessStore.accessCode,
); );
}
} }
return headers; return headers;