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
TypeScript
/**
* 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