@superblocksteam/gateway 2.0.175-next.0 → 2.0.176

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.
Files changed (65) hide show
  1. package/README.md +18 -43
  2. package/dist/capabilities/lifecycle.d.ts +0 -1
  3. package/dist/capabilities/lifecycle.d.ts.map +1 -1
  4. package/dist/capabilities/lifecycle.js +6 -10
  5. package/dist/capabilities/lifecycle.js.map +1 -1
  6. package/dist/config.d.ts +0 -6
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +0 -1
  9. package/dist/config.js.map +1 -1
  10. package/dist/deps.d.ts +3 -3
  11. package/dist/integrations/filters.d.ts.map +1 -1
  12. package/dist/integrations/filters.js +16 -1
  13. package/dist/integrations/filters.js.map +1 -1
  14. package/dist/preview/capture-screenshot.d.ts.map +1 -1
  15. package/dist/preview/capture-screenshot.js +1 -1
  16. package/dist/preview/capture-screenshot.js.map +1 -1
  17. package/dist/sabs/app-state.d.ts +0 -2
  18. package/dist/sabs/app-state.d.ts.map +1 -1
  19. package/dist/sabs/app-state.js +0 -5
  20. package/dist/sabs/app-state.js.map +1 -1
  21. package/dist/sabs/editor-client-methods.js +1 -1
  22. package/dist/sabs/editor-client-methods.js.map +1 -1
  23. package/dist/sabs/session-peer.d.ts +0 -7
  24. package/dist/sabs/session-peer.d.ts.map +1 -1
  25. package/dist/sabs/websocket-session-peer.d.ts +0 -1
  26. package/dist/sabs/websocket-session-peer.d.ts.map +1 -1
  27. package/dist/sabs/websocket-session-peer.js +0 -5
  28. package/dist/sabs/websocket-session-peer.js.map +1 -1
  29. package/dist/server/client.d.ts +0 -9
  30. package/dist/server/client.d.ts.map +1 -1
  31. package/dist/server/client.js +0 -9
  32. package/dist/server/client.js.map +1 -1
  33. package/dist/start.d.ts +1 -5
  34. package/dist/start.d.ts.map +1 -1
  35. package/dist/start.js +9 -22
  36. package/dist/start.js.map +1 -1
  37. package/dist/telemetry/metrics.d.ts +0 -3
  38. package/dist/telemetry/metrics.d.ts.map +1 -1
  39. package/dist/telemetry/metrics.js +0 -11
  40. package/dist/telemetry/metrics.js.map +1 -1
  41. package/dist/telemetry/runtime.d.ts +1 -2
  42. package/dist/telemetry/runtime.d.ts.map +1 -1
  43. package/dist/telemetry/runtime.js +5 -12
  44. package/dist/telemetry/runtime.js.map +1 -1
  45. package/dist/transports/mcp/admin-tools.d.ts +7 -3
  46. package/dist/transports/mcp/admin-tools.d.ts.map +1 -1
  47. package/dist/transports/mcp/admin-tools.js +51 -5
  48. package/dist/transports/mcp/admin-tools.js.map +1 -1
  49. package/dist/transports/mcp/mount.d.ts +13 -2
  50. package/dist/transports/mcp/mount.d.ts.map +1 -1
  51. package/dist/transports/mcp/mount.js +38 -73
  52. package/dist/transports/mcp/mount.js.map +1 -1
  53. package/package.json +19 -22
  54. package/dist/http/main.d.ts +0 -3
  55. package/dist/http/main.d.ts.map +0 -1
  56. package/dist/http/main.js +0 -8
  57. package/dist/http/main.js.map +0 -1
  58. package/dist/http/serve.d.ts +0 -26
  59. package/dist/http/serve.d.ts.map +0 -1
  60. package/dist/http/serve.js +0 -255
  61. package/dist/http/serve.js.map +0 -1
  62. package/dist/telemetry/mcp-usage.d.ts +0 -22
  63. package/dist/telemetry/mcp-usage.d.ts.map +0 -1
  64. package/dist/telemetry/mcp-usage.js +0 -102
  65. package/dist/telemetry/mcp-usage.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superblocksteam/gateway",
3
- "version": "2.0.175-next.0",
3
+ "version": "2.0.176",
4
4
  "description": "Gateway v0 — MCP entry for app start/edit/publish",
5
5
  "license": "Superblocks Community Software License",
