chat / client /src /hooks /Plugins /useAuthCodeTool.ts
helloya20's picture
Upload 2345 files
f0743f4 verified
import { useCallback } from 'react';
import { useQueryClient } from '@tanstack/react-query';
import { AuthType, Tools, QueryKeys } from 'librechat-data-provider';
import { useUpdateUserPluginsMutation } from 'librechat-data-provider/react-query';
const useAuthCodeTool = (options?: { isEntityTool: boolean }) => {
const queryClient = useQueryClient();
const isEntityTool = options?.isEntityTool ?? true;
const updateUserPlugins = useUpdateUserPluginsMutation({
onMutate: (vars) => {
queryClient.setQueryData([QueryKeys.toolAuth, Tools.execute_code], () => ({
authenticated: vars.action === 'install',
message: AuthType.USER_PROVIDED,
}));
},
onSuccess: () => {
queryClient.invalidateQueries([QueryKeys.toolAuth, Tools.execute_code]);
},
onError: () => {
queryClient.invalidateQueries([QueryKeys.toolAuth, Tools.execute_code]);
},
});
const installTool = useCallback(
(apiKey: string) => {
updateUserPlugins.mutate({
pluginKey: Tools.execute_code,
action: 'install',
auth: { LIBRECHAT_CODE_API_KEY: apiKey },
isEntityTool,
});
},
[updateUserPlugins, isEntityTool],
);
const removeTool = useCallback(() => {
updateUserPlugins.mutate({
pluginKey: Tools.execute_code,
action: 'uninstall',
auth: { LIBRECHAT_CODE_API_KEY: null },
isEntityTool,
});
}, [updateUserPlugins, isEntityTool]);
return {
removeTool,
installTool,
};
};
export default useAuthCodeTool;