import type { EventId, EventStore, StreamId } from '@frontmcp/protocol'; import type { JSONRPCMessage } from '@frontmcp/protocol'; import type { RedisOptionsInput } from '../../common'; export interface RedisEventStoreOptions { /** * Redis configuration. * Supports both Redis (ioredis) and Vercel KV providers. */ redis: RedisOptionsInput; /** * Key prefix for all event keys. * @default 'mcp:events:' */ keyPrefix?: string; /** * Maximum number of events per stream. * @default 10000 */ maxEvents?: number; /** * TTL in milliseconds for stored events. * @default 300000 (5 minutes) */ ttlMs?: number; } /** * Redis-based EventStore for SSE resumability support. * * Uses Redis Streams (XADD) for efficient event storage and retrieval. * Suitable for distributed deployments where multiple server instances * need to share event state for SSE resumability. * * Features: * - Uses Redis Streams for efficient event storage * - TTL-based expiration via key TTL * - Max events limit via MAXLEN trimming * - Automatic Redis client lazy initialization * * @example * ```typescript * const eventStore = new RedisEventStore({ * redis: { provider: 'redis', host: 'localhost', port: 6379 }, * maxEvents: 10000, * ttlMs: 300000, * }); * ``` */ export declare class RedisEventStore implements EventStore { private client; private readonly keyPrefix; private readonly maxEvents; private readonly ttlSeconds; private readonly redisOptions; constructor(options: RedisEventStoreOptions); /** * Get or create the Redis client. * Uses lazy initialization to avoid connection issues at startup. */ private getClient; storeEvent(streamId: StreamId, message: JSONRPCMessage): Promise; replayEventsAfter(lastEventId: EventId, { send }: { send: (eventId: EventId, message: JSONRPCMessage) => Promise; }): Promise; /** * Parse an event ID into stream ID and Redis stream entry ID. * * Event IDs have format: `{streamId}:{redisStreamEntryId}` * Redis stream entry IDs have format: `{timestamp}-{sequence}` * * @example * 'my-stream:1234567890123-0' -> ['my-stream', '1234567890123-0'] */ private parseEventId; /** * Close the Redis client connection. */ close(): Promise; } //# sourceMappingURL=redis.event-store.d.ts.map