@mastra/deployer 1.58.0-alpha.1 → 1.58.0-alpha.12

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 (59) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/dist/_types/@mastra_hono/dist/index.d.ts +24 -1
  3. package/dist/{analyze-D100622N.cjs → analyze-BIrkd7zx.cjs} +2 -2
  4. package/dist/{analyze-D100622N.cjs.map → analyze-BIrkd7zx.cjs.map} +1 -1
  5. package/dist/{analyze-7xxwhB5F.js → analyze-CNv6Qdaz.js} +2 -2
  6. package/dist/{analyze-7xxwhB5F.js.map → analyze-CNv6Qdaz.js.map} +1 -1
  7. package/dist/build/analyze.cjs +1 -1
  8. package/dist/build/analyze.js +1 -1
  9. package/dist/build/bundler.cjs +1 -1
  10. package/dist/build/bundler.d.ts +2 -1
  11. package/dist/build/bundler.d.ts.map +1 -1
  12. package/dist/build/bundler.js +1 -1
  13. package/dist/build/fs-routing/codegen.d.ts +5 -4
  14. package/dist/build/fs-routing/codegen.d.ts.map +1 -1
  15. package/dist/build/fs-routing/discover.d.ts +12 -5
  16. package/dist/build/fs-routing/discover.d.ts.map +1 -1
  17. package/dist/build/index.cjs +4 -4
  18. package/dist/build/index.js +4 -4
  19. package/dist/build/types.d.ts +11 -0
  20. package/dist/build/types.d.ts.map +1 -1
  21. package/dist/build/watcher.d.ts.map +1 -1
  22. package/dist/{build-33wIyA35.cjs → build-BERX35Pi.cjs} +30 -18
  23. package/dist/build-BERX35Pi.cjs.map +1 -0
  24. package/dist/{build-xd6t8qiR.js → build-kZfvpuh9.js} +30 -18
  25. package/dist/build-kZfvpuh9.js.map +1 -0
  26. package/dist/bundler/entries.d.ts +12 -0
  27. package/dist/bundler/entries.d.ts.map +1 -0
  28. package/dist/bundler/index.cjs +6 -506
  29. package/dist/bundler/index.d.ts +1 -1
  30. package/dist/bundler/index.d.ts.map +1 -1
  31. package/dist/bundler/index.js +1 -497
  32. package/dist/bundler-Ct1ToG6x.js +565 -0
  33. package/dist/bundler-Ct1ToG6x.js.map +1 -0
  34. package/dist/{bundler-u9WOUtpl.cjs → bundler-DCGtF4jP.cjs} +7 -3
  35. package/dist/{bundler-u9WOUtpl.cjs.map → bundler-DCGtF4jP.cjs.map} +1 -1
  36. package/dist/bundler-DLXwkS7b.cjs +598 -0
  37. package/dist/bundler-DLXwkS7b.cjs.map +1 -0
  38. package/dist/{bundler-U9F2---r.js → bundler-gff4vn1T.js} +8 -4
  39. package/dist/bundler-gff4vn1T.js.map +1 -0
  40. package/dist/{bundlerOptions-CYRir4LE.cjs → bundlerOptions-CjjAPZYp.cjs} +2 -2
  41. package/dist/{bundlerOptions-CYRir4LE.cjs.map → bundlerOptions-CjjAPZYp.cjs.map} +1 -1
  42. package/dist/{bundlerOptions-9DigsVhY.js → bundlerOptions-NMtZPD7p.js} +2 -2
  43. package/dist/{bundlerOptions-9DigsVhY.js.map → bundlerOptions-NMtZPD7p.js.map} +1 -1
  44. package/dist/docs/SKILL.md +1 -1
  45. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  46. package/dist/index.cjs +4 -4
  47. package/dist/index.cjs.map +1 -1
  48. package/dist/index.js +3 -3
  49. package/dist/server/index.cjs +77 -3
  50. package/dist/server/index.cjs.map +1 -1
  51. package/dist/server/index.d.ts.map +1 -1
  52. package/dist/server/index.js +78 -4
  53. package/dist/server/index.js.map +1 -1
  54. package/package.json +8 -8
  55. package/dist/build-33wIyA35.cjs.map +0 -1
  56. package/dist/build-xd6t8qiR.js.map +0 -1
  57. package/dist/bundler/index.cjs.map +0 -1
  58. package/dist/bundler/index.js.map +0 -1
  59. package/dist/bundler-U9F2---r.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIhE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAc5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAoBnD,KAAK,QAAQ,GAAG,YAAY,CAAC;AAE7B,KAAK,SAAS,GAAG,aAAa,GAAG;IAC/B,OAAO,EAAE,GAAG,CAAC;QAAE,UAAU,EAAE,+BAA+B,CAAA;KAAE,CAAC,CAAC;CAC/D,CAAC;AAkCF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,wCAmB/D;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAER;cAegC,QAAQ;eAAa,SAAS;2CA4ZhE;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAmC,mDAwHlG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIhE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAc5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAoBnD,KAAK,QAAQ,GAAG,YAAY,CAAC;AAE7B,KAAK,SAAS,GAAG,aAAa,GAAG;IAC/B,OAAO,EAAE,GAAG,CAAC;QAAE,UAAU,EAAE,+BAA+B,CAAA;KAAE,CAAC,CAAC;CAC/D,CAAC;AAwCF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,wCAmB/D;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAER;cAegC,QAAQ;eAAa,SAAS;2CAkahE;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAmC,mDAwHlG"}
