/**
 * Digital Samba MCP Server - Token Manager Module
 *
 * This module provides functionality for managing API tokens, including automatic
 * refresh of tokens when they expire and connection management for maintaining
 * a stable connection to the Digital Samba API.
 *
 * Features include:
 * - Token refresh based on expiration monitoring
 * - Background token refresh to avoid service interruption
 * - Automatic retry with exponential backoff for failed refresh attempts
 * - Event emission for token refresh lifecycle events
 * - Configurable refresh settings
 *
 * @module token-manager
 * @author Digital Samba Team
 * @version 0.1.0
 */
import { EventEmitter } from 'events';
import { TokenOptions } from './digital-samba-api.js';
/**
 * Token manager options interface
 */
export interface TokenManagerOptions {
    /** API URL for the Digital Samba API */
    apiUrl?: string;
    /** Room ID for generating tokens */
    roomId: string;
    /** Token options for generating tokens */
    tokenOptions: TokenOptions;
    /** Refresh margin before expiration in milliseconds (default: 5 minutes) */
    refreshMarginMs?: number;
    /** Maximum number of refresh attempts (default: 3) */
    maxRefreshAttempts?: number;
    /** Initial backoff time for failed refresh attempts in milliseconds (default: 1000) */
    initialBackoffMs?: number;
    /** Maximum backoff time for failed refresh attempts in milliseconds (default: 30000) */
    maxBackoffMs?: number;
    /** Whether to retry on auth errors (default: false) */
    retryOnAuthError?: boolean;
}
/**
 * Token object with expiration and other metadata
 */
export interface Token {
    /** The actual token string */
    token: string;
    /** The room link */
    link: string;
    /** When the token was created */
    createdAt: Date;
    /** When the token expires, calculated from token options */
    expiresAt: Date;
    /** Session ID associated with this token */
    sessionId?: string;
}
/**
 * Token Manager class
 *
 * Manages room tokens for the Digital Samba API, handling automatic refresh
 * and expiration monitoring.
 */
export declare class TokenManager extends EventEmitter {
    private options;
    private tokens;
    private refreshTimers;
    private refreshing;
    private apiClient;
    /**
     * Token Manager constructor
     * @param options Token manager options
     */
    constructor(options: TokenManagerOptions);
    /**
     * Generate a new token
     * @param sessionId Session ID for the token
     * @param apiKey API key to use for token generation
     * @returns Promise resolving to the generated token
     */
    generateToken(sessionId: string, apiKey?: string): Promise<Token>;
    /**
     * Get a token for a session
     * @param sessionId Session ID
     * @returns The token or undefined if not found
     */
    getToken(sessionId: string): Token | undefined;
    /**
     * Check if a token is expired
     * @param token Token to check
     * @returns Whether the token is expired
     */
    isTokenExpired(token: Token): boolean;
    /**
     * Check if a token is about to expire (within the refresh margin)
     * @param token Token to check
     * @returns Whether the token is about to expire
     */
    isTokenExpiring(token: Token): boolean;
    /**
     * Schedule a token refresh
     * @param sessionId Session ID
     */
    private scheduleRefresh;
    /**
     * Clear a refresh timer
     * @param sessionId Session ID
     */
    private clearRefreshTimer;
    /**
     * Refresh a token
     * @param sessionId Session ID
     * @param attempt Attempt number (for retries)
     */
    private refreshToken;
    /**
     * Remove a token
     * @param sessionId Session ID
     * @returns Whether the token was removed
     */
    removeToken(sessionId: string): boolean;
    /**
     * Get all managed tokens
     * @returns All tokens
     */
    getAllTokens(): Map<string, Token>;
    /**
     * Get statistics about managed tokens
     * @returns Token statistics
     */
    getStats(): {
        totalTokens: number;
        expiredTokens: number;
        expiringTokens: number;
        activeRefreshes: number;
    };
    /**
     * Clean up resources
     */
    destroy(): void;
}
/**
 * Create a token manager for a room
 * @param roomId Room ID
 * @param tokenOptions Token options
 * @param options Additional token manager options
 * @returns A new token manager instance
 */
export declare function createTokenManager(roomId: string, tokenOptions: TokenOptions, options?: Partial<Omit<TokenManagerOptions, 'roomId' | 'tokenOptions'>>): TokenManager;
/**
 * Export default token manager utilities
 */
declare const _default: {
    TokenManager: typeof TokenManager;
    createTokenManager: typeof createTokenManager;
};
export default _default;
//# sourceMappingURL=token-manager.d.ts.map