import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { QueryKeys, dataService, promptPermissionsSchema, memoryPermissionsSchema, marketplacePermissionsSchema, peoplePickerPermissionsSchema, } from 'librechat-data-provider'; import type { UseQueryOptions, UseMutationResult, QueryObserverResult, } from '@tanstack/react-query'; import type * as t from 'librechat-data-provider'; export const useGetRole = ( roleName: string, config?: UseQueryOptions, ): QueryObserverResult => { return useQuery([QueryKeys.roles, roleName], () => dataService.getRole(roleName), { refetchOnWindowFocus: false, refetchOnReconnect: false, refetchOnMount: false, retry: false, ...config, }); }; export const useUpdatePromptPermissionsMutation = ( options?: t.UpdatePromptPermOptions, ): UseMutationResult< t.UpdatePermResponse, t.TError | undefined, t.UpdatePromptPermVars, unknown > => { const queryClient = useQueryClient(); const { onMutate, onSuccess, onError } = options ?? {}; return useMutation( (variables) => { promptPermissionsSchema.partial().parse(variables.updates); return dataService.updatePromptPermissions(variables); }, { onSuccess: (data, variables, context) => { queryClient.invalidateQueries([QueryKeys.roles, variables.roleName]); if (onSuccess) { onSuccess(data, variables, context); } }, onError: (...args) => { const error = args[0]; if (error != null) { console.error('Failed to update prompt permissions:', error); } if (onError) { onError(...args); } }, onMutate, }, ); }; export const useUpdateAgentPermissionsMutation = ( options?: t.UpdateAgentPermOptions, ): UseMutationResult< t.UpdatePermResponse, t.TError | undefined, t.UpdateAgentPermVars, unknown > => { const queryClient = useQueryClient(); const { onMutate, onSuccess, onError } = options ?? {}; return useMutation( (variables) => { promptPermissionsSchema.partial().parse(variables.updates); return dataService.updateAgentPermissions(variables); }, { onSuccess: (data, variables, context) => { queryClient.invalidateQueries([QueryKeys.roles, variables.roleName]); if (onSuccess != null) { onSuccess(data, variables, context); } }, onError: (...args) => { const error = args[0]; if (error != null) { console.error('Failed to update prompt permissions:', error); } if (onError != null) { onError(...args); } }, onMutate, }, ); }; export const useUpdateMemoryPermissionsMutation = ( options?: t.UpdateMemoryPermOptions, ): UseMutationResult< t.UpdatePermResponse, t.TError | undefined, t.UpdateMemoryPermVars, unknown > => { const queryClient = useQueryClient(); const { onMutate, onSuccess, onError } = options ?? {}; return useMutation( (variables) => { memoryPermissionsSchema.partial().parse(variables.updates); return dataService.updateMemoryPermissions(variables); }, { onSuccess: (data, variables, context) => { queryClient.invalidateQueries([QueryKeys.roles, variables.roleName]); if (onSuccess) { onSuccess(data, variables, context); } }, onError: (...args) => { const error = args[0]; if (error != null) { console.error('Failed to update memory permissions:', error); } if (onError) { onError(...args); } }, onMutate, }, ); }; export const useUpdatePeoplePickerPermissionsMutation = ( options?: t.UpdatePeoplePickerPermOptions, ): UseMutationResult< t.UpdatePermResponse, t.TError | undefined, t.UpdatePeoplePickerPermVars, unknown > => { const queryClient = useQueryClient(); const { onMutate, onSuccess, onError } = options ?? {}; return useMutation( (variables) => { peoplePickerPermissionsSchema.partial().parse(variables.updates); return dataService.updatePeoplePickerPermissions(variables); }, { onSuccess: (data, variables, context) => { queryClient.invalidateQueries([QueryKeys.roles, variables.roleName]); if (onSuccess) { onSuccess(data, variables, context); } }, onError: (...args) => { const error = args[0]; if (error != null) { console.error('Failed to update people picker permissions:', error); } if (onError) { onError(...args); } }, onMutate, }, ); }; export const useUpdateMarketplacePermissionsMutation = ( options?: t.UpdateMarketplacePermOptions, ): UseMutationResult< t.UpdatePermResponse, t.TError | undefined, t.UpdateMarketplacePermVars, unknown > => { const queryClient = useQueryClient(); const { onMutate, onSuccess, onError } = options ?? {}; return useMutation( (variables) => { marketplacePermissionsSchema.partial().parse(variables.updates); return dataService.updateMarketplacePermissions(variables); }, { onSuccess: (data, variables, context) => { queryClient.invalidateQueries([QueryKeys.roles, variables.roleName]); if (onSuccess) { onSuccess(data, variables, context); } }, onError: (...args) => { const error = args[0]; if (error != null) { console.error('Failed to update marketplace permissions:', error); } if (onError) { onError(...args); } }, onMutate, }, ); };