1
import { JWTPayload, LOBE_CHAT_AUTH_HEADER } from '@/const/auth';
2
import { ModelProvider } from '@/libs/agent-runtime';
3
import { useUserStore } from '@/store/user';
4
import { keyVaultsConfigSelectors, userProfileSelectors } from '@/store/user/selectors';
5
import { GlobalLLMProviderKey } from '@/types/user/settings';
6
import { createJWT } from '@/utils/jwt';
8
export const getProviderAuthPayload = (provider: string) => {
10
case ModelProvider.Bedrock: {
11
const { accessKeyId, region, secretAccessKey, sessionToken } =
12
keyVaultsConfigSelectors.bedrockConfig(useUserStore.getState());
14
const awsSecretAccessKey = secretAccessKey;
15
const awsAccessKeyId = accessKeyId;
17
const apiKey = (awsSecretAccessKey || '') + (awsAccessKeyId || '');
24
awsSessionToken: sessionToken,
28
case ModelProvider.Wenxin: {
29
const { secretKey, accessKey } = keyVaultsConfigSelectors.wenxinConfig(
30
useUserStore.getState(),
33
const apiKey = (accessKey || '') + (secretKey || '');
37
wenxinAccessKey: accessKey,
38
wenxinSecretKey: secretKey,
42
case ModelProvider.Azure: {
43
const azure = keyVaultsConfigSelectors.azureConfig(useUserStore.getState());
47
azureApiVersion: azure.apiVersion,
48
endpoint: azure.endpoint,
52
case ModelProvider.Ollama: {
53
const config = keyVaultsConfigSelectors.ollamaConfig(useUserStore.getState());
55
return { endpoint: config?.baseURL };
59
const config = keyVaultsConfigSelectors.getVaultByProvider(provider as GlobalLLMProviderKey)(
60
useUserStore.getState(),
63
return { apiKey: config?.apiKey, endpoint: config?.baseURL };
68
const createAuthTokenWithPayload = async (payload = {}) => {
69
const accessCode = keyVaultsConfigSelectors.password(useUserStore.getState());
70
const userId = userProfileSelectors.userId(useUserStore.getState());
72
return await createJWT<JWTPayload>({ accessCode, userId, ...payload });
76
// eslint-disable-next-line no-undef
77
headers?: HeadersInit;
78
payload?: Record<string, any>;
82
// eslint-disable-next-line no-undef
83
export const createHeaderWithAuth = async (params?: AuthParams): Promise<HeadersInit> => {
84
let payload = params?.payload || {};
86
if (params?.provider) {
87
payload = { ...payload, ...getProviderAuthPayload(params?.provider) };
90
const token = await createAuthTokenWithPayload(payload);
92
// eslint-disable-next-line no-undef
93
return { ...params?.headers, [LOBE_CHAT_AUTH_HEADER]: token };