import MessageBus from 'src/sdk/MessageBus'; export default abstract class AbstractService { protected static readonly messageBus: MessageBus = MessageBus.getInstance(); private static readonly CACHE_TTL = 60 * 60 * 1000; // 60 minutes cache TTL protected constructor() { } protected static setItem(key: string, processId: string, process: any): void { const cache: Record = JSON.parse(sessionStorage.getItem(key) || '{}'); cache[processId] = { process: process, // we overwrite existing process timestamp: Date.now() }; sessionStorage.setItem(key, JSON.stringify(cache)); } protected static getItem(key: string, processId: string): any | null { const cache: Record = JSON.parse(sessionStorage.getItem(key) || '{}'); const item = cache[processId]; if (!item) { return null; } const now: number = Date.now(); if ((now - item.timestamp) < this.CACHE_TTL) { return { process: item.process, timestamp: item.timestamp }; } return null; } protected static getItems(key: string): Record { const cache: Record = JSON.parse(sessionStorage.getItem(key) || '{}'); const now: number = Date.now(); const validItems: Record = {}; for (const [processId, item] of Object.entries(cache)) { if (now - item.timestamp < this.CACHE_TTL) { validItems[processId] = item.process; } } return validItems; } protected static removeItem(key: string, processId: string): void { const cache: Record = JSON.parse(sessionStorage.getItem(key) || '{}'); delete cache[processId]; sessionStorage.setItem(key, JSON.stringify(cache)); } }