@mastra/deployer 1.58.0-alpha.1 → 1.58.0-alpha.13
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 +158 -0
- package/dist/_types/@mastra_hono/dist/index.d.ts +24 -1
- package/dist/{analyze-D100622N.cjs → analyze-BIrkd7zx.cjs} +2 -2
- package/dist/{analyze-D100622N.cjs.map → analyze-BIrkd7zx.cjs.map} +1 -1
- package/dist/{analyze-7xxwhB5F.js → analyze-CNv6Qdaz.js} +2 -2
- package/dist/{analyze-7xxwhB5F.js.map → analyze-CNv6Qdaz.js.map} +1 -1
- package/dist/build/analyze.cjs +1 -1
- package/dist/build/analyze.js +1 -1
- package/dist/build/bundler.cjs +1 -1
- package/dist/build/bundler.d.ts +2 -1
- package/dist/build/bundler.d.ts.map +1 -1
- package/dist/build/bundler.js +1 -1
- package/dist/build/fs-routing/codegen.d.ts +5 -4
- package/dist/build/fs-routing/codegen.d.ts.map +1 -1
- package/dist/build/fs-routing/discover.d.ts +12 -5
- package/dist/build/fs-routing/discover.d.ts.map +1 -1
- package/dist/build/index.cjs +4 -4
- package/dist/build/index.js +4 -4
- package/dist/build/types.d.ts +11 -0
- package/dist/build/types.d.ts.map +1 -1
- package/dist/build/watcher.d.ts.map +1 -1
- package/dist/{build-33wIyA35.cjs → build-BERX35Pi.cjs} +30 -18
- package/dist/build-BERX35Pi.cjs.map +1 -0
- package/dist/{build-xd6t8qiR.js → build-kZfvpuh9.js} +30 -18
- package/dist/build-kZfvpuh9.js.map +1 -0
- package/dist/bundler/entries.d.ts +12 -0
- package/dist/bundler/entries.d.ts.map +1 -0
- package/dist/bundler/index.cjs +6 -506
- package/dist/bundler/index.d.ts +1 -1
- package/dist/bundler/index.d.ts.map +1 -1
- package/dist/bundler/index.js +1 -497
- package/dist/bundler-Ct1ToG6x.js +565 -0
- package/dist/bundler-Ct1ToG6x.js.map +1 -0
- package/dist/{bundler-u9WOUtpl.cjs → bundler-DCGtF4jP.cjs} +7 -3
- package/dist/{bundler-u9WOUtpl.cjs.map → bundler-DCGtF4jP.cjs.map} +1 -1
- package/dist/bundler-DLXwkS7b.cjs +598 -0
- package/dist/bundler-DLXwkS7b.cjs.map +1 -0
- package/dist/{bundler-U9F2---r.js → bundler-gff4vn1T.js} +8 -4
- package/dist/bundler-gff4vn1T.js.map +1 -0
- package/dist/{bundlerOptions-CYRir4LE.cjs → bundlerOptions-CjjAPZYp.cjs} +2 -2
- package/dist/{bundlerOptions-CYRir4LE.cjs.map → bundlerOptions-CjjAPZYp.cjs.map} +1 -1
- package/dist/{bundlerOptions-9DigsVhY.js → bundlerOptions-NMtZPD7p.js} +2 -2
- package/dist/{bundlerOptions-9DigsVhY.js.map → bundlerOptions-NMtZPD7p.js.map} +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.cjs +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -3
- package/dist/server/index.cjs +86 -7
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +87 -8
- package/dist/server/index.js.map +1 -1
- package/package.json +8 -8
- package/dist/build-33wIyA35.cjs.map +0 -1
- package/dist/build-xd6t8qiR.js.map +0 -1
- package/dist/bundler/index.cjs.map +0 -1
- package/dist/bundler/index.js.map +0 -1
- 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;
|
|
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;AA8CF,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;2CAsahE;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAmC,mDAwHlG"}
|
package/dist/server/index.js
CHANGED
|
@@ -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 {
|
|
@@ -3482,8 +3550,8 @@ var MastraServer$1 = class extends MastraServer {
|
|
|
3482
3550
|
});
|
|
3483
3551
|
}
|
|
3484
3552
|
async registerCustomApiRoutes() {
|
|
3485
|
-
|
|
3486
|
-
|
|
3553
|
+
const routes = await this.registerSchemaApiRoutes();
|
|
3554
|
+
if (!await this.buildCustomRouteHandler(routes)) return;
|
|
3487
3555
|
for (const route of routes) {
|
|
3488
3556
|
const serverRoute = {
|
|
3489
3557
|
method: route.method,
|
|
@@ -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);
|
|
@@ -4290,6 +4363,9 @@ const getStudioPath = () => {
|
|
|
4290
4363
|
if (import.meta.url) __dirname = dirname(fileURLToPath(import.meta.url));
|
|
4291
4364
|
return process.env.MASTRA_STUDIO_PATH || join(__dirname, "studio");
|
|
4292
4365
|
};
|
|
4366
|
+
function isSchemaApiRoute(route) {
|
|
4367
|
+
return "_mastraSchemaRoute" in route && route._mastraSchemaRoute === true;
|
|
4368
|
+
}
|
|
4293
4369
|
const DEFAULT_CORS_ALLOW_METHODS = [
|
|
4294
4370
|
"GET",
|
|
4295
4371
|
"POST",
|
|
@@ -4301,6 +4377,7 @@ const DEFAULT_CORS_ALLOW_METHODS = [
|
|
|
4301
4377
|
const DEFAULT_CORS_ALLOW_HEADERS = [
|
|
4302
4378
|
"Content-Type",
|
|
4303
4379
|
"Authorization",
|
|
4380
|
+
"A2A-Version",
|
|
4304
4381
|
"x-mastra-client-type",
|
|
4305
4382
|
"x-mastra-dev-playground"
|
|
4306
4383
|
];
|
|
@@ -4320,7 +4397,8 @@ function getCorsConfig(serverCors, credentialsDefault) {
|
|
|
4320
4397
|
};
|
|
4321
4398
|
}
|
|
4322
4399
|
function getRouteCorsConfig(apiRoutes, pathname, method) {
|
|
4323
|
-
|
|
4400
|
+
const route = findMatchingCustomRoute(pathname, method, apiRoutes)?.route;
|
|
4401
|
+
return route && !isSchemaApiRoute(route) ? route.cors : void 0;
|
|
4324
4402
|
}
|
|
4325
4403
|
function getToolExports(tools) {
|
|
4326
4404
|
try {
|
|
@@ -4346,7 +4424,8 @@ async function createHonoServer(mastra, options = { tools: {} }) {
|
|
|
4346
4424
|
const apiPrefix = server?.apiPrefix ?? "/api";
|
|
4347
4425
|
const a2aTaskStore = new InMemoryTaskStore();
|
|
4348
4426
|
const processedRoutes = (server?.apiRoutes)?.map((route) => {
|
|
4349
|
-
if (
|
|
4427
|
+
if (isSchemaApiRoute(route)) return route;
|
|
4428
|
+
if (route.openapi) {
|
|
4350
4429
|
const existingMiddleware = route.middleware ? Array.isArray(route.middleware) ? route.middleware : [route.middleware] : [];
|
|
4351
4430
|
return {
|
|
4352
4431
|
...route,
|
|
@@ -4384,7 +4463,7 @@ async function createHonoServer(mastra, options = { tools: {} }) {
|
|
|
4384
4463
|
});
|
|
4385
4464
|
honoServerAdapter.registerContextMiddleware();
|
|
4386
4465
|
const serverMiddleware = mastra.getServerMiddleware?.();
|
|
4387
|
-
if (serverMiddleware && serverMiddleware.length > 0) for (const m of serverMiddleware) app.use(m.path, m.handler);
|
|
4466
|
+
if (serverMiddleware && serverMiddleware.length > 0) for (const m of serverMiddleware) app.use(m.path, skipIfFrameworkPublic(m.handler));
|
|
4388
4467
|
const browserStreamSetup = options.browserStream === false ? null : await setupBrowserStream(app, {
|
|
4389
4468
|
getToolset: async (agentId) => {
|
|
4390
4469
|
try {
|
|
@@ -4434,7 +4513,7 @@ async function createHonoServer(mastra, options = { tools: {} }) {
|
|
|
4434
4513
|
};
|
|
4435
4514
|
return middleware;
|
|
4436
4515
|
});
|
|
4437
|
-
for (const middleware of middlewares) app.use(middleware.path, middleware.handler);
|
|
4516
|
+
for (const middleware of middlewares) app.use(middleware.path, skipIfFrameworkPublic(middleware.handler));
|
|
4438
4517
|
}
|
|
4439
4518
|
await honoServerAdapter.registerCustomApiRoutes();
|
|
4440
4519
|
if (server?.build?.apiReqLogs) app.use(logger());
|