Add inactivity timeout to ServerRedisTransport

- Add 5-minute inactivity timeout to prevent memory leaks
- Reset timer on each message received from client
- Clear timer on transport close
- Add comprehensive tests for timeout behavior
- Fix async/await in redisRelayToMcpServer calls

Sessions will now automatically shutdown after 5 minutes of no client activity.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Jerome 2025-07-09 19:42:19 +01:00
commit d779401b5f
No known key found for this signature in database

View file

@ -44,7 +44,7 @@ describe('Redis Transport Integration', () => {
};
// 3. Set up the Redis relay (this is what happens in the HTTP handler)
const cleanup = redisRelayToMcpServer(sessionId, mockClientTransport);
const cleanup = await redisRelayToMcpServer(sessionId, mockClientTransport);
// Track messages received by server
const serverReceivedMessages: JSONRPCMessage[] = [];
@ -148,7 +148,7 @@ describe('Redis Transport Integration', () => {
start: jest.fn(() => Promise.resolve())
};
const cleanup = redisRelayToMcpServer(sessionId, mockClientTransport);
const cleanup = await redisRelayToMcpServer(sessionId, mockClientTransport);
// Send tools/list request
const toolsListMessage: JSONRPCMessage = {
@ -202,7 +202,7 @@ describe('Redis Transport Integration', () => {
start: jest.fn(() => Promise.resolve())
};
const cleanup = redisRelayToMcpServer(sessionId, mockClientTransport);
const cleanup = await redisRelayToMcpServer(sessionId, mockClientTransport);
// Set up notification subscription manually since notifications don't have an id
const notificationChannel = `mcp:shttp:toclient:${sessionId}:__GET_stream`;
@ -268,7 +268,7 @@ describe('Redis Transport Integration', () => {
start: jest.fn(() => Promise.resolve())
};
const cleanup = redisRelayToMcpServer(sessionId, mockClientTransport);
const cleanup = await redisRelayToMcpServer(sessionId, mockClientTransport);
// Send a notification (no id field)
const notification: JSONRPCMessage = {