import { z } from 'zod'; /** * Granular Permission System Types for Agent Sharing * * This file contains TypeScript interfaces and Zod schemas for the enhanced * agent permission system that supports sharing with specific users/groups * and Entra ID integration. */ /** * Principal types for permission system */ export declare enum PrincipalType { USER = "user", GROUP = "group", PUBLIC = "public", ROLE = "role" } /** * Principal model types for MongoDB references */ export declare enum PrincipalModel { USER = "User", GROUP = "Group", ROLE = "Role" } /** * Source of the principal (local LibreChat or external Entra ID) */ export type TPrincipalSource = 'local' | 'entra'; /** * Access levels for agents */ export type TAccessLevel = 'none' | 'viewer' | 'editor' | 'owner'; /** * Resource types for permission system */ export declare enum ResourceType { AGENT = "agent", CODE_ENVIRONMENT = "codeEnvironment", PROMPTGROUP = "promptGroup", MCPSERVER = "mcpServer", REMOTE_AGENT = "remoteAgent", SKILL = "skill", SHARED_LINK = "sharedLink" } /** * Permission bit constants for bitwise operations */ export declare enum PermissionBits { /** 001 - Can view and use agent */ VIEW = 1, /** 010 - Can modify agent settings */ EDIT = 2, /** 100 - Can delete agent */ DELETE = 4, /** 1000 - Can share agent with others (future) */ SHARE = 8, /** 10000 - Can view Insights data for an agent when VIEW is also present */ VIEW_INSIGHTS = 16 } /** * Standard access role IDs */ export declare enum AccessRoleIds { AGENT_VIEWER = "agent_viewer", AGENT_EDITOR = "agent_editor", AGENT_OWNER = "agent_owner", CODE_ENVIRONMENT_VIEWER = "codeEnvironment_viewer", CODE_ENVIRONMENT_EDITOR = "codeEnvironment_editor", CODE_ENVIRONMENT_OWNER = "codeEnvironment_owner", PROMPTGROUP_VIEWER = "promptGroup_viewer", PROMPTGROUP_EDITOR = "promptGroup_editor", PROMPTGROUP_OWNER = "promptGroup_owner", MCPSERVER_VIEWER = "mcpServer_viewer", MCPSERVER_EDITOR = "mcpServer_editor", MCPSERVER_OWNER = "mcpServer_owner", REMOTE_AGENT_VIEWER = "remoteAgent_viewer", REMOTE_AGENT_EDITOR = "remoteAgent_editor", REMOTE_AGENT_OWNER = "remoteAgent_owner", SKILL_VIEWER = "skill_viewer", SKILL_EDITOR = "skill_editor", SKILL_OWNER = "skill_owner", SHARED_LINK_VIEWER = "sharedLink_viewer", SHARED_LINK_OWNER = "sharedLink_owner" } /** * Principal schema - represents a user, group, role, or public access */ export declare const principalSchema: z.ZodObject<{ type: z.ZodNativeEnum; id: z.ZodOptional; name: z.ZodOptional; email: z.ZodOptional; source: z.ZodOptional>; avatar: z.ZodOptional; description: z.ZodOptional; idOnTheSource: z.ZodOptional; accessRoleId: z.ZodOptional>; viewInsights: z.ZodOptional; isAdmin: z.ZodOptional; memberCount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }, { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }>; /** * Access role schema - defines named permission sets */ export declare const accessRoleSchema: z.ZodObject<{ accessRoleId: z.ZodNativeEnum; name: z.ZodString; description: z.ZodOptional; resourceType: z.ZodDefault>; permBits: z.ZodNumber; }, "strip", z.ZodTypeAny, { name: string; accessRoleId: AccessRoleIds; resourceType: ResourceType; permBits: number; description?: string | undefined; }, { name: string; accessRoleId: AccessRoleIds; permBits: number; description?: string | undefined; resourceType?: ResourceType | undefined; }>; /** * Permission entry schema - represents a single ACL entry */ export declare const permissionEntrySchema: z.ZodObject<{ id: z.ZodString; principalType: z.ZodNativeEnum; principalId: z.ZodOptional; principalName: z.ZodOptional; role: z.ZodObject<{ accessRoleId: z.ZodNativeEnum; name: z.ZodString; description: z.ZodOptional; resourceType: z.ZodDefault>; permBits: z.ZodNumber; }, "strip", z.ZodTypeAny, { name: string; accessRoleId: AccessRoleIds; resourceType: ResourceType; permBits: number; description?: string | undefined; }, { name: string; accessRoleId: AccessRoleIds; permBits: number; description?: string | undefined; resourceType?: ResourceType | undefined; }>; grantedBy: z.ZodString; grantedAt: z.ZodString; inheritedFrom: z.ZodOptional; source: z.ZodOptional>; }, "strip", z.ZodTypeAny, { role: { name: string; accessRoleId: AccessRoleIds; resourceType: ResourceType; permBits: number; description?: string | undefined; }; id: string; principalType: PrincipalType; grantedBy: string; grantedAt: string; source?: "local" | "entra" | undefined; principalId?: string | undefined; principalName?: string | undefined; inheritedFrom?: string | undefined; }, { role: { name: string; accessRoleId: AccessRoleIds; permBits: number; description?: string | undefined; resourceType?: ResourceType | undefined; }; id: string; principalType: PrincipalType; grantedBy: string; grantedAt: string; source?: "local" | "entra" | undefined; principalId?: string | undefined; principalName?: string | undefined; inheritedFrom?: string | undefined; }>; /** * Resource permissions response schema */ export declare const resourcePermissionsResponseSchema: z.ZodObject<{ resourceType: z.ZodNativeEnum; resourceId: z.ZodString; permissions: z.ZodArray; principalId: z.ZodOptional; principalName: z.ZodOptional; role: z.ZodObject<{ accessRoleId: z.ZodNativeEnum; name: z.ZodString; description: z.ZodOptional; resourceType: z.ZodDefault>; permBits: z.ZodNumber; }, "strip", z.ZodTypeAny, { name: string; accessRoleId: AccessRoleIds; resourceType: ResourceType; permBits: number; description?: string | undefined; }, { name: string; accessRoleId: AccessRoleIds; permBits: number; description?: string | undefined; resourceType?: ResourceType | undefined; }>; grantedBy: z.ZodString; grantedAt: z.ZodString; inheritedFrom: z.ZodOptional; source: z.ZodOptional>; }, "strip", z.ZodTypeAny, { role: { name: string; accessRoleId: AccessRoleIds; resourceType: ResourceType; permBits: number; description?: string | undefined; }; id: string; principalType: PrincipalType; grantedBy: string; grantedAt: string; source?: "local" | "entra" | undefined; principalId?: string | undefined; principalName?: string | undefined; inheritedFrom?: string | undefined; }, { role: { name: string; accessRoleId: AccessRoleIds; permBits: number; description?: string | undefined; resourceType?: ResourceType | undefined; }; id: string; principalType: PrincipalType; grantedBy: string; grantedAt: string; source?: "local" | "entra" | undefined; principalId?: string | undefined; principalName?: string | undefined; inheritedFrom?: string | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { resourceType: ResourceType; resourceId: string; permissions: { role: { name: string; accessRoleId: AccessRoleIds; resourceType: ResourceType; permBits: number; description?: string | undefined; }; id: string; principalType: PrincipalType; grantedBy: string; grantedAt: string; source?: "local" | "entra" | undefined; principalId?: string | undefined; principalName?: string | undefined; inheritedFrom?: string | undefined; }[]; }, { resourceType: ResourceType; resourceId: string; permissions: { role: { name: string; accessRoleId: AccessRoleIds; permBits: number; description?: string | undefined; resourceType?: ResourceType | undefined; }; id: string; principalType: PrincipalType; grantedBy: string; grantedAt: string; source?: "local" | "entra" | undefined; principalId?: string | undefined; principalName?: string | undefined; inheritedFrom?: string | undefined; }[]; }>; /** * Update resource permissions request schema * This matches the user's requirement for the frontend DTO structure */ export declare const updateResourcePermissionsRequestSchema: z.ZodObject<{ updated: z.ZodArray; id: z.ZodOptional; name: z.ZodOptional; email: z.ZodOptional; source: z.ZodOptional>; avatar: z.ZodOptional; description: z.ZodOptional; idOnTheSource: z.ZodOptional; accessRoleId: z.ZodOptional>; viewInsights: z.ZodOptional; isAdmin: z.ZodOptional; memberCount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }, { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }>, "many">; removed: z.ZodArray; id: z.ZodOptional; name: z.ZodOptional; email: z.ZodOptional; source: z.ZodOptional>; avatar: z.ZodOptional; description: z.ZodOptional; idOnTheSource: z.ZodOptional; accessRoleId: z.ZodOptional>; viewInsights: z.ZodOptional; isAdmin: z.ZodOptional; memberCount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }, { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }>, "many">; public: z.ZodOptional; publicAccessRoleId: z.ZodOptional; }, "strip", z.ZodTypeAny, { updated: { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }[]; removed: { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }[]; public?: boolean | undefined; publicAccessRoleId?: string | undefined; }, { updated: { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }[]; removed: { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }[]; public?: boolean | undefined; publicAccessRoleId?: string | undefined; }>; /** * Update resource permissions response schema * Returns the updated permissions with accessRoleId included */ export declare const updateResourcePermissionsResponseSchema: z.ZodObject<{ message: z.ZodString; results: z.ZodObject<{ principals: z.ZodArray; id: z.ZodOptional; name: z.ZodOptional; email: z.ZodOptional; source: z.ZodOptional>; avatar: z.ZodOptional; description: z.ZodOptional; idOnTheSource: z.ZodOptional; accessRoleId: z.ZodOptional>; viewInsights: z.ZodOptional; isAdmin: z.ZodOptional; memberCount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }, { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }>, "many">; public: z.ZodOptional; publicAccessRoleId: z.ZodOptional; }, "strip", z.ZodTypeAny, { principals: { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }[]; public?: boolean | undefined; publicAccessRoleId?: string | undefined; }, { principals: { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }[]; public?: boolean | undefined; publicAccessRoleId?: string | undefined; }>; }, "strip", z.ZodTypeAny, { message: string; results: { principals: { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }[]; public?: boolean | undefined; publicAccessRoleId?: string | undefined; }; }, { message: string; results: { principals: { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }[]; public?: boolean | undefined; publicAccessRoleId?: string | undefined; }; }>; /** * Principal - represents a user, group, or public access */ export type TPrincipal = z.infer; /** * Access role - defines named permission sets */ export type TAccessRole = z.infer; /** * Permission entry - represents a single ACL entry */ export type TPermissionEntry = z.infer; /** * Resource permissions response */ export type TResourcePermissionsResponse = z.infer; /** * Update resource permissions request * This matches the user's requirement for the frontend DTO structure */ export type TUpdateResourcePermissionsRequest = z.infer; /** * Update resource permissions response * Returns the updated permissions with accessRoleId included */ export type TUpdateResourcePermissionsResponse = z.infer; /** * Principal search request parameters */ export type TPrincipalSearchParams = { q: string; limit?: number; types?: Array; }; /** * Principal search result item */ export type TPrincipalSearchResult = { id?: string | null; type: PrincipalType.USER | PrincipalType.GROUP | PrincipalType.ROLE; name: string; email?: string; username?: string; avatar?: string; provider?: string; source: 'local' | 'entra'; memberCount?: number; description?: string; idOnTheSource?: string; isAdmin?: boolean; }; /** * Principal search response */ export type TPrincipalSearchResponse = { query: string; limit: number; types?: Array | null; results: TPrincipalSearchResult[]; count: number; sources: { local: number; entra: number; }; }; /** * Available roles response */ export type TAvailableRolesResponse = { resourceType: ResourceType; roles: TAccessRole[]; }; /** * Get resource permissions response schema * This matches the enhanced aggregation-based endpoint response format */ export declare const getResourcePermissionsResponseSchema: z.ZodObject<{ resourceType: z.ZodNativeEnum; resourceId: z.ZodNativeEnum; principals: z.ZodArray; id: z.ZodOptional; name: z.ZodOptional; email: z.ZodOptional; source: z.ZodOptional>; avatar: z.ZodOptional; description: z.ZodOptional; idOnTheSource: z.ZodOptional; accessRoleId: z.ZodOptional>; viewInsights: z.ZodOptional; isAdmin: z.ZodOptional; memberCount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }, { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }>, "many">; public: z.ZodBoolean; publicAccessRoleId: z.ZodOptional>; }, "strip", z.ZodTypeAny, { public: boolean; resourceType: ResourceType; resourceId: AccessRoleIds; principals: { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }[]; publicAccessRoleId?: AccessRoleIds | undefined; }, { public: boolean; resourceType: ResourceType; resourceId: AccessRoleIds; principals: { type: PrincipalType; id?: string | undefined; name?: string | undefined; email?: string | undefined; source?: "local" | "entra" | undefined; avatar?: string | undefined; description?: string | undefined; idOnTheSource?: string | undefined; accessRoleId?: AccessRoleIds | undefined; viewInsights?: boolean | undefined; isAdmin?: boolean | undefined; memberCount?: number | undefined; }[]; publicAccessRoleId?: AccessRoleIds | undefined; }>; /** * Get resource permissions response type * This matches the enhanced aggregation-based endpoint response format */ export type TGetResourcePermissionsResponse = z.infer; /** * Effective permissions response schema * Returns just the permission bitmask for a user on a resource */ export declare const effectivePermissionsResponseSchema: z.ZodObject<{ permissionBits: z.ZodNumber; }, "strip", z.ZodTypeAny, { permissionBits: number; }, { permissionBits: number; }>; /** * Effective permissions response type * Returns just the permission bitmask for a user on a resource */ export type TEffectivePermissionsResponse = z.infer; /** * All effective permissions response type * Map of resourceId to permissionBits for all accessible resources */ export type TAllEffectivePermissionsResponse = Record; /** * Permission check result */ export interface TPermissionCheck { canView: boolean; canEdit: boolean; canDelete: boolean; canShare: boolean; accessLevel: TAccessLevel; } /** * Convert permission bits to access level */ export declare function permBitsToAccessLevel(permBits: number): TAccessLevel; /** * Convert access role ID to permission bits */ export declare function accessRoleToPermBits(accessRoleId: string): number; /** * Check if permission bitmask contains other bitmask * @param permissions - The permission bitmask to check * @param requiredPermission - The required permission bit(s) * @returns {boolean} Whether permissions contains requiredPermission */ export declare function hasPermissions(permissions: number, requiredPermission: number): boolean;