/** * Profile Loader API * * Convenience functions for working with pre-built policy profiles. * * @example * ```typescript * import { listProfiles, loadProfile, customizeProfile } from '@peac/policy-kit'; * * // List available profiles * const ids = listProfiles(); // ['api-provider', 'news-media', ...] * * // Load a profile * const profile = loadProfile('news-media'); * * // Customize with parameters * const policy = customizeProfile('news-media', { * contact: 'licensing@example.com', * rate_limit: '100/hour', * }); * ``` * * @packageDocumentation */ import { type ProfileId } from './generated/profiles'; import type { ProfileDefinition, PolicyDocument, RateLimitConfig } from './types'; /** * Error thrown when profile operations fail */ export declare class ProfileError extends Error { readonly code: 'PROFILE_NOT_FOUND' | 'INVALID_PARAMETER' | 'MISSING_REQUIRED_PARAMETER' | 'VALIDATION_FAILED'; constructor(message: string, code: 'PROFILE_NOT_FOUND' | 'INVALID_PARAMETER' | 'MISSING_REQUIRED_PARAMETER' | 'VALIDATION_FAILED'); } /** * Result of parameter validation */ export interface ValidationResult { valid: boolean; errors: ValidationError[]; warnings: ValidationWarning[]; } /** * Validation error details */ export interface ValidationError { parameter: string; message: string; code: 'MISSING_REQUIRED' | 'INVALID_FORMAT' | 'UNKNOWN_PARAMETER'; } /** * Validation warning details */ export interface ValidationWarning { parameter: string; message: string; } /** * Customization result with policy and applied defaults */ export interface CustomizeResult { policy: PolicyDocument; appliedDefaults: { requirements?: { receipt?: boolean; }; rate_limit?: RateLimitConfig; }; parameters: Record; } /** * List all available profile IDs * * @returns Array of profile IDs * * @example * ```typescript * const ids = listProfiles(); * // ['api-provider', 'news-media', 'open-source', 'saas-docs'] * ``` */ export declare function listProfiles(): ProfileId[]; /** * Check if a profile ID exists * * @param id - Profile ID to check * @returns true if profile exists * * @example * ```typescript * if (hasProfile('news-media')) { * const profile = loadProfile('news-media'); * } * ``` */ export declare function hasProfile(id: string): id is ProfileId; /** * Load a profile by ID * * @param id - Profile ID * @returns Profile definition * @throws ProfileError if profile not found * * @example * ```typescript * const profile = loadProfile('news-media'); * console.log(profile.name); // 'News Media Publisher' * ``` */ export declare function loadProfile(id: ProfileId): ProfileDefinition; /** * Get a profile by ID, returning undefined if not found * * @param id - Profile ID * @returns Profile definition or undefined * * @example * ```typescript * const profile = getProfile('news-media'); * if (profile) { * console.log(profile.name); * } * ``` */ export declare function getProfile(id: string): ProfileDefinition | undefined; /** * Validate parameters against a profile's requirements * * @param profile - Profile definition or ID * @param params - Parameters to validate * @returns Validation result with errors and warnings * * @example * ```typescript * const result = validateProfileParams('news-media', { * contact: 'invalid-email', * }); * * if (!result.valid) { * console.error(result.errors); * } * ``` */ export declare function validateProfileParams(profile: ProfileId | ProfileDefinition, params: Record): ValidationResult; /** * Customize a profile with parameters to produce a PolicyDocument * * This applies parameter values and profile defaults to create a ready-to-use policy. * * @param profile - Profile definition or ID * @param params - Parameters to apply * @returns Customization result with policy and applied defaults * @throws ProfileError if validation fails * * @example * ```typescript * const result = customizeProfile('news-media', { * contact: 'licensing@example.com', * rate_limit: '100/hour', * }); * * // result.policy is a PolicyDocument ready for use * const decision = evaluate(result.policy, context); * ``` */ export declare function customizeProfile(profile: ProfileId | ProfileDefinition, params?: Record): CustomizeResult; /** * Get all profiles as an array * * @returns Array of all profile definitions * * @example * ```typescript * const profiles = getAllProfiles(); * for (const profile of profiles) { * console.log(`${profile.id}: ${profile.name}`); * } * ``` */ export declare function getAllProfiles(): ProfileDefinition[]; /** * Get profile summary for display purposes * * @param profile - Profile definition or ID * @returns Summary object with key information * * @example * ```typescript * const summary = getProfileSummary('news-media'); * console.log(summary); * // { * // id: 'news-media', * // name: 'News Media Publisher', * // defaultDecision: 'deny', * // ruleCount: 3, * // requiresReceipt: true, * // requiredParams: ['contact'] * // } * ``` */ export declare function getProfileSummary(profile: ProfileId | ProfileDefinition): { id: string; name: string; description: string; defaultDecision: 'allow' | 'deny' | 'review'; ruleCount: number; requiresReceipt: boolean; requiredParams: string[]; optionalParams: string[]; }; //# sourceMappingURL=profiles.d.ts.map