/**
 * Entitlements — the single gate between a cached license and paid features.
 *
 * Design intent (open-core): the open-source CORE never calls `requireFeature`
 * to lock its own behavior — Community must stay 100% functional. This helper
 * exists so the PRIVATE `openlife-enterprise` code (which depends on
 * @openlife/cli) has one trustworthy place to ask "is this feature paid-for?".
 *
 * A feature is granted only when ALL hold:
 *   1. a license file exists,
 *   2. its Ed25519 signature verifies against the embedded public key,
 *   3. it has not expired ("em dia"),
 *   4. the resolved entitlements include the feature.
 */
import { LicenseManager } from './LicenseManager';
import type { Tier } from './LicenseManager';
export interface EntitlementState {
    tier: Tier;
    features: string[];
    expiresAt: string | null;
    status: 'active' | 'expired' | 'invalid' | 'none';
}
export declare class Entitlements {
    private readonly manager;
    private readonly store;
    constructor(root?: string, manager?: LicenseManager);
    /** Resolve the current, fully-validated entitlement state. */
    state(now?: Date): EntitlementState;
    /** Non-throwing check used by paid code paths. */
    hasFeature(feature: string, now?: Date): boolean;
    /**
     * Throwing guard for paid code paths. The message points the user at the CLI
     * so the upsell is self-service.
     */
    requireFeature(feature: string, now?: Date): void;
}
