import { AuthorizationSession, TokenRecord } from "../types.js"; import { TokenStore } from "./token-store.js"; /** * Redis-backed TokenStore for production use. * Persists tokens across server restarts via Redis. * * Key layout: * - elnora:mcp:session:{authCode} → JSON AuthorizationSession (5 min TTL) * - elnora:mcp:token:{accessToken} → JSON TokenRecord (30 day TTL) * - elnora:mcp:refresh:{refreshToken} → accessToken (30 day TTL) * - elnora:mcp:vcache:{accessToken} → epoch seconds (30 sec TTL) * - elnora:mcp:apikey-vcache:{keyHash} → JSON { userId } (90 sec TTL) * * Tokens used as key suffixes are base64url-encoded crypto.randomBytes(32). * Redis is in a private VPC with TLS + password auth; key enumeration * requires the same access level as reading values. */ export declare class RedisTokenStore implements TokenStore { private redis; constructor(redisUrl: string); getSession(authCode: string): Promise; setSession(authCode: string, session: AuthorizationSession, ttlSeconds: number): Promise; deleteSession(authCode: string): Promise; updateSession(authCode: string, update: Partial): Promise; getTokenRecord(accessToken: string): Promise; setTokenRecord(accessToken: string, record: TokenRecord, ttlSeconds: number): Promise; deleteTokenRecord(accessToken: string): Promise; getRefreshIndex(refreshToken: string): Promise; setRefreshIndex(refreshToken: string, accessToken: string, ttlSeconds: number): Promise; deleteRefreshIndex(refreshToken: string): Promise; getValidationCache(accessToken: string): Promise; setValidationCache(accessToken: string, epochSeconds: number, ttlSeconds: number): Promise; deleteValidationCache(accessToken: string): Promise; getApiKeyValidation(keyHash: string): Promise<{ userId: string; } | undefined>; setApiKeyValidation(keyHash: string, data: { userId: string; }, ttlSeconds: number): Promise; deleteApiKeyValidation(keyHash: string): Promise; ping(): Promise; disconnect(): Promise; } //# sourceMappingURL=redis-token-store.d.ts.map