import NodeCache from 'node-cache'; export type AvailableCacheIds = 'tmdb' | 'radarr' | 'sonarr' | 'rt'; const DEFAULT_TTL = 300; const DEFAULT_CHECK_PERIOD = 120; class Cache { public id: AvailableCacheIds; public data: NodeCache; public name: string; constructor( id: AvailableCacheIds, name: string, options: { stdTtl?: number; checkPeriod?: number } = {} ) { this.id = id; this.name = name; this.data = new NodeCache({ stdTTL: options.stdTtl ?? DEFAULT_TTL, checkperiod: options.checkPeriod ?? DEFAULT_CHECK_PERIOD, }); } public getStats() { return this.data.getStats(); } public flush(): void { this.data.flushAll(); } } class CacheManager { private availableCaches: Record = { tmdb: new Cache('tmdb', 'TMDb API', { stdTtl: 21600, checkPeriod: 60 * 30, }), radarr: new Cache('radarr', 'Radarr API'), sonarr: new Cache('sonarr', 'Sonarr API'), rt: new Cache('rt', 'Rotten Tomatoes API', { stdTtl: 43200, checkPeriod: 60 * 30, }), }; public getCache(id: AvailableCacheIds): Cache { return this.availableCaches[id]; } public getAllCaches(): Record { return this.availableCaches; } } const cacheManager = new CacheManager(); export default cacheManager;