File size: 1,618 Bytes
f0743f4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 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;
|