/** * Session Store Interface and Implementations * * Provides session management for SERV with support for * in-memory (development) and Redis (production) backends */ import type { Session, SessionCreateOptions } from '../types/index.js'; export interface SessionStore { /** * Create a new session */ create(options: SessionCreateOptions): Promise; /** * Get session by ID */ get(sessionId: string): Promise; /** * Get sessions by user ID within a tenant */ getByUser(tenantId: string, userId: string): Promise; /** * Update last activity time (sliding expiration) */ touch(sessionId: string): Promise; /** * Invalidate a session */ destroy(sessionId: string): Promise; /** * Invalidate all sessions for a user in a tenant */ destroyByUser(tenantId: string, userId: string): Promise; /** * Clean up expired sessions */ cleanup(): Promise; /** * Close the store connection */ close(): Promise; } export interface SessionConfig { /** Default session TTL in seconds (default: 15 minutes) */ defaultTtlSeconds: number; /** Maximum session TTL in seconds (default: 24 hours) */ maxTtlSeconds: number; /** Cleanup interval in milliseconds (default: 5 minutes) */ cleanupIntervalMs: number; } export declare class MemorySessionStore implements SessionStore { private sessions; private userSessions; private cleanupTimer?; private config; constructor(config?: Partial); create(options: SessionCreateOptions): Promise; get(sessionId: string): Promise; getByUser(tenantId: string, userId: string): Promise; touch(sessionId: string): Promise; destroy(sessionId: string): Promise; destroyByUser(tenantId: string, userId: string): Promise; cleanup(): Promise; close(): Promise; private startCleanup; } export interface RedisSessionStoreOptions { /** Redis client instance or connection URL */ redis: RedisClient | string; /** Key prefix for session storage */ keyPrefix?: string; /** Session configuration */ config?: Partial; } export interface RedisClient { get(key: string): Promise; set(key: string, value: string, options?: { EX?: number; }): Promise; del(key: string | string[]): Promise; keys(pattern: string): Promise; sadd(key: string, ...members: string[]): Promise; srem(key: string, ...members: string[]): Promise; smembers(key: string): Promise; expire(key: string, seconds: number): Promise; quit(): Promise; } export declare class RedisSessionStore implements SessionStore { private redis; private keyPrefix; private config; private cleanupTimer?; constructor(options: RedisSessionStoreOptions); private sessionKey; private userSessionsKey; create(options: SessionCreateOptions): Promise; get(sessionId: string): Promise; getByUser(tenantId: string, userId: string): Promise; touch(sessionId: string): Promise; destroy(sessionId: string): Promise; destroyByUser(tenantId: string, userId: string): Promise; cleanup(): Promise; close(): Promise; private startCleanup; } export type SessionStoreType = 'memory' | 'redis' | 'kv'; export interface CreateSessionStoreOptions { type: SessionStoreType; redis?: RedisClient; kv?: unknown; config?: Partial; } export declare function createSessionStore(options: CreateSessionStoreOptions): SessionStore; //# sourceMappingURL=store.d.ts.map