export interface SessionData { sessionId: string; userId: string; handle?: string; isAuthenticated: boolean; data?: Record; createdAt: number; expiresAt: number; lastAccessedAt: number; } export interface SessionUser { sessionId?: string; sub?: string; handle?: string; isAuthenticated: boolean; [key: string]: unknown; } export interface SessionOptions { adapter: SessionAdapter; cookieName?: string; cookieOptions?: CookieOptions; sessionTTL?: number; // milliseconds, default 30 days cleanupInterval?: number; // milliseconds, default 1 hour generateId?: () => string; } export interface CookieOptions { httpOnly?: boolean; secure?: boolean; sameSite?: "strict" | "lax" | "none"; domain?: string; path?: string; maxAge?: number; // seconds } export interface SessionAdapter { get(sessionId: string): Promise; set(sessionId: string, data: SessionData): Promise; update(sessionId: string, data: Partial): Promise; delete(sessionId: string): Promise; cleanup(expiresBeforeMs: number): Promise; exists(sessionId: string): Promise; }