6
6
  "bin": {
@@ -23,39 +23,39 @@
23
23
  },
24
24
  "dependencies": {
25
25
  "@modelcontextprotocol/ext-apps": "^1.7.5",
26
- "@modelcontextprotocol/sdk": "^1.32.2",
26
+ "@modelcontextprotocol/sdk": "^1.32.1",
27
27
  "@opentelemetry/api": "^1.9.1",
28
- "@superblocksteam/library-shared": "2.0.175-next.0",
29
- "@superblocksteam/mcp-server": "2.0.175-next.0",
30
- "@superblocksteam/shared": "0.9620.0",
31
- "@superblocksteam/telemetry": "2.0.175-next.0",
28
+ "@superblocksteam/library-shared": "2.0.176",
29
+ "@superblocksteam/mcp-server": "2.0.176",
30
+ "@superblocksteam/shared": "0.9619.9",
31
+ "@superblocksteam/telemetry": "2.0.176",
32
32
  "fflate": "^0.8.3",
33
- "libpg-query": "^17.8.1",
34
- "mdast-util-from-markdown": "2.1.0",
33
+ "libpg-query": "^17.7.4",
34
+ "mdast-util-from-markdown": "2.0.2",
35
35
  "mdast-util-gfm-autolink-literal": "2.0.1",
36
36
  "micromark-extension-gfm-autolink-literal": "2.1.0",
37
37
  "playwright": "1.56.0",
38
- "ws": "8.22.0",
39
- "zod": "^4.6.7"
38
+ "ws": "8.21.0",
39
+ "zod": "^4.3.6"
40
40
  },
41
41
  "devDependencies": {
42
- "@eslint/js": "^9.39.5",
43
- "@types/express": "^4.17.25",
42
+ "@eslint/js": "^9.39.2",
43
+ "@types/express": "^4.17.21",
44
44
  "@types/mdast": "4.0.4",
45
- "@types/node": "^24.19.2",
46
- "@types/ws": "^8.18.2",
45
+ "@types/node": "^24",
46
+ "@types/ws": "^8.18.1",
47
47
  "eslint": "^9.39.2",
48
48
  "eslint-config-prettier": "^10.1.8",
49
49
  "eslint-config-turbo": "^2.9.16",
50
50
  "eslint-plugin-import": "^2.32.0",
51
51
  "eslint-plugin-unicorn": "^62.0.0",
52
52
  "eslint-plugin-unused-imports": "^4.3.0",
53
- "express": "^4.22.3",
54
- "globals": "^17.13.0",
55
- "tsx": "^4.23.15",
53
+ "express": "^4.21.1",
54
+ "globals": "^17.3.0",
55
+ "tsx": "^4.20.3",
56
56
  "typescript": "^6.0.3",
57
- "typescript-eslint": "^8.72.0",
58
- "vitest": "^4.1.12"
57
+ "typescript-eslint": "^8.59.2",
58
+ "vitest": "^4.1.11"
59
59
  },
