skybridge 0.0.0-dev.81fd90a → 0.0.0-dev.8226541

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 (269) hide show
  1. package/README.md +14 -14
  2. package/dist/cli/build-helpers.d.ts +1 -1
  3. package/dist/cli/build-helpers.js +4 -4
  4. package/dist/cli/build-helpers.js.map +1 -1
  5. package/dist/cli/build-helpers.test.js +2 -2
  6. package/dist/cli/build-helpers.test.js.map +1 -1
  7. package/dist/cli/build-steps.js +1 -1
  8. package/dist/cli/build-steps.js.map +1 -1
  9. package/dist/cli/build-steps.test.js +3 -3
  10. package/dist/cli/build-steps.test.js.map +1 -1
  11. package/dist/cli/detect-port.js +0 -1
  12. package/dist/cli/detect-port.js.map +1 -1
  13. package/dist/cli/run-plain.js +2 -1
  14. package/dist/cli/run-plain.js.map +1 -1
  15. package/dist/cli/telemetry.js +2 -0
  16. package/dist/cli/telemetry.js.map +1 -1
  17. package/dist/cli/use-nodemon.d.ts +11 -1
  18. package/dist/cli/use-nodemon.js +30 -8
  19. package/dist/cli/use-nodemon.js.map +1 -1
  20. package/dist/cli/use-typescript-check.js +1 -1
  21. package/dist/cli/use-typescript-check.js.map +1 -1
  22. package/dist/commands/dev.js +4 -4
  23. package/dist/commands/dev.js.map +1 -1
  24. package/dist/commands/start.js +2 -2
  25. package/dist/commands/start.js.map +1 -1
  26. package/dist/server/app.d.ts +194 -0
  27. package/dist/server/app.js +266 -0
  28. package/dist/server/app.js.map +1 -0
  29. package/dist/server/app.test.js +97 -0
  30. package/dist/server/app.test.js.map +1 -0
  31. package/dist/server/auth/discovery.d.ts +1 -1
  32. package/dist/server/auth/discovery.js +1 -1
  33. package/dist/server/auth/discovery.js.map +1 -1
  34. package/dist/server/auth/index.d.ts +19 -1
  35. package/dist/server/auth/index.js.map +1 -1
  36. package/dist/server/auth/providers/auth0.d.ts +2 -2
  37. package/dist/server/auth/providers/auth0.js +13 -8
  38. package/dist/server/auth/providers/auth0.js.map +1 -1
  39. package/dist/server/auth/providers/auth0.test.js +1 -1
  40. package/dist/server/auth/providers/auth0.test.js.map +1 -1
  41. package/dist/server/auth/providers/authplane.d.ts +2 -2
  42. package/dist/server/auth/providers/authplane.js.map +1 -1
  43. package/dist/server/auth/providers/authplane.test.js +10 -7
  44. package/dist/server/auth/providers/authplane.test.js.map +1 -1
  45. package/dist/server/auth/providers/clerk.d.ts +2 -2
  46. package/dist/server/auth/providers/clerk.js.map +1 -1
  47. package/dist/server/auth/providers/clerk.test.js +1 -1
  48. package/dist/server/auth/providers/clerk.test.js.map +1 -1
  49. package/dist/server/auth/providers/custom.d.ts +7 -5
  50. package/dist/server/auth/providers/custom.js +5 -2
  51. package/dist/server/auth/providers/custom.js.map +1 -1
  52. package/dist/server/auth/providers/custom.test.js +13 -10
  53. package/dist/server/auth/providers/custom.test.js.map +1 -1
  54. package/dist/server/auth/providers/descope.d.ts +2 -2
  55. package/dist/server/auth/providers/descope.js.map +1 -1
  56. package/dist/server/auth/providers/descope.test.js +3 -3
  57. package/dist/server/auth/providers/descope.test.js.map +1 -1
  58. package/dist/server/auth/providers/stytch.d.ts +2 -2
  59. package/dist/server/auth/providers/stytch.js.map +1 -1
  60. package/dist/server/auth/providers/workos.d.ts +5 -4
  61. package/dist/server/auth/providers/workos.js +2 -1
  62. package/dist/server/auth/providers/workos.js.map +1 -1
  63. package/dist/server/auth/setup.d.ts +1 -1
  64. package/dist/server/auth/setup.js.map +1 -1
  65. package/dist/server/auth/setup.test.js +74 -58
  66. package/dist/server/auth/setup.test.js.map +1 -1
  67. package/dist/server/auth/verify.d.ts +5 -3
  68. package/dist/server/auth/verify.js.map +1 -1
  69. package/dist/server/auth/verify.test.js +16 -0
  70. package/dist/server/auth/verify.test.js.map +1 -1
  71. package/dist/server/auth-extra.test-d.js +93 -34
  72. package/dist/server/auth-extra.test-d.js.map +1 -1
  73. package/dist/server/auth.d.ts +4 -4
  74. package/dist/server/auth.js +2 -2
  75. package/dist/server/auth.js.map +1 -1
  76. package/dist/server/build-manifest.test.js +7 -6
  77. package/dist/server/build-manifest.test.js.map +1 -1
  78. package/dist/server/events.d.ts +113 -0
  79. package/dist/server/events.js +318 -0
  80. package/dist/server/events.js.map +1 -0
  81. package/dist/server/events.test.js +172 -0
  82. package/dist/server/events.test.js.map +1 -0
  83. package/dist/server/express.d.ts +23 -3
  84. package/dist/server/express.js +40 -10
  85. package/dist/server/express.js.map +1 -1
  86. package/dist/server/express.test.js +193 -110
  87. package/dist/server/express.test.js.map +1 -1
  88. package/dist/server/file-ref.d.ts +1 -1
  89. package/dist/server/file-ref.js +1 -1
  90. package/dist/server/file-ref.js.map +1 -1
  91. package/dist/server/form-input.d.ts +120 -0
  92. package/dist/server/form-input.js +89 -0
  93. package/dist/server/form-input.js.map +1 -0
  94. package/dist/server/index.d.ts +8 -4
  95. package/dist/server/index.js +5 -1
  96. package/dist/server/index.js.map +1 -1
  97. package/dist/server/mcp-errors.test.js +9 -5
  98. package/dist/server/mcp-errors.test.js.map +1 -1
  99. package/dist/server/middleware.test.js +221 -148
  100. package/dist/server/middleware.test.js.map +1 -1
  101. package/dist/server/register-tool.test.js +212 -7
  102. package/dist/server/register-tool.test.js.map +1 -1
  103. package/dist/server/server.d.ts +323 -150
  104. package/dist/server/server.js +349 -324
  105. package/dist/server/server.js.map +1 -1
  106. package/dist/server/skills-integration.test.js +16 -9
  107. package/dist/server/skills-integration.test.js.map +1 -1
  108. package/dist/server/skills.js +1 -1
  109. package/dist/server/skills.js.map +1 -1
  110. package/dist/server/templateHelper.d.ts +0 -3
  111. package/dist/server/templateHelper.js.map +1 -1
  112. package/dist/server/templates.generated.js +4 -8
  113. package/dist/server/templates.generated.js.map +1 -1
  114. package/dist/server/tool-extra.test.js +115 -20
  115. package/dist/server/tool-extra.test.js.map +1 -1
  116. package/dist/server/view-resource-resolution.test.js +17 -10
  117. package/dist/server/view-resource-resolution.test.js.map +1 -1
  118. package/dist/test/utils.d.ts +7 -6
  119. package/dist/test/utils.js +212 -197
  120. package/dist/test/utils.js.map +1 -1
  121. package/dist/test/view.test.js +24 -20
  122. package/dist/test/view.test.js.map +1 -1
  123. package/dist/views/index.d.ts +10 -0
  124. package/dist/views/index.js +3 -0
  125. package/dist/views/index.js.map +1 -0
  126. package/dist/{web/plugin → views}/scan-views.js +1 -1
  127. package/dist/views/scan-views.js.map +1 -0
  128. package/dist/views/scan-views.test.js.map +1 -0
  129. package/dist/views/validate-view.d.ts +1 -0
  130. package/dist/{web/plugin → views}/validate-view.js +2 -2
  131. package/dist/views/validate-view.js.map +1 -0
  132. package/dist/views/validate-view.test.js.map +1 -0
  133. package/dist/web/bridges/adaptor.d.ts +14 -3
  134. package/dist/web/bridges/adaptor.js +157 -13
  135. package/dist/web/bridges/adaptor.js.map +1 -1
  136. package/dist/web/bridges/adaptor.test.js +46 -7
  137. package/dist/web/bridges/adaptor.test.js.map +1 -1
  138. package/dist/web/bridges/apps-sdk/bridge.js +1 -1
  139. package/dist/web/bridges/apps-sdk/bridge.js.map +1 -1
  140. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.d.ts +3 -3
  141. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.js +3 -3
  142. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.js.map +1 -1
  143. package/dist/web/bridges/get-adaptor.test.js +2 -2
  144. package/dist/web/bridges/get-adaptor.test.js.map +1 -1
  145. package/dist/web/bridges/mcp-app/bridge.d.ts +1 -1
  146. package/dist/web/bridges/mcp-app/bridge.js +10 -3
  147. package/dist/web/bridges/mcp-app/bridge.js.map +1 -1
  148. package/dist/web/bridges/mcp-app/bridge.test.js +2 -2
  149. package/dist/web/bridges/mcp-app/bridge.test.js.map +1 -1
  150. package/dist/web/bridges/mcp-app/types.d.ts +18 -3
  151. package/dist/web/bridges/mcp-app/types.js.map +1 -1
  152. package/dist/web/bridges/mcp-app/use-mcp-app-context.d.ts +2 -2
  153. package/dist/web/bridges/mcp-app/use-mcp-app-context.js +1 -1
  154. package/dist/web/bridges/mcp-app/use-mcp-app-context.js.map +1 -1
  155. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.js +1 -1
  156. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.js.map +1 -1
  157. package/dist/web/bridges/mcp-app/view-tools.test.js +1 -1
  158. package/dist/web/bridges/mcp-app/view-tools.test.js.map +1 -1
  159. package/dist/web/bridges/types.d.ts +63 -13
  160. package/dist/web/bridges/types.js +1 -1
  161. package/dist/web/bridges/types.js.map +1 -1
  162. package/dist/web/create-store.test.js +2 -2
  163. package/dist/web/create-store.test.js.map +1 -1
  164. package/dist/web/data-llm.js +3 -2
  165. package/dist/web/data-llm.js.map +1 -1
  166. package/dist/web/data-llm.test.js +8 -2
  167. package/dist/web/data-llm.test.js.map +1 -1
  168. package/dist/web/generate-helpers.d.ts +23 -19
  169. package/dist/web/generate-helpers.js +21 -17
  170. package/dist/web/generate-helpers.js.map +1 -1
  171. package/dist/web/generate-helpers.test-d.js +3 -3
  172. package/dist/web/generate-helpers.test-d.js.map +1 -1
  173. package/dist/web/generate-helpers.test.js +2 -2
  174. package/dist/web/generate-helpers.test.js.map +1 -1
  175. package/dist/web/hooks/index.d.ts +5 -1
  176. package/dist/web/hooks/index.js +5 -1
  177. package/dist/web/hooks/index.js.map +1 -1
  178. package/dist/web/hooks/openai-extensions.test.js +107 -0
  179. package/dist/web/hooks/openai-extensions.test.js.map +1 -0
  180. package/dist/web/hooks/use-call-tool.d.ts +2 -2
  181. package/dist/web/hooks/use-call-tool.js +15 -10
  182. package/dist/web/hooks/use-call-tool.js.map +1 -1
  183. package/dist/web/hooks/use-call-tool.test.js +15 -4
  184. package/dist/web/hooks/use-call-tool.test.js.map +1 -1
  185. package/dist/web/hooks/use-deep-link.d.ts +22 -0
  186. package/dist/web/hooks/use-deep-link.js +34 -0
  187. package/dist/web/hooks/use-deep-link.js.map +1 -0
  188. package/dist/web/hooks/use-display-mode.test.js +1 -1
  189. package/dist/web/hooks/use-display-mode.test.js.map +1 -1
  190. package/dist/web/hooks/use-download.test.js +3 -3
  191. package/dist/web/hooks/use-download.test.js.map +1 -1
  192. package/dist/web/hooks/use-file-resource.d.ts +37 -0
  193. package/dist/web/hooks/use-file-resource.js +98 -0
  194. package/dist/web/hooks/use-file-resource.js.map +1 -0
  195. package/dist/web/hooks/use-file-resource.test.js +65 -0
  196. package/dist/web/hooks/use-file-resource.test.js.map +1 -0
  197. package/dist/web/hooks/use-files.test.js +1 -1
  198. package/dist/web/hooks/use-files.test.js.map +1 -1
  199. package/dist/web/hooks/use-host.d.ts +27 -5
  200. package/dist/web/hooks/use-host.js +20 -5
  201. package/dist/web/hooks/use-host.js.map +1 -1
  202. package/dist/web/hooks/use-host.test.js +1 -1
  203. package/dist/web/hooks/use-host.test.js.map +1 -1
  204. package/dist/web/hooks/use-model-context.d.ts +44 -0
  205. package/dist/web/hooks/use-model-context.js +63 -0
  206. package/dist/web/hooks/use-model-context.js.map +1 -0
  207. package/dist/web/hooks/use-open-external.test.js +2 -2
  208. package/dist/web/hooks/use-open-external.test.js.map +1 -1
  209. package/dist/web/hooks/use-open-file.d.ts +20 -0
  210. package/dist/web/hooks/use-open-file.js +25 -0
  211. package/dist/web/hooks/use-open-file.js.map +1 -0
  212. package/dist/web/hooks/use-register-view-tool.d.ts +1 -1
  213. package/dist/web/hooks/use-register-view-tool.js +1 -1
  214. package/dist/web/hooks/use-register-view-tool.js.map +1 -1
  215. package/dist/web/hooks/use-request-close.test.js +1 -1
  216. package/dist/web/hooks/use-request-close.test.js.map +1 -1
  217. package/dist/web/hooks/use-request-modal.test.js +1 -1
  218. package/dist/web/hooks/use-request-modal.test.js.map +1 -1
  219. package/dist/web/hooks/use-request-size.test.js +1 -1
  220. package/dist/web/hooks/use-request-size.test.js.map +1 -1
  221. package/dist/web/hooks/use-send-follow-up-message.d.ts +8 -2
  222. package/dist/web/hooks/use-send-follow-up-message.js +6 -0
  223. package/dist/web/hooks/use-send-follow-up-message.js.map +1 -1
  224. package/dist/web/hooks/use-set-open-in-app-url.test.js +2 -8
  225. package/dist/web/hooks/use-set-open-in-app-url.test.js.map +1 -1
  226. package/dist/web/hooks/use-tool-info.test.js +2 -2
  227. package/dist/web/hooks/use-tool-info.test.js.map +1 -1
  228. package/dist/web/hooks/use-user.test.js +2 -2
  229. package/dist/web/hooks/use-user.test.js.map +1 -1
  230. package/dist/web/hooks/use-view-state.test.js +2 -2
  231. package/dist/web/hooks/use-view-state.test.js.map +1 -1
  232. package/dist/web/hooks/use-viewport.test.js +2 -2
  233. package/dist/web/hooks/use-viewport.test.js.map +1 -1
  234. package/dist/web/index.d.ts +0 -1
  235. package/dist/web/index.js.map +1 -1
  236. package/dist/web/mount-view.js +2 -6
  237. package/dist/web/mount-view.js.map +1 -1
  238. package/package.json +15 -15
  239. package/dist/standard-schema.d.ts +0 -3
  240. package/dist/standard-schema.js +0 -2
  241. package/dist/standard-schema.js.map +0 -1
  242. package/dist/web/plugin/data-llm.test.js +0 -81
  243. package/dist/web/plugin/data-llm.test.js.map +0 -1
  244. package/dist/web/plugin/plugin-build.test.js +0 -54
  245. package/dist/web/plugin/plugin-build.test.js.map +0 -1
  246. package/dist/web/plugin/plugin.d.ts +0 -39
  247. package/dist/web/plugin/plugin.js +0 -200
  248. package/dist/web/plugin/plugin.js.map +0 -1
  249. package/dist/web/plugin/plugin.test.js +0 -61
  250. package/dist/web/plugin/plugin.test.js.map +0 -1
  251. package/dist/web/plugin/scan-views.js.map +0 -1
  252. package/dist/web/plugin/scan-views.test.js.map +0 -1
  253. package/dist/web/plugin/transform-data-llm.d.ts +0 -12
  254. package/dist/web/plugin/transform-data-llm.js +0 -96
  255. package/dist/web/plugin/transform-data-llm.js.map +0 -1
  256. package/dist/web/plugin/transform-data-llm.test.js +0 -81
  257. package/dist/web/plugin/transform-data-llm.test.js.map +0 -1
  258. package/dist/web/plugin/validate-view.d.ts +0 -1
  259. package/dist/web/plugin/validate-view.js.map +0 -1
  260. package/dist/web/plugin/validate-view.test.js.map +0 -1
  261. /package/dist/{web/plugin/data-llm.test.d.ts → server/app.test.d.ts} +0 -0
  262. /package/dist/{web/plugin/plugin-build.test.d.ts → server/events.test.d.ts} +0 -0
  263. /package/dist/{web/plugin → views}/scan-views.d.ts +0 -0
  264. /package/dist/{web/plugin → views}/scan-views.test.d.ts +0 -0
  265. /package/dist/{web/plugin → views}/scan-views.test.js +0 -0
  266. /package/dist/{web/plugin → views}/validate-view.test.d.ts +0 -0
  267. /package/dist/{web/plugin → views}/validate-view.test.js +0 -0
  268. /package/dist/web/{plugin/plugin.test.d.ts → hooks/openai-extensions.test.d.ts} +0 -0
  269. /package/dist/web/{plugin/transform-data-llm.test.d.ts → hooks/use-file-resource.test.d.ts} +0 -0
