Highly ambitious ATProtocol AppView service and sdks
at main 57 lines 1.5 kB view raw
1import type { SessionAdapter, SessionData } from "../types.ts"; 2 3export class MemoryAdapter implements SessionAdapter { 4 private sessions = new Map<string, SessionData>(); 5 6 get(sessionId: string): Promise<SessionData | null> { 7 return Promise.resolve(this.sessions.get(sessionId) ?? null); 8 } 9 10 set(sessionId: string, data: SessionData): Promise<void> { 11 this.sessions.set(sessionId, data); 12 return Promise.resolve(); 13 } 14 15 update(sessionId: string, updates: Partial<SessionData>): Promise<boolean> { 16 const existing = this.sessions.get(sessionId); 17 if (!existing) return Promise.resolve(false); 18 19 this.sessions.set(sessionId, { ...existing, ...updates }); 20 return Promise.resolve(true); 21 } 22 23 delete(sessionId: string): Promise<void> { 24 this.sessions.delete(sessionId); 25 return Promise.resolve(); 26 } 27 28 cleanup(expiresBeforeMs: number): Promise<number> { 29 let cleanedCount = 0; 30 31 for (const [sessionId, data] of this.sessions.entries()) { 32 if (data.expiresAt < expiresBeforeMs) { 33 this.sessions.delete(sessionId); 34 cleanedCount++; 35 } 36 } 37 38 return Promise.resolve(cleanedCount); 39 } 40 41 exists(sessionId: string): Promise<boolean> { 42 return Promise.resolve(this.sessions.has(sessionId)); 43 } 44 45 // Memory-specific methods 46 clear(): void { 47 this.sessions.clear(); 48 } 49 50 size(): number { 51 return this.sessions.size; 52 } 53 54 keys(): string[] { 55 return Array.from(this.sessions.keys()); 56 } 57}