60
60
  "engines": {
61
61
  "node": ">=24",
@@ -68,16 +68,13 @@
68
68
  "build": "tsc --build tsconfig.build.json",
69
69
  "check": "pnpm run lint && pnpm run typecheck",
70
70
  "clean": "rm -rf dist *.tsbuildinfo",
71
- "deploy-build": "../../scripts/deploy-build.sh @superblocksteam/gateway deploy-build/gateway",
72
71
  "dev": "node --import tsx src/main.ts",
73
- "dev:http": "node --import tsx src/http/main.ts",
74
72
  "dev:local": "node --import tsx src/main.ts",
75
73
  "lint": "eslint --max-warnings 0 --concurrency=2",
76
74
  "lint:fix": "eslint --fix --concurrency=2",
77
75
  "playwright:install": "playwright install chromium",
78
76
  "publish-package": "pnpm publish",
79
77
  "start": "node dist/main.js",
80
- "start:http": "node dist/http/main.js",
81
78
  "test": "vitest run",
82
79
  "test:watch": "vitest",
83
80
  "typecheck": "tsc --noEmit"
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=main.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/http/main.ts"],"names":[],"mappings":""}
package/dist/http/main.js DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env node
2
- import { startHttpGateway } from "./serve.js";
3
- const gateway = await startHttpGateway();
4
- // Close on a stop signal so the last telemetry batch is sent.
5
- process.once("SIGTERM", () => {
6
- void gateway.close().finally(() => process.exit(0));
7
- });
8
- //# sourceMappingURL=main.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/http/main.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC;AACzC,8DAA8D;AAC9D,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;IAC3B,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC"}
@@ -1,26 +0,0 @@
1
- /** AgentCore Runtime passes the caller's token through in this header. */
2
- export declare const USER_TOKEN_HEADER = "x-amzn-bedrock-agentcore-runtime-custom-user-token";
3
- export type StartedHttpGateway = {
4
- close: () => Promise<void>;
5
- port: number;
6
- };
7
- /**
8
- * Serves the Platform MCP on AgentCore Runtime's MCP contract: streamable HTTP
9
- * on `/mcp` and a health check on `/ping`.
10
- *
11
- * One process is one microVM, which AgentCore gives to one user. It can still
12
- * see more than one MCP session (AgentCore's own handshake, then the client's),
13
- * so each session gets its own MCP server over one shared runtime.
14
- */
15
- export declare function startHttpGateway({ host, port, }?: {
16
- host?: string;
17
- port?: number;
18
- }): Promise<StartedHttpGateway>;
19
- /** The token background work may use, or why it may not. */
20
- export declare function usableToken(token: string | undefined): string;
21
- /**
22
- * Whether a JWT's `exp` has passed. A personal access token is not a JWT and
23
- * has no expiry we can read, so it never counts as expired here.
24
- */
25
- export declare function jwtExpired(token: string, now?: number): boolean;
26
- //# sourceMappingURL=serve.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/http/serve.ts"],"names":[],"mappings":"AAgBA,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,uDACwB,CAAC;AAWvD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,IAAgB,EAChB,IAAW,GACZ,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA8KrE;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAU7D;AAgBD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO,CASnE"}
@@ -1,255 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import { createServer, } from "node:http";
3
- import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
4
- import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
5
- import { installFaultBarrier } from "../process/fault-barrier.js";
6
- import { HttpSuperblocksServerClient } from "../server/client.js";
7
- import { IdentityUnavailableError } from "../server/identity-reads.js";
8
- import { createRuntime } from "../start.js";
9
- import { createMcpServer } from "../transports/mcp/mount.js";
10
- /** AgentCore Runtime passes the caller's token through in this header. */
11
- export const USER_TOKEN_HEADER = "x-amzn-bedrock-agentcore-runtime-custom-user-token";
12
- /**
13
- * AgentCore sends its own `initialize` to every microVM before any user is
14
- * assigned to it, so that handshake comes without a token. Nothing else may.
15
- */
16
- const TOKENLESS_METHODS = new Set(["initialize", "notifications/initialized"]);
17
- // Bodies read here are handshakes, which are tiny. Larger ones go to the SDK.
18
- const HANDSHAKE_BODY_LIMIT_BYTES = 64 * 1024;
19
- /**
20
- * Serves the Platform MCP on AgentCore Runtime's MCP contract: streamable HTTP
21
- * on `/mcp` and a health check on `/ping`.
22
- *
23
- * One process is one microVM, which AgentCore gives to one user. It can still
24
- * see more than one MCP session (AgentCore's own handshake, then the client's),
25
- * so each session gets its own MCP server over one shared runtime.
26
- */
27
- export async function startHttpGateway({ host = "0.0.0.0", port = 8000, } = {}) {
28
- let latestToken;
29
- let pinnedUserId;
30
- const runtime = await createRuntime({
31
- apiKey: "",
32
- // Background work (live edit, Clark calling back, prompt-start reads) runs
33
- // after the request that started it, on whatever token came in last.
34
- getAccessToken: async () => usableToken(latestToken),
35
- hosted: true,
36
- // Keys the plan approval directory, which only this microVM can see.
37
- sessionKey: "hosted",
38
- });
39
- // The runtime's client sends the latest token, not the one being checked.
40
- const identities = new HttpSuperblocksServerClient(runtime.config.serverUrl);
41
- const sessions = new Map();
42
- // Sessions opened without a token. A request without a token reaches only these.
43
- const tokenlessSessions = new Set();
44
- const handleMcp = async (req, res) => {
45
- const header = req.headers[USER_TOKEN_HEADER];
46
- const token = (Array.isArray(header) ? header[0] : header)
47
- ?.replace(/^Bearer\s+/i, "")
48
- .trim();
49
- const sessionId = req.headers["mcp-session-id"];
50
- let body;
51
- if (token) {
52
- let userId;
53
- try {
54
- userId = (await identities.validateApiKey(token))?.userId;
55
- }
56
- catch (error) {
57
- if (!(error instanceof IdentityUnavailableError))
58
- throw error;
59
- return reject(res, 503, "Superblocks could not check this token.");
60
- }
61
- // The identity read is cached, so it can still accept a JWT that just expired.
62
- if (!userId || jwtExpired(token)) {
63
- return reject(res, 401, "Superblocks refused this token.");
64
- }
65
- if (!pinnedUserId) {
66
- pinnedUserId = userId;
67
- console.error("gateway http pinned this server to a user", { userId });
68
- }
69
- if (userId !== pinnedUserId) {
70
- return reject(res, 403, "This session belongs to another user.");
71
- }
72
- latestToken = token;
73
- }
74
- else {
75
- body = req.method === "POST" ? await readJson(req) : undefined;
76
- if (!isTokenlessHandshake(body) ||
77
- (typeof sessionId === "string" && !tokenlessSessions.has(sessionId))) {
78
- // Shows whether AgentCore sends anything tokenless beyond the handshake.
79
- console.error("gateway http refused a request without a token", {
80
- method: req.method,
81
- rpcMethod: jsonRpcMethod(body)?.slice(0, 100),
82
- });
83
- return reject(res, 401, `Missing ${USER_TOKEN_HEADER} header.`);
84
- }
85
- }
86
- if (typeof sessionId === "string") {
87
- const transport = sessions.get(sessionId);
88
- if (!transport)
89
- return reject(res, 404, "Session not found.");
90
- return transport.handleRequest(req, res, body);
91
- }
92
- body ??= req.method === "POST" ? await readJson(req) : undefined;
93
- if (!isInitializeRequest(body)) {
94
- return reject(res, 400, "Start a session with initialize.");
95
- }
96
- const transport = new StreamableHTTPServerTransport({
97
- sessionIdGenerator: () => randomUUID(),
98
- onsessioninitialized: (id) => {
99
- sessions.set(id, transport);
100
- if (!token)
101
- tokenlessSessions.add(id);
102
- },
103
- });
104
- const server = createMcpServer(runtime.deps);
105
- transport.onclose = () => {
106
- if (!transport.sessionId)
107
- return;
108
- sessions.delete(transport.sessionId);
109
- tokenlessSessions.delete(transport.sessionId);
110
- };
111
- await server.connect(transport);
112
- await transport.handleRequest(req, res, body);
113
- };
114
- // AgentCore stops an idle session only once /ping says Healthy and
115
- // time_of_last_update stops moving, so the time moves only when the status
116
- // flips.
117
- let requestsInFlight = 0;
118
- let status = "Healthy";
119
- let timeOfLastUpdate = Math.floor(Date.now() / 1000);
120
- // Called on each request start and end too, so a tool call that fits
121
- // between two pings still moves the time.
122
- const updateStatus = () => {
123
- const turnRunning = runtime.deps.sessionPeer.anyTurnRunning();
124
- const next = requestsInFlight > 0 || turnRunning ? "HealthyBusy" : "Healthy";
125
- if (next === status)
126
- return;
127
- // Explains after the fact why AgentCore did or did not stop this microVM.
128
- console.error("gateway http ping status changed", {
129
- from: status,
130
- requestsInFlight,
131
- to: next,
132
- turnRunning,
133
- });
134
- status = next;
135
- timeOfLastUpdate = Math.floor(Date.now() / 1000);
136
- };
137
- const httpServer = createServer((req, res) => {
138
- const path = new URL(req.url ?? "/", "http://localhost").pathname;
139
- if (path === "/ping" && req.method === "GET") {
140
- updateStatus();
141
- res.writeHead(200, { "content-type": "application/json" });
142
- res.end(JSON.stringify({ status, time_of_last_update: timeOfLastUpdate }));
143
- return;
144
- }
145
- if (path !== "/mcp") {
146
- res.writeHead(404).end();
147
- return;
148
- }
149
- // Not GET: that is the client's notification stream, which stays open
150
- // while the user is idle.
151
- if (req.method === "POST") {
152
- requestsInFlight++;
153
- updateStatus();
154
- res.on("close", () => {
155
- requestsInFlight--;
156
- updateStatus();
157
- });
158
- }
159
- handleMcp(req, res).catch((error) => {
160
- if (res.headersSent) {
161
- console.error("gateway http request failed", error);
162
- res.end();
163
- }
164
- else if (error instanceof SyntaxError ||
165
- error instanceof BodyTooLargeError) {
166
- reject(res, 400, error.message);
167
- }
168
- else {
169
- console.error("gateway http request failed", error);
170
- reject(res, 500, "Internal error.");
171
- }
172
- });
173
- });
174
- await new Promise((resolve) => httpServer.listen(port, host, resolve));
175
- const disposeFaultBarrier = installFaultBarrier({
176
- onFault: () => undefined,
177
- shutdown: () => runtime.close(),
178
- });
179
- const address = httpServer.address();
180
- const boundPort = typeof address === "object" && address ? address.port : port;
181
- console.error("gateway MCP listening on http", { host, port: boundPort });
182
- return {
183
- port: boundPort,
184
- close: async () => {
185
- disposeFaultBarrier();
186
- await Promise.all([...sessions.values()].map((t) => t.close()));
187
- httpServer.closeAllConnections();
188
- await new Promise((resolve) => httpServer.close(() => resolve()));
189
- await runtime.close();
190
- },
191
- };
192
- }
193
- /** The token background work may use, or why it may not. */
194
- export function usableToken(token) {
195
- if (!token) {
196
- throw new Error("No Superblocks token has reached this server yet.");
197
- }
198
- if (jwtExpired(token)) {
199
- throw new Error("The Superblocks sign-in for this session expired while this step was running. Send a new request to continue.");
200
- }
201
- return token;
202
- }
203
- function isTokenlessHandshake(body) {
204
- const method = jsonRpcMethod(body);
205
- return method !== undefined && TOKENLESS_METHODS.has(method);
206
- }
207
- function jsonRpcMethod(body) {
208
- return typeof body === "object" &&
209
- body !== null &&
210
- "method" in body &&
211
- typeof body.method === "string"
212
- ? body.method
213
- : undefined;
214
- }
215
- /**
216
- * Whether a JWT's `exp` has passed. A personal access token is not a JWT and
217
- * has no expiry we can read, so it never counts as expired here.
218
- */
219
- export function jwtExpired(token, now = Date.now()) {
220
- const [, payload, signature] = token.split(".");
221
- if (!payload || signature === undefined)
222
- return false;
223
- try {
224
- const { exp } = JSON.parse(Buffer.from(payload, "base64url").toString());
225
- return typeof exp === "number" && exp * 1000 <= now;
226
- }
227
- catch {
228
- return false;
229
- }
230
- }
231
- class BodyTooLargeError extends Error {
232
- }
233
- async function readJson(req) {
234
- const chunks = [];
235
- let size = 0;
236
- for await (const chunk of req) {
237
- size += chunk.length;
238
- if (size > HANDSHAKE_BODY_LIMIT_BYTES) {
239
- throw new BodyTooLargeError("Request body too large.");
240
- }
241
- chunks.push(Buffer.from(chunk));
242
- }
243
- return JSON.parse(Buffer.concat(chunks).toString("utf8"));
244
- }
245
- function reject(res, status, message) {
246
- // Only the status: a JSON parse error message can quote the request body.
247
- console.error("gateway http refused a request", { status });
248
- res.writeHead(status, { "content-type": "application/json" });
249
- res.end(JSON.stringify({
250
- jsonrpc: "2.0",
251
- error: { code: -32000, message },
252
- id: null,
253
- }));
254
- }
255
- //# sourceMappingURL=serve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/http/serve.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import type { BuilderMcpUsageEvent } from "@superblocksteam/library-shared/types";
2
- import type { CapabilityResult } from "../capabilities/types.js";
3
- export type McpUsageReporter = (input: {
4
- apiKey: string;
5
- event: BuilderMcpUsageEvent;
6
- }) => Promise<void>;
7
- type McpUsageInput = {
8
- apiKey: string;
9
- toolName: string;
10
- clientName?: string;
11
- arguments?: Record<string, unknown>;
12
- };
13
- export declare class McpUsage {
14
- private readonly report;
15
- private readonly sessionId;
16
- constructor(report: McpUsageReporter);
17
- run<T>(input: McpUsageInput, execute: () => Promise<CapabilityResult<T>>): Promise<CapabilityResult<T>>;
18
- private deliver;
19
- private deliveryFailureReason;
20
- }
21
- export {};
22
- //# sourceMappingURL=mcp-usage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-usage.d.ts","sourceRoot":"","sources":["../../src/telemetry/mcp-usage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAIlF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAYjE,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,oBAAoB,CAAC;CAC7B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpB,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC,CAAC;AAEF,qBAAa,QAAQ;IAGP,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;gBAEb,MAAM,EAAE,gBAAgB;IAE/C,GAAG,CAAC,CAAC,EACT,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAC1C,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAsDjB,OAAO;IA0BrB,OAAO,CAAC,qBAAqB;CAW9B"}
@@ -1,102 +0,0 @@
1
- import { createHash, randomUUID } from "node:crypto";
2
- import { EntitlementError } from "@superblocksteam/mcp-server";
3
- import { BuilderCaller } from "@superblocksteam/shared";
4
- import { ServerHttpError, ServerTimeoutError, ServerTransportError, } from "../server/client.js";
5
- import { recordMcpUsageDelivery, recordMcpUsageDeliveryAttempt, } from "./metrics.js";
6
- export class McpUsage {
7
- report;
8
- sessionId = randomUUID();
9
- constructor(report) {
10
- this.report = report;
11
- }
12
- async run(input, execute) {
13
- const toolName = input.toolName;
14
- if (toolName !== "start_app" &&
15
- toolName !== "edit_app" &&
16
- toolName !== "get_app" &&
17
- toolName !== "publish_app" &&
18
- toolName !== "build_app") {
19
- return execute();
20
- }
21
- const key = input.arguments?.idempotencyKey;
22
- const applicationId = input.arguments?.applicationId;
23
- const branch = input.arguments?.branch;
24
- const replayKey = toolName !== "start_app" &&
25
- typeof applicationId === "string" &&
26
- applicationId &&
27
- typeof key === "string" &&
28
- key
29
- ? key
30
- : randomUUID();
31
- const operationId = createHash("sha256")
32
- .update(JSON.stringify([
33
- toolName,
34
- applicationId ?? null,
35
- typeof branch === "string" ? branch.trim() || null : null,
36
- replayKey,
37
- ]))
38
- .digest("hex");
39
- const event = {
40
- operationId,
41
- sessionId: this.sessionId,
42
- toolName,
43
- mcpClient: BuilderCaller.fromPeer("gateway", input.clientName).client ?? "unknown",
44
- phase: "started",
45
- };
46
- void this.deliver(input.apiKey, event);
47
- let outcome = "error";
48
- try {
49
- const result = await execute();
50
- outcome = result.kind;
51
- return result;
52
- }
53
- catch (error) {
54
- if (error instanceof EntitlementError)
55
- outcome = "not_entitled";
56
- throw error;
57
- }
58
- finally {
59
- void this.deliver(input.apiKey, { ...event, phase: "finished", outcome });
60
- }
61
- }
62
- async deliver(apiKey, event) {
63
- let timeout;
64
- try {
65
- recordMcpUsageDeliveryAttempt();
66
- await Promise.race([
67
- this.report({ apiKey, event }),
68
- new Promise((_resolve, reject) => {
69
- timeout = setTimeout(() => reject(new ServerTimeoutError("MCP activity delivery timed out")), 1000);
70
- timeout.unref();
71
- }),
72
- ]);
73
- recordMcpUsageDelivery("accepted");
74
- }
75
- catch (error) {
76
- recordMcpUsageDelivery("failed", this.deliveryFailureReason(error));
77
- }
78
- finally {
79
- clearTimeout(timeout);
80
- }
81
- }
82
- deliveryFailureReason(error) {
83
- if (error instanceof ServerTimeoutError)
84
- return "timeout";
85
- if (error instanceof ServerTransportError)
86
- return "network";
87
- if (!(error instanceof ServerHttpError))
88
- return "unknown";
89
- if (error.status === 400)
90
- return "invalid_request";
91
- if (error.status === 401 || error.status === 403)
92
- return "authentication";
93
- if (error.status === 404)
94
- return "unsupported";
95
- if (error.status === 408)
96
- return "timeout";
97
- if (error.status === 429)
98
- return "rate_limited";
99
- return error.status >= 500 ? "server_error" : "http_error";
100
- }
101
- }
102
- //# sourceMappingURL=mcp-usage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-usage.js","sourceRoot":"","sources":["../../src/telemetry/mcp-usage.ts"],"names":[],"mappings":"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"}