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