import type { DevSession, RegisterSessionInput, SessionRegistryConfig, ISessionRegistry } from './session-registry.types';
/**
 * DynamoDB-backed Session Registry for Awake Lambda Development.
 *
 * Provides session management with automatic TTL-based expiry.
 * Sessions are stored with devId as partition key and functionName as sort key.
 *
 * @see Requirements 6.1, 6.2, 6.4, 6.5
 *
 * @example
 * ```typescript
 * const registry = new SessionRegistry({
 *   tableName: 'my-app-dev-runtime-awake-sessions',
 *   region: 'us-east-1',
 *   timeoutSeconds: 120,
 * });
 *
 * // Register a session
 * const session = await registry.registerSession({
 *   devId: 'john.doe',
 *   functionName: '*',
 *   hostname: 'johns-macbook',
 *   appName: 'my-app',
 *   stage: 'dev',
 *   cliVersion: '1.0.0',
 *   iotClientId: 'john.doe-abc123',
 * });
 *
 * // Check for active session
 * const active = await registry.getActiveSession('john.doe', 'payments-charge');
 * ```
 */
export declare class SessionRegistry implements ISessionRegistry {
    private readonly client;
    private readonly tableName;
    private readonly timeoutSeconds;
    /**
     * Creates a new SessionRegistry instance.
     *
     * @param config - Configuration for the session registry
     */
    constructor(config: SessionRegistryConfig);
    /**
     * Register or update a developer session.
     *
     * Creates a new session or updates an existing one with fresh heartbeat.
     * The TTL is set to lastHeartbeat + timeoutSeconds for DynamoDB auto-expiry.
     *
     * @param input - Session registration data
     * @returns The registered session with computed fields
     *
     * @see Requirements 6.1, 6.2
     */
    registerSession(input: RegisterSessionInput): Promise<DevSession>;
    /**
     * Get an active session for a developer and function.
     *
     * First tries to find an exact match for the function name.
     * If not found, falls back to checking for a wildcard ('*') session.
     * Returns null if no session exists or if the session is stale.
     *
     * @param devId - Developer identifier
     * @param functionName - Function name to look up
     * @returns The active session or null if not found/stale
     *
     * @see Requirements 1.1, 6.3
     */
    getActiveSession(devId: string, functionName: string): Promise<DevSession | null>;
    /**
     * Mark a session as offline (deregister).
     *
     * Deletes the session from DynamoDB immediately.
     * Called during graceful shutdown to prevent routing to disconnected CLI.
     *
     * @param devId - Developer identifier
     * @param functionName - Function name or '*' for wildcard
     *
     * @see Requirements 6.4
     */
    deregisterSession(devId: string, functionName: string): Promise<void>;
    /**
     * Update the heartbeat timestamp for a session.
     *
     * Extends the session TTL to prevent expiry during active development.
     * Uses conditional update to only update if the session exists.
     *
     * @param devId - Developer identifier
     * @param functionName - Function name or '*' for wildcard
     *
     * @see Requirements 6.5
     */
    heartbeat(devId: string, functionName: string): Promise<void>;
    /**
     * Get a session by its primary key (devId + functionName).
     *
     * @param devId - Developer identifier
     * @param functionName - Function name
     * @returns The session or null if not found
     */
    private getSessionByKey;
}
