mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 17:00:15 +01:00
- Implement RBAC with viewer/editor/owner roles using bitwise permissions
- Add AccessRole, AclEntry, and Group models for permission management
- Create PermissionService for core permission logic and validation
- Integrate Microsoft Graph API for Entra ID user/group search
- Add middleware for resource access validation with custom ID resolvers
- Implement bulk permission updates with transaction support
- Create permission management UI with people picker and role selection
- Add public sharing capabilities for resources
- Include database migration for existing agent ownership
- Support hybrid local/Entra ID identity management
- Add comprehensive test coverage for all new services
chore: Update @librechat/data-schemas to version 0.0.9 and export common module in index.ts
fix: Update userGroup tests to mock logger correctly and change principalId expectation from null to undefined
100 lines
2.9 KiB
TypeScript
100 lines
2.9 KiB
TypeScript
import { QueryKeys, dataService, EModelEndpoint, defaultOrderQuery } from 'librechat-data-provider';
|
|
import { useQuery, useQueryClient } from '@tanstack/react-query';
|
|
import type { QueryObserverResult, UseQueryOptions } from '@tanstack/react-query';
|
|
import type t from 'librechat-data-provider';
|
|
|
|
/**
|
|
* AGENTS
|
|
*/
|
|
|
|
/**
|
|
* Hook for getting all available tools for A
|
|
*/
|
|
export const useAvailableAgentToolsQuery = (): QueryObserverResult<t.TPlugin[]> => {
|
|
const queryClient = useQueryClient();
|
|
const endpointsConfig = queryClient.getQueryData<t.TEndpointsConfig>([QueryKeys.endpoints]);
|
|
|
|
const enabled = !!endpointsConfig?.[EModelEndpoint.agents];
|
|
return useQuery<t.TPlugin[]>([QueryKeys.tools], () => dataService.getAvailableAgentTools(), {
|
|
refetchOnWindowFocus: false,
|
|
refetchOnReconnect: false,
|
|
refetchOnMount: false,
|
|
enabled,
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Hook for listing all Agents, with optional parameters provided for pagination and sorting
|
|
*/
|
|
export const useListAgentsQuery = <TData = t.AgentListResponse>(
|
|
params: t.AgentListParams = defaultOrderQuery,
|
|
config?: UseQueryOptions<t.AgentListResponse, unknown, TData>,
|
|
): QueryObserverResult<TData> => {
|
|
const queryClient = useQueryClient();
|
|
const endpointsConfig = queryClient.getQueryData<t.TEndpointsConfig>([QueryKeys.endpoints]);
|
|
|
|
const enabled = !!endpointsConfig?.[EModelEndpoint.agents];
|
|
return useQuery<t.AgentListResponse, unknown, TData>(
|
|
[QueryKeys.agents, params],
|
|
() => dataService.listAgents(params),
|
|
{
|
|
// Example selector to sort them by created_at
|
|
// select: (res) => {
|
|
// return res.data.sort((a, b) => a.created_at - b.created_at);
|
|
// },
|
|
staleTime: 1000 * 5,
|
|
refetchOnWindowFocus: false,
|
|
refetchOnReconnect: false,
|
|
refetchOnMount: false,
|
|
retry: false,
|
|
...config,
|
|
enabled: config?.enabled !== undefined ? config.enabled && enabled : enabled,
|
|
},
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Hook for retrieving basic details about a single agent (VIEW permission)
|
|
*/
|
|
export const useGetAgentByIdQuery = (
|
|
agent_id: string,
|
|
config?: UseQueryOptions<t.Agent>,
|
|
): QueryObserverResult<t.Agent> => {
|
|
return useQuery<t.Agent>(
|
|
[QueryKeys.agent, agent_id],
|
|
() =>
|
|
dataService.getAgentById({
|
|
agent_id,
|
|
}),
|
|
{
|
|
refetchOnWindowFocus: false,
|
|
refetchOnReconnect: false,
|
|
refetchOnMount: false,
|
|
retry: false,
|
|
...config,
|
|
},
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Hook for retrieving full agent details including sensitive configuration (EDIT permission)
|
|
*/
|
|
export const useGetExpandedAgentByIdQuery = (
|
|
agent_id: string,
|
|
config?: UseQueryOptions<t.Agent>,
|
|
): QueryObserverResult<t.Agent> => {
|
|
return useQuery<t.Agent>(
|
|
[QueryKeys.agent, agent_id, 'expanded'],
|
|
() =>
|
|
dataService.getExpandedAgentById({
|
|
agent_id,
|
|
}),
|
|
{
|
|
refetchOnWindowFocus: false,
|
|
refetchOnReconnect: false,
|
|
refetchOnMount: false,
|
|
retry: false,
|
|
...config,
|
|
},
|
|
);
|
|
};
|