@ni-c/mcp-hub 0.6.1 → 0.6.2
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/CHANGELOG.md +46 -0
- package/README.md +8 -10
- package/dist/auth/store.js +174 -62
- package/dist/auth/store.js.map +1 -1
- package/dist/supervisor.js +25 -8
- package/dist/supervisor.js.map +1 -1
- package/package.json +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,52 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.6.2] - 2026-08-17
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Admin CLI changes now reach a running hub. `state.json` has always had a
|
|
13
|
+
second writer — every `mcp-hub-admin` invocation is its own process on the
|
|
14
|
+
same volume — but each `AuthStore` trusted the copy it read at startup and
|
|
15
|
+
`persist()` rewrote the whole file. A token minted by the CLI was therefore
|
|
16
|
+
refused by the hub as "Access token has been revoked" until the container was
|
|
17
|
+
restarted; worse, a token or client the CLI revoked stayed valid, and the
|
|
18
|
+
hub's next write put its stale snapshot back and resurrected it. Since
|
|
19
|
+
`persist()` runs on every refresh-token rotation, that happened within
|
|
20
|
+
minutes. Reads now re-read the file when it changed underneath them (inode,
|
|
21
|
+
mtime and size), and every mutation is a read-modify-write.
|
|
22
|
+
- `checkAlive()` no longer leaks an unhandled rejection when a ping fails
|
|
23
|
+
because the connection went away. `onExit()` had already cleared the client
|
|
24
|
+
by the time the catch block read `this.client.close()`, which throws
|
|
25
|
+
synchronously and so slipped past the attached `.catch()`. Nothing was
|
|
26
|
+
actually broken — the restart was already scheduled — but the resulting
|
|
27
|
+
TypeError landed in `LOG_FILE` with a misleading stack and buried real
|
|
28
|
+
failures.
|
|
29
|
+
|
|
30
|
+
### Security
|
|
31
|
+
|
|
32
|
+
- Revocation is now effective against a running hub, which is what the README
|
|
33
|
+
and the security guide already promised. Both documents had described
|
|
34
|
+
`tokens revoke` as taking effect immediately while it silently did nothing
|
|
35
|
+
unless the container was stopped first.
|
|
36
|
+
- `state.json` is written through a per-writer temporary file instead of a
|
|
37
|
+
fixed `state.json.tmp`, so two processes can no longer write into the same
|
|
38
|
+
temporary. With an atomic rename a reader can never observe a partial file;
|
|
39
|
+
the residual risk of concurrent writers is a lost update, not corruption.
|
|
40
|
+
Documented in SECURITY.md.
|
|
41
|
+
- A reload that cannot be parsed keeps the state already in memory instead of
|
|
42
|
+
quarantining the file and starting fresh the way the constructor does.
|
|
43
|
+
Rotating `cookieSecret` under a running hub would log out every session.
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
|
|
47
|
+
- Coverage gate: `@vitest/coverage-v8` pinned to the exact vitest version,
|
|
48
|
+
thresholds set just below the current measurement, and CI keeps the report as
|
|
49
|
+
an artifact. The repository had no coverage tooling before.
|
|
50
|
+
- The admin-CLI recipes in the README and the deployment guide no longer tell
|
|
51
|
+
you to stop the container first.
|
|
52
|
+
- `jose` 6.2.8 -> 6.2.9.
|
|
53
|
+
|
|
8
54
|
## [0.6.1] - 2026-08-14
|
|
9
55
|
|
|
10
56
|
### Fixed
|
package/README.md
CHANGED
|
@@ -226,14 +226,13 @@ asked; while a login session is still valid, a client you have not seen before
|
|
|
226
226
|
gets an explicit *Approve / Deny* page instead of a code. Approved clients
|
|
227
227
|
reconnect silently from then on.
|
|
228
228
|
|
|
229
|
-
List clients or revoke one
|
|
230
|
-
|
|
229
|
+
List clients or revoke one. The CLI shares `/data` with the running hub and
|
|
230
|
+
both sides re-read the state file before they touch it, so this works against a
|
|
231
|
+
live container — a revocation takes effect on the next request:
|
|
231
232
|
|
|
232
233
|
```sh
|
|
233
|
-
docker
|
|
234
|
-
docker
|
|
235
|
-
docker compose run --rm --no-deps mcp-hub node /app/dist/admin.js clients revoke CLIENT_ID
|
|
236
|
-
docker compose up -d
|
|
234
|
+
docker exec mcp-hub node /app/dist/admin.js clients list
|
|
235
|
+
docker exec mcp-hub node /app/dist/admin.js clients revoke CLIENT_ID
|
|
237
236
|
```
|
|
238
237
|
|
|
239
238
|
Revocation removes the approval and all refresh tokens and immediately rejects
|
|
@@ -244,10 +243,9 @@ API, Gemini's `mcp_server` tool, plain-header clients — the same CLI mints
|
|
|
244
243
|
long-lived, resource-bound API tokens:
|
|
245
244
|
|
|
246
245
|
```sh
|
|
247
|
-
docker
|
|
248
|
-
|
|
249
|
-
docker
|
|
250
|
-
docker compose run --rm --no-deps mcp-hub node /app/dist/admin.js tokens revoke TOKEN_ID
|
|
246
|
+
docker exec mcp-hub node /app/dist/admin.js tokens create --resource hub --days 90 --label "openai"
|
|
247
|
+
docker exec mcp-hub node /app/dist/admin.js tokens list
|
|
248
|
+
docker exec mcp-hub node /app/dist/admin.js tokens revoke TOKEN_ID
|
|
251
249
|
```
|
|
252
250
|
|
|
253
251
|
The token is printed once and never stored; `tokens revoke` takes effect
|
package/dist/auth/store.js
CHANGED
|
@@ -13,12 +13,24 @@ export const MAX_UNAPPROVED_CLIENTS = 100;
|
|
|
13
13
|
* jwt-key.pem (Ed25519 private key) and state.json (clients, refresh tokens,
|
|
14
14
|
* cookie secret). Losing either invalidates every connector authorization —
|
|
15
15
|
* the volume must survive container recreates.
|
|
16
|
+
*
|
|
17
|
+
* state.json has more than one writer: the long-running hub and every
|
|
18
|
+
* `mcp-hub-admin` invocation, which is a separate process against the same
|
|
19
|
+
* volume. Because persist() rewrites the whole file, a store that trusted its
|
|
20
|
+
* in-memory copy would (a) not see a token minted elsewhere, (b) keep honouring
|
|
21
|
+
* a token revoked elsewhere, and (c) write its stale copy back on the next
|
|
22
|
+
* unrelated save, resurrecting what was revoked. Every read therefore checks
|
|
23
|
+
* whether the file changed underneath it, and every mutation is a
|
|
24
|
+
* read-modify-write.
|
|
16
25
|
*/
|
|
17
26
|
export class AuthStore {
|
|
18
27
|
privateKey;
|
|
19
28
|
publicKey;
|
|
20
29
|
state;
|
|
21
30
|
statePath;
|
|
31
|
+
/** Identity of the file contents this.state was loaded from; see fileSignature(). */
|
|
32
|
+
signature;
|
|
33
|
+
tmpCounter = 0;
|
|
22
34
|
constructor(dataDir) {
|
|
23
35
|
fs.mkdirSync(dataDir, { recursive: true });
|
|
24
36
|
const keyPath = path.join(dataDir, 'jwt-key.pem');
|
|
@@ -39,35 +51,100 @@ export class AuthStore {
|
|
|
39
51
|
revokedBefore: {},
|
|
40
52
|
apiTokens: {}
|
|
41
53
|
};
|
|
42
|
-
if (
|
|
54
|
+
if (restored)
|
|
55
|
+
this.signature = this.fileSignature();
|
|
56
|
+
else
|
|
43
57
|
this.persist();
|
|
44
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Inode, mtime and size of state.json, or undefined when it is gone. The
|
|
61
|
+
* inode carries the weight: persist() publishes by rename, so any write by
|
|
62
|
+
* another process produces a different one. mtime and size only guard the
|
|
63
|
+
* case of an inode number reused for a same-sized file in the same
|
|
64
|
+
* millisecond.
|
|
65
|
+
*/
|
|
66
|
+
fileSignature() {
|
|
67
|
+
try {
|
|
68
|
+
const s = fs.statSync(this.statePath);
|
|
69
|
+
return `${s.ino}:${s.mtimeMs}:${s.size}`;
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Re-reads state.json when another process has replaced it. Deliberately
|
|
77
|
+
* gentler than the constructor: a file that cannot be parsed leaves the
|
|
78
|
+
* in-memory state alone instead of being quarantined and replaced by a fresh
|
|
79
|
+
* one. Rotating cookieSecret under a running hub would log out every session
|
|
80
|
+
* and force every connector to authorize again — far worse than carrying on
|
|
81
|
+
* with the state we already hold.
|
|
82
|
+
*/
|
|
83
|
+
reloadIfChanged() {
|
|
84
|
+
const signature = this.fileSignature();
|
|
85
|
+
if (signature === undefined || signature === this.signature)
|
|
86
|
+
return;
|
|
87
|
+
let parsed;
|
|
88
|
+
try {
|
|
89
|
+
parsed = JSON.parse(fs.readFileSync(this.statePath, 'utf8'));
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.error(`mcp-hub: could not re-read auth state, keeping the state in memory: ${error.message}`);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const next = AuthStore.normalize(parsed);
|
|
96
|
+
if (!next) {
|
|
97
|
+
console.error('mcp-hub: auth state changed on disk but is unusable, keeping the state in memory');
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
this.state = next;
|
|
101
|
+
this.signature = signature;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Read-modify-write. Picking up another process's changes before mutating is
|
|
105
|
+
* what stops persist() from writing a stale snapshot back over them.
|
|
106
|
+
*/
|
|
107
|
+
mutate(fn) {
|
|
108
|
+
this.reloadIfChanged();
|
|
109
|
+
const result = fn();
|
|
110
|
+
this.persist();
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Shapes a parsed state file, or undefined when it is unusable. Fields added
|
|
115
|
+
* later default to empty: a state.json written before client approvals
|
|
116
|
+
* existed leaves every client unapproved, so each one has to be confirmed
|
|
117
|
+
* once instead of being trusted silently.
|
|
118
|
+
*/
|
|
119
|
+
static normalize(parsed) {
|
|
120
|
+
const state = parsed;
|
|
121
|
+
if (!state || typeof state !== 'object' || typeof state.cookieSecret !== 'string')
|
|
122
|
+
return undefined;
|
|
123
|
+
return {
|
|
124
|
+
cookieSecret: state.cookieSecret,
|
|
125
|
+
clients: state.clients ?? {},
|
|
126
|
+
refreshTokens: state.refreshTokens ?? {},
|
|
127
|
+
approvals: state.approvals ?? {},
|
|
128
|
+
consumedRefreshTokens: state.consumedRefreshTokens ?? {},
|
|
129
|
+
revokedBefore: state.revokedBefore ?? {},
|
|
130
|
+
apiTokens: state.apiTokens ?? {}
|
|
131
|
+
};
|
|
132
|
+
}
|
|
45
133
|
/**
|
|
46
134
|
* Undefined when there is nothing usable to restore. A corrupt file is moved
|
|
47
135
|
* aside rather than overwritten so it can still be salvaged by hand — the
|
|
48
136
|
* hub boots with fresh state and every connector has to authorize again,
|
|
49
|
-
* which beats refusing to start at all.
|
|
137
|
+
* which beats refusing to start at all. Only the constructor does this;
|
|
138
|
+
* reloadIfChanged() never discards live state.
|
|
50
139
|
*/
|
|
51
140
|
static readState(statePath) {
|
|
52
141
|
if (!fs.existsSync(statePath))
|
|
53
142
|
return undefined;
|
|
54
143
|
try {
|
|
55
|
-
const
|
|
56
|
-
if (!
|
|
144
|
+
const normalized = AuthStore.normalize(JSON.parse(fs.readFileSync(statePath, 'utf8')));
|
|
145
|
+
if (!normalized)
|
|
57
146
|
throw new Error('no usable cookieSecret');
|
|
58
|
-
|
|
59
|
-
// Fields added later default to empty: a state.json written before
|
|
60
|
-
// client approvals existed leaves every client unapproved, so each one
|
|
61
|
-
// has to be confirmed once instead of being trusted silently.
|
|
62
|
-
return {
|
|
63
|
-
cookieSecret: parsed.cookieSecret,
|
|
64
|
-
clients: parsed.clients ?? {},
|
|
65
|
-
refreshTokens: parsed.refreshTokens ?? {},
|
|
66
|
-
approvals: parsed.approvals ?? {},
|
|
67
|
-
consumedRefreshTokens: parsed.consumedRefreshTokens ?? {},
|
|
68
|
-
revokedBefore: parsed.revokedBefore ?? {},
|
|
69
|
-
apiTokens: parsed.apiTokens ?? {}
|
|
70
|
-
};
|
|
147
|
+
return normalized;
|
|
71
148
|
}
|
|
72
149
|
catch (error) {
|
|
73
150
|
const backup = `${statePath}.corrupt-${Date.now()}`;
|
|
@@ -78,9 +155,22 @@ export class AuthStore {
|
|
|
78
155
|
}
|
|
79
156
|
persist() {
|
|
80
157
|
this.pruneExpired();
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
158
|
+
// Per-writer temporary name: a fixed one would let two processes write into
|
|
159
|
+
// the same file at once. With a private temporary plus an atomic rename a
|
|
160
|
+
// reader can never observe a half-written file — the residual risk of
|
|
161
|
+
// concurrent writers is a lost update, not a corrupt state.
|
|
162
|
+
const tmp = `${this.statePath}.tmp-${process.pid}-${this.tmpCounter++}`;
|
|
163
|
+
try {
|
|
164
|
+
fs.writeFileSync(tmp, JSON.stringify(this.state, null, 2), { mode: 0o600 });
|
|
165
|
+
fs.renameSync(tmp, this.statePath);
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
fs.rmSync(tmp, { force: true });
|
|
169
|
+
throw error;
|
|
170
|
+
}
|
|
171
|
+
// Record what we just published so the next read does not re-parse our own
|
|
172
|
+
// write; anything else changing the file makes the signature differ again.
|
|
173
|
+
this.signature = this.fileSignature();
|
|
84
174
|
}
|
|
85
175
|
pruneExpired() {
|
|
86
176
|
const now = Math.floor(Date.now() / 1000);
|
|
@@ -98,18 +188,22 @@ export class AuthStore {
|
|
|
98
188
|
}
|
|
99
189
|
}
|
|
100
190
|
get cookieSecret() {
|
|
191
|
+
this.reloadIfChanged();
|
|
101
192
|
return this.state.cookieSecret;
|
|
102
193
|
}
|
|
103
194
|
getClient(clientId) {
|
|
195
|
+
this.reloadIfChanged();
|
|
104
196
|
return this.state.clients[clientId];
|
|
105
197
|
}
|
|
106
198
|
listClients() {
|
|
199
|
+
this.reloadIfChanged();
|
|
107
200
|
return structuredClone(this.state.clients);
|
|
108
201
|
}
|
|
109
202
|
saveClient(client) {
|
|
110
|
-
this.
|
|
111
|
-
|
|
112
|
-
|
|
203
|
+
this.mutate(() => {
|
|
204
|
+
this.state.clients[client.client_id] = client;
|
|
205
|
+
this.pruneUnapprovedClients();
|
|
206
|
+
});
|
|
113
207
|
}
|
|
114
208
|
/**
|
|
115
209
|
* Evict the oldest never-approved clients once too many pile up. A client
|
|
@@ -125,27 +219,31 @@ export class AuthStore {
|
|
|
125
219
|
}
|
|
126
220
|
}
|
|
127
221
|
getApproval(clientId) {
|
|
222
|
+
this.reloadIfChanged();
|
|
128
223
|
return this.state.approvals[clientId];
|
|
129
224
|
}
|
|
130
225
|
/** Records consent for one client; a client may legitimately use several
|
|
131
226
|
* redirect URIs, so they accumulate rather than replace each other. */
|
|
132
227
|
saveApproval(clientId, redirectUri, clientName) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
228
|
+
this.mutate(() => {
|
|
229
|
+
const existing = this.state.approvals[clientId];
|
|
230
|
+
const redirectUris = existing ? [...new Set([...existing.redirectUris, redirectUri])] : [redirectUri];
|
|
231
|
+
this.state.approvals[clientId] = {
|
|
232
|
+
redirectUris,
|
|
233
|
+
clientName: clientName ?? existing?.clientName,
|
|
234
|
+
approvedAt: existing?.approvedAt ?? Math.floor(Date.now() / 1000)
|
|
235
|
+
};
|
|
236
|
+
});
|
|
141
237
|
}
|
|
142
238
|
listApprovals() {
|
|
239
|
+
this.reloadIfChanged();
|
|
143
240
|
return structuredClone(this.state.approvals);
|
|
144
241
|
}
|
|
145
242
|
revokeApproval(clientId) {
|
|
146
243
|
this.revokeClientAccess(clientId);
|
|
147
244
|
}
|
|
148
245
|
getRevokedBefore(clientId) {
|
|
246
|
+
this.reloadIfChanged();
|
|
149
247
|
return this.state.revokedBefore[clientId];
|
|
150
248
|
}
|
|
151
249
|
/**
|
|
@@ -154,81 +252,95 @@ export class AuthStore {
|
|
|
154
252
|
* disk. The client registration stays so it can go through consent again.
|
|
155
253
|
*/
|
|
156
254
|
revokeClientAccess(clientId) {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
255
|
+
return this.mutate(() => {
|
|
256
|
+
delete this.state.approvals[clientId];
|
|
257
|
+
let refreshTokens = 0;
|
|
258
|
+
for (const [hash, record] of Object.entries(this.state.refreshTokens)) {
|
|
259
|
+
if (record.clientId === clientId) {
|
|
260
|
+
delete this.state.refreshTokens[hash];
|
|
261
|
+
refreshTokens++;
|
|
262
|
+
}
|
|
163
263
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
return { refreshTokens, revokedBefore };
|
|
264
|
+
const revokedBefore = Date.now();
|
|
265
|
+
this.state.revokedBefore[clientId] = revokedBefore;
|
|
266
|
+
return { refreshTokens, revokedBefore };
|
|
267
|
+
});
|
|
169
268
|
}
|
|
170
269
|
static hash(token) {
|
|
171
270
|
return crypto.createHash('sha256').update(token).digest('hex');
|
|
172
271
|
}
|
|
173
272
|
saveRefreshToken(token, record) {
|
|
174
|
-
this.
|
|
175
|
-
|
|
273
|
+
this.mutate(() => {
|
|
274
|
+
this.state.refreshTokens[AuthStore.hash(token)] = record;
|
|
275
|
+
});
|
|
176
276
|
}
|
|
177
277
|
getRefreshToken(token) {
|
|
278
|
+
this.reloadIfChanged();
|
|
178
279
|
const record = this.state.refreshTokens[AuthStore.hash(token)];
|
|
179
280
|
if (record && record.expiresAt < Math.floor(Date.now() / 1000))
|
|
180
281
|
return undefined;
|
|
181
282
|
return record;
|
|
182
283
|
}
|
|
183
284
|
deleteRefreshToken(token) {
|
|
184
|
-
|
|
185
|
-
|
|
285
|
+
this.mutate(() => {
|
|
286
|
+
delete this.state.refreshTokens[AuthStore.hash(token)];
|
|
287
|
+
});
|
|
186
288
|
}
|
|
187
289
|
/**
|
|
188
290
|
* Rotation step: the token is invalidated but remembered, so that a replay
|
|
189
291
|
* of an already-rotated token can be told apart from a merely unknown one.
|
|
190
292
|
*/
|
|
191
293
|
consumeRefreshToken(token, familyId, expiresAt) {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
294
|
+
this.mutate(() => {
|
|
295
|
+
delete this.state.refreshTokens[AuthStore.hash(token)];
|
|
296
|
+
this.state.consumedRefreshTokens[AuthStore.hash(token)] = { familyId, expiresAt };
|
|
297
|
+
});
|
|
195
298
|
}
|
|
196
299
|
wasConsumed(token) {
|
|
300
|
+
this.reloadIfChanged();
|
|
197
301
|
return this.state.consumedRefreshTokens[AuthStore.hash(token)];
|
|
198
302
|
}
|
|
199
303
|
/** A replayed refresh token means the chain leaked; drop every token of it. */
|
|
200
304
|
revokeFamily(familyId) {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
305
|
+
return this.mutate(() => {
|
|
306
|
+
let revoked = 0;
|
|
307
|
+
for (const [hash, record] of Object.entries(this.state.refreshTokens)) {
|
|
308
|
+
if (record.familyId === familyId) {
|
|
309
|
+
delete this.state.refreshTokens[hash];
|
|
310
|
+
revoked++;
|
|
311
|
+
}
|
|
206
312
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
return revoked;
|
|
313
|
+
return revoked;
|
|
314
|
+
});
|
|
210
315
|
}
|
|
211
316
|
saveApiToken(id, record) {
|
|
212
|
-
this.
|
|
213
|
-
|
|
317
|
+
this.mutate(() => {
|
|
318
|
+
this.state.apiTokens[id] = record;
|
|
319
|
+
});
|
|
214
320
|
}
|
|
215
321
|
/** Undefined for unknown, revoked or expired ids — all three mean "refuse". */
|
|
216
322
|
getApiToken(id) {
|
|
323
|
+
this.reloadIfChanged();
|
|
217
324
|
const record = this.state.apiTokens[id];
|
|
218
325
|
if (record && record.expiresAt < Math.floor(Date.now() / 1000))
|
|
219
326
|
return undefined;
|
|
220
327
|
return record;
|
|
221
328
|
}
|
|
222
329
|
listApiTokens() {
|
|
330
|
+
this.reloadIfChanged();
|
|
223
331
|
return structuredClone(this.state.apiTokens);
|
|
224
332
|
}
|
|
225
333
|
/** Deleting the record is the revocation: verification refuses unknown ids. */
|
|
226
334
|
revokeApiToken(id) {
|
|
335
|
+
// reloadIfChanged() before the existence check, so revoking a token another
|
|
336
|
+
// process minted seconds ago reports true instead of "no such id".
|
|
337
|
+
this.reloadIfChanged();
|
|
227
338
|
if (!this.state.apiTokens[id])
|
|
228
339
|
return false;
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
340
|
+
return this.mutate(() => {
|
|
341
|
+
delete this.state.apiTokens[id];
|
|
342
|
+
return true;
|
|
343
|
+
});
|
|
232
344
|
}
|
|
233
345
|
}
|
|
234
346
|
//# sourceMappingURL=store.js.map
|
package/dist/auth/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/auth/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/auth/store.ts"],"names":[],"mappings":"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"}
|
package/dist/supervisor.js
CHANGED
|
@@ -86,13 +86,16 @@ export class ManagedServer {
|
|
|
86
86
|
this.pingTimer.unref();
|
|
87
87
|
}
|
|
88
88
|
async refreshTools() {
|
|
89
|
-
|
|
89
|
+
// Hold the client locally: onExit() clears this.client, and a paged list
|
|
90
|
+
// spans awaits, so re-reading it per page could hit undefined mid-loop.
|
|
91
|
+
const client = this.client;
|
|
92
|
+
if (!client)
|
|
90
93
|
return;
|
|
91
94
|
try {
|
|
92
95
|
const tools = [];
|
|
93
96
|
let cursor;
|
|
94
97
|
do {
|
|
95
|
-
const page = await
|
|
98
|
+
const page = await client.listTools({ cursor });
|
|
96
99
|
tools.push(...page.tools);
|
|
97
100
|
cursor = page.nextCursor;
|
|
98
101
|
} while (cursor);
|
|
@@ -103,15 +106,24 @@ export class ManagedServer {
|
|
|
103
106
|
}
|
|
104
107
|
}
|
|
105
108
|
async checkAlive() {
|
|
106
|
-
|
|
109
|
+
// The ping usually fails *because* the connection went away, in which case
|
|
110
|
+
// transport.onclose -> onExit has already set this.client to undefined by
|
|
111
|
+
// the time the catch block runs. Reading this.client.close() there throws
|
|
112
|
+
// synchronously, so the attached .catch() never applies and the rejection
|
|
113
|
+
// escapes this method — setInterval() discards the promise, so it surfaced
|
|
114
|
+
// as an unhandled rejection with a misleading stack. Holding the client in
|
|
115
|
+
// a local makes the whole method immune to that reassignment.
|
|
116
|
+
const client = this.client;
|
|
117
|
+
if (this.state !== 'up' || !client)
|
|
107
118
|
return;
|
|
108
119
|
try {
|
|
109
|
-
await
|
|
120
|
+
await client.ping({ timeout: PING_TIMEOUT_MS });
|
|
110
121
|
}
|
|
111
122
|
catch (error) {
|
|
112
123
|
console.error(`[${this.name}] ping failed, restarting: ${error.message}`);
|
|
113
|
-
// close() triggers transport.onclose -> onExit -> restart with backoff
|
|
114
|
-
|
|
124
|
+
// close() triggers transport.onclose -> onExit -> restart with backoff.
|
|
125
|
+
// Already-closed transports reject here; onExit has then run regardless.
|
|
126
|
+
await client.close().catch(() => { });
|
|
115
127
|
}
|
|
116
128
|
}
|
|
117
129
|
onExit(reason) {
|
|
@@ -144,8 +156,13 @@ export class ManagedServer {
|
|
|
144
156
|
this.stopping = true;
|
|
145
157
|
clearTimeout(this.restartTimer);
|
|
146
158
|
clearInterval(this.pingTimer);
|
|
147
|
-
|
|
148
|
-
|
|
159
|
+
// Same local-client rule as checkAlive(). This path happens to be safe
|
|
160
|
+
// today because the member access precedes the await, but Supervisor.stop()
|
|
161
|
+
// and applyDiff() await it, so an escaping rejection would land in the
|
|
162
|
+
// shutdown and config-reload paths. Structural, not incidental.
|
|
163
|
+
const client = this.client;
|
|
164
|
+
if (client) {
|
|
165
|
+
await client.close().catch(() => { });
|
|
149
166
|
this.client = undefined;
|
|
150
167
|
}
|
|
151
168
|
this.state = 'stopped';
|
package/dist/supervisor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../src/supervisor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../src/supervisor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ni-c/mcp-hub",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"description": "Serve multiple stdio MCP servers from one container: Claude-Code-style mcpServers config, path-based routing, hub meta-tools, and OAuth 2.1 + API tokens for ChatGPT, Claude and any Streamable-HTTP MCP client.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"start": "node dist/index.js",
|
|
42
42
|
"dev": "tsx src/index.ts",
|
|
43
43
|
"test": "vitest run",
|
|
44
|
+
"test:coverage": "vitest run --coverage",
|
|
44
45
|
"test:watch": "vitest",
|
|
45
46
|
"prepublishOnly": "npm test && npm run build"
|
|
46
47
|
},
|
|
@@ -56,6 +57,7 @@
|
|
|
56
57
|
"@types/express": "^5.0.0",
|
|
57
58
|
"@types/node": "^26.2.0",
|
|
58
59
|
"@types/supertest": "^7.2.1",
|
|
60
|
+
"@vitest/coverage-v8": "4.1.10",
|
|
59
61
|
"supertest": "^7.0.0",
|
|
60
62
|
"tsx": "^4.19.0",
|
|
61
63
|
"typescript": "^7.0.2",
|