import * as plugins from '../plugins.js';
/**
 * Base class for all cached documents with TTL support
 *
 * Extends smartdata's SmartDataDbDoc to add:
 * - Automatic timestamps (createdAt, lastAccessedAt)
 * - TTL/expiration support (expiresAt)
 * - Helper methods for TTL management
 *
 * NOTE: Subclasses MUST add @svDb() decorators to createdAt, expiresAt, and lastAccessedAt
 * since decorators on abstract classes don't propagate correctly.
 */
export declare abstract class CachedDocument<T extends CachedDocument<T>> extends plugins.smartdata.SmartDataDbDoc<T, T> {
    /**
     * Timestamp when the document was created
     * NOTE: Subclasses must add @svDb() decorator
     */
    createdAt: Date;
    /**
     * Timestamp when the document expires and should be cleaned up
     * NOTE: Subclasses must add @svDb() decorator
     */
    expiresAt: Date;
    /**
     * Timestamp of last access (for LRU-style eviction if needed)
     * NOTE: Subclasses must add @svDb() decorator
     */
    lastAccessedAt: Date;
    /**
     * Set the TTL (time to live) for this document
     * @param ttlMs Time to live in milliseconds
     */
    setTTL(ttlMs: number): void;
    /**
     * Set TTL using days
     * @param days Number of days until expiration
     */
    setTTLDays(days: number): void;
    /**
     * Set TTL using hours
     * @param hours Number of hours until expiration
     */
    setTTLHours(hours: number): void;
    /**
     * Check if this document has expired
     */
    isExpired(): boolean;
    /**
     * Update the lastAccessedAt timestamp
     */
    touch(): void;
    /**
     * Get remaining TTL in milliseconds
     * Returns 0 if expired, -1 if no expiration set
     */
    getRemainingTTL(): number;
    /**
     * Extend the TTL by the specified milliseconds from now
     * @param ttlMs Additional time to live in milliseconds
     */
    extendTTL(ttlMs: number): void;
    /**
     * Set the document to never expire (100 years in the future)
     */
    setNeverExpires(): void;
}
/**
 * TTL constants in milliseconds
 */
export declare const TTL: {
    readonly HOURS_1: number;
    readonly HOURS_24: number;
    readonly DAYS_7: number;
    readonly DAYS_30: number;
    readonly DAYS_90: number;
};
