import type { Tool } from '@langchain/core/tools'; import type { SessionStore } from './SessionStore'; export interface RedisPublisher { set(key: string, value: string, ttl: number): Promise; get(key: string): Promise; clear(key: string): Promise; } export class RedisSessionStore implements SessionStore { private tools: Record = {}; constructor( private publisher: RedisPublisher, private getSessionKey: (sessionId: string) => string, private ttl: number, ) {} async register(sessionId: string): Promise { await this.publisher.set(this.getSessionKey(sessionId), '1', this.ttl); } async validate(sessionId: string): Promise { const result = await this.publisher.get(this.getSessionKey(sessionId)); return result !== null; } async unregister(sessionId: string): Promise { await this.publisher.clear(this.getSessionKey(sessionId)); delete this.tools[sessionId]; } getTools(sessionId: string): Tool[] | undefined { return this.tools[sessionId]; } setTools(sessionId: string, tools: Tool[]): void { this.tools[sessionId] = tools; } clearTools(sessionId: string): void { delete this.tools[sessionId]; } }