forked from
slices.network/slices
Highly ambitious ATProtocol AppView service and sdks
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}