Skip to content

Commit 51da4ea

Browse files
committed
fix: close
1 parent 3a1a320 commit 51da4ea

File tree

3 files changed

+19
-13
lines changed

3 files changed

+19
-13
lines changed

src/common/sessionStore.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,25 @@ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/
22
import logger, { LogId } from "./logger.js";
33

44
export class SessionStore {
5-
private sessions: Map<string, StreamableHTTPServerTransport> = new Map();
5+
private sessions: { [sessionId: string]: StreamableHTTPServerTransport | undefined } = {};
66

77
getSession(sessionId: string): StreamableHTTPServerTransport | undefined {
8-
return this.sessions.get(sessionId);
8+
return this.sessions[sessionId];
99
}
1010

1111
setSession(sessionId: string, transport: StreamableHTTPServerTransport): void {
12-
if (this.sessions.has(sessionId)) {
12+
if (this.sessions[sessionId]) {
1313
throw new Error(`Session ${sessionId} already exists`);
1414
}
15-
this.sessions.set(sessionId, transport);
15+
this.sessions[sessionId] = transport;
1616
}
1717

1818
async closeSession(sessionId: string, closeTransport: boolean = true): Promise<void> {
19-
if (!this.sessions.has(sessionId)) {
19+
if (!this.sessions[sessionId]) {
2020
throw new Error(`Session ${sessionId} not found`);
2121
}
2222
if (closeTransport) {
23-
const transport = this.sessions.get(sessionId);
23+
const transport = this.sessions[sessionId];
2424
if (!transport) {
2525
throw new Error(`Session ${sessionId} not found`);
2626
}
@@ -34,11 +34,15 @@ export class SessionStore {
3434
);
3535
}
3636
}
37-
this.sessions.delete(sessionId);
37+
delete this.sessions[sessionId];
3838
}
3939

4040
async closeAllSessions(): Promise<void> {
41-
await Promise.all(Array.from(this.sessions.values()).map((transport) => transport.close()));
42-
this.sessions.clear();
41+
await Promise.all(
42+
Object.values(this.sessions)
43+
.filter((transport) => transport !== undefined)
44+
.map((transport) => transport.close())
45+
);
46+
this.sessions = {};
4347
}
4448
}

src/index.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ async function main() {
1414
transportRunner
1515
.close()
1616
.then(() => {
17+
logger.info(LogId.serverClosed, "server", `Server closed`);
1718
process.exit(0);
1819
})
1920
.catch((error: unknown) => {
@@ -22,10 +23,10 @@ async function main() {
2223
});
2324
};
2425

25-
process.once("SIGINT", shutdown);
26-
process.once("SIGABRT", shutdown);
27-
process.once("SIGTERM", shutdown);
28-
process.once("SIGQUIT", shutdown);
26+
process.on("SIGINT", shutdown);
27+
process.on("SIGABRT", shutdown);
28+
process.on("SIGTERM", shutdown);
29+
process.on("SIGQUIT", shutdown);
2930

3031
try {
3132
await transportRunner.start();

src/transports/streamableHttp.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,5 +155,6 @@ export class StreamableHttpRunner extends TransportRunnerBase {
155155
resolve();
156156
});
157157
});
158+
await this.sessionStore.closeAllSessions();
158159
}
159160
}

0 commit comments

Comments
 (0)