UNPKG

@dollhousemcp/mcp-server

Version:

DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.

51 lines 5.04 kB
/** * API caching implementation for reducing redundant network requests. * Backed by a shared LRU cache to prevent unbounded memory growth. */ import { SECURITY_LIMITS } from '../security/constants.js'; import { CacheFactory } from './LRUCache.js'; const DEFAULT_MAX_ENTRIES = 500; const DEFAULT_MAX_MEMORY_MB = 10; export class APICache { cache; constructor(options = {}) { this.cache = CacheFactory.createAPICache({ maxSize: options.maxEntries ?? DEFAULT_MAX_ENTRIES, maxMemoryMB: options.maxMemoryMB ?? DEFAULT_MAX_MEMORY_MB, ttlMs: options.ttlMs ?? SECURITY_LIMITS.CACHE_TTL_MS, onEviction: options.onEviction }); } /** * Retrieve cached data if still valid. */ get(key) { const value = this.cache.get(key); return value === undefined ? null : value; } /** * Cache data with automatic eviction and TTL handling. */ set(key, data) { this.cache.set(key, data); } /** * Clear all cached entries. */ clear() { this.cache.clear(); } /** * Get current cache size. */ size() { return this.cache.size; } /** * Inspect cache statistics for observability/testing. */ getStats() { return this.cache.getStats(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJQ2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2FjaGUvQVBJQ2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQTZCLE1BQU0sZUFBZSxDQUFDO0FBU3hFLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBRWpDLE1BQU0sT0FBTyxRQUFRO0lBQ1gsS0FBSyxDQUFnQjtJQUU3QixZQUFZLFVBQTJCLEVBQUU7UUFDdkMsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDO1lBQ3ZDLE9BQU8sRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLG1CQUFtQjtZQUNsRCxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSxxQkFBcUI7WUFDekQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksZUFBZSxDQUFDLFlBQVk7WUFDcEQsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1NBQy9CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEdBQUcsQ0FBVSxHQUFXO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxLQUFXLENBQUM7SUFDbkQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsR0FBRyxDQUFVLEdBQVcsRUFBRSxJQUFPO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQVBJIGNhY2hpbmcgaW1wbGVtZW50YXRpb24gZm9yIHJlZHVjaW5nIHJlZHVuZGFudCBuZXR3b3JrIHJlcXVlc3RzLlxuICogQmFja2VkIGJ5IGEgc2hhcmVkIExSVSBjYWNoZSB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgZ3Jvd3RoLlxuICovXG5cbmltcG9ydCB7IFNFQ1VSSVRZX0xJTUlUUyB9IGZyb20gJy4uL3NlY3VyaXR5L2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBDYWNoZUZhY3RvcnksIExSVUNhY2hlLCB0eXBlIENhY2hlU3RhdHMgfSBmcm9tICcuL0xSVUNhY2hlLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBBUElDYWNoZU9wdGlvbnMge1xuICBtYXhFbnRyaWVzPzogbnVtYmVyO1xuICBtYXhNZW1vcnlNQj86IG51bWJlcjtcbiAgdHRsTXM/OiBudW1iZXI7XG4gIG9uRXZpY3Rpb24/OiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHZvaWQ7XG59XG5cbmNvbnN0IERFRkFVTFRfTUFYX0VOVFJJRVMgPSA1MDA7XG5jb25zdCBERUZBVUxUX01BWF9NRU1PUllfTUIgPSAxMDtcblxuZXhwb3J0IGNsYXNzIEFQSUNhY2hlIHtcbiAgcHJpdmF0ZSBjYWNoZTogTFJVQ2FjaGU8YW55PjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBBUElDYWNoZU9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuY2FjaGUgPSBDYWNoZUZhY3RvcnkuY3JlYXRlQVBJQ2FjaGUoe1xuICAgICAgbWF4U2l6ZTogb3B0aW9ucy5tYXhFbnRyaWVzID8/IERFRkFVTFRfTUFYX0VOVFJJRVMsXG4gICAgICBtYXhNZW1vcnlNQjogb3B0aW9ucy5tYXhNZW1vcnlNQiA/PyBERUZBVUxUX01BWF9NRU1PUllfTUIsXG4gICAgICB0dGxNczogb3B0aW9ucy50dGxNcyA/PyBTRUNVUklUWV9MSU1JVFMuQ0FDSEVfVFRMX01TLFxuICAgICAgb25FdmljdGlvbjogb3B0aW9ucy5vbkV2aWN0aW9uXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgY2FjaGVkIGRhdGEgaWYgc3RpbGwgdmFsaWQuXG4gICAqL1xuICBnZXQ8VCA9IGFueT4oa2V5OiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6ICh2YWx1ZSBhcyBUKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWNoZSBkYXRhIHdpdGggYXV0b21hdGljIGV2aWN0aW9uIGFuZCBUVEwgaGFuZGxpbmcuXG4gICAqL1xuICBzZXQ8VCA9IGFueT4oa2V5OiBzdHJpbmcsIGRhdGE6IFQpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLnNldChrZXksIGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBjYWNoZWQgZW50cmllcy5cbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBjYWNoZSBzaXplLlxuICAgKi9cbiAgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogSW5zcGVjdCBjYWNoZSBzdGF0aXN0aWNzIGZvciBvYnNlcnZhYmlsaXR5L3Rlc3RpbmcuXG4gICAqL1xuICBnZXRTdGF0cygpOiBDYWNoZVN0YXRzIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXRTdGF0cygpO1xuICB9XG59XG4iXX0=