@@ -13,7 +13,7 @@ import process$1, { versions } from "process";
13
13
  import { getMimeType } from "hono/utils/mime";
14
14
  import { html } from "hono/html";
15
15
  import { Tool } from "@mastra/core/tools";
16
- import { MastraServer, checkRouteFGA, isZodError, normalizeQueryParams, redactStreamChunk, serializeStreamChunk } from "@mastra/server/server-adapter";
16
+ import { MASTRA_FRAMEWORK_PUBLIC_KEY, MastraServer, checkRouteFGA, isZodError, normalizeQueryParams, redactStreamChunk, serializeStreamChunk } from "@mastra/server/server-adapter";
17
17
  import util from "util";
18
18
  import { Buffer as Buffer$1 } from "buffer";
19
19
  import { bodyLimit } from "hono/body-limit";
@@ -2983,6 +2983,54 @@ function toFetchResponse(res) {
2983
2983
  //#endregion
2984
2984
  //#region ../../server-adapters/hono/dist/index.js
2985
2985
  /**
2986
+ * Propagates a client disconnect to the simulated Node response produced by `toReqRes`.
2987
+ *
2988
+ * `fetch-to-node` builds the outgoing body from `res` events but never observes cancellation
2989
+ * of the stream it hands back. When an MCP Streamable HTTP client drops its session, nothing
2990
+ * tells `res` that the socket is gone, so the MCP transport keeps its SSE keep-alive timer
2991
+ * armed. The next keep-alive tick writes into an already-closed stream controller, and because
2992
+ * that write originates in a timer callback the resulting `ERR_INVALID_STATE` is unhandled and
2993
+ * takes down the process.
2994
+ *
2995
+ * Emitting `close` on `res` is the signal the MCP Node transport listens for: it aborts the
2996
+ * request's AbortController, which breaks the write loop and tears down the SSE stream,
2997
+ * clearing the keep-alive timer. No post-disconnect write is ever attempted.
2998
+ */
2999
+ function propagateClientDisconnect(fetchResponse, res) {
3000
+ const upstream = fetchResponse.body;
3001
+ if (!upstream) return fetchResponse;
3002
+ let disconnected = false;
3003
+ const disconnect = () => {
3004
+ if (disconnected) return;
3005
+ disconnected = true;
3006
+ try {
3007
+ res.emit("close");
3008
+ } catch {}
3009
+ reader.read().then(function drain({ done }) {
3010
+ return done ? void 0 : reader.read().then(drain);
3011
+ }, () => {});
3012
+ };
3013
+ const reader = upstream.getReader();
3014
+ const body = new ReadableStream({
3015
+ async pull(controller) {
3016
+ const { done, value } = await reader.read();
3017
+ if (done) {
3018
+ controller.close();
3019
+ return;
3020
+ }
3021
+ controller.enqueue(value);
3022
+ },
3023
+ cancel() {
3024
+ disconnect();
3025
+ }
3026
+ });
3027
+ return new Response(body, {
3028
+ status: fetchResponse.status,
3029
+ statusText: fetchResponse.statusText,
3030
+ headers: fetchResponse.headers
3031
+ });
3032
+ }
3033
+ /**
2986
3034
  * Set up WebSocket-based browser stream endpoint for real-time screencast viewing.
2987
3035
  *
2988
3036
  * Creates a WebSocket route at `/browser/:agentId/stream` that:
@@ -3102,6 +3150,26 @@ function loadHasPermission() {
3102
3150
  });
3103
3151
  return _hasPermissionPromise;
3104
3152
  }
3153
+ /**
3154
+ * Wrap a Hono middleware handler so it becomes a no-op for framework-public
3155
+ * routes (routes registered with `requiresAuth: false`).
3156
+ *
3157
+ * Adapters that expose user-provided middleware — for example `serverMiddleware`
3158
+ * on the Mastra instance or `server.middleware` in Mastra config — MUST wrap
3159
+ * those handlers with this before registering them. This is the framework's
3160
+ * guarantee that user middleware cannot accidentally (or intentionally) 401
3161
+ * routes the framework needs to keep reachable (e.g. Studio sign-in endpoints).
3162
+ *
3163
+ * The framework-public flag is computed once per request by
3164
+ * {@link MastraServer.registerContextMiddleware} and stashed on the Hono
3165
+ * context under `MASTRA_FRAMEWORK_PUBLIC_KEY`.
3166
+ */
3167
+ const skipIfFrameworkPublic = (handler) => {
3168
+ return async (c, next) => {
3169
+ if (c.get(MASTRA_FRAMEWORK_PUBLIC_KEY)) return next();
3170
+ return handler(c, next);
3171
+ };
3172
+ };
3105
3173
  var MastraServer$1 = class extends MastraServer {
3106
3174
  createContextMiddleware() {
3107
3175
  return async (c, next) => {
@@ -3302,7 +3370,7 @@ var MastraServer$1 = class extends MastraServer {
3302
3370
  }
3303
3371
  } catch {}
3304
3372
  });
3305
- return await toFetchResponse(res);
3373
+ return propagateClientDisconnect(await toFetchResponse(res), res);
3306
3374
  } else if (route.responseType === "mcp-sse") {
3307
3375
  const { server, ssePath, messagePath } = result;
3308
3376
  try {
@@ -3561,7 +3629,12 @@ var MastraServer$1 = class extends MastraServer {
3561
3629
  }
3562
3630
  }
3563
3631
  registerContextMiddleware() {
3632
+ const isFrameworkPublic = this.getFrameworkPublicMatcher();
3564
3633
  this.app.use("*", this.createContextMiddleware());
3634
+ this.app.use("*", async (c, next) => {
3635
+ c.set(MASTRA_FRAMEWORK_PUBLIC_KEY, isFrameworkPublic(c.req.path, c.req.method));
3636
+ return next();
3637
+ });
3565
3638
  this.app.use("*", async (c, next) => {
3566
3639
  await next();
3567
3640
  this.warnIfUnregisteredChannelWebhook(c.req.path, c.req.method, c.res.status);
@@ -4301,6 +4374,7 @@ const DEFAULT_CORS_ALLOW_METHODS = [
4301
4374
  const DEFAULT_CORS_ALLOW_HEADERS = [
4302
4375
  "Content-Type",
4303
4376
  "Authorization",
4377
+ "A2A-Version",
4304
4378
  "x-mastra-client-type",
4305
4379
  "x-mastra-dev-playground"
4306
4380
  ];
@@ -4384,7 +4458,7 @@ async function createHonoServer(mastra, options = { tools: {} }) {
4384
4458
  });
4385
4459
  honoServerAdapter.registerContextMiddleware();
4386
4460
  const serverMiddleware = mastra.getServerMiddleware?.();
4387
- if (serverMiddleware && serverMiddleware.length > 0) for (const m of serverMiddleware) app.use(m.path, m.handler);
4461
+ if (serverMiddleware && serverMiddleware.length > 0) for (const m of serverMiddleware) app.use(m.path, skipIfFrameworkPublic(m.handler));
4388
4462
  const browserStreamSetup = options.browserStream === false ? null : await setupBrowserStream(app, {
4389
4463
  getToolset: async (agentId) => {
4390
4464
  try {
@@ -4434,7 +4508,7 @@ async function createHonoServer(mastra, options = { tools: {} }) {
4434
4508
  };
4435
4509
  return middleware;
4436
4510
  });
4437
- for (const middleware of middlewares) app.use(middleware.path, middleware.handler);
4511
+ for (const middleware of middlewares) app.use(middleware.path, skipIfFrameworkPublic(middleware.handler));
4438
4512
  }
4439
4513
  await honoServerAdapter.registerCustomApiRoutes();
4440
4514
  if (server?.build?.apiReqLogs) app.use(logger());