| import { useMemo, useCallback } from 'react'; |
| import { EModelEndpoint } from 'librechat-data-provider'; |
| import { useUserKeyQuery, useUpdateUserKeysMutation } from 'librechat-data-provider/react-query'; |
| import { useGetEndpointsQuery } from '~/data-provider'; |
|
|
| const useUserKey = (endpoint: string) => { |
| const { data: endpointsConfig } = useGetEndpointsQuery(); |
| const config = endpointsConfig?.[endpoint ?? '']; |
|
|
| const { azure } = config ?? {}; |
| let keyName = endpoint; |
|
|
| if (azure) { |
| keyName = EModelEndpoint.azureOpenAI; |
| } else if (keyName === EModelEndpoint.gptPlugins) { |
| keyName = EModelEndpoint.openAI; |
| } |
|
|
| const updateKey = useUpdateUserKeysMutation(); |
| const checkUserKey = useUserKeyQuery(keyName); |
|
|
| const getExpiry = useCallback(() => { |
| if (checkUserKey.data) { |
| return checkUserKey.data.expiresAt || 'never'; |
| } |
| }, [checkUserKey.data]); |
|
|
| const checkExpiry = useCallback(() => { |
| const expiresAt = getExpiry(); |
| if (!expiresAt) { |
| return true; |
| } |
|
|
| const expiresAtDate = new Date(expiresAt); |
| if (expiresAtDate < new Date()) { |
| return false; |
| } |
| return true; |
| }, [getExpiry]); |
|
|
| const saveUserKey = useCallback( |
| (userKey: string, expiresAt: number | null) => { |
| const dateStr = expiresAt ? new Date(expiresAt).toISOString() : ''; |
| updateKey.mutate({ |
| name: keyName, |
| value: userKey, |
| expiresAt: dateStr, |
| }); |
| }, |
| [updateKey, keyName], |
| ); |
|
|
| return useMemo( |
| () => ({ getExpiry, checkExpiry, saveUserKey }), |
| [getExpiry, checkExpiry, saveUserKey], |
| ); |
| }; |
|
|
| export default useUserKey; |
|
|