fdic-mcp-server 1.2.4 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +29 -2
- package/dist/server.js +29 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -32,7 +32,7 @@ var import_types = require("@modelcontextprotocol/sdk/types.js");
|
|
|
32
32
|
var import_express = __toESM(require("express"));
|
|
33
33
|
|
|
34
34
|
// src/constants.ts
|
|
35
|
-
var VERSION = true ? "1.2.
|
|
35
|
+
var VERSION = true ? "1.2.5" : process.env.npm_package_version ?? "0.0.0-dev";
|
|
36
36
|
var FDIC_API_BASE_URL = "https://banks.data.fdic.gov/api";
|
|
37
37
|
var CHARACTER_LIMIT = 5e4;
|
|
38
38
|
var DEFAULT_FDIC_MAX_RESPONSE_BYTES = 5 * 1024 * 1024;
|
|
@@ -33970,6 +33970,8 @@ function parseAllowedOrigins(rawOrigins, port) {
|
|
|
33970
33970
|
`https://127.0.0.1:${port}`
|
|
33971
33971
|
];
|
|
33972
33972
|
}
|
|
33973
|
+
var DEFAULT_SESSION_IDLE_TIMEOUT_MS = 30 * 60 * 1e3;
|
|
33974
|
+
var DEFAULT_SESSION_SWEEP_INTERVAL_MS = 5 * 60 * 1e3;
|
|
33973
33975
|
async function closeSession(sessions, sessionId) {
|
|
33974
33976
|
const session = sessions.get(sessionId);
|
|
33975
33977
|
if (!session) {
|
|
@@ -33981,6 +33983,20 @@ async function closeSession(sessions, sessionId) {
|
|
|
33981
33983
|
await session.transport.close().catch(() => {
|
|
33982
33984
|
});
|
|
33983
33985
|
}
|
|
33986
|
+
function touchSession(session, now) {
|
|
33987
|
+
session.lastActivityAt = now;
|
|
33988
|
+
}
|
|
33989
|
+
async function sweepIdleSessions(sessions, idleTimeoutMs, now) {
|
|
33990
|
+
const expiredSessionIds = [];
|
|
33991
|
+
for (const [sessionId, session] of sessions.entries()) {
|
|
33992
|
+
if (now - session.lastActivityAt >= idleTimeoutMs) {
|
|
33993
|
+
expiredSessionIds.push(sessionId);
|
|
33994
|
+
}
|
|
33995
|
+
}
|
|
33996
|
+
await Promise.all(
|
|
33997
|
+
expiredSessionIds.map((sessionId) => closeSession(sessions, sessionId))
|
|
33998
|
+
);
|
|
33999
|
+
}
|
|
33984
34000
|
function sendInvalidSessionResponse(res) {
|
|
33985
34001
|
res.status(400).json({
|
|
33986
34002
|
jsonrpc: "2.0",
|
|
@@ -33996,7 +34012,13 @@ function createApp(options = {}) {
|
|
|
33996
34012
|
const port = options.port ?? 3e3;
|
|
33997
34013
|
const allowedOrigins = options.allowedOrigins ?? parseAllowedOrigins(void 0, port);
|
|
33998
34014
|
const sessions = /* @__PURE__ */ new Map();
|
|
34015
|
+
const sessionIdleTimeoutMs = options.sessionIdleTimeoutMs ?? DEFAULT_SESSION_IDLE_TIMEOUT_MS;
|
|
34016
|
+
const sessionSweepIntervalMs = options.sessionSweepIntervalMs ?? DEFAULT_SESSION_SWEEP_INTERVAL_MS;
|
|
33999
34017
|
app.use(import_express.default.json());
|
|
34018
|
+
const sessionSweepTimer = setInterval(() => {
|
|
34019
|
+
void sweepIdleSessions(sessions, sessionIdleTimeoutMs, Date.now());
|
|
34020
|
+
}, sessionSweepIntervalMs);
|
|
34021
|
+
sessionSweepTimer.unref?.();
|
|
34000
34022
|
app.get("/health", (_req, res) => {
|
|
34001
34023
|
res.json({ status: "ok", server: "fdic-mcp-server", version: VERSION });
|
|
34002
34024
|
});
|
|
@@ -34017,6 +34039,7 @@ function createApp(options = {}) {
|
|
|
34017
34039
|
});
|
|
34018
34040
|
return;
|
|
34019
34041
|
}
|
|
34042
|
+
touchSession(session, Date.now());
|
|
34020
34043
|
await session.transport.handleRequest(req, res, req.body);
|
|
34021
34044
|
if (req.method === "DELETE") {
|
|
34022
34045
|
await closeSession(sessions, sessionId);
|
|
@@ -34034,7 +34057,11 @@ function createApp(options = {}) {
|
|
|
34034
34057
|
enableDnsRebindingProtection: true,
|
|
34035
34058
|
allowedOrigins,
|
|
34036
34059
|
onsessioninitialized: (newSessionId) => {
|
|
34037
|
-
sessions.set(newSessionId, {
|
|
34060
|
+
sessions.set(newSessionId, {
|
|
34061
|
+
server,
|
|
34062
|
+
transport,
|
|
34063
|
+
lastActivityAt: Date.now()
|
|
34064
|
+
});
|
|
34038
34065
|
}
|
|
34039
34066
|
});
|
|
34040
34067
|
transport.onclose = () => {
|
package/dist/server.js
CHANGED
|
@@ -46,7 +46,7 @@ var import_types = require("@modelcontextprotocol/sdk/types.js");
|
|
|
46
46
|
var import_express = __toESM(require("express"));
|
|
47
47
|
|
|
48
48
|
// src/constants.ts
|
|
49
|
-
var VERSION = true ? "1.2.
|
|
49
|
+
var VERSION = true ? "1.2.5" : process.env.npm_package_version ?? "0.0.0-dev";
|
|
50
50
|
var FDIC_API_BASE_URL = "https://banks.data.fdic.gov/api";
|
|
51
51
|
var CHARACTER_LIMIT = 5e4;
|
|
52
52
|
var DEFAULT_FDIC_MAX_RESPONSE_BYTES = 5 * 1024 * 1024;
|
|
@@ -33984,6 +33984,8 @@ function parseAllowedOrigins(rawOrigins, port) {
|
|
|
33984
33984
|
`https://127.0.0.1:${port}`
|
|
33985
33985
|
];
|
|
33986
33986
|
}
|
|
33987
|
+
var DEFAULT_SESSION_IDLE_TIMEOUT_MS = 30 * 60 * 1e3;
|
|
33988
|
+
var DEFAULT_SESSION_SWEEP_INTERVAL_MS = 5 * 60 * 1e3;
|
|
33987
33989
|
async function closeSession(sessions, sessionId) {
|
|
33988
33990
|
const session = sessions.get(sessionId);
|
|
33989
33991
|
if (!session) {
|
|
@@ -33995,6 +33997,20 @@ async function closeSession(sessions, sessionId) {
|
|
|
33995
33997
|
await session.transport.close().catch(() => {
|
|
33996
33998
|
});
|
|
33997
33999
|
}
|
|
34000
|
+
function touchSession(session, now) {
|
|
34001
|
+
session.lastActivityAt = now;
|
|
34002
|
+
}
|
|
34003
|
+
async function sweepIdleSessions(sessions, idleTimeoutMs, now) {
|
|
34004
|
+
const expiredSessionIds = [];
|
|
34005
|
+
for (const [sessionId, session] of sessions.entries()) {
|
|
34006
|
+
if (now - session.lastActivityAt >= idleTimeoutMs) {
|
|
34007
|
+
expiredSessionIds.push(sessionId);
|
|
34008
|
+
}
|
|
34009
|
+
}
|
|
34010
|
+
await Promise.all(
|
|
34011
|
+
expiredSessionIds.map((sessionId) => closeSession(sessions, sessionId))
|
|
34012
|
+
);
|
|
34013
|
+
}
|
|
33998
34014
|
function sendInvalidSessionResponse(res) {
|
|
33999
34015
|
res.status(400).json({
|
|
34000
34016
|
jsonrpc: "2.0",
|
|
@@ -34010,7 +34026,13 @@ function createApp(options = {}) {
|
|
|
34010
34026
|
const port = options.port ?? 3e3;
|
|
34011
34027
|
const allowedOrigins = options.allowedOrigins ?? parseAllowedOrigins(void 0, port);
|
|
34012
34028
|
const sessions = /* @__PURE__ */ new Map();
|
|
34029
|
+
const sessionIdleTimeoutMs = options.sessionIdleTimeoutMs ?? DEFAULT_SESSION_IDLE_TIMEOUT_MS;
|
|
34030
|
+
const sessionSweepIntervalMs = options.sessionSweepIntervalMs ?? DEFAULT_SESSION_SWEEP_INTERVAL_MS;
|
|
34013
34031
|
app.use(import_express.default.json());
|
|
34032
|
+
const sessionSweepTimer = setInterval(() => {
|
|
34033
|
+
void sweepIdleSessions(sessions, sessionIdleTimeoutMs, Date.now());
|
|
34034
|
+
}, sessionSweepIntervalMs);
|
|
34035
|
+
sessionSweepTimer.unref?.();
|
|
34014
34036
|
app.get("/health", (_req, res) => {
|
|
34015
34037
|
res.json({ status: "ok", server: "fdic-mcp-server", version: VERSION });
|
|
34016
34038
|
});
|
|
@@ -34031,6 +34053,7 @@ function createApp(options = {}) {
|
|
|
34031
34053
|
});
|
|
34032
34054
|
return;
|
|
34033
34055
|
}
|
|
34056
|
+
touchSession(session, Date.now());
|
|
34034
34057
|
await session.transport.handleRequest(req, res, req.body);
|
|
34035
34058
|
if (req.method === "DELETE") {
|
|
34036
34059
|
await closeSession(sessions, sessionId);
|
|
@@ -34048,7 +34071,11 @@ function createApp(options = {}) {
|
|
|
34048
34071
|
enableDnsRebindingProtection: true,
|
|
34049
34072
|
allowedOrigins,
|
|
34050
34073
|
onsessioninitialized: (newSessionId) => {
|
|
34051
|
-
sessions.set(newSessionId, {
|
|
34074
|
+
sessions.set(newSessionId, {
|
|
34075
|
+
server,
|
|
34076
|
+
transport,
|
|
34077
|
+
lastActivityAt: Date.now()
|
|
34078
|
+
});
|
|
34052
34079
|
}
|
|
34053
34080
|
});
|
|
34054
34081
|
transport.onclose = () => {
|