@@ -1,8 +1,41 @@
1
1
  import path from "node:path";
2
2
  import { toNodeHandler } from "@modelcontextprotocol/node";
3
- import { createMcpHandler } from "@modelcontextprotocol/server";
3
+ import { createMcpHandler, UnsupportedProtocolVersionError, } from "@modelcontextprotocol/server";
4
4
  import cors from "cors";
5
5
  import express from "express";
6
+ /**
7
+ * The `/mcp` fetch handler for a {@link Skybridge} app: a `Request` →
8
+ * `Response` function that builds a fresh MCP server per request.
9
+ *
10
+ * @internal
11
+ */
12
+ export function buildMcpHandler(skybridgeApp) {
13
+ return createMcpHandler(() => skybridgeApp.createServerInstance(), {
14
+ onerror: (error) => {
15
+ if (error instanceof UnsupportedProtocolVersionError) {
16
+ return;
17
+ }
18
+ console.error("Error handling MCP request:", error);
19
+ },
20
+ });
21
+ }
22
+ /**
23
+ * Build the bare Express app a {@link Skybridge} instance owns: the instance
24
+ * plus the built-in `express.json()` body parser, tuned by the `json` config
25
+ * field.
26
+ *
27
+ * @internal
28
+ */
29
+ export function createBaseApp(json) {
30
+ const app = express();
31
+ app.disable("x-powered-by");
32
+ app.use((_req, res, next) => {
33
+ res.setHeader("X-Powered-By", "skybridge");
34
+ next();
35
+ });
36
+ app.use(express.json(json));
37
+ return app;
38
+ }
6
39
  function parseControlPort(raw) {
7
40
  if (raw === undefined) {
8
41
  return null;
@@ -33,8 +66,9 @@ function defaultErrorHandler(err, _req, res, _next) {
33
66
  });
34
67
  }
