UNPKG

@digitalsamba/embedded-api-mcp-server

Version:

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

173 lines 5.3 kB
/** * Digital Samba MCP Server - Cache Module * * This module provides caching functionality for the Digital Samba MCP Server. * It implements a flexible caching system for API responses, reducing load on * the Digital Samba API and improving response times for clients. * * Features include: * - Configurable TTL (Time-To-Live) for cached responses * - Memory-based cache storage * - Optional Redis-based storage for distributed deployments * - Cache invalidation strategies * - Support for conditional requests (ETag, If-Modified-Since) * * @module cache * @author Digital Samba Team * @version 0.1.0 */ /** * Cache options interface */ export interface CacheOptions { /** Default TTL in milliseconds */ ttl: number; /** Maximum number of items to store */ maxItems?: number; /** Whether to use ETag for conditional requests */ useEtag?: boolean; /** Function to generate cache keys */ keyGenerator?: (namespace: string, id: string) => string; /** Custom serialization function */ serializer?: (value: unknown) => string; /** Custom deserialization function */ deserializer?: (value: string) => unknown; } /** * Cache entry interface */ interface CacheEntry<T> { /** Cached value */ value: T; /** Expiration timestamp */ expires: number; /** ETag for conditional requests */ etag?: string; /** Last modified timestamp */ lastModified?: Date; } /** * Default cache options */ export declare const defaultCacheOptions: CacheOptions; /** * Memory-based cache implementation */ export declare class MemoryCache<T = unknown> { private cache; private options; private cleanupTimer?; /** * Creates a new MemoryCache * @param options Cache options */ constructor(options?: Partial<CacheOptions>); /** * Generates an ETag for a value * * Creates a unique identifier based on the content hash that can be used * for HTTP conditional requests (If-None-Match header). * * @param {unknown} value - Value to generate ETag for * @returns {string} ETag string (MD5 hash truncated to 16 chars) * @private */ private generateEtag; /** * Starts the cleanup interval to remove expired items */ private startCleanupInterval; /** * Cleans up expired cache entries */ cleanup(): void; /** * Sets a value in the cache * * This method stores a value in the cache with automatic expiration and optional * ETag generation for conditional requests. It handles cache size limits by * evicting the oldest entries when necessary. * * @param {string} namespace - Cache namespace (e.g., 'rooms', 'sessions') * @param {string} id - Unique identifier within the namespace * @param {T} value - Value to cache * @param {number} [ttl] - Optional TTL override in milliseconds * @returns {CacheEntry<T>} The cached entry with metadata * * @example * // Cache a room object for 10 minutes * cache.set('rooms', 'room-123', roomData, 600000); * * @example * // Cache with default TTL * cache.set('sessions', 'session-456', sessionData); */ set(namespace: string, id: string, value: T, ttl?: number): CacheEntry<T>; /** * Gets a value from the cache * @param namespace Cache namespace * @param id Item identifier * @returns The cached entry or undefined if not found or expired */ get(namespace: string, id: string): CacheEntry<T> | undefined; /** * Deletes a value from the cache * @param namespace Cache namespace * @param id Item identifier * @returns Whether the item was deleted */ delete(namespace: string, id: string): boolean; /** * Invalidates a specific cache entry in a namespace * @param namespace Cache namespace * @param id Item identifier * @returns Whether the item was invalidated */ invalidate(namespace: string, id: string): boolean; /** * Invalidates all items in a namespace * @param namespace Cache namespace * @returns Number of items invalidated */ invalidateNamespace(namespace: string): number; /** * Checks if a value is fresh based on conditional headers * @param namespace Cache namespace * @param id Item identifier * @param etag ETag to compare * @param modifiedSince Last-Modified date to compare * @returns Whether the cached value is considered fresh */ isFresh(namespace: string, id: string, etag?: string, modifiedSince?: Date): boolean; /** * Evicts the oldest item from the cache * @returns Whether an item was evicted */ private evictOldest; /** * Clears the entire cache */ clear(): void; /** * Gets cache statistics * @returns Cache statistics */ getStats(): { totalItems: number; validItems: number; expiredItems: number; maxItems: number; }; /** * Destroys the cache and clears cleanup timers */ destroy(): void; } /** * Exports the default cache */ declare const _default: { MemoryCache: typeof MemoryCache; }; export default _default; //# sourceMappingURL=cache.d.ts.map