import { Policy, PolicySet, AccessRequest, EvaluationResult } from './types'; /** * Policy evaluation context. */ export interface EvaluationContext { /** Current timestamp */ now: number; /** Client IP address */ clientIp?: string; /** User agent */ userAgent?: string; /** Additional context attributes */ attributes?: Record; } /** * Policy Evaluator for ABAC-style access control. * * Evaluates access requests against policy sets using configurable * combining algorithms and condition evaluation. * * @example * ```typescript * const evaluator = new PolicyEvaluator(); * * // Add policies * evaluator.addPolicy({ * id: 'admin-full-access', * name: 'Admin Full Access', * effect: 'allow', * priority: 100, * subjects: [{ type: 'role', identifier: 'admin' }], * resources: [{ type: '*' }], * actions: ['*'], * enabled: true, * }); * * // Evaluate request * const result = evaluator.evaluate({ * subject: { id: 'user-123', type: 'user', roles: ['admin'] }, * resource: { type: 'documents', id: 'doc-456' }, * action: 'delete', * }); * * console.log(result.allowed); // true * ``` */ export declare class PolicyEvaluator { private policies; private policySets; private readonly defaultCombiningAlgorithm; private readonly debug; constructor(options?: { defaultCombiningAlgorithm?: PolicySet['combiningAlgorithm']; debug?: boolean; }); /** * Add a policy. * * @param policy - Policy to add */ addPolicy(policy: Policy): void; /** * Add multiple policies. * * @param policies - Policies to add */ addPolicies(policies: Policy[]): void; /** * Remove a policy. * * @param policyId - Policy ID to remove */ removePolicy(policyId: string): void; /** * Update a policy. * * @param policyId - Policy ID to update * @param updates - Partial updates */ updatePolicy(policyId: string, updates: Partial): void; /** * Get a policy by ID. * * @param policyId - Policy ID * @returns Policy or undefined */ getPolicy(policyId: string): Policy | undefined; /** * Get all policies. * * @returns Array of all policies */ getAllPolicies(): Policy[]; /** * Add a policy set. * * @param policySet - Policy set to add */ addPolicySet(policySet: PolicySet): void; /** * Remove a policy set. * * @param policySetId - Policy set ID */ removePolicySet(policySetId: string): void; /** * Evaluate an access request. * * @param request - Access request * @param context - Additional evaluation context * @returns Evaluation result */ evaluate(request: AccessRequest, context?: EvaluationContext): EvaluationResult; /** * Evaluate using a specific policy set. * * @param policySetId - Policy set ID * @param request - Access request * @param context - Additional context * @returns Evaluation result */ evaluatePolicySet(policySetId: string, request: AccessRequest, context?: EvaluationContext): EvaluationResult; /** * Evaluate a single policy. */ private evaluatePolicy; /** * Evaluate subject matching. */ private evaluateSubjects; /** * Evaluate resource matching. */ private evaluateResources; /** * Evaluate action matching. */ private evaluateActions; /** * Evaluate policy conditions. */ private evaluateConditions; /** * Evaluate a single condition. */ private evaluateCondition; /** * Evaluate time-based condition. */ private evaluateTimeCondition; /** * Evaluate IP-based condition. */ private evaluateIPCondition; /** * Evaluate location-based condition. */ private evaluateLocationCondition; /** * Evaluate attribute-based condition. */ private evaluateAttributeCondition; /** * Evaluate context-based condition. */ private evaluateContextCondition; /** * Evaluate custom condition (can be extended). */ private evaluateCustomCondition; /** * Compare values using operator. */ private compareValue; /** * Combine policy evaluation results using combining algorithm. */ private combineResults; /** * Deny-overrides combining algorithm. */ private denyOverrides; /** * Permit-overrides combining algorithm. */ private permitOverrides; /** * First-applicable combining algorithm. */ private firstApplicable; /** * Ordered-deny-overrides (respects policy priority). */ private orderedDenyOverrides; /** * Ordered-permit-overrides (respects policy priority). */ private orderedPermitOverrides; /** * Build evaluation context. */ private buildContext; /** * Get all applicable policies for a request. */ private getApplicablePolicies; /** * Check if request matches policy set target. */ private matchesTarget; /** * Match identifier with pattern support. */ private matchIdentifier; /** * Match string with wildcard pattern. */ private matchWildcard; /** * Log debug message. */ private log; } /** * Create a new policy evaluator. * * @param options - Evaluator options * @returns PolicyEvaluator instance */ export declare function createPolicyEvaluator(options?: { policies?: Policy[]; policySets?: PolicySet[]; defaultCombiningAlgorithm?: PolicySet['combiningAlgorithm']; debug?: boolean; }): PolicyEvaluator;