import { ReactNode } from 'react'; import { ArchbaseSecurityManager } from '../ArchbaseSecurityManager'; import { UserDto } from '../SecurityDomain'; export interface ArchbaseSecurityError { code: string; message: string; details?: any; } export type ArchbasePermissionAction = string; export type ArchbasePermissionList = ArchbasePermissionAction[]; export interface ArchbaseGlobalSecurityState { user: UserDto | null; isAuthenticated: boolean; isLoading: boolean; error: ArchbaseSecurityError | null; } export interface ArchbaseViewSecurityConfig { resourceName: string; resourceDescription: string; requiredPermissions?: ArchbasePermissionList; autoRegisterActions?: boolean; strictMode?: boolean; } export interface ArchbaseProtectionConfig { actionName?: ArchbasePermissionAction; requiredPermissions?: ArchbasePermissionList; requireAll?: boolean; fallback?: ReactNode; autoRegister?: boolean; } export type ArchbaseSecurityCallback = (manager: ArchbaseSecurityManager) => void; export type ArchbaseErrorCallback = (error: string) => void; export interface ArchbasePermissionCheckResult { hasAccess: boolean; missingPermissions?: ArchbasePermissionList; reason?: string; } export declare enum ArchbaseFallbackType { HIDDEN = "hidden", DISABLED = "disabled", MESSAGE = "message", CUSTOM = "custom" } export interface ArchbaseAdvancedSecurityConfig extends ArchbaseViewSecurityConfig { fallbackType?: ArchbaseFallbackType; customFallback?: ReactNode; onAccessDenied?: (missingPermissions: ArchbasePermissionList) => void; onError?: ArchbaseErrorCallback; debugMode?: boolean; }