| import { useResetRecoilState, useSetRecoilState } from 'recoil'; |
| import { useMutation, useQueryClient } from '@tanstack/react-query'; |
| import { MutationKeys, QueryKeys, dataService, request } from 'librechat-data-provider'; |
| import type { UseMutationResult } from '@tanstack/react-query'; |
| import type * as t from 'librechat-data-provider'; |
| import useClearStates from '~/hooks/Config/useClearStates'; |
| import { clearAllConversationStorage } from '~/utils'; |
| import store from '~/store'; |
|
|
| |
| export const useLogoutUserMutation = ( |
| options?: t.LogoutOptions, |
| ): UseMutationResult<t.TLogoutResponse, unknown, undefined, unknown> => { |
| const queryClient = useQueryClient(); |
| const clearStates = useClearStates(); |
| const resetDefaultPreset = useResetRecoilState(store.defaultPreset); |
| const setQueriesEnabled = useSetRecoilState<boolean>(store.queriesEnabled); |
|
|
| return useMutation([MutationKeys.logoutUser], { |
| mutationFn: () => dataService.logout(), |
| ...(options || {}), |
| onSuccess: (...args) => { |
| setQueriesEnabled(false); |
| resetDefaultPreset(); |
| clearStates(); |
| queryClient.removeQueries(); |
| options?.onSuccess?.(...args); |
| }, |
| }); |
| }; |
|
|
| export const useLoginUserMutation = ( |
| options?: t.MutationOptions<t.TLoginResponse, t.TLoginUser, unknown, unknown>, |
| ): UseMutationResult<t.TLoginResponse, unknown, t.TLoginUser, unknown> => { |
| const queryClient = useQueryClient(); |
| const clearStates = useClearStates(); |
| const resetDefaultPreset = useResetRecoilState(store.defaultPreset); |
| const setQueriesEnabled = useSetRecoilState<boolean>(store.queriesEnabled); |
| return useMutation([MutationKeys.loginUser], { |
| mutationFn: (payload: t.TLoginUser) => dataService.login(payload), |
| ...(options || {}), |
| onMutate: (vars) => { |
| resetDefaultPreset(); |
| clearStates(); |
| queryClient.removeQueries(); |
| options?.onMutate?.(vars); |
| }, |
| onSuccess: (...args) => { |
| setQueriesEnabled(true); |
| options?.onSuccess?.(...args); |
| }, |
| }); |
| }; |
|
|
| export const useRefreshTokenMutation = ( |
| options?: t.MutationOptions<t.TRefreshTokenResponse | undefined, undefined, unknown, unknown>, |
| ): UseMutationResult<t.TRefreshTokenResponse | undefined, unknown, undefined, unknown> => { |
| const queryClient = useQueryClient(); |
| return useMutation([MutationKeys.refreshToken], { |
| mutationFn: () => request.refreshToken(), |
| ...(options || {}), |
| onMutate: (vars) => { |
| queryClient.removeQueries(); |
| options?.onMutate?.(vars); |
| }, |
| }); |
| }; |
|
|
| |
| export const useDeleteUserMutation = ( |
| options?: t.MutationOptions<unknown, undefined>, |
| ): UseMutationResult<unknown, unknown, undefined, unknown> => { |
| const queryClient = useQueryClient(); |
| const clearStates = useClearStates(); |
| const resetDefaultPreset = useResetRecoilState(store.defaultPreset); |
|
|
| return useMutation([MutationKeys.deleteUser], { |
| mutationFn: () => dataService.deleteUser(), |
| ...(options || {}), |
| onSuccess: (...args) => { |
| resetDefaultPreset(); |
| clearStates(); |
| clearAllConversationStorage(); |
| queryClient.removeQueries(); |
| options?.onSuccess?.(...args); |
| }, |
| }); |
| }; |
|
|
| export const useEnableTwoFactorMutation = (): UseMutationResult< |
| t.TEnable2FAResponse, |
| unknown, |
| void, |
| unknown |
| > => { |
| const queryClient = useQueryClient(); |
| return useMutation(() => dataService.enableTwoFactor(), { |
| onSuccess: (data) => { |
| queryClient.setQueryData([QueryKeys.user, '2fa'], data); |
| }, |
| }); |
| }; |
|
|
| export const useVerifyTwoFactorMutation = (): UseMutationResult< |
| t.TVerify2FAResponse, |
| unknown, |
| t.TVerify2FARequest, |
| unknown |
| > => { |
| const queryClient = useQueryClient(); |
| return useMutation((payload: t.TVerify2FARequest) => dataService.verifyTwoFactor(payload), { |
| onSuccess: (data) => { |
| queryClient.setQueryData([QueryKeys.user, '2fa'], data); |
| }, |
| }); |
| }; |
|
|
| export const useConfirmTwoFactorMutation = (): UseMutationResult< |
| t.TVerify2FAResponse, |
| unknown, |
| t.TVerify2FARequest, |
| unknown |
| > => { |
| const queryClient = useQueryClient(); |
| return useMutation((payload: t.TVerify2FARequest) => dataService.confirmTwoFactor(payload), { |
| onSuccess: (data) => { |
| queryClient.setQueryData([QueryKeys.user, '2fa'], data); |
| }, |
| }); |
| }; |
|
|
| export const useDisableTwoFactorMutation = (): UseMutationResult< |
| t.TDisable2FAResponse, |
| unknown, |
| t.TDisable2FARequest | undefined, |
| unknown |
| > => { |
| const queryClient = useQueryClient(); |
| return useMutation((payload?: t.TDisable2FARequest) => dataService.disableTwoFactor(payload), { |
| onSuccess: () => { |
| queryClient.setQueryData([QueryKeys.user, '2fa'], null); |
| }, |
| }); |
| }; |
|
|
| export const useRegenerateBackupCodesMutation = (): UseMutationResult< |
| t.TRegenerateBackupCodesResponse, |
| unknown, |
| void, |
| unknown |
| > => { |
| const queryClient = useQueryClient(); |
| return useMutation(() => dataService.regenerateBackupCodes(), { |
| onSuccess: (data) => { |
| queryClient.setQueryData([QueryKeys.user, '2fa', 'backup'], data); |
| }, |
| }); |
| }; |
|
|
| export const useVerifyTwoFactorTempMutation = ( |
| options?: t.MutationOptions<t.TVerify2FATempResponse, t.TVerify2FATempRequest, unknown, unknown>, |
| ): UseMutationResult<t.TVerify2FATempResponse, unknown, t.TVerify2FATempRequest, unknown> => { |
| const queryClient = useQueryClient(); |
| return useMutation( |
| (payload: t.TVerify2FATempRequest) => dataService.verifyTwoFactorTemp(payload), |
| { |
| ...(options || {}), |
| onSuccess: (data, ...args) => { |
| queryClient.setQueryData([QueryKeys.user, '2fa'], data); |
| options?.onSuccess?.(data, ...args); |
| }, |
| }, |
| ); |
| }; |
|
|