35
68
  }
36
- export async function createApp({ mcpServer, httpServer, errorMiddleware = [], }) {
37
- const app = mcpServer.express;
69
+ export async function createApp({ app: skybridgeApp, httpServer, mcpHandler, errorMiddleware = [], }) {
70
+ await skybridgeApp.ready();
71
+ const app = skybridgeApp.express;
38
72
  // Read `process.env.NODE_ENV` inline: wrangler/esbuild only substitute the literal expression,
39
73
  // so a local const would defeat dead-code elimination of the dev-only imports below.
40
74
  if (process.env.NODE_ENV !== "production") {
@@ -56,17 +90,13 @@ export async function createApp({ mcpServer, httpServer, errorMiddleware = [], }
56
90
  app.use("/assets", cors());
57
91
  app.use("/assets", express.static(assetsPath));
58
92
  }
59
- app.use("/mcp", mcpMiddleware(mcpServer));
93
+ app.use("/mcp", mcpMiddleware(mcpHandler ?? buildMcpHandler(skybridgeApp)));
60
94
  applyMiddlewares(app, errorMiddleware);
61
95
  app.use("/mcp", defaultErrorHandler);
62
96
  return app;
63
97
  }
64
- const mcpMiddleware = (server) => {
65
- const handler = toNodeHandler(createMcpHandler(() => server.createStatelessServerInstance(), {
66
- onerror: (error) => {
67
- console.error("Error handling MCP request:", error);
68
- },
69
- }));
98
+ const mcpMiddleware = (mcpHandler) => {
99
+ const handler = toNodeHandler(mcpHandler);
70
100
  return async (req, res, next) => {
71
101
  try {
72
102
  // Express strips the mount path from req.url (e.g. "/mcp" becomes "/").
@@ -1 +1 @@
1
- {"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/server/express.ts"],"names":[],"mappings":"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","sourcesContent":["import type http from \"node:http\";\nimport path from \"node:path\";\nimport { toNodeHandler } from \"@modelcontextprotocol/node\";\nimport { createMcpHandler } from \"@modelcontextprotocol/server\";\nimport cors from \"cors\";\nimport express from \"express\";\nimport type { McpServer } from \"./server.js\";\n\nfunction parseControlPort(raw: string | undefined): number | null {\n if (raw === undefined) {\n return null;\n }\n const n = Number.parseInt(raw, 10);\n if (!Number.isFinite(n) || n <= 0 || n >= 65536) {\n return null;\n }\n return n;\n}\n\nfunction applyMiddlewares(\n app: express.Express,\n middlewares: Array<{\n path?: string;\n handlers: express.ErrorRequestHandler[];\n }>,\n): void {\n for (const middleware of middlewares) {\n if (middleware.path) {\n app.use(middleware.path, ...middleware.handlers);\n } else {\n app.use(...middleware.handlers);\n }\n }\n}\n\nfunction defaultErrorHandler(\n err: unknown,\n _req: express.Request,\n res: express.Response,\n _next: express.NextFunction,\n) {\n console.error(\"Error handling MCP request:\", err);\n if (!res.headersSent) {\n res.status(500).json({\n jsonrpc: \"2.0\",\n error: { code: -32603, message: \"Internal server error\" },\n id: null,\n });\n }\n}\n\nexport async function createApp({\n mcpServer,\n httpServer,\n errorMiddleware = [],\n}: {\n mcpServer: McpServer;\n httpServer: http.Server;\n errorMiddleware?: {\n path?: string;\n handlers: express.ErrorRequestHandler[];\n }[];\n}): Promise<express.Express> {\n const app = mcpServer.express;\n\n // Read `process.env.NODE_ENV` inline: wrangler/esbuild only substitute the literal expression,\n // so a local const would defeat dead-code elimination of the dev-only imports below.\n if (process.env.NODE_ENV !== \"production\") {\n const { devtoolsStaticServer } = await import(\"@skybridge/devtools\");\n app.use(await devtoolsStaticServer());\n const { viewsDevServer } = await import(\"./viewsDevServer.js\");\n app.use(await viewsDevServer(httpServer));\n\n const controlPort = parseControlPort(process.env.__TUNNEL_CONTROL_PORT);\n if (controlPort !== null) {\n const { createTunnelProxyRouter } = await import(\n \"./tunnel-proxy-router.js\"\n );\n app.use(createTunnelProxyRouter(controlPort));\n } else if (process.env.__TUNNEL_CONTROL_PORT !== undefined) {\n console.warn(\n `Ignoring invalid __TUNNEL_CONTROL_PORT=${process.env.__TUNNEL_CONTROL_PORT}`,\n );\n }\n } else {\n const assetsPath = path.join(process.cwd(), \"dist\", \"assets\");\n\n app.use(\"/assets\", cors());\n app.use(\"/assets\", express.static(assetsPath));\n }\n\n app.use(\"/mcp\", mcpMiddleware(mcpServer));\n\n applyMiddlewares(app, errorMiddleware);\n\n app.use(\"/mcp\", defaultErrorHandler);\n\n return app;\n}\n\nconst mcpMiddleware = (server: McpServer): express.RequestHandler => {\n const handler = toNodeHandler(\n createMcpHandler(() => server.createStatelessServerInstance(), {\n onerror: (error) => {\n console.error(\"Error handling MCP request:\", error);\n },\n }),\n );\n\n return async (\n req: express.Request,\n res: express.Response,\n next: express.NextFunction,\n ) => {\n try {\n // Express strips the mount path from req.url (e.g. \"/mcp\" becomes \"/\").\n // Restore it so the SDK builds the correct request URL.\n req.url = req.originalUrl;\n await handler(req, res, req.body);\n } catch (error) {\n next(error);\n }\n };\n};\n"]}
1
+ {"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/server/express.ts"],"names":[],"mappings":"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","sourcesContent":["import type http from \"node:http\";\nimport path from \"node:path\";\nimport { toNodeHandler } from \"@modelcontextprotocol/node\";\nimport {\n createMcpHandler,\n type McpHttpHandler,\n UnsupportedProtocolVersionError,\n} from \"@modelcontextprotocol/server\";\nimport cors from \"cors\";\nimport express from \"express\";\nimport type { Skybridge } from \"./app.js\";\nimport type { JsonOptions } from \"./server.js\";\n\ntype SkybridgeApp = Pick<\n Skybridge,\n \"express\" | \"createServerInstance\" | \"ready\"\n>;\n\n/**\n * The `/mcp` fetch handler for a {@link Skybridge} app: a `Request` →\n * `Response` function that builds a fresh MCP server per request.\n *\n * @internal\n */\nexport function buildMcpHandler(skybridgeApp: SkybridgeApp): McpHttpHandler {\n return createMcpHandler(() => skybridgeApp.createServerInstance(), {\n onerror: (error) => {\n if (error instanceof UnsupportedProtocolVersionError) {\n return;\n }\n console.error(\"Error handling MCP request:\", error);\n },\n });\n}\n\n/**\n * Build the bare Express app a {@link Skybridge} instance owns: the instance\n * plus the built-in `express.json()` body parser, tuned by the `json` config\n * field.\n *\n * @internal\n */\nexport function createBaseApp(json?: JsonOptions): express.Express {\n const app = express();\n app.disable(\"x-powered-by\");\n app.use((_req, res, next) => {\n res.setHeader(\"X-Powered-By\", \"skybridge\");\n next();\n });\n app.use(express.json(json));\n return app;\n}\n\nfunction parseControlPort(raw: string | undefined): number | null {\n if (raw === undefined) {\n return null;\n }\n const n = Number.parseInt(raw, 10);\n if (!Number.isFinite(n) || n <= 0 || n >= 65536) {\n return null;\n }\n return n;\n}\n\nfunction applyMiddlewares(\n app: express.Express,\n middlewares: Array<{\n path?: string;\n handlers: express.ErrorRequestHandler[];\n }>,\n): void {\n for (const middleware of middlewares) {\n if (middleware.path) {\n app.use(middleware.path, ...middleware.handlers);\n } else {\n app.use(...middleware.handlers);\n }\n }\n}\n\nfunction defaultErrorHandler(\n err: unknown,\n _req: express.Request,\n res: express.Response,\n _next: express.NextFunction,\n) {\n console.error(\"Error handling MCP request:\", err);\n if (!res.headersSent) {\n res.status(500).json({\n jsonrpc: \"2.0\",\n error: { code: -32603, message: \"Internal server error\" },\n id: null,\n });\n }\n}\n\nexport async function createApp({\n app: skybridgeApp,\n httpServer,\n mcpHandler,\n errorMiddleware = [],\n}: {\n app: SkybridgeApp;\n httpServer: http.Server;\n mcpHandler?: McpHttpHandler;\n errorMiddleware?: {\n path?: string;\n handlers: express.ErrorRequestHandler[];\n }[];\n}): Promise<express.Express> {\n await skybridgeApp.ready();\n const app = skybridgeApp.express;\n\n // Read `process.env.NODE_ENV` inline: wrangler/esbuild only substitute the literal expression,\n // so a local const would defeat dead-code elimination of the dev-only imports below.\n if (process.env.NODE_ENV !== \"production\") {\n const { devtoolsStaticServer } = await import(\"@skybridge/devtools\");\n app.use(await devtoolsStaticServer());\n const { viewsDevServer } = await import(\"./viewsDevServer.js\");\n app.use(await viewsDevServer(httpServer));\n\n const controlPort = parseControlPort(process.env.__TUNNEL_CONTROL_PORT);\n if (controlPort !== null) {\n const { createTunnelProxyRouter } = await import(\n \"./tunnel-proxy-router.js\"\n );\n app.use(createTunnelProxyRouter(controlPort));\n } else if (process.env.__TUNNEL_CONTROL_PORT !== undefined) {\n console.warn(\n `Ignoring invalid __TUNNEL_CONTROL_PORT=${process.env.__TUNNEL_CONTROL_PORT}`,\n );\n }\n } else {\n const assetsPath = path.join(process.cwd(), \"dist\", \"assets\");\n\n app.use(\"/assets\", cors());\n app.use(\"/assets\", express.static(assetsPath));\n }\n\n app.use(\"/mcp\", mcpMiddleware(mcpHandler ?? buildMcpHandler(skybridgeApp)));\n\n applyMiddlewares(app, errorMiddleware);\n\n app.use(\"/mcp\", defaultErrorHandler);\n\n return app;\n}\n\nconst mcpMiddleware = (mcpHandler: McpHttpHandler): express.RequestHandler => {\n const handler = toNodeHandler(mcpHandler);\n\n return async (\n req: express.Request,\n res: express.Response,\n next: express.NextFunction,\n ) => {\n try {\n // Express strips the mount path from req.url (e.g. \"/mcp\" becomes \"/\").\n // Restore it so the SDK builds the correct request URL.\n req.url = req.originalUrl;\n await handler(req, res, req.body);\n } catch (error) {\n next(error);\n }\n };\n};\n"]}