/** * Enforcement Profiles (v0.9.24+) * * Pre-defined profiles for handling undeclared and unknown purposes. * These are distinct from use-case profiles (api-provider, news-media, etc.). * * Three canonical profiles: * - `strict`: Deny undeclared purposes (regulated data, private APIs) * - `balanced`: Review + constraints for undeclared (general web, DEFAULT) * - `open`: Allow undeclared purposes with recording (public content, research) * * @example * ```typescript * import { * getEnforcementProfile, * evaluateWithProfile, * ENFORCEMENT_PROFILES, * } from '@peac/policy-kit'; * * // Get the balanced profile (default) * const profile = getEnforcementProfile('balanced'); * * // Evaluate with enforcement profile * const result = evaluateWithProfile(policy, context, 'balanced'); * ``` * * @packageDocumentation */ import type { EnforcementProfile, EnforcementProfileId, PolicyConstraints, ControlDecision } from './types'; /** * Strict enforcement profile. * * Use for: Regulated data, private APIs, compliance-critical resources. * - Undeclared purposes: DENY * - Unknown purpose tokens: DENY * - Receipts: Required */ export declare const STRICT_PROFILE: EnforcementProfile; /** * Balanced enforcement profile (DEFAULT). * * Use for: General web, gradual compliance, typical publisher use case. * - Undeclared purposes: REVIEW + constraints * - Unknown purpose tokens: REVIEW + preserve * - Receipts: Optional (encouraged) */ export declare const BALANCED_PROFILE: EnforcementProfile; /** * Open enforcement profile. * * Use for: Public content, research data, open access resources. * - Undeclared purposes: ALLOW (recorded) * - Unknown purpose tokens: ALLOW (preserved) * - Receipts: Optional (for attribution) */ export declare const OPEN_PROFILE: EnforcementProfile; /** * All canonical enforcement profiles indexed by ID. */ export declare const ENFORCEMENT_PROFILES: Record; /** * Default enforcement profile ID. * * `balanced` is the default to encourage adoption while maintaining some protection. */ export declare const DEFAULT_ENFORCEMENT_PROFILE: EnforcementProfileId; /** * All enforcement profile IDs. */ export declare const ENFORCEMENT_PROFILE_IDS: readonly EnforcementProfileId[]; /** * Get an enforcement profile by ID. * * @param id - Profile ID * @returns Enforcement profile * @throws Error if profile ID is invalid * * @example * ```typescript * const profile = getEnforcementProfile('balanced'); * console.log(profile.undeclared_decision); // 'review' * ``` */ export declare function getEnforcementProfile(id: EnforcementProfileId): EnforcementProfile; /** * Check if a string is a valid enforcement profile ID. * * @param id - String to check * @returns true if valid profile ID */ export declare function isEnforcementProfileId(id: string): id is EnforcementProfileId; /** * Get the default enforcement profile. * * @returns The balanced profile (default) */ export declare function getDefaultEnforcementProfile(): EnforcementProfile; /** * Result of purpose evaluation with enforcement profile. */ export interface PurposeEvaluationResult { /** Decision from enforcement profile */ decision: ControlDecision; /** Purpose enforced (for receipts) */ purpose_enforced?: string; /** Reason for the decision */ purpose_reason: string; /** Constraints to apply (for 'review' decisions) */ constraints?: PolicyConstraints; /** Whether the purpose was declared */ purpose_declared: boolean; /** Whether unknown purpose tokens were present */ has_unknown_tokens: boolean; /** Preserved unknown tokens (for forward compatibility) */ unknown_tokens: string[]; /** The profile that was applied */ profile_id: EnforcementProfileId; } /** * Evaluate declared purposes against an enforcement profile. * * This determines what decision to make based on the declared purposes * and the enforcement profile's rules for undeclared/unknown purposes. * * @param declaredPurposes - Array of purpose tokens from PEAC-Purpose header * @param profileId - Enforcement profile ID (default: 'balanced') * @returns Purpose evaluation result * * @example * ```typescript * // No purposes declared - uses undeclared_decision from profile * const result1 = evaluatePurpose([], 'strict'); * // { decision: 'deny', purpose_reason: 'denied', ... } * * // Known purpose declared * const result2 = evaluatePurpose(['train'], 'balanced'); * // { decision: 'allow', purpose_enforced: 'train', ... } * * // Unknown purpose token * const result3 = evaluatePurpose(['vendor:custom'], 'balanced'); * // { decision: 'review', has_unknown_tokens: true, unknown_tokens: ['vendor:custom'], ... } * ``` */ export declare function evaluatePurpose(declaredPurposes: string[], profileId?: EnforcementProfileId): PurposeEvaluationResult; /** * Get the HTTP status code for a purpose evaluation result. * * NOTE: 402 is RESERVED for payment - purpose decisions never return 402. * - allow -> 200 * - review -> 403 (NOT 402) * - deny -> 403 * * @param result - Purpose evaluation result * @returns HTTP status code (200 or 403) */ export declare function getPurposeStatusCode(result: PurposeEvaluationResult): 200 | 403; /** * Get the Retry-After header value from constraints. * * @param constraints - Policy constraints * @returns Retry-After seconds or undefined */ export declare function getRetryAfter(constraints: PolicyConstraints | undefined): number | undefined; //# sourceMappingURL=enforcement-profiles.d.ts.map