UNPKG

digital-samba-mcp-server

Version:

Digital Samba MCP Server - Model Context Protocol server for Digital Samba's video conferencing API

157 lines 4.85 kB
/** * 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