ftown 0.20.6 → 0.20.7
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/attention-prompt-protocol.d.ts +2 -2
- package/dist/attention-prompt-protocol.js +1 -1
- package/dist/centrifugo-client.js +0 -1
- package/dist/centrifugo-client.js.map +1 -1
- package/dist/command-rpc.d.ts +0 -1
- package/dist/command-rpc.js +3 -24
- package/dist/command-rpc.js.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/security/bridge/account-state.d.ts +0 -4
- package/dist/security/bridge/direct.js +0 -2
- package/dist/security/bridge/direct.js.map +1 -1
- package/dist/security/bridge/execute.js +1 -6
- package/dist/security/bridge/execute.js.map +1 -1
- package/dist/security/bridge/identity.d.ts +0 -3
- package/dist/security/bridge/metadata.d.ts +0 -2
- package/dist/security/bridge/metadata.js +1 -1
- package/dist/security/bridge/metadata.js.map +1 -1
- package/dist/security/bridge/permissions.js +3 -11
- package/dist/security/bridge/permissions.js.map +1 -1
- package/dist/security/bridge/policy.d.ts +4 -7
- package/dist/security/bridge/policy.js +35 -90
- package/dist/security/bridge/policy.js.map +1 -1
- package/dist/security/bridge/security.d.ts +1 -11
- package/dist/security/bridge/security.js +7 -79
- package/dist/security/bridge/security.js.map +1 -1
- package/dist/security/crypto.js +2 -2
- package/dist/security/crypto.js.map +1 -1
- package/dist/security/protocol.d.ts +5 -126
- package/dist/types.d.ts +1 -1
- package/dist/update-effects.js +1 -1
- package/dist/update-effects.js.map +1 -1
- package/package.json +4 -12
- package/skills/ftown/SKILL.md +9 -13
- package/skills/ftown/references/sessions.md +4 -20
- package/dist/mcp/fleet.d.ts +0 -67
- package/dist/mcp/fleet.js +0 -298
- package/dist/mcp/fleet.js.map +0 -1
- package/dist/mcp/http.d.ts +0 -42
- package/dist/mcp/http.js +0 -350
- package/dist/mcp/http.js.map +0 -1
- package/dist/mcp/legacy-relay.d.ts +0 -3
- package/dist/mcp/legacy-relay.js +0 -6
- package/dist/mcp/legacy-relay.js.map +0 -1
- package/dist/mcp/mcp-key-store.d.ts +0 -52
- package/dist/mcp/mcp-key-store.js +0 -207
- package/dist/mcp/mcp-key-store.js.map +0 -1
- package/dist/mcp/oauth-store.d.ts +0 -17
- package/dist/mcp/oauth-store.js +0 -58
- package/dist/mcp/oauth-store.js.map +0 -1
- package/dist/mcp/oauth.d.ts +0 -83
- package/dist/mcp/oauth.js +0 -311
- package/dist/mcp/oauth.js.map +0 -1
- package/dist/mcp/relay-handler.d.ts +0 -2
- package/dist/mcp/relay-handler.js +0 -8
- package/dist/mcp/relay-handler.js.map +0 -1
- package/dist/mcp/relay.d.ts +0 -13
- package/dist/mcp/relay.js +0 -95
- package/dist/mcp/relay.js.map +0 -1
- package/dist/mcp/secure-client.d.ts +0 -23
- package/dist/mcp/secure-client.js +0 -124
- package/dist/mcp/secure-client.js.map +0 -1
- package/dist/mcp/security-events.d.ts +0 -49
- package/dist/mcp/security-events.js +0 -211
- package/dist/mcp/security-events.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -13
- package/dist/mcp/server.js +0 -858
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/test-support.d.ts +0 -32
- package/dist/mcp/test-support.js +0 -120
- package/dist/mcp/test-support.js.map +0 -1
- package/dist/mcp-cli.d.ts +0 -2
- package/dist/mcp-cli.js +0 -105
- package/dist/mcp-cli.js.map +0 -1
- package/dist/security/bridge/audit.d.ts +0 -37
- package/dist/security/bridge/audit.js +0 -186
- package/dist/security/bridge/audit.js.map +0 -1
package/dist/mcp/http.js
DELETED
|
@@ -1,350 +0,0 @@
|
|
|
1
|
-
import express from "express";
|
|
2
|
-
import { rateLimit } from "express-rate-limit";
|
|
3
|
-
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
4
|
-
import { mcpAuthRouter, createOAuthMetadata, } from "@modelcontextprotocol/sdk/server/auth/router.js";
|
|
5
|
-
import { requireBearerAuth } from "@modelcontextprotocol/sdk/server/auth/middleware/bearerAuth.js";
|
|
6
|
-
import { z } from "zod";
|
|
7
|
-
import { configSchema, Fleet, FleetError } from "./fleet.js";
|
|
8
|
-
import { createMcpServer } from "./server.js";
|
|
9
|
-
import { MCP_SCOPES } from "./oauth.js";
|
|
10
|
-
import { randomUUID } from 'node:crypto';
|
|
11
|
-
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
12
|
-
import { errorResult } from './fleet.js';
|
|
13
|
-
import { READ_MCP_TOOLS, safeTool, safeFailureCode, securityOutcome, finishSecurityEvent } from './security-events.js';
|
|
14
|
-
const httpsOrigin = z
|
|
15
|
-
.string()
|
|
16
|
-
.url()
|
|
17
|
-
.refine((s) => {
|
|
18
|
-
const u = new URL(s);
|
|
19
|
-
return u.protocol === "https:" && u.origin === s;
|
|
20
|
-
}, "An HTTPS origin without a trailing slash is required");
|
|
21
|
-
export const gatewayConfigSchema = z
|
|
22
|
-
.object({
|
|
23
|
-
publicUrl: httpsOrigin,
|
|
24
|
-
loginUrl: httpsOrigin,
|
|
25
|
-
allowedOrigins: z.array(httpsOrigin).default([]),
|
|
26
|
-
fleet: configSchema,
|
|
27
|
-
access: z
|
|
28
|
-
.array(z
|
|
29
|
-
.object({
|
|
30
|
-
subject: z.string().min(1),
|
|
31
|
-
machines: z.array(z.string()).min(1),
|
|
32
|
-
})
|
|
33
|
-
.strict())
|
|
34
|
-
.min(1),
|
|
35
|
-
})
|
|
36
|
-
.strict()
|
|
37
|
-
.superRefine((c, ctx) => {
|
|
38
|
-
if (new Set(c.access.map((a) => a.subject)).size !== c.access.length)
|
|
39
|
-
ctx.addIssue({ code: "custom", message: "Duplicate account subject" });
|
|
40
|
-
for (const a of c.access)
|
|
41
|
-
if (a.machines.some((id) => !c.fleet.machines.some((m) => m.id === id)))
|
|
42
|
-
ctx.addIssue({
|
|
43
|
-
code: "custom",
|
|
44
|
-
message: "Access references an unknown machine",
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
export function createGateway(config, provider, relay, audit) {
|
|
48
|
-
const app = express();
|
|
49
|
-
const rootFleet = new Fleet(config.fleet, relay
|
|
50
|
-
? (user, id, request, signal, context) => relay.request(user, id, request, signal, context)
|
|
51
|
-
: undefined);
|
|
52
|
-
const actions = new AsyncLocalStorage();
|
|
53
|
-
const states = new WeakMap();
|
|
54
|
-
const finish = (state, outcome) => finishSecurityEvent(audit, state, outcome);
|
|
55
|
-
const admission = async (req, res) => {
|
|
56
|
-
if (!audit || !provider.keys)
|
|
57
|
-
throw new FleetError('security_setup_required', 'Encrypted MCP storage and security audit must be configured');
|
|
58
|
-
const subject = String(req.auth.extra.subject);
|
|
59
|
-
const tool = req.body?.method === 'tools/call' ? safeTool(req.body?.params?.name)
|
|
60
|
-
: req.body?.method === 'initialize' ? 'initialize' : req.body?.method === 'tools/list' ? 'tools_list'
|
|
61
|
-
: req.body?.method === 'resources/list' ? 'resources_list' : req.body?.method === 'resources/read' ? 'resources_read'
|
|
62
|
-
: req.body?.id === undefined ? 'protocol_notification' : 'protocol_request';
|
|
63
|
-
const target = req.body?.params?.arguments;
|
|
64
|
-
const allowed = req.auth.extra.machines;
|
|
65
|
-
const actionId = randomUUID();
|
|
66
|
-
const action = { actionId, parentActionId: null, clientId: req.auth.clientId, grantId: String(req.auth.extra.grantId), tool, operation: null };
|
|
67
|
-
const event = {
|
|
68
|
-
version: 1, id: actionId, actionId, parentActionId: null, ownerId: subject, source: 'gateway',
|
|
69
|
-
bridgeId: typeof target?.machine === 'string' && allowed.includes(target.machine) ? target.machine : null,
|
|
70
|
-
clientId: action.clientId, grantId: action.grantId, endpointId: String(req.auth.extra.endpointId), tool, operation: null,
|
|
71
|
-
sessionId: typeof target?.sessionId === 'string' && /^[A-Za-z0-9_-]{1,200}$/.test(target.sessionId) ? target.sessionId : null,
|
|
72
|
-
startedAt: new Date().toISOString(), finishedAt: null, status: 'started', errorCode: null,
|
|
73
|
-
mutating: req.body?.method === 'tools/call' && !READ_MCP_TOOLS.has(tool),
|
|
74
|
-
};
|
|
75
|
-
await audit.admit(event);
|
|
76
|
-
const state = { event, action, finished: false, dispatched: false };
|
|
77
|
-
states.set(req, state);
|
|
78
|
-
res.once('close', () => {
|
|
79
|
-
if (!state.finished)
|
|
80
|
-
void finish(state, { status: state.dispatched ? 'unknown' : 'rejected', errorCode: state.dispatched ? 'outcome_unknown' : res.statusCode >= 400 ? 'invalid_request' : 'cancelled' }).catch(() => { });
|
|
81
|
-
});
|
|
82
|
-
return state;
|
|
83
|
-
};
|
|
84
|
-
app.disable("x-powered-by");
|
|
85
|
-
// Fly's edge is the sole HTTP ingress; forwarded headers are not used for authorization.
|
|
86
|
-
app.set("trust proxy", 1);
|
|
87
|
-
app.get("/healthz", (_req, res) => {
|
|
88
|
-
res.json({ ok: true });
|
|
89
|
-
});
|
|
90
|
-
app.use((req, res, next) => {
|
|
91
|
-
res.setHeader("Cache-Control", "no-store");
|
|
92
|
-
res.setHeader("X-Content-Type-Options", "nosniff");
|
|
93
|
-
res.setHeader("Referrer-Policy", "no-referrer");
|
|
94
|
-
res.setHeader("Strict-Transport-Security", "max-age=31536000");
|
|
95
|
-
if (req.headers.host !== new URL(config.publicUrl).host) {
|
|
96
|
-
res.status(421).end();
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
if (req.headers["x-forwarded-proto"] &&
|
|
100
|
-
req.headers["x-forwarded-proto"] !== "https") {
|
|
101
|
-
res.status(400).end();
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
next();
|
|
105
|
-
});
|
|
106
|
-
// Keep issuer spelling identical across discovery and authorization responses.
|
|
107
|
-
app.get("/.well-known/oauth-authorization-server", (_req, res) => {
|
|
108
|
-
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
109
|
-
res.json({
|
|
110
|
-
...createOAuthMetadata({
|
|
111
|
-
provider,
|
|
112
|
-
issuerUrl: new URL(config.publicUrl),
|
|
113
|
-
scopesSupported: MCP_SCOPES,
|
|
114
|
-
}),
|
|
115
|
-
issuer: config.publicUrl,
|
|
116
|
-
token_endpoint_auth_methods_supported: ["none"],
|
|
117
|
-
revocation_endpoint_auth_methods_supported: ["none"],
|
|
118
|
-
authorization_response_iss_parameter_supported: true,
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
app.get([
|
|
122
|
-
"/.well-known/oauth-protected-resource/mcp",
|
|
123
|
-
"/.well-known/oauth-protected-resource",
|
|
124
|
-
], (_req, res) => {
|
|
125
|
-
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
126
|
-
res.json({
|
|
127
|
-
resource: provider.resource,
|
|
128
|
-
authorization_servers: [config.publicUrl],
|
|
129
|
-
scopes_supported: MCP_SCOPES,
|
|
130
|
-
bearer_methods_supported: ["header"],
|
|
131
|
-
resource_name: "ftown agent fleet",
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
app.use(mcpAuthRouter({
|
|
135
|
-
provider,
|
|
136
|
-
issuerUrl: new URL(config.publicUrl),
|
|
137
|
-
resourceServerUrl: new URL(provider.resource),
|
|
138
|
-
scopesSupported: MCP_SCOPES,
|
|
139
|
-
resourceName: "ftown agent fleet",
|
|
140
|
-
}));
|
|
141
|
-
app.use("/consent", rateLimit({
|
|
142
|
-
windowMs: 60000,
|
|
143
|
-
limit: 60,
|
|
144
|
-
standardHeaders: true,
|
|
145
|
-
legacyHeaders: false,
|
|
146
|
-
}), express.json({ limit: "512kb" }));
|
|
147
|
-
app.post("/consent/:action", async (req, res) => {
|
|
148
|
-
try {
|
|
149
|
-
if (typeof req.body?.assertion !== "string") {
|
|
150
|
-
res.status(400).json({ error: "invalid_request" });
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
if (req.params.action === "details")
|
|
154
|
-
res.json(await provider.consentDetails(req.body.assertion));
|
|
155
|
-
else if (req.params.action === "approve" || req.params.action === "deny")
|
|
156
|
-
res.json({
|
|
157
|
-
redirect: await provider.approve(req.body.assertion, req.params.action === "deny"),
|
|
158
|
-
});
|
|
159
|
-
else
|
|
160
|
-
res.status(404).end();
|
|
161
|
-
}
|
|
162
|
-
catch {
|
|
163
|
-
res.status(400).json({ error: "Invalid or expired consent request" });
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
app.use("/mcp", (req, res, next) => {
|
|
167
|
-
const origin = req.headers.origin;
|
|
168
|
-
if (origin &&
|
|
169
|
-
![config.loginUrl, ...config.allowedOrigins].includes(origin)) {
|
|
170
|
-
res.status(403).json({ error: "Origin not allowed" });
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
if (origin) {
|
|
174
|
-
res.setHeader("Access-Control-Allow-Origin", origin);
|
|
175
|
-
res.setHeader("Vary", "Origin");
|
|
176
|
-
}
|
|
177
|
-
res.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, MCP-Protocol-Version, MCP-Session-Id, Last-Event-ID");
|
|
178
|
-
res.setHeader("Access-Control-Expose-Headers", "WWW-Authenticate, MCP-Session-Id, MCP-Protocol-Version");
|
|
179
|
-
res.setHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, OPTIONS");
|
|
180
|
-
if (req.method === "OPTIONS") {
|
|
181
|
-
res.status(204).end();
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
next();
|
|
185
|
-
});
|
|
186
|
-
app.use("/mcp", requireBearerAuth({
|
|
187
|
-
verifier: provider,
|
|
188
|
-
requiredScopes: ["mcp:read"],
|
|
189
|
-
resourceMetadataUrl: new URL("/.well-known/oauth-protected-resource/mcp", config.publicUrl).href,
|
|
190
|
-
}));
|
|
191
|
-
app.use('/mcp', express.json({ limit: '1mb' }));
|
|
192
|
-
app.use('/mcp', async (req, res, next) => {
|
|
193
|
-
try {
|
|
194
|
-
await admission(req, res);
|
|
195
|
-
next();
|
|
196
|
-
}
|
|
197
|
-
catch {
|
|
198
|
-
res.status(503).json({ error: 'Security audit or encrypted endpoint is unavailable' });
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
app.use("/mcp", rateLimit({
|
|
202
|
-
windowMs: 60000,
|
|
203
|
-
limit: 600,
|
|
204
|
-
keyGenerator: (req) => String(req.auth?.extra?.subject),
|
|
205
|
-
standardHeaders: true,
|
|
206
|
-
legacyHeaders: false,
|
|
207
|
-
handler: (req, res) => {
|
|
208
|
-
const state = states.get(req);
|
|
209
|
-
void (state ? finish(state, { status: 'rejected', errorCode: 'capacity_exceeded' }) : Promise.resolve()).catch(() => { }).finally(() => res.status(429).json({ error: 'MCP request limit exceeded' }));
|
|
210
|
-
},
|
|
211
|
-
}));
|
|
212
|
-
app.post("/mcp", async (req, res) => {
|
|
213
|
-
const state = states.get(req);
|
|
214
|
-
let identity;
|
|
215
|
-
try {
|
|
216
|
-
identity = await provider.keys.loadGrantIdentity(state.event.ownerId, state.action.grantId);
|
|
217
|
-
await provider.keys.markActive(identity.ownerId, identity.requestId);
|
|
218
|
-
}
|
|
219
|
-
catch {
|
|
220
|
-
await finish(state, { status: 'rejected', errorCode: 'approval_required' });
|
|
221
|
-
res.status(403).json({ error: 'Renew encrypted bridge consent' });
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
const allowed = req.auth.extra.machines;
|
|
225
|
-
const fleet = {
|
|
226
|
-
config: {
|
|
227
|
-
...config.fleet,
|
|
228
|
-
machines: config.fleet.machines.filter((m) => allowed.includes(m.id)),
|
|
229
|
-
},
|
|
230
|
-
request: (id, ...args) => {
|
|
231
|
-
if (!allowed.includes(id))
|
|
232
|
-
return Promise.reject(new FleetError("forbidden", "Machine is not authorized for this grant"));
|
|
233
|
-
state.dispatched = true;
|
|
234
|
-
return rootFleet.scoped({ grant: identity, action: actions.getStore() ?? state.action, revalidate: async () => {
|
|
235
|
-
const current = await provider.verifyAccessToken(req.auth.token);
|
|
236
|
-
if (!(current.extra?.machines).includes(id) || (state.event.mutating && !current.scopes.includes('mcp:control')))
|
|
237
|
-
throw new FleetError('forbidden', 'MCP access changed before dispatch');
|
|
238
|
-
} }).request(id, ...args);
|
|
239
|
-
},
|
|
240
|
-
};
|
|
241
|
-
const server = createMcpServer(fleet, {
|
|
242
|
-
readOnly: !req.auth.scopes.includes("mcp:control"),
|
|
243
|
-
caller: { subject: String(req.auth.extra.subject), clientId: req.auth.clientId, scopes: [...req.auth.scopes] },
|
|
244
|
-
revalidate: async (machines) => {
|
|
245
|
-
let current;
|
|
246
|
-
try {
|
|
247
|
-
current = await provider.verifyAccessToken(req.auth.token);
|
|
248
|
-
}
|
|
249
|
-
catch {
|
|
250
|
-
throw new FleetError("forbidden", "Access expired or was revoked during this request");
|
|
251
|
-
}
|
|
252
|
-
const authorized = current.extra?.machines;
|
|
253
|
-
if (machines.some((machine) => !authorized.includes(machine)))
|
|
254
|
-
throw new FleetError("forbidden", "Machine access was revoked during this request");
|
|
255
|
-
},
|
|
256
|
-
runChild: async (name, args, run) => {
|
|
257
|
-
const actionId = randomUUID();
|
|
258
|
-
const child = {
|
|
259
|
-
...state.event, id: actionId, actionId, parentActionId: state.event.actionId, tool: safeTool(name), operation: safeTool(name),
|
|
260
|
-
bridgeId: typeof args.machine === 'string' && allowed.includes(args.machine) ? args.machine : null,
|
|
261
|
-
sessionId: typeof args.sessionId === 'string' && /^[A-Za-z0-9_-]{1,200}$/.test(args.sessionId) ? args.sessionId : null,
|
|
262
|
-
startedAt: new Date().toISOString(), mutating: !READ_MCP_TOOLS.has(name),
|
|
263
|
-
};
|
|
264
|
-
await audit.admit(child);
|
|
265
|
-
const action = { ...state.action, actionId, parentActionId: state.event.actionId, tool: child.tool, operation: child.operation };
|
|
266
|
-
let outcome;
|
|
267
|
-
try {
|
|
268
|
-
const result = await actions.run(action, run);
|
|
269
|
-
outcome = securityOutcome(result);
|
|
270
|
-
await audit.finish(child, outcome);
|
|
271
|
-
return result;
|
|
272
|
-
}
|
|
273
|
-
catch (error) {
|
|
274
|
-
const failure = errorResult(error);
|
|
275
|
-
await audit.finish(child, { status: failure.outcomeUnknown ? 'unknown' : ['forbidden', 'permission_denied'].includes(failure.code) ? 'rejected' : 'failed', errorCode: safeFailureCode(failure.code) });
|
|
276
|
-
throw error;
|
|
277
|
-
}
|
|
278
|
-
},
|
|
279
|
-
});
|
|
280
|
-
// Stateless transport: every request is authenticated and reconstructs its own scoped tool surface.
|
|
281
|
-
const transport = new StreamableHTTPServerTransport({
|
|
282
|
-
sessionIdGenerator: undefined,
|
|
283
|
-
// Only a bounded attention_wait call opens a request-scoped SSE stream.
|
|
284
|
-
// No GET stream/session map or unsolicited server notifications are advertised.
|
|
285
|
-
enableJsonResponse: !(req.body?.method === "tools/call" && req.body?.params?.name === "attention_wait"),
|
|
286
|
-
});
|
|
287
|
-
const send = transport.send.bind(transport);
|
|
288
|
-
transport.send = async (message, options) => {
|
|
289
|
-
if ('id' in message && message.id === req.body?.id && ('result' in message || 'error' in message)) {
|
|
290
|
-
let outcome = 'error' in message ? { status: 'rejected', errorCode: message.error.code === -32602 ? 'invalid_arguments' : message.error.code === -32601 ? 'unknown_tool' : 'invalid_request' } : securityOutcome(message.result);
|
|
291
|
-
if (state.event.mutating && !req.auth.scopes.includes('mcp:control'))
|
|
292
|
-
outcome = { status: 'rejected', errorCode: 'permission_denied' };
|
|
293
|
-
try {
|
|
294
|
-
await finish(state, outcome);
|
|
295
|
-
}
|
|
296
|
-
catch {
|
|
297
|
-
await finish(state, { status: 'unknown', errorCode: 'outcome_unknown' }).catch(() => { });
|
|
298
|
-
await send({ jsonrpc: '2.0', id: message.id, error: { code: -32603, message: 'Operation outcome is unknown because final audit storage failed', data: { code: 'outcome_unknown', outcomeUnknown: true } } }, options);
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
await send(message, options);
|
|
303
|
-
};
|
|
304
|
-
res.on("close", () => {
|
|
305
|
-
void server.close();
|
|
306
|
-
});
|
|
307
|
-
try {
|
|
308
|
-
await server.connect(transport);
|
|
309
|
-
await actions.run(state.action, () => transport.handleRequest(req, res, req.body));
|
|
310
|
-
if (!state.finished && res.statusCode >= 400)
|
|
311
|
-
await finish(state, { status: 'rejected', errorCode: 'invalid_request' });
|
|
312
|
-
else if (!state.finished && req.body?.id === undefined)
|
|
313
|
-
await finish(state, { status: 'succeeded', errorCode: null });
|
|
314
|
-
}
|
|
315
|
-
catch {
|
|
316
|
-
if (!state.finished)
|
|
317
|
-
await finish(state, { status: state.dispatched && state.event.mutating ? 'unknown' : 'failed', errorCode: state.dispatched && state.event.mutating ? 'outcome_unknown' : 'internal_error' }).catch(() => { });
|
|
318
|
-
if (!res.headersSent)
|
|
319
|
-
res.status(500).json({ error: "MCP request failed" });
|
|
320
|
-
}
|
|
321
|
-
});
|
|
322
|
-
app.all("/mcp", async (_req, res) => {
|
|
323
|
-
const state = states.get(_req);
|
|
324
|
-
if (state)
|
|
325
|
-
await finish(state, { status: 'rejected', errorCode: 'invalid_request' }).catch(() => { });
|
|
326
|
-
res.setHeader("Allow", "POST, OPTIONS");
|
|
327
|
-
res.status(405).end();
|
|
328
|
-
});
|
|
329
|
-
app.use(async (error, _req, res, _next) => {
|
|
330
|
-
const status = typeof error === "object" &&
|
|
331
|
-
error !== null &&
|
|
332
|
-
"status" in error &&
|
|
333
|
-
error.status === 413
|
|
334
|
-
? 413
|
|
335
|
-
: 400;
|
|
336
|
-
if (_req.auth) {
|
|
337
|
-
try {
|
|
338
|
-
const state = states.get(_req) ?? await admission(_req, res);
|
|
339
|
-
await finish(state, { status: 'rejected', errorCode: 'invalid_request' });
|
|
340
|
-
}
|
|
341
|
-
catch {
|
|
342
|
-
res.status(503).json({ error: 'Security audit storage is unavailable' });
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
res.status(status).json({ error: "Invalid request" });
|
|
347
|
-
});
|
|
348
|
-
return app;
|
|
349
|
-
}
|
|
350
|
-
//# sourceMappingURL=http.js.map
|
package/dist/mcp/http.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/mcp/http.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/legacy-relay.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { FleetError } from "./fleet.js";
|
|
2
|
-
/** Kept only to fail explicitly for callers of the removed plaintext helper. */
|
|
3
|
-
export function legacyRelayCommand(_machineId, _request, _deadline) {
|
|
4
|
-
throw new FleetError("upgrade_required", "Plaintext legacy MCP execution is no longer supported; approve an encrypted endpoint");
|
|
5
|
-
}
|
|
6
|
-
//# sourceMappingURL=legacy-relay.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"legacy-relay.js","sourceRoot":"","sources":["../../src/mcp/legacy-relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,YAAY,CAAC;AAE5D,gFAAgF;AAChF,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,QAAuB,EAAE,SAAiB;IAC/F,MAAM,IAAI,UAAU,CAAC,kBAAkB,EAAE,sFAAsF,CAAC,CAAC;AACnI,CAAC"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import type { Pool } from 'pg';
|
|
2
|
-
import { importEndpoint } from '../security/crypto.js';
|
|
3
|
-
import type { ApprovedBridge, McpConsentSecurity, McpKeyEncryptionConfig } from '../security/protocol.js';
|
|
4
|
-
export interface McpGrantIdentity {
|
|
5
|
-
ownerId: string;
|
|
6
|
-
requestId: string;
|
|
7
|
-
grantId: string;
|
|
8
|
-
identity: Awaited<ReturnType<typeof importEndpoint>>;
|
|
9
|
-
bridges: ApprovedBridge[];
|
|
10
|
-
permissions: ('read' | 'control')[];
|
|
11
|
-
pendingExpiresAt: string;
|
|
12
|
-
activeExpiresAt: string;
|
|
13
|
-
state: 'pending' | 'approved' | 'active' | 'revoked';
|
|
14
|
-
}
|
|
15
|
-
export interface McpIdentityStore {
|
|
16
|
-
ensurePendingIdentity(requestId: string, ownerId: string, permissions: ('read' | 'control')[]): Promise<McpConsentSecurity>;
|
|
17
|
-
loadByRequest(ownerId: string, requestId: string): Promise<McpGrantIdentity>;
|
|
18
|
-
loadGrantIdentity(ownerId: string, grantId: string): Promise<McpGrantIdentity>;
|
|
19
|
-
approve(ownerId: string, requestId: string, bridges: ApprovedBridge[]): Promise<McpGrantIdentity>;
|
|
20
|
-
markActive(ownerId: string, requestId: string): Promise<void>;
|
|
21
|
-
revoke(ownerId: string, requestId: string): Promise<void>;
|
|
22
|
-
}
|
|
23
|
-
/** All columns used as context are authenticated, including lookup and expiry metadata. */
|
|
24
|
-
export interface EncryptedMcpIdentity {
|
|
25
|
-
version: 1;
|
|
26
|
-
ownerId: string;
|
|
27
|
-
requestId: string;
|
|
28
|
-
grantId: string;
|
|
29
|
-
endpointId: string;
|
|
30
|
-
expiresAt: string;
|
|
31
|
-
keyId: string;
|
|
32
|
-
nonce: string;
|
|
33
|
-
ciphertext: string;
|
|
34
|
-
}
|
|
35
|
-
export declare function encryptMcpIdentity(identity: McpGrantIdentity, privateKey: JsonWebKey, config: McpKeyEncryptionConfig): Promise<EncryptedMcpIdentity>;
|
|
36
|
-
export declare function decryptMcpIdentity(row: EncryptedMcpIdentity, config: McpKeyEncryptionConfig): Promise<McpGrantIdentity>;
|
|
37
|
-
/** Uses the gateway's existing pool; no second connection-string/secret source. */
|
|
38
|
-
export declare class McpKeyStore implements McpIdentityStore {
|
|
39
|
-
readonly pool: Pool;
|
|
40
|
-
private readonly now;
|
|
41
|
-
private readonly config;
|
|
42
|
-
constructor(pool: Pool, config: McpKeyEncryptionConfig, now?: () => number);
|
|
43
|
-
checkSchema(): Promise<void>;
|
|
44
|
-
ensurePendingIdentity(requestId: string, ownerId: string, permissions: ('read' | 'control')[]): Promise<McpConsentSecurity>;
|
|
45
|
-
loadByRequest(ownerId: string, requestId: string): Promise<McpGrantIdentity>;
|
|
46
|
-
loadGrantIdentity(ownerId: string, grantId: string): Promise<McpGrantIdentity>;
|
|
47
|
-
/** Caller must verify exact bridge Auth receipts before supplying these pins. */
|
|
48
|
-
approve(ownerId: string, requestId: string, bridges: ApprovedBridge[]): Promise<McpGrantIdentity>;
|
|
49
|
-
markActive(ownerId: string, requestId: string): Promise<void>;
|
|
50
|
-
revoke(ownerId: string, requestId: string): Promise<void>;
|
|
51
|
-
private update;
|
|
52
|
-
}
|