memory.storage.ts•1.28 kB
import { IStorageService } from "../../core/interfaces/storage.interface.js";
export class InMemoryStorage<T = any> implements IStorageService<T> {
private storage = new Map<string, { data: T; timestamp: number }>();
private ttl: number;
constructor(ttlMinutes: number = 60) {
this.ttl = ttlMinutes * 60 * 1000; // Convert to milliseconds
// Clean up expired items every 10 minutes
setInterval(() => {
this.cleanup();
}, 10 * 60 * 1000);
}
get(key: string): T | undefined {
const item = this.storage.get(key);
if (!item) {
return undefined;
}
// Check if item has expired
if (Date.now() - item.timestamp > this.ttl) {
this.storage.delete(key);
return undefined;
}
return item.data;
}
set(key: string, value: T): void {
this.storage.set(key, {
data: value,
timestamp: Date.now(),
});
}
delete(key: string): boolean {
return this.storage.delete(key);
}
cleanup(): void {
const now = Date.now();
for (const [key, item] of this.storage.entries()) {
if (now - item.timestamp > this.ttl) {
this.storage.delete(key);
}
}
}
size(): number {
return this.storage.size;
}
clear(): void {
this.storage.clear();
}
}