@mastra/hono 1.0.0 → 1.1.0-alpha.0
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 +61 -0
- package/dist/index.cjs +54 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -19
- package/dist/index.js.map +1 -1
- package/package.json +12 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,66 @@
|
|
|
1
1
|
# @mastra/hono
|
|
2
2
|
|
|
3
|
+
## 1.1.0-alpha.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Added explicit auth control to built-in API routes. All routes now have a requiresAuth property that determines whether authentication is required. This eliminates route matching overhead and makes auth requirements clear in route definitions. Routes default to requiresAuth: true (protected) for security. To make a route public, set requiresAuth: false in the route definition. ([#12153](https://github.com/mastra-ai/mastra/pull/12153))
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Fixed authentication bypass for custom routes in dev mode. Routes registered with registerApiRoute and requiresAuth: true now correctly enforce authentication even when MASTRA_DEV=true. ([#12339](https://github.com/mastra-ai/mastra/pull/12339))
|
|
12
|
+
|
|
13
|
+
- Fixed malformed JSON body handling in Hono adapter. When a POST request contains invalid JSON (e.g., missing closing braces), the server now returns HTTP 400 Bad Request with a structured error message instead of silently accepting the request with HTTP 200. This prevents workflows from starting with undefined input data. ([#12310](https://github.com/mastra-ai/mastra/issues/12310)) ([#12332](https://github.com/mastra-ai/mastra/pull/12332))
|
|
14
|
+
|
|
15
|
+
- Added `mcpOptions` to server adapters for serverless MCP support. ([#12324](https://github.com/mastra-ai/mastra/pull/12324))
|
|
16
|
+
|
|
17
|
+
**Why:** MCP HTTP transport uses session management by default, which requires persistent state across requests. This doesn't work in serverless environments like Cloudflare Workers or Vercel Edge where each request runs in isolation. The new `mcpOptions` parameter lets you enable stateless mode without overriding the entire `sendResponse()` method.
|
|
18
|
+
|
|
19
|
+
**Before:**
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
const server = new MastraServer({
|
|
23
|
+
app,
|
|
24
|
+
mastra,
|
|
25
|
+
});
|
|
26
|
+
// No way to pass serverless option to MCP HTTP transport
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**After:**
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
const server = new MastraServer({
|
|
33
|
+
app,
|
|
34
|
+
mastra,
|
|
35
|
+
mcpOptions: {
|
|
36
|
+
serverless: true,
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
// MCP HTTP transport now runs in stateless mode
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
- Fixed route prefix behavior to correctly replace the default /api prefix instead of prepending to it. Previously, setting prefix: '/api/v2' resulted in routes at /api/v2/api/agents. Now routes correctly appear at /api/v2/agents as documented. ([#12221](https://github.com/mastra-ai/mastra/pull/12221))
|
|
43
|
+
|
|
44
|
+
- Updated dependencies [[`90fc0e5`](https://github.com/mastra-ai/mastra/commit/90fc0e5717cb280c2d4acf4f0410b510bb4c0a72), [`1cf5d2e`](https://github.com/mastra-ai/mastra/commit/1cf5d2ea1b085be23e34fb506c80c80a4e6d9c2b), [`7515471`](https://github.com/mastra-ai/mastra/commit/7515471f7c1e987582785f68970b4a99ce27f602), [`833ae96`](https://github.com/mastra-ai/mastra/commit/833ae96c3e34370e58a1e979571c41f39a720592), [`c0c15b9`](https://github.com/mastra-ai/mastra/commit/c0c15b90f177c54d7d7d24ea9c0efb1d22c31d1e), [`4e1aa64`](https://github.com/mastra-ai/mastra/commit/4e1aa6457f082c9f8021123635c483f9f2a7fd92), [`943772b`](https://github.com/mastra-ai/mastra/commit/943772b4378f625f0f4e19ea2b7c392bd8e71786), [`b5c711b`](https://github.com/mastra-ai/mastra/commit/b5c711b281dd1fb81a399a766bc9f86c55efc13e), [`a747073`](https://github.com/mastra-ai/mastra/commit/a747073a003358abc95bd53dd6a10ec47570718b), [`0350626`](https://github.com/mastra-ai/mastra/commit/03506267ec41b67add80d994c0c0fcce93bbc75f), [`7c4d4b4`](https://github.com/mastra-ai/mastra/commit/7c4d4b4b749e2291bc1b01ca2bd98d25f70d930e), [`3efbe5a`](https://github.com/mastra-ai/mastra/commit/3efbe5ae20864c4f3143457f4f3ee7dc2fa5ca76), [`0ba3ad0`](https://github.com/mastra-ai/mastra/commit/0ba3ad042c9cec63d5aa510d8cb616bc00f3919a), [`a646090`](https://github.com/mastra-ai/mastra/commit/a646090808ed6df5bfc379fd0672c9d15d6ae905), [`1e49e7a`](https://github.com/mastra-ai/mastra/commit/1e49e7ab5f173582154cb26b29d424de67d09aef), [`751eaab`](https://github.com/mastra-ai/mastra/commit/751eaab4e0d3820a94e4c3d39a2ff2663ded3d91), [`69d8156`](https://github.com/mastra-ai/mastra/commit/69d81568bcf062557c24471ce26812446bec465d), [`60d9d89`](https://github.com/mastra-ai/mastra/commit/60d9d899e44b35bc43f1bcd967a74e0ce010b1af), [`5c544c8`](https://github.com/mastra-ai/mastra/commit/5c544c8d12b08ab40d64d8f37b3c4215bee95b87), [`771ad96`](https://github.com/mastra-ai/mastra/commit/771ad962441996b5c43549391a3e6a02c6ddedc2), [`2b0936b`](https://github.com/mastra-ai/mastra/commit/2b0936b0c9a43eeed9bef63e614d7e02ee803f7e), [`3b04f30`](https://github.com/mastra-ai/mastra/commit/3b04f3010604f3cdfc8a0674731700ad66471cee), [`56d4097`](https://github.com/mastra-ai/mastra/commit/56d4097ccdb6fada9963eb50e65d67a071d45fd1), [`97e26de`](https://github.com/mastra-ai/mastra/commit/97e26deaebd9836647a67b96423281d66421ca07), [`10523f4`](https://github.com/mastra-ai/mastra/commit/10523f4882d9b874b40ce6e3715f66dbcd4947d2), [`cb72d20`](https://github.com/mastra-ai/mastra/commit/cb72d2069d7339bda8a0e76d4f35615debb07b84), [`03bb0e6`](https://github.com/mastra-ai/mastra/commit/03bb0e6ac4f56e5fab38a8e7493dd9a3e5923761), [`42856b1`](https://github.com/mastra-ai/mastra/commit/42856b1c8aeea6371c9ee77ae2f5f5fe34400933), [`66f33ff`](https://github.com/mastra-ai/mastra/commit/66f33ff68620018513e499c394411d1d39b3aa5c), [`ab3c190`](https://github.com/mastra-ai/mastra/commit/ab3c1901980a99910ca9b96a7090c22e24060113), [`bb68d4d`](https://github.com/mastra-ai/mastra/commit/bb68d4d2becb7f41c1ae38228054cd7833dbac81), [`d4f06c8`](https://github.com/mastra-ai/mastra/commit/d4f06c85ffa5bb0da38fb82ebf3b040cc6b4ec4e), [`fcc4157`](https://github.com/mastra-ai/mastra/commit/fcc41572830b5cf245058b2a424f46b33e7b25a5), [`60d9d89`](https://github.com/mastra-ai/mastra/commit/60d9d899e44b35bc43f1bcd967a74e0ce010b1af), [`0350626`](https://github.com/mastra-ai/mastra/commit/03506267ec41b67add80d994c0c0fcce93bbc75f), [`dc82e6c`](https://github.com/mastra-ai/mastra/commit/dc82e6c5a05d6a9160c522af08b8c809ddbcdb66), [`bc9fa00`](https://github.com/mastra-ai/mastra/commit/bc9fa00859c5c4a796d53a0a5cae46ab4a3072e4), [`f46a478`](https://github.com/mastra-ai/mastra/commit/f46a4782f595949c696569e891f81c8d26338508), [`90fc0e5`](https://github.com/mastra-ai/mastra/commit/90fc0e5717cb280c2d4acf4f0410b510bb4c0a72), [`b94d043`](https://github.com/mastra-ai/mastra/commit/b94d0438ce34101b0279a8e5b1ce8d229b7b0968), [`f05a3a5`](https://github.com/mastra-ai/mastra/commit/f05a3a5cf2b9a9c2d40c09cb8c762a4b6cd5d565), [`a291da9`](https://github.com/mastra-ai/mastra/commit/a291da9363efd92dafd8775dccb4f2d0511ece7a), [`c5d71da`](https://github.com/mastra-ai/mastra/commit/c5d71da1c680ce5640b1a7f8ca0e024a4ab1cfed), [`07042f9`](https://github.com/mastra-ai/mastra/commit/07042f9f89080f38b8f72713ba1c972d5b1905b8), [`0423442`](https://github.com/mastra-ai/mastra/commit/0423442b7be2dfacba95890bea8f4a810db4d603)]:
|
|
45
|
+
- @mastra/core@1.1.0-alpha.0
|
|
46
|
+
- @mastra/server@1.1.0-alpha.0
|
|
47
|
+
|
|
48
|
+
## 1.0.1
|
|
49
|
+
|
|
50
|
+
### Patch Changes
|
|
51
|
+
|
|
52
|
+
- Updated dependencies [[`4dc9a51`](https://github.com/mastra-ai/mastra/commit/4dc9a51be626fd9ed51da3ad7e78dedeaabade88)]:
|
|
53
|
+
- @mastra/server@1.0.4
|
|
54
|
+
- @mastra/core@1.0.4
|
|
55
|
+
|
|
56
|
+
## 1.0.1-alpha.0
|
|
57
|
+
|
|
58
|
+
### Patch Changes
|
|
59
|
+
|
|
60
|
+
- Updated dependencies [[`4dc9a51`](https://github.com/mastra-ai/mastra/commit/4dc9a51be626fd9ed51da3ad7e78dedeaabade88)]:
|
|
61
|
+
- @mastra/server@1.0.4-alpha.0
|
|
62
|
+
- @mastra/core@1.0.4-alpha.0
|
|
63
|
+
|
|
3
64
|
## 1.0.0
|
|
4
65
|
|
|
5
66
|
### Major Changes
|
package/dist/index.cjs
CHANGED
|
@@ -430,7 +430,7 @@ var authenticationMiddleware = async (c, next) => {
|
|
|
430
430
|
const path = c.req.path;
|
|
431
431
|
const method = c.req.method;
|
|
432
432
|
const getHeader = (name) => c.req.header(name);
|
|
433
|
-
if (auth.isDevPlaygroundRequest(path, method, getHeader, authConfig)) {
|
|
433
|
+
if (auth.isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {
|
|
434
434
|
return next();
|
|
435
435
|
}
|
|
436
436
|
if (!auth.isProtectedPath(c.req.path, c.req.method, authConfig, customRouteAuthConfig)) {
|
|
@@ -474,7 +474,7 @@ var authorizationMiddleware = async (c, next) => {
|
|
|
474
474
|
const path = c.req.path;
|
|
475
475
|
const method = c.req.method;
|
|
476
476
|
const getHeader = (name) => c.req.header(name);
|
|
477
|
-
if (auth.isDevPlaygroundRequest(path, method, getHeader, authConfig)) {
|
|
477
|
+
if (auth.isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {
|
|
478
478
|
return next();
|
|
479
479
|
}
|
|
480
480
|
if (!auth.isProtectedPath(c.req.path, c.req.method, authConfig, customRouteAuthConfig)) {
|
|
@@ -563,7 +563,7 @@ var MastraServer = class extends serverAdapter.MastraServer {
|
|
|
563
563
|
const requestContext = this.mergeRequestContext({ paramsRequestContext, bodyRequestContext });
|
|
564
564
|
c.set("requestContext", requestContext);
|
|
565
565
|
c.set("mastra", this.mastra);
|
|
566
|
-
c.set("
|
|
566
|
+
c.set("registeredTools", this.tools || {});
|
|
567
567
|
c.set("taskStore", this.taskStore);
|
|
568
568
|
c.set("abortSignal", c.req.raw.signal);
|
|
569
569
|
c.set("customRouteAuthConfig", this.customRouteAuthConfig);
|
|
@@ -614,6 +614,7 @@ var MastraServer = class extends serverAdapter.MastraServer {
|
|
|
614
614
|
const urlParams = request.param();
|
|
615
615
|
const queryParams = serverAdapter.normalizeQueryParams(request.queries());
|
|
616
616
|
let body;
|
|
617
|
+
let bodyParseError;
|
|
617
618
|
if (route.method === "POST" || route.method === "PUT" || route.method === "PATCH") {
|
|
618
619
|
const contentType = request.header("content-type") || "";
|
|
619
620
|
if (contentType.includes("multipart/form-data")) {
|
|
@@ -625,16 +626,26 @@ var MastraServer = class extends serverAdapter.MastraServer {
|
|
|
625
626
|
if (error instanceof Error && error.message.toLowerCase().includes("size")) {
|
|
626
627
|
throw error;
|
|
627
628
|
}
|
|
629
|
+
bodyParseError = {
|
|
630
|
+
message: error instanceof Error ? error.message : "Failed to parse multipart form data"
|
|
631
|
+
};
|
|
628
632
|
}
|
|
629
|
-
} else {
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
633
|
+
} else if (contentType.includes("application/json")) {
|
|
634
|
+
const clonedReq = request.raw.clone();
|
|
635
|
+
const bodyText = await clonedReq.text();
|
|
636
|
+
if (bodyText && bodyText.trim().length > 0) {
|
|
637
|
+
try {
|
|
638
|
+
body = JSON.parse(bodyText);
|
|
639
|
+
} catch (error) {
|
|
640
|
+
console.error("Failed to parse JSON body:", error);
|
|
641
|
+
bodyParseError = {
|
|
642
|
+
message: error instanceof Error ? error.message : "Invalid JSON in request body"
|
|
643
|
+
};
|
|
644
|
+
}
|
|
634
645
|
}
|
|
635
646
|
}
|
|
636
647
|
}
|
|
637
|
-
return { urlParams, queryParams, body };
|
|
648
|
+
return { urlParams, queryParams, body, bodyParseError };
|
|
638
649
|
}
|
|
639
650
|
/**
|
|
640
651
|
* Parse FormData into a plain object, converting File objects to Buffers.
|
|
@@ -657,7 +668,8 @@ var MastraServer = class extends serverAdapter.MastraServer {
|
|
|
657
668
|
}
|
|
658
669
|
return result;
|
|
659
670
|
}
|
|
660
|
-
async sendResponse(route, response, result) {
|
|
671
|
+
async sendResponse(route, response, result, prefix) {
|
|
672
|
+
const resolvedPrefix = prefix ?? this.prefix ?? "";
|
|
661
673
|
if (route.responseType === "json") {
|
|
662
674
|
return response.json(result, 200);
|
|
663
675
|
} else if (route.responseType === "stream") {
|
|
@@ -666,14 +678,16 @@ var MastraServer = class extends serverAdapter.MastraServer {
|
|
|
666
678
|
const fetchResponse = result;
|
|
667
679
|
return fetchResponse;
|
|
668
680
|
} else if (route.responseType === "mcp-http") {
|
|
669
|
-
const { server, httpPath } = result;
|
|
681
|
+
const { server, httpPath, mcpOptions: routeMcpOptions } = result;
|
|
670
682
|
const { req, res } = fetchToNode.toReqRes(response.req.raw);
|
|
671
683
|
try {
|
|
684
|
+
const options = { ...this.mcpOptions, ...routeMcpOptions };
|
|
672
685
|
await server.startHTTP({
|
|
673
686
|
url: new URL(response.req.url),
|
|
674
|
-
httpPath
|
|
687
|
+
httpPath: `${resolvedPrefix}${httpPath}`,
|
|
675
688
|
req,
|
|
676
|
-
res
|
|
689
|
+
res,
|
|
690
|
+
options: Object.keys(options).length > 0 ? options : void 0
|
|
677
691
|
});
|
|
678
692
|
return await fetchToNode.toFetchResponse(res);
|
|
679
693
|
} catch {
|
|
@@ -695,8 +709,8 @@ var MastraServer = class extends serverAdapter.MastraServer {
|
|
|
695
709
|
try {
|
|
696
710
|
return await server.startHonoSSE({
|
|
697
711
|
url: new URL(response.req.url),
|
|
698
|
-
ssePath
|
|
699
|
-
messagePath
|
|
712
|
+
ssePath: `${resolvedPrefix}${ssePath}`,
|
|
713
|
+
messagePath: `${resolvedPrefix}${messagePath}`,
|
|
700
714
|
context: response
|
|
701
715
|
});
|
|
702
716
|
} catch {
|
|
@@ -706,7 +720,8 @@ var MastraServer = class extends serverAdapter.MastraServer {
|
|
|
706
720
|
return response.status(500);
|
|
707
721
|
}
|
|
708
722
|
}
|
|
709
|
-
async registerRoute(app, route, { prefix }) {
|
|
723
|
+
async registerRoute(app, route, { prefix: prefixParam } = {}) {
|
|
724
|
+
const prefix = prefixParam ?? this.prefix ?? "";
|
|
710
725
|
const shouldApplyBodyLimit = this.bodyLimitOptions && ["POST", "PUT", "PATCH"].includes(route.method.toUpperCase());
|
|
711
726
|
const maxSize = route.maxBodySize ?? this.bodyLimitOptions?.maxSize;
|
|
712
727
|
const middlewares = [];
|
|
@@ -722,7 +737,26 @@ var MastraServer = class extends serverAdapter.MastraServer {
|
|
|
722
737
|
`${prefix}${route.path}`,
|
|
723
738
|
...middlewares,
|
|
724
739
|
async (c) => {
|
|
740
|
+
const authError = await this.checkRouteAuth(route, {
|
|
741
|
+
path: c.req.path,
|
|
742
|
+
method: c.req.method,
|
|
743
|
+
getHeader: (name) => c.req.header(name),
|
|
744
|
+
getQuery: (name) => c.req.query(name),
|
|
745
|
+
requestContext: c.get("requestContext")
|
|
746
|
+
});
|
|
747
|
+
if (authError) {
|
|
748
|
+
return c.json({ error: authError.error }, authError.status);
|
|
749
|
+
}
|
|
725
750
|
const params = await this.getParams(route, c.req);
|
|
751
|
+
if (params.bodyParseError) {
|
|
752
|
+
return c.json(
|
|
753
|
+
{
|
|
754
|
+
error: "Invalid request body",
|
|
755
|
+
issues: [{ field: "body", message: params.bodyParseError.message }]
|
|
756
|
+
},
|
|
757
|
+
400
|
|
758
|
+
);
|
|
759
|
+
}
|
|
726
760
|
if (params.queryParams) {
|
|
727
761
|
try {
|
|
728
762
|
params.queryParams = await this.parseQueryParams(route, params.queryParams);
|
|
@@ -763,13 +797,14 @@ var MastraServer = class extends serverAdapter.MastraServer {
|
|
|
763
797
|
...typeof params.body === "object" ? params.body : {},
|
|
764
798
|
requestContext: c.get("requestContext"),
|
|
765
799
|
mastra: this.mastra,
|
|
766
|
-
|
|
800
|
+
registeredTools: c.get("registeredTools"),
|
|
767
801
|
taskStore: c.get("taskStore"),
|
|
768
|
-
abortSignal: c.get("abortSignal")
|
|
802
|
+
abortSignal: c.get("abortSignal"),
|
|
803
|
+
routePrefix: prefix
|
|
769
804
|
};
|
|
770
805
|
try {
|
|
771
806
|
const result = await route.handler(handlerParams);
|
|
772
|
-
return this.sendResponse(route, c, result);
|
|
807
|
+
return this.sendResponse(route, c, result, prefix);
|
|
773
808
|
} catch (error) {
|
|
774
809
|
console.error("Error calling handler", error);
|
|
775
810
|
if (error && typeof error === "object") {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/http-exception.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/middleware/body-limit/index.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/utils/stream.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/helper/streaming/utils.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/helper/streaming/stream.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js","../src/auth-middleware.ts","../src/index.ts"],"names":["util","objectUtil","isDevPlaygroundRequest","isProtectedPath","canAccessPublicly","checkRules","defaultAuthConfig","MastraServerBase","stream","redactStreamChunk","normalizeQueryParams","toReqRes","toFetchResponse","error","formatZodError"],"mappings":"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","file":"index.cjs","sourcesContent":["// src/http-exception.ts\nvar HTTPException = class extends Error {\n res;\n status;\n /**\n * Creates an instance of `HTTPException`.\n * @param status - HTTP status code for the exception. Defaults to 500.\n * @param options - Additional options for the exception.\n */\n constructor(status = 500, options) {\n super(options?.message, { cause: options?.cause });\n this.res = options?.res;\n this.status = status;\n }\n /**\n * Returns the response object associated with the exception.\n * If a response object is not provided, a new response is created with the error message and status code.\n * @returns The response object.\n */\n getResponse() {\n if (this.res) {\n const newResponse = new Response(this.res.body, {\n status: this.status,\n headers: this.res.headers\n });\n return newResponse;\n }\n return new Response(this.message, {\n status: this.status\n });\n }\n};\nexport {\n HTTPException\n};\n","// src/middleware/body-limit/index.ts\nimport { HTTPException } from \"../../http-exception.js\";\nvar ERROR_MESSAGE = \"Payload Too Large\";\nvar BodyLimitError = class extends Error {\n constructor(message) {\n super(message);\n this.name = \"BodyLimitError\";\n }\n};\nvar bodyLimit = (options) => {\n const onError = options.onError || (() => {\n const res = new Response(ERROR_MESSAGE, {\n status: 413\n });\n throw new HTTPException(413, { res });\n });\n const maxSize = options.maxSize;\n return async function bodyLimit2(c, next) {\n if (!c.req.raw.body) {\n return next();\n }\n const hasTransferEncoding = c.req.raw.headers.has(\"transfer-encoding\");\n const hasContentLength = c.req.raw.headers.has(\"content-length\");\n if (hasTransferEncoding && hasContentLength) {\n }\n if (hasContentLength && !hasTransferEncoding) {\n const contentLength = parseInt(c.req.raw.headers.get(\"content-length\") || \"0\", 10);\n return contentLength > maxSize ? onError(c) : next();\n }\n let size = 0;\n const rawReader = c.req.raw.body.getReader();\n const reader = new ReadableStream({\n async start(controller) {\n try {\n for (; ; ) {\n const { done, value } = await rawReader.read();\n if (done) {\n break;\n }\n size += value.length;\n if (size > maxSize) {\n controller.error(new BodyLimitError(ERROR_MESSAGE));\n break;\n }\n controller.enqueue(value);\n }\n } finally {\n controller.close();\n }\n }\n });\n const requestInit = { body: reader, duplex: \"half\" };\n c.req.raw = new Request(c.req.raw, requestInit);\n await next();\n if (c.error instanceof BodyLimitError) {\n c.res = await onError(c);\n }\n };\n};\nexport {\n bodyLimit\n};\n","// src/utils/stream.ts\nvar StreamingApi = class {\n writer;\n encoder;\n writable;\n abortSubscribers = [];\n responseReadable;\n /**\n * Whether the stream has been aborted.\n */\n aborted = false;\n /**\n * Whether the stream has been closed normally.\n */\n closed = false;\n constructor(writable, _readable) {\n this.writable = writable;\n this.writer = writable.getWriter();\n this.encoder = new TextEncoder();\n const reader = _readable.getReader();\n this.abortSubscribers.push(async () => {\n await reader.cancel();\n });\n this.responseReadable = new ReadableStream({\n async pull(controller) {\n const { done, value } = await reader.read();\n done ? controller.close() : controller.enqueue(value);\n },\n cancel: () => {\n this.abort();\n }\n });\n }\n async write(input) {\n try {\n if (typeof input === \"string\") {\n input = this.encoder.encode(input);\n }\n await this.writer.write(input);\n } catch {\n }\n return this;\n }\n async writeln(input) {\n await this.write(input + \"\\n\");\n return this;\n }\n sleep(ms) {\n return new Promise((res) => setTimeout(res, ms));\n }\n async close() {\n try {\n await this.writer.close();\n } catch {\n }\n this.closed = true;\n }\n async pipe(body) {\n this.writer.releaseLock();\n await body.pipeTo(this.writable, { preventClose: true });\n this.writer = this.writable.getWriter();\n }\n onAbort(listener) {\n this.abortSubscribers.push(listener);\n }\n /**\n * Abort the stream.\n * You can call this method when stream is aborted by external event.\n */\n abort() {\n if (!this.aborted) {\n this.aborted = true;\n this.abortSubscribers.forEach((subscriber) => subscriber());\n }\n }\n};\nexport {\n StreamingApi\n};\n","// src/helper/streaming/utils.ts\nvar isOldBunVersion = () => {\n const version = typeof Bun !== \"undefined\" ? Bun.version : void 0;\n if (version === void 0) {\n return false;\n }\n const result = version.startsWith(\"1.1\") || version.startsWith(\"1.0\") || version.startsWith(\"0.\");\n isOldBunVersion = () => result;\n return result;\n};\nexport {\n isOldBunVersion\n};\n","// src/helper/streaming/stream.ts\nimport { StreamingApi } from \"../../utils/stream.js\";\nimport { isOldBunVersion } from \"./utils.js\";\nvar contextStash = /* @__PURE__ */ new WeakMap();\nvar stream = (c, cb, onError) => {\n const { readable, writable } = new TransformStream();\n const stream2 = new StreamingApi(writable, readable);\n if (isOldBunVersion()) {\n c.req.raw.signal.addEventListener(\"abort\", () => {\n if (!stream2.closed) {\n stream2.abort();\n }\n });\n }\n contextStash.set(stream2.responseReadable, c);\n (async () => {\n try {\n await cb(stream2);\n } catch (e) {\n if (e === void 0) {\n } else if (e instanceof Error && onError) {\n await onError(e, stream2);\n } else {\n console.error(e);\n }\n } finally {\n stream2.close();\n }\n })();\n return c.newResponse(stream2.responseReadable);\n};\nexport {\n stream\n};\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import type { ContextWithMastra } from '@mastra/core/server';\nimport {\n canAccessPublicly,\n checkRules,\n defaultAuthConfig,\n isDevPlaygroundRequest,\n isProtectedPath,\n} from '@mastra/server/auth';\nimport type { Next } from 'hono';\n\nexport const authenticationMiddleware = async (c: ContextWithMastra, next: Next) => {\n const mastra = c.get('mastra');\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = c.get('customRouteAuthConfig');\n\n if (!authConfig) {\n // No auth config, skip authentication\n return next();\n }\n\n const path = c.req.path;\n const method = c.req.method;\n const getHeader = (name: string) => c.req.header(name);\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig)) {\n // Skip authentication for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(c.req.path, c.req.method, authConfig, customRouteAuthConfig)) {\n return next();\n }\n\n // Skip authentication for public routes\n if (canAccessPublicly(c.req.path, c.req.method, authConfig)) {\n return next();\n }\n\n // Get token from header or query\n const authHeader = c.req.header('Authorization');\n let token: string | null = authHeader ? authHeader.replace('Bearer ', '') : null;\n\n if (!token && c.req.query('apiKey')) {\n token = c.req.query('apiKey') || null;\n }\n\n // Handle missing token\n if (!token) {\n return c.json({ error: 'Authentication required' }, 401);\n }\n\n try {\n // Verify token and get user data\n let user: unknown;\n\n // Client provided verify function\n if (typeof authConfig.authenticateToken === 'function') {\n user = await authConfig.authenticateToken(token, c.req);\n } else {\n throw new Error('No token verification method configured');\n }\n\n if (!user) {\n return c.json({ error: 'Invalid or expired token' }, 401);\n }\n\n // Store user in context\n c.get('requestContext').set('user', user);\n\n return next();\n } catch (err) {\n console.error(err);\n return c.json({ error: 'Invalid or expired token' }, 401);\n }\n};\n\nexport const authorizationMiddleware = async (c: ContextWithMastra, next: Next) => {\n const mastra = c.get('mastra');\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = c.get('customRouteAuthConfig');\n\n if (!authConfig) {\n // No auth config, skip authorization\n return next();\n }\n\n const path = c.req.path;\n const method = c.req.method;\n const getHeader = (name: string) => c.req.header(name);\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig)) {\n // Skip authorization for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(c.req.path, c.req.method, authConfig, customRouteAuthConfig)) {\n return next();\n }\n\n // Skip for public routes\n if (canAccessPublicly(path, method, authConfig)) {\n return next();\n }\n\n const user = c.get('requestContext').get('user');\n\n if ('authorizeUser' in authConfig && typeof authConfig.authorizeUser === 'function') {\n try {\n const isAuthorized = await authConfig.authorizeUser(user, c.req);\n\n if (isAuthorized) {\n return next();\n }\n\n return c.json({ error: 'Access denied' }, 403);\n } catch (err) {\n console.error(err);\n return c.json({ error: 'Authorization error' }, 500);\n }\n }\n\n // Client-provided authorization function\n if ('authorize' in authConfig && typeof authConfig.authorize === 'function') {\n try {\n const isAuthorized = await authConfig.authorize(path, method, user, c);\n\n if (isAuthorized) {\n return next();\n }\n\n return c.json({ error: 'Access denied' }, 403);\n } catch (err) {\n console.error(err);\n return c.json({ error: 'Authorization error' }, 500);\n }\n }\n\n // Custom rule-based authorization\n if ('rules' in authConfig && authConfig.rules && authConfig.rules.length > 0) {\n const isAuthorized = await checkRules(authConfig.rules, path, method, user);\n\n if (isAuthorized) {\n return next();\n }\n\n return c.json({ error: 'Access denied' }, 403);\n }\n\n // Default rule-based authorization\n if (defaultAuthConfig.rules && defaultAuthConfig.rules.length > 0) {\n const isAuthorized = await checkRules(defaultAuthConfig.rules, path, method, user);\n\n if (isAuthorized) {\n return next();\n }\n }\n\n return c.json({ error: 'Access denied' }, 403);\n};\n","import type { ToolsInput } from '@mastra/core/agent';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { InMemoryTaskStore } from '@mastra/server/a2a/store';\nimport { formatZodError } from '@mastra/server/handlers/error';\nimport type { MCPHttpTransportResult, MCPSseTransportResult } from '@mastra/server/handlers/mcp';\nimport type { ParsedRequestParams, ServerRoute } from '@mastra/server/server-adapter';\nimport {\n MastraServer as MastraServerBase,\n normalizeQueryParams,\n redactStreamChunk,\n} from '@mastra/server/server-adapter';\nimport { toReqRes, toFetchResponse } from 'fetch-to-node';\nimport type { Context, HonoRequest, MiddlewareHandler } from 'hono';\nimport { bodyLimit } from 'hono/body-limit';\nimport { stream } from 'hono/streaming';\nimport { ZodError } from 'zod';\n\nimport { authenticationMiddleware, authorizationMiddleware } from './auth-middleware';\n\n// Export type definitions for Hono app configuration\nexport type HonoVariables = {\n mastra: Mastra;\n requestContext: RequestContext;\n tools: ToolsInput;\n abortSignal: AbortSignal;\n taskStore: InMemoryTaskStore;\n customRouteAuthConfig?: Map<string, boolean>;\n};\n\nexport type HonoBindings = {};\n\n/**\n * Generic handler function type compatible across Hono versions.\n * Uses a minimal signature that all Hono middleware handlers satisfy.\n */\ntype HonoRouteHandler = (...args: any[]) => any;\n\n/**\n * Minimal interface representing what MastraServer needs from a Hono app.\n * This allows any Hono app instance to be passed without strict generic matching,\n * avoiding the version mismatch issues that occur with Hono's strict generic types.\n */\nexport interface HonoApp {\n use(path: string, ...handlers: HonoRouteHandler[]): unknown;\n get(path: string, ...handlers: HonoRouteHandler[]): unknown;\n post(path: string, ...handlers: HonoRouteHandler[]): unknown;\n put(path: string, ...handlers: HonoRouteHandler[]): unknown;\n delete(path: string, ...handlers: HonoRouteHandler[]): unknown;\n patch(path: string, ...handlers: HonoRouteHandler[]): unknown;\n all(path: string, ...handlers: HonoRouteHandler[]): unknown;\n}\n\nexport class MastraServer extends MastraServerBase<HonoApp, HonoRequest, Context> {\n createContextMiddleware(): MiddlewareHandler {\n return async (c, next) => {\n // Parse request context from request body and add to context\n\n let bodyRequestContext: Record<string, any> | undefined;\n let paramsRequestContext: Record<string, any> | undefined;\n\n // Parse request context from request body (POST/PUT)\n if (c.req.method === 'POST' || c.req.method === 'PUT') {\n const contentType = c.req.header('content-type');\n if (contentType?.includes('application/json')) {\n try {\n const clonedReq = c.req.raw.clone();\n const body = (await clonedReq.json()) as { requestContext?: Record<string, any> };\n if (body.requestContext) {\n bodyRequestContext = body.requestContext;\n }\n } catch {\n // Body parsing failed, continue without body\n }\n }\n }\n\n // Parse request context from query params (GET)\n if (c.req.method === 'GET') {\n try {\n const encodedRequestContext = c.req.query('requestContext');\n if (encodedRequestContext) {\n // Try JSON first\n try {\n paramsRequestContext = JSON.parse(encodedRequestContext);\n } catch {\n // Fallback to base64(JSON)\n try {\n const json = Buffer.from(encodedRequestContext, 'base64').toString('utf-8');\n paramsRequestContext = JSON.parse(json);\n } catch {\n // ignore if still invalid\n }\n }\n }\n } catch {\n // ignore query parsing errors\n }\n }\n\n const requestContext = this.mergeRequestContext({ paramsRequestContext, bodyRequestContext });\n\n // Add relevant contexts to hono context\n c.set('requestContext', requestContext);\n c.set('mastra', this.mastra);\n c.set('tools', this.tools || {});\n c.set('taskStore', this.taskStore);\n c.set('abortSignal', c.req.raw.signal);\n c.set('customRouteAuthConfig', this.customRouteAuthConfig);\n\n return next();\n };\n }\n async stream(route: ServerRoute, res: Context, result: { fullStream: ReadableStream }): Promise<any> {\n res.header('Content-Type', 'text/plain');\n res.header('Transfer-Encoding', 'chunked');\n\n const streamFormat = route.streamFormat || 'stream';\n\n return stream(\n res,\n async stream => {\n const readableStream = result instanceof ReadableStream ? result : result.fullStream;\n const reader = readableStream.getReader();\n\n stream.onAbort(() => {\n void reader.cancel('request aborted');\n });\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n if (value) {\n // Optionally redact sensitive data (system prompts, tool definitions, API keys) before sending to the client\n const shouldRedact = this.streamOptions?.redact ?? true;\n const outputValue = shouldRedact ? redactStreamChunk(value) : value;\n if (streamFormat === 'sse') {\n await stream.write(`data: ${JSON.stringify(outputValue)}\\n\\n`);\n } else {\n await stream.write(JSON.stringify(outputValue) + '\\x1E');\n }\n }\n }\n\n await stream.write('data: [DONE]\\n\\n');\n } catch (error) {\n console.error(error);\n } finally {\n await stream.close();\n }\n },\n async err => {\n console.error(err);\n },\n );\n }\n\n async getParams(route: ServerRoute, request: HonoRequest): Promise<ParsedRequestParams> {\n const urlParams = request.param();\n // Use queries() to get all values for repeated params (e.g., ?tags=a&tags=b -> { tags: ['a', 'b'] })\n const queryParams = normalizeQueryParams(request.queries());\n let body: unknown;\n if (route.method === 'POST' || route.method === 'PUT' || route.method === 'PATCH') {\n const contentType = request.header('content-type') || '';\n\n if (contentType.includes('multipart/form-data')) {\n try {\n const formData = await request.formData();\n body = await this.parseFormData(formData);\n } catch (error) {\n console.error('Failed to parse multipart form data:', error);\n // Re-throw size limit errors, let others fall through to validation\n if (error instanceof Error && error.message.toLowerCase().includes('size')) {\n throw error;\n }\n }\n } else {\n try {\n body = await request.json();\n } catch (error) {\n console.error('Failed to parse JSON body:', error);\n }\n }\n }\n return { urlParams, queryParams, body };\n }\n\n /**\n * Parse FormData into a plain object, converting File objects to Buffers.\n */\n private async parseFormData(formData: FormData): Promise<Record<string, unknown>> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of formData.entries()) {\n if (value instanceof File) {\n const arrayBuffer = await value.arrayBuffer();\n result[key] = Buffer.from(arrayBuffer);\n } else if (typeof value === 'string') {\n // Try to parse JSON strings (like 'options')\n try {\n result[key] = JSON.parse(value);\n } catch {\n result[key] = value;\n }\n } else {\n result[key] = value;\n }\n }\n\n return result;\n }\n\n async sendResponse(route: ServerRoute, response: Context, result: unknown): Promise<any> {\n if (route.responseType === 'json') {\n return response.json(result as any, 200);\n } else if (route.responseType === 'stream') {\n return this.stream(route, response, result as { fullStream: ReadableStream });\n } else if (route.responseType === 'datastream-response') {\n const fetchResponse = result as globalThis.Response;\n return fetchResponse;\n } else if (route.responseType === 'mcp-http') {\n // MCP Streamable HTTP transport\n const { server, httpPath } = result as MCPHttpTransportResult;\n const { req, res } = toReqRes(response.req.raw);\n\n try {\n await server.startHTTP({\n url: new URL(response.req.url),\n httpPath,\n req,\n res,\n });\n return await toFetchResponse(res);\n } catch {\n if (!res.headersSent) {\n res.writeHead(500, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n jsonrpc: '2.0',\n error: { code: -32603, message: 'Internal server error' },\n id: null,\n }),\n );\n return await toFetchResponse(res);\n }\n return await toFetchResponse(res);\n }\n } else if (route.responseType === 'mcp-sse') {\n // MCP SSE transport\n const { server, ssePath, messagePath } = result as MCPSseTransportResult;\n\n try {\n return await server.startHonoSSE({\n url: new URL(response.req.url),\n ssePath,\n messagePath,\n context: response,\n });\n } catch {\n return response.json({ error: 'Error handling MCP SSE request' }, 500);\n }\n } else {\n return response.status(500);\n }\n }\n\n async registerRoute(app: HonoApp, route: ServerRoute, { prefix }: { prefix?: string }): Promise<void> {\n // Determine if body limits should be applied\n const shouldApplyBodyLimit = this.bodyLimitOptions && ['POST', 'PUT', 'PATCH'].includes(route.method.toUpperCase());\n\n // Get the body size limit for this route (route-specific or default)\n const maxSize = route.maxBodySize ?? this.bodyLimitOptions?.maxSize;\n\n // Build middleware array\n const middlewares: MiddlewareHandler[] = [];\n\n if (shouldApplyBodyLimit && maxSize && this.bodyLimitOptions) {\n middlewares.push(\n bodyLimit({\n maxSize,\n onError: this.bodyLimitOptions.onError as any,\n }),\n );\n }\n\n app[route.method.toLowerCase() as 'get' | 'post' | 'put' | 'delete' | 'patch' | 'all'](\n `${prefix}${route.path}`,\n ...middlewares,\n async (c: Context) => {\n const params = await this.getParams(route, c.req);\n\n if (params.queryParams) {\n try {\n params.queryParams = await this.parseQueryParams(route, params.queryParams);\n } catch (error) {\n console.error('Error parsing query params', error);\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n return c.json(formatZodError(error, 'query parameters'), 400);\n }\n return c.json(\n {\n error: 'Invalid query parameters',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n },\n 400,\n );\n }\n }\n\n if (params.body) {\n try {\n params.body = await this.parseBody(route, params.body);\n } catch (error) {\n console.error('Error parsing body:', error instanceof Error ? error.message : String(error));\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n return c.json(formatZodError(error, 'request body'), 400);\n }\n return c.json(\n {\n error: 'Invalid request body',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n },\n 400,\n );\n }\n }\n\n const handlerParams = {\n ...params.urlParams,\n ...params.queryParams,\n ...(typeof params.body === 'object' ? params.body : {}),\n requestContext: c.get('requestContext'),\n mastra: this.mastra,\n tools: c.get('tools'),\n taskStore: c.get('taskStore'),\n abortSignal: c.get('abortSignal'),\n };\n\n try {\n const result = await route.handler(handlerParams);\n return this.sendResponse(route, c, result);\n } catch (error) {\n console.error('Error calling handler', error);\n // Check if it's an HTTPException or MastraError with a status code\n if (error && typeof error === 'object') {\n // Check for direct status property (HTTPException)\n if ('status' in error) {\n const status = (error as any).status;\n return c.json({ error: error instanceof Error ? error.message : 'Unknown error' }, status);\n }\n // Check for MastraError with status in details\n if ('details' in error && error.details && typeof error.details === 'object' && 'status' in error.details) {\n const status = (error.details as any).status;\n return c.json({ error: error instanceof Error ? error.message : 'Unknown error' }, status);\n }\n }\n return c.json({ error: error instanceof Error ? error.message : 'Unknown error' }, 500);\n }\n },\n );\n }\n\n registerContextMiddleware(): void {\n this.app.use('*', this.createContextMiddleware());\n }\n\n registerAuthMiddleware(): void {\n const authConfig = this.mastra.getServer()?.auth;\n if (!authConfig) {\n // No auth config, skip registration\n return;\n }\n\n this.app.use('*', authenticationMiddleware);\n this.app.use('*', authorizationMiddleware);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/http-exception.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/middleware/body-limit/index.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/utils/stream.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/helper/streaming/utils.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/helper/streaming/stream.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js","../src/auth-middleware.ts","../src/index.ts"],"names":["util","objectUtil","isDevPlaygroundRequest","isProtectedPath","canAccessPublicly","checkRules","defaultAuthConfig","MastraServerBase","stream","redactStreamChunk","normalizeQueryParams","toReqRes","toFetchResponse","error","formatZodError"],"mappings":"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","file":"index.cjs","sourcesContent":["// src/http-exception.ts\nvar HTTPException = class extends Error {\n res;\n status;\n /**\n * Creates an instance of `HTTPException`.\n * @param status - HTTP status code for the exception. Defaults to 500.\n * @param options - Additional options for the exception.\n */\n constructor(status = 500, options) {\n super(options?.message, { cause: options?.cause });\n this.res = options?.res;\n this.status = status;\n }\n /**\n * Returns the response object associated with the exception.\n * If a response object is not provided, a new response is created with the error message and status code.\n * @returns The response object.\n */\n getResponse() {\n if (this.res) {\n const newResponse = new Response(this.res.body, {\n status: this.status,\n headers: this.res.headers\n });\n return newResponse;\n }\n return new Response(this.message, {\n status: this.status\n });\n }\n};\nexport {\n HTTPException\n};\n","// src/middleware/body-limit/index.ts\nimport { HTTPException } from \"../../http-exception.js\";\nvar ERROR_MESSAGE = \"Payload Too Large\";\nvar BodyLimitError = class extends Error {\n constructor(message) {\n super(message);\n this.name = \"BodyLimitError\";\n }\n};\nvar bodyLimit = (options) => {\n const onError = options.onError || (() => {\n const res = new Response(ERROR_MESSAGE, {\n status: 413\n });\n throw new HTTPException(413, { res });\n });\n const maxSize = options.maxSize;\n return async function bodyLimit2(c, next) {\n if (!c.req.raw.body) {\n return next();\n }\n const hasTransferEncoding = c.req.raw.headers.has(\"transfer-encoding\");\n const hasContentLength = c.req.raw.headers.has(\"content-length\");\n if (hasTransferEncoding && hasContentLength) {\n }\n if (hasContentLength && !hasTransferEncoding) {\n const contentLength = parseInt(c.req.raw.headers.get(\"content-length\") || \"0\", 10);\n return contentLength > maxSize ? onError(c) : next();\n }\n let size = 0;\n const rawReader = c.req.raw.body.getReader();\n const reader = new ReadableStream({\n async start(controller) {\n try {\n for (; ; ) {\n const { done, value } = await rawReader.read();\n if (done) {\n break;\n }\n size += value.length;\n if (size > maxSize) {\n controller.error(new BodyLimitError(ERROR_MESSAGE));\n break;\n }\n controller.enqueue(value);\n }\n } finally {\n controller.close();\n }\n }\n });\n const requestInit = { body: reader, duplex: \"half\" };\n c.req.raw = new Request(c.req.raw, requestInit);\n await next();\n if (c.error instanceof BodyLimitError) {\n c.res = await onError(c);\n }\n };\n};\nexport {\n bodyLimit\n};\n","// src/utils/stream.ts\nvar StreamingApi = class {\n writer;\n encoder;\n writable;\n abortSubscribers = [];\n responseReadable;\n /**\n * Whether the stream has been aborted.\n */\n aborted = false;\n /**\n * Whether the stream has been closed normally.\n */\n closed = false;\n constructor(writable, _readable) {\n this.writable = writable;\n this.writer = writable.getWriter();\n this.encoder = new TextEncoder();\n const reader = _readable.getReader();\n this.abortSubscribers.push(async () => {\n await reader.cancel();\n });\n this.responseReadable = new ReadableStream({\n async pull(controller) {\n const { done, value } = await reader.read();\n done ? controller.close() : controller.enqueue(value);\n },\n cancel: () => {\n this.abort();\n }\n });\n }\n async write(input) {\n try {\n if (typeof input === \"string\") {\n input = this.encoder.encode(input);\n }\n await this.writer.write(input);\n } catch {\n }\n return this;\n }\n async writeln(input) {\n await this.write(input + \"\\n\");\n return this;\n }\n sleep(ms) {\n return new Promise((res) => setTimeout(res, ms));\n }\n async close() {\n try {\n await this.writer.close();\n } catch {\n }\n this.closed = true;\n }\n async pipe(body) {\n this.writer.releaseLock();\n await body.pipeTo(this.writable, { preventClose: true });\n this.writer = this.writable.getWriter();\n }\n onAbort(listener) {\n this.abortSubscribers.push(listener);\n }\n /**\n * Abort the stream.\n * You can call this method when stream is aborted by external event.\n */\n abort() {\n if (!this.aborted) {\n this.aborted = true;\n this.abortSubscribers.forEach((subscriber) => subscriber());\n }\n }\n};\nexport {\n StreamingApi\n};\n","// src/helper/streaming/utils.ts\nvar isOldBunVersion = () => {\n const version = typeof Bun !== \"undefined\" ? Bun.version : void 0;\n if (version === void 0) {\n return false;\n }\n const result = version.startsWith(\"1.1\") || version.startsWith(\"1.0\") || version.startsWith(\"0.\");\n isOldBunVersion = () => result;\n return result;\n};\nexport {\n isOldBunVersion\n};\n","// src/helper/streaming/stream.ts\nimport { StreamingApi } from \"../../utils/stream.js\";\nimport { isOldBunVersion } from \"./utils.js\";\nvar contextStash = /* @__PURE__ */ new WeakMap();\nvar stream = (c, cb, onError) => {\n const { readable, writable } = new TransformStream();\n const stream2 = new StreamingApi(writable, readable);\n if (isOldBunVersion()) {\n c.req.raw.signal.addEventListener(\"abort\", () => {\n if (!stream2.closed) {\n stream2.abort();\n }\n });\n }\n contextStash.set(stream2.responseReadable, c);\n (async () => {\n try {\n await cb(stream2);\n } catch (e) {\n if (e === void 0) {\n } else if (e instanceof Error && onError) {\n await onError(e, stream2);\n } else {\n console.error(e);\n }\n } finally {\n stream2.close();\n }\n })();\n return c.newResponse(stream2.responseReadable);\n};\nexport {\n stream\n};\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import type { ContextWithMastra } from '@mastra/core/server';\nimport {\n canAccessPublicly,\n checkRules,\n defaultAuthConfig,\n isDevPlaygroundRequest,\n isProtectedPath,\n} from '@mastra/server/auth';\nimport type { Next } from 'hono';\n\nexport const authenticationMiddleware = async (c: ContextWithMastra, next: Next) => {\n const mastra = c.get('mastra');\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = c.get('customRouteAuthConfig');\n\n if (!authConfig) {\n // No auth config, skip authentication\n return next();\n }\n\n const path = c.req.path;\n const method = c.req.method;\n const getHeader = (name: string) => c.req.header(name);\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {\n // Skip authentication for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(c.req.path, c.req.method, authConfig, customRouteAuthConfig)) {\n return next();\n }\n\n // Skip authentication for public routes\n if (canAccessPublicly(c.req.path, c.req.method, authConfig)) {\n return next();\n }\n\n // Get token from header or query\n const authHeader = c.req.header('Authorization');\n let token: string | null = authHeader ? authHeader.replace('Bearer ', '') : null;\n\n if (!token && c.req.query('apiKey')) {\n token = c.req.query('apiKey') || null;\n }\n\n // Handle missing token\n if (!token) {\n return c.json({ error: 'Authentication required' }, 401);\n }\n\n try {\n // Verify token and get user data\n let user: unknown;\n\n // Client provided verify function\n if (typeof authConfig.authenticateToken === 'function') {\n user = await authConfig.authenticateToken(token, c.req);\n } else {\n throw new Error('No token verification method configured');\n }\n\n if (!user) {\n return c.json({ error: 'Invalid or expired token' }, 401);\n }\n\n // Store user in context\n c.get('requestContext').set('user', user);\n\n return next();\n } catch (err) {\n console.error(err);\n return c.json({ error: 'Invalid or expired token' }, 401);\n }\n};\n\nexport const authorizationMiddleware = async (c: ContextWithMastra, next: Next) => {\n const mastra = c.get('mastra');\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = c.get('customRouteAuthConfig');\n\n if (!authConfig) {\n // No auth config, skip authorization\n return next();\n }\n\n const path = c.req.path;\n const method = c.req.method;\n const getHeader = (name: string) => c.req.header(name);\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {\n // Skip authorization for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(c.req.path, c.req.method, authConfig, customRouteAuthConfig)) {\n return next();\n }\n\n // Skip for public routes\n if (canAccessPublicly(path, method, authConfig)) {\n return next();\n }\n\n const user = c.get('requestContext').get('user');\n\n if ('authorizeUser' in authConfig && typeof authConfig.authorizeUser === 'function') {\n try {\n const isAuthorized = await authConfig.authorizeUser(user, c.req);\n\n if (isAuthorized) {\n return next();\n }\n\n return c.json({ error: 'Access denied' }, 403);\n } catch (err) {\n console.error(err);\n return c.json({ error: 'Authorization error' }, 500);\n }\n }\n\n // Client-provided authorization function\n if ('authorize' in authConfig && typeof authConfig.authorize === 'function') {\n try {\n const isAuthorized = await authConfig.authorize(path, method, user, c);\n\n if (isAuthorized) {\n return next();\n }\n\n return c.json({ error: 'Access denied' }, 403);\n } catch (err) {\n console.error(err);\n return c.json({ error: 'Authorization error' }, 500);\n }\n }\n\n // Custom rule-based authorization\n if ('rules' in authConfig && authConfig.rules && authConfig.rules.length > 0) {\n const isAuthorized = await checkRules(authConfig.rules, path, method, user);\n\n if (isAuthorized) {\n return next();\n }\n\n return c.json({ error: 'Access denied' }, 403);\n }\n\n // Default rule-based authorization\n if (defaultAuthConfig.rules && defaultAuthConfig.rules.length > 0) {\n const isAuthorized = await checkRules(defaultAuthConfig.rules, path, method, user);\n\n if (isAuthorized) {\n return next();\n }\n }\n\n return c.json({ error: 'Access denied' }, 403);\n};\n","import type { ToolsInput } from '@mastra/core/agent';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { InMemoryTaskStore } from '@mastra/server/a2a/store';\nimport { formatZodError } from '@mastra/server/handlers/error';\nimport type { MCPHttpTransportResult, MCPSseTransportResult } from '@mastra/server/handlers/mcp';\nimport type { ParsedRequestParams, ServerRoute } from '@mastra/server/server-adapter';\nimport {\n MastraServer as MastraServerBase,\n normalizeQueryParams,\n redactStreamChunk,\n} from '@mastra/server/server-adapter';\nimport { toReqRes, toFetchResponse } from 'fetch-to-node';\nimport type { Context, HonoRequest, MiddlewareHandler } from 'hono';\nimport { bodyLimit } from 'hono/body-limit';\nimport { stream } from 'hono/streaming';\nimport { ZodError } from 'zod';\n\nimport { authenticationMiddleware, authorizationMiddleware } from './auth-middleware';\n\n// Export type definitions for Hono app configuration\nexport type HonoVariables = {\n mastra: Mastra;\n requestContext: RequestContext;\n registeredTools: ToolsInput;\n abortSignal: AbortSignal;\n taskStore: InMemoryTaskStore;\n customRouteAuthConfig?: Map<string, boolean>;\n};\n\nexport type HonoBindings = {};\n\n/**\n * Generic handler function type compatible across Hono versions.\n * Uses a minimal signature that all Hono middleware handlers satisfy.\n */\ntype HonoRouteHandler = (...args: any[]) => any;\n\n/**\n * Minimal interface representing what MastraServer needs from a Hono app.\n * This allows any Hono app instance to be passed without strict generic matching,\n * avoiding the version mismatch issues that occur with Hono's strict generic types.\n */\nexport interface HonoApp {\n use(path: string, ...handlers: HonoRouteHandler[]): unknown;\n get(path: string, ...handlers: HonoRouteHandler[]): unknown;\n post(path: string, ...handlers: HonoRouteHandler[]): unknown;\n put(path: string, ...handlers: HonoRouteHandler[]): unknown;\n delete(path: string, ...handlers: HonoRouteHandler[]): unknown;\n patch(path: string, ...handlers: HonoRouteHandler[]): unknown;\n all(path: string, ...handlers: HonoRouteHandler[]): unknown;\n}\n\nexport class MastraServer extends MastraServerBase<HonoApp, HonoRequest, Context> {\n createContextMiddleware(): MiddlewareHandler {\n return async (c, next) => {\n // Parse request context from request body and add to context\n\n let bodyRequestContext: Record<string, any> | undefined;\n let paramsRequestContext: Record<string, any> | undefined;\n\n // Parse request context from request body (POST/PUT)\n if (c.req.method === 'POST' || c.req.method === 'PUT') {\n const contentType = c.req.header('content-type');\n if (contentType?.includes('application/json')) {\n try {\n const clonedReq = c.req.raw.clone();\n const body = (await clonedReq.json()) as { requestContext?: Record<string, any> };\n if (body.requestContext) {\n bodyRequestContext = body.requestContext;\n }\n } catch {\n // Body parsing failed, continue without body\n }\n }\n }\n\n // Parse request context from query params (GET)\n if (c.req.method === 'GET') {\n try {\n const encodedRequestContext = c.req.query('requestContext');\n if (encodedRequestContext) {\n // Try JSON first\n try {\n paramsRequestContext = JSON.parse(encodedRequestContext);\n } catch {\n // Fallback to base64(JSON)\n try {\n const json = Buffer.from(encodedRequestContext, 'base64').toString('utf-8');\n paramsRequestContext = JSON.parse(json);\n } catch {\n // ignore if still invalid\n }\n }\n }\n } catch {\n // ignore query parsing errors\n }\n }\n\n const requestContext = this.mergeRequestContext({ paramsRequestContext, bodyRequestContext });\n\n // Add relevant contexts to hono context\n c.set('requestContext', requestContext);\n c.set('mastra', this.mastra);\n c.set('registeredTools', this.tools || {});\n c.set('taskStore', this.taskStore);\n c.set('abortSignal', c.req.raw.signal);\n c.set('customRouteAuthConfig', this.customRouteAuthConfig);\n\n return next();\n };\n }\n async stream(route: ServerRoute, res: Context, result: { fullStream: ReadableStream }): Promise<any> {\n res.header('Content-Type', 'text/plain');\n res.header('Transfer-Encoding', 'chunked');\n\n const streamFormat = route.streamFormat || 'stream';\n\n return stream(\n res,\n async stream => {\n const readableStream = result instanceof ReadableStream ? result : result.fullStream;\n const reader = readableStream.getReader();\n\n stream.onAbort(() => {\n void reader.cancel('request aborted');\n });\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n if (value) {\n // Optionally redact sensitive data (system prompts, tool definitions, API keys) before sending to the client\n const shouldRedact = this.streamOptions?.redact ?? true;\n const outputValue = shouldRedact ? redactStreamChunk(value) : value;\n if (streamFormat === 'sse') {\n await stream.write(`data: ${JSON.stringify(outputValue)}\\n\\n`);\n } else {\n await stream.write(JSON.stringify(outputValue) + '\\x1E');\n }\n }\n }\n\n await stream.write('data: [DONE]\\n\\n');\n } catch (error) {\n console.error(error);\n } finally {\n await stream.close();\n }\n },\n async err => {\n console.error(err);\n },\n );\n }\n\n async getParams(route: ServerRoute, request: HonoRequest): Promise<ParsedRequestParams> {\n const urlParams = request.param();\n // Use queries() to get all values for repeated params (e.g., ?tags=a&tags=b -> { tags: ['a', 'b'] })\n const queryParams = normalizeQueryParams(request.queries());\n let body: unknown;\n let bodyParseError: { message: string } | undefined;\n\n if (route.method === 'POST' || route.method === 'PUT' || route.method === 'PATCH') {\n const contentType = request.header('content-type') || '';\n\n if (contentType.includes('multipart/form-data')) {\n try {\n const formData = await request.formData();\n body = await this.parseFormData(formData);\n } catch (error) {\n console.error('Failed to parse multipart form data:', error);\n // Re-throw size limit errors, let others fall through to validation\n if (error instanceof Error && error.message.toLowerCase().includes('size')) {\n throw error;\n }\n bodyParseError = {\n message: error instanceof Error ? error.message : 'Failed to parse multipart form data',\n };\n }\n } else if (contentType.includes('application/json')) {\n // Clone the request to read the body text first\n // This allows us to check if there's actual content before parsing\n const clonedReq = request.raw.clone();\n const bodyText = await clonedReq.text();\n\n if (bodyText && bodyText.trim().length > 0) {\n // There's actual content - try to parse it as JSON\n try {\n body = JSON.parse(bodyText);\n } catch (error) {\n console.error('Failed to parse JSON body:', error);\n // Track JSON parse error to return 400 Bad Request\n bodyParseError = {\n message: error instanceof Error ? error.message : 'Invalid JSON in request body',\n };\n }\n }\n // Empty body is ok - body remains undefined\n }\n }\n return { urlParams, queryParams, body, bodyParseError };\n }\n\n /**\n * Parse FormData into a plain object, converting File objects to Buffers.\n */\n private async parseFormData(formData: FormData): Promise<Record<string, unknown>> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of formData.entries()) {\n if (value instanceof File) {\n const arrayBuffer = await value.arrayBuffer();\n result[key] = Buffer.from(arrayBuffer);\n } else if (typeof value === 'string') {\n // Try to parse JSON strings (like 'options')\n try {\n result[key] = JSON.parse(value);\n } catch {\n result[key] = value;\n }\n } else {\n result[key] = value;\n }\n }\n\n return result;\n }\n\n async sendResponse(route: ServerRoute, response: Context, result: unknown, prefix?: string): Promise<any> {\n const resolvedPrefix = prefix ?? this.prefix ?? '';\n\n if (route.responseType === 'json') {\n return response.json(result as any, 200);\n } else if (route.responseType === 'stream') {\n return this.stream(route, response, result as { fullStream: ReadableStream });\n } else if (route.responseType === 'datastream-response') {\n const fetchResponse = result as globalThis.Response;\n return fetchResponse;\n } else if (route.responseType === 'mcp-http') {\n // MCP Streamable HTTP transport\n const { server, httpPath, mcpOptions: routeMcpOptions } = result as MCPHttpTransportResult;\n const { req, res } = toReqRes(response.req.raw);\n\n try {\n // Merge class-level mcpOptions with route-specific options (route takes precedence)\n const options = { ...this.mcpOptions, ...routeMcpOptions };\n\n await server.startHTTP({\n url: new URL(response.req.url),\n httpPath: `${resolvedPrefix}${httpPath}`,\n req,\n res,\n options: Object.keys(options).length > 0 ? options : undefined,\n });\n return await toFetchResponse(res);\n } catch {\n if (!res.headersSent) {\n res.writeHead(500, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n jsonrpc: '2.0',\n error: { code: -32603, message: 'Internal server error' },\n id: null,\n }),\n );\n return await toFetchResponse(res);\n }\n return await toFetchResponse(res);\n }\n } else if (route.responseType === 'mcp-sse') {\n // MCP SSE transport\n const { server, ssePath, messagePath } = result as MCPSseTransportResult;\n\n try {\n return await server.startHonoSSE({\n url: new URL(response.req.url),\n ssePath: `${resolvedPrefix}${ssePath}`,\n messagePath: `${resolvedPrefix}${messagePath}`,\n context: response,\n });\n } catch {\n return response.json({ error: 'Error handling MCP SSE request' }, 500);\n }\n } else {\n return response.status(500);\n }\n }\n\n async registerRoute(\n app: HonoApp,\n route: ServerRoute,\n { prefix: prefixParam }: { prefix?: string } = {},\n ): Promise<void> {\n // Default prefix to this.prefix if not provided, or empty string\n const prefix = prefixParam ?? this.prefix ?? '';\n\n // Determine if body limits should be applied\n const shouldApplyBodyLimit = this.bodyLimitOptions && ['POST', 'PUT', 'PATCH'].includes(route.method.toUpperCase());\n\n // Get the body size limit for this route (route-specific or default)\n const maxSize = route.maxBodySize ?? this.bodyLimitOptions?.maxSize;\n\n // Build middleware array\n const middlewares: MiddlewareHandler[] = [];\n\n if (shouldApplyBodyLimit && maxSize && this.bodyLimitOptions) {\n middlewares.push(\n bodyLimit({\n maxSize,\n onError: this.bodyLimitOptions.onError as any,\n }),\n );\n }\n\n app[route.method.toLowerCase() as 'get' | 'post' | 'put' | 'delete' | 'patch' | 'all'](\n `${prefix}${route.path}`,\n ...middlewares,\n async (c: Context) => {\n // Check route-level authentication/authorization\n const authError = await this.checkRouteAuth(route, {\n path: c.req.path,\n method: c.req.method,\n getHeader: name => c.req.header(name),\n getQuery: name => c.req.query(name),\n requestContext: c.get('requestContext'),\n });\n\n if (authError) {\n return c.json({ error: authError.error }, authError.status as any);\n }\n\n const params = await this.getParams(route, c.req);\n\n // Return 400 Bad Request if body parsing failed (e.g., malformed JSON)\n if (params.bodyParseError) {\n return c.json(\n {\n error: 'Invalid request body',\n issues: [{ field: 'body', message: params.bodyParseError.message }],\n },\n 400,\n );\n }\n\n if (params.queryParams) {\n try {\n params.queryParams = await this.parseQueryParams(route, params.queryParams);\n } catch (error) {\n console.error('Error parsing query params', error);\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n return c.json(formatZodError(error, 'query parameters'), 400);\n }\n return c.json(\n {\n error: 'Invalid query parameters',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n },\n 400,\n );\n }\n }\n\n if (params.body) {\n try {\n params.body = await this.parseBody(route, params.body);\n } catch (error) {\n console.error('Error parsing body:', error instanceof Error ? error.message : String(error));\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n return c.json(formatZodError(error, 'request body'), 400);\n }\n return c.json(\n {\n error: 'Invalid request body',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n },\n 400,\n );\n }\n }\n\n const handlerParams = {\n ...params.urlParams,\n ...params.queryParams,\n ...(typeof params.body === 'object' ? params.body : {}),\n requestContext: c.get('requestContext'),\n mastra: this.mastra,\n registeredTools: c.get('registeredTools'),\n taskStore: c.get('taskStore'),\n abortSignal: c.get('abortSignal'),\n routePrefix: prefix,\n };\n\n try {\n const result = await route.handler(handlerParams);\n return this.sendResponse(route, c, result, prefix);\n } catch (error) {\n console.error('Error calling handler', error);\n // Check if it's an HTTPException or MastraError with a status code\n if (error && typeof error === 'object') {\n // Check for direct status property (HTTPException)\n if ('status' in error) {\n const status = (error as any).status;\n return c.json({ error: error instanceof Error ? error.message : 'Unknown error' }, status);\n }\n // Check for MastraError with status in details\n if ('details' in error && error.details && typeof error.details === 'object' && 'status' in error.details) {\n const status = (error.details as any).status;\n return c.json({ error: error instanceof Error ? error.message : 'Unknown error' }, status);\n }\n }\n return c.json({ error: error instanceof Error ? error.message : 'Unknown error' }, 500);\n }\n },\n );\n }\n\n registerContextMiddleware(): void {\n this.app.use('*', this.createContextMiddleware());\n }\n\n registerAuthMiddleware(): void {\n const authConfig = this.mastra.getServer()?.auth;\n if (!authConfig) {\n // No auth config, skip registration\n return;\n }\n\n this.app.use('*', authenticationMiddleware);\n this.app.use('*', authorizationMiddleware);\n }\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import type { Context, HonoRequest, MiddlewareHandler } from 'hono';
|
|
|
8
8
|
export type HonoVariables = {
|
|
9
9
|
mastra: Mastra;
|
|
10
10
|
requestContext: RequestContext;
|
|
11
|
-
|
|
11
|
+
registeredTools: ToolsInput;
|
|
12
12
|
abortSignal: AbortSignal;
|
|
13
13
|
taskStore: InMemoryTaskStore;
|
|
14
14
|
customRouteAuthConfig?: Map<string, boolean>;
|
|
@@ -43,8 +43,8 @@ export declare class MastraServer extends MastraServerBase<HonoApp, HonoRequest,
|
|
|
43
43
|
* Parse FormData into a plain object, converting File objects to Buffers.
|
|
44
44
|
*/
|
|
45
45
|
private parseFormData;
|
|
46
|
-
sendResponse(route: ServerRoute, response: Context, result: unknown): Promise<any>;
|
|
47
|
-
registerRoute(app: HonoApp, route: ServerRoute, { prefix }
|
|
46
|
+
sendResponse(route: ServerRoute, response: Context, result: unknown, prefix?: string): Promise<any>;
|
|
47
|
+
registerRoute(app: HonoApp, route: ServerRoute, { prefix: prefixParam }?: {
|
|
48
48
|
prefix?: string;
|
|
49
49
|
}): Promise<void>;
|
|
50
50
|
registerContextMiddleware(): void;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EACL,YAAY,IAAI,gBAAgB,EAGjC,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAQpE,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,cAAc,CAAC;IAC/B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EACL,YAAY,IAAI,gBAAgB,EAGjC,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAQpE,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,UAAU,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,EAAE,CAAC;AAE9B;;;GAGG;AACH,KAAK,gBAAgB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAEhD;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAC5D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAC5D,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAC7D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAC5D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAC/D,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAC9D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;CAC7D;AAED,qBAAa,YAAa,SAAQ,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC;IAC/E,uBAAuB,IAAI,iBAAiB;IA2DtC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;QAAE,UAAU,EAAE,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IA8C9F,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgDvF;;OAEG;YACW,aAAa;IAsBrB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IA4DnG,aAAa,CACjB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,WAAW,EAClB,EAAE,MAAM,EAAE,WAAW,EAAE,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAChD,OAAO,CAAC,IAAI,CAAC;IA8HhB,yBAAyB,IAAI,IAAI;IAIjC,sBAAsB,IAAI,IAAI;CAU/B"}
|
package/dist/index.js
CHANGED
|
@@ -428,7 +428,7 @@ var authenticationMiddleware = async (c, next) => {
|
|
|
428
428
|
const path = c.req.path;
|
|
429
429
|
const method = c.req.method;
|
|
430
430
|
const getHeader = (name) => c.req.header(name);
|
|
431
|
-
if (isDevPlaygroundRequest(path, method, getHeader, authConfig)) {
|
|
431
|
+
if (isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {
|
|
432
432
|
return next();
|
|
433
433
|
}
|
|
434
434
|
if (!isProtectedPath(c.req.path, c.req.method, authConfig, customRouteAuthConfig)) {
|
|
@@ -472,7 +472,7 @@ var authorizationMiddleware = async (c, next) => {
|
|
|
472
472
|
const path = c.req.path;
|
|
473
473
|
const method = c.req.method;
|
|
474
474
|
const getHeader = (name) => c.req.header(name);
|
|
475
|
-
if (isDevPlaygroundRequest(path, method, getHeader, authConfig)) {
|
|
475
|
+
if (isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {
|
|
476
476
|
return next();
|
|
477
477
|
}
|
|
478
478
|
if (!isProtectedPath(c.req.path, c.req.method, authConfig, customRouteAuthConfig)) {
|
|
@@ -561,7 +561,7 @@ var MastraServer = class extends MastraServer$1 {
|
|
|
561
561
|
const requestContext = this.mergeRequestContext({ paramsRequestContext, bodyRequestContext });
|
|
562
562
|
c.set("requestContext", requestContext);
|
|
563
563
|
c.set("mastra", this.mastra);
|
|
564
|
-
c.set("
|
|
564
|
+
c.set("registeredTools", this.tools || {});
|
|
565
565
|
c.set("taskStore", this.taskStore);
|
|
566
566
|
c.set("abortSignal", c.req.raw.signal);
|
|
567
567
|
c.set("customRouteAuthConfig", this.customRouteAuthConfig);
|
|
@@ -612,6 +612,7 @@ var MastraServer = class extends MastraServer$1 {
|
|
|
612
612
|
const urlParams = request.param();
|
|
613
613
|
const queryParams = normalizeQueryParams(request.queries());
|
|
614
614
|
let body;
|
|
615
|
+
let bodyParseError;
|
|
615
616
|
if (route.method === "POST" || route.method === "PUT" || route.method === "PATCH") {
|
|
616
617
|
const contentType = request.header("content-type") || "";
|
|
617
618
|
if (contentType.includes("multipart/form-data")) {
|
|
@@ -623,16 +624,26 @@ var MastraServer = class extends MastraServer$1 {
|
|
|
623
624
|
if (error instanceof Error && error.message.toLowerCase().includes("size")) {
|
|
624
625
|
throw error;
|
|
625
626
|
}
|
|
627
|
+
bodyParseError = {
|
|
628
|
+
message: error instanceof Error ? error.message : "Failed to parse multipart form data"
|
|
629
|
+
};
|
|
626
630
|
}
|
|
627
|
-
} else {
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
631
|
+
} else if (contentType.includes("application/json")) {
|
|
632
|
+
const clonedReq = request.raw.clone();
|
|
633
|
+
const bodyText = await clonedReq.text();
|
|
634
|
+
if (bodyText && bodyText.trim().length > 0) {
|
|
635
|
+
try {
|
|
636
|
+
body = JSON.parse(bodyText);
|
|
637
|
+
} catch (error) {
|
|
638
|
+
console.error("Failed to parse JSON body:", error);
|
|
639
|
+
bodyParseError = {
|
|
640
|
+
message: error instanceof Error ? error.message : "Invalid JSON in request body"
|
|
641
|
+
};
|
|
642
|
+
}
|
|
632
643
|
}
|
|
633
644
|
}
|
|
634
645
|
}
|
|
635
|
-
return { urlParams, queryParams, body };
|
|
646
|
+
return { urlParams, queryParams, body, bodyParseError };
|
|
636
647
|
}
|
|
637
648
|
/**
|
|
638
649
|
* Parse FormData into a plain object, converting File objects to Buffers.
|
|
@@ -655,7 +666,8 @@ var MastraServer = class extends MastraServer$1 {
|
|
|
655
666
|
}
|
|
656
667
|
return result;
|
|
657
668
|
}
|
|
658
|
-
async sendResponse(route, response, result) {
|
|
669
|
+
async sendResponse(route, response, result, prefix) {
|
|
670
|
+
const resolvedPrefix = prefix ?? this.prefix ?? "";
|
|
659
671
|
if (route.responseType === "json") {
|
|
660
672
|
return response.json(result, 200);
|
|
661
673
|
} else if (route.responseType === "stream") {
|
|
@@ -664,14 +676,16 @@ var MastraServer = class extends MastraServer$1 {
|
|
|
664
676
|
const fetchResponse = result;
|
|
665
677
|
return fetchResponse;
|
|
666
678
|
} else if (route.responseType === "mcp-http") {
|
|
667
|
-
const { server, httpPath } = result;
|
|
679
|
+
const { server, httpPath, mcpOptions: routeMcpOptions } = result;
|
|
668
680
|
const { req, res } = toReqRes(response.req.raw);
|
|
669
681
|
try {
|
|
682
|
+
const options = { ...this.mcpOptions, ...routeMcpOptions };
|
|
670
683
|
await server.startHTTP({
|
|
671
684
|
url: new URL(response.req.url),
|
|
672
|
-
httpPath
|
|
685
|
+
httpPath: `${resolvedPrefix}${httpPath}`,
|
|
673
686
|
req,
|
|
674
|
-
res
|
|
687
|
+
res,
|
|
688
|
+
options: Object.keys(options).length > 0 ? options : void 0
|
|
675
689
|
});
|
|
676
690
|
return await toFetchResponse(res);
|
|
677
691
|
} catch {
|
|
@@ -693,8 +707,8 @@ var MastraServer = class extends MastraServer$1 {
|
|
|
693
707
|
try {
|
|
694
708
|
return await server.startHonoSSE({
|
|
695
709
|
url: new URL(response.req.url),
|
|
696
|
-
ssePath
|
|
697
|
-
messagePath
|
|
710
|
+
ssePath: `${resolvedPrefix}${ssePath}`,
|
|
711
|
+
messagePath: `${resolvedPrefix}${messagePath}`,
|
|
698
712
|
context: response
|
|
699
713
|
});
|
|
700
714
|
} catch {
|
|
@@ -704,7 +718,8 @@ var MastraServer = class extends MastraServer$1 {
|
|
|
704
718
|
return response.status(500);
|
|
705
719
|
}
|
|
706
720
|
}
|
|
707
|
-
async registerRoute(app, route, { prefix }) {
|
|
721
|
+
async registerRoute(app, route, { prefix: prefixParam } = {}) {
|
|
722
|
+
const prefix = prefixParam ?? this.prefix ?? "";
|
|
708
723
|
const shouldApplyBodyLimit = this.bodyLimitOptions && ["POST", "PUT", "PATCH"].includes(route.method.toUpperCase());
|
|
709
724
|
const maxSize = route.maxBodySize ?? this.bodyLimitOptions?.maxSize;
|
|
710
725
|
const middlewares = [];
|
|
@@ -720,7 +735,26 @@ var MastraServer = class extends MastraServer$1 {
|
|
|
720
735
|
`${prefix}${route.path}`,
|
|
721
736
|
...middlewares,
|
|
722
737
|
async (c) => {
|
|
738
|
+
const authError = await this.checkRouteAuth(route, {
|
|
739
|
+
path: c.req.path,
|
|
740
|
+
method: c.req.method,
|
|
741
|
+
getHeader: (name) => c.req.header(name),
|
|
742
|
+
getQuery: (name) => c.req.query(name),
|
|
743
|
+
requestContext: c.get("requestContext")
|
|
744
|
+
});
|
|
745
|
+
if (authError) {
|
|
746
|
+
return c.json({ error: authError.error }, authError.status);
|
|
747
|
+
}
|
|
723
748
|
const params = await this.getParams(route, c.req);
|
|
749
|
+
if (params.bodyParseError) {
|
|
750
|
+
return c.json(
|
|
751
|
+
{
|
|
752
|
+
error: "Invalid request body",
|
|
753
|
+
issues: [{ field: "body", message: params.bodyParseError.message }]
|
|
754
|
+
},
|
|
755
|
+
400
|
|
756
|
+
);
|
|
757
|
+
}
|
|
724
758
|
if (params.queryParams) {
|
|
725
759
|
try {
|
|
726
760
|
params.queryParams = await this.parseQueryParams(route, params.queryParams);
|
|
@@ -761,13 +795,14 @@ var MastraServer = class extends MastraServer$1 {
|
|
|
761
795
|
...typeof params.body === "object" ? params.body : {},
|
|
762
796
|
requestContext: c.get("requestContext"),
|
|
763
797
|
mastra: this.mastra,
|
|
764
|
-
|
|
798
|
+
registeredTools: c.get("registeredTools"),
|
|
765
799
|
taskStore: c.get("taskStore"),
|
|
766
|
-
abortSignal: c.get("abortSignal")
|
|
800
|
+
abortSignal: c.get("abortSignal"),
|
|
801
|
+
routePrefix: prefix
|
|
767
802
|
};
|
|
768
803
|
try {
|
|
769
804
|
const result = await route.handler(handlerParams);
|
|
770
|
-
return this.sendResponse(route, c, result);
|
|
805
|
+
return this.sendResponse(route, c, result, prefix);
|
|
771
806
|
} catch (error) {
|
|
772
807
|
console.error("Error calling handler", error);
|
|
773
808
|
if (error && typeof error === "object") {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/http-exception.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/middleware/body-limit/index.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/utils/stream.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/helper/streaming/utils.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/helper/streaming/stream.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js","../src/auth-middleware.ts","../src/index.ts"],"names":["util","objectUtil","MastraServerBase","stream"],"mappings":"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","file":"index.js","sourcesContent":["// src/http-exception.ts\nvar HTTPException = class extends Error {\n res;\n status;\n /**\n * Creates an instance of `HTTPException`.\n * @param status - HTTP status code for the exception. Defaults to 500.\n * @param options - Additional options for the exception.\n */\n constructor(status = 500, options) {\n super(options?.message, { cause: options?.cause });\n this.res = options?.res;\n this.status = status;\n }\n /**\n * Returns the response object associated with the exception.\n * If a response object is not provided, a new response is created with the error message and status code.\n * @returns The response object.\n */\n getResponse() {\n if (this.res) {\n const newResponse = new Response(this.res.body, {\n status: this.status,\n headers: this.res.headers\n });\n return newResponse;\n }\n return new Response(this.message, {\n status: this.status\n });\n }\n};\nexport {\n HTTPException\n};\n","// src/middleware/body-limit/index.ts\nimport { HTTPException } from \"../../http-exception.js\";\nvar ERROR_MESSAGE = \"Payload Too Large\";\nvar BodyLimitError = class extends Error {\n constructor(message) {\n super(message);\n this.name = \"BodyLimitError\";\n }\n};\nvar bodyLimit = (options) => {\n const onError = options.onError || (() => {\n const res = new Response(ERROR_MESSAGE, {\n status: 413\n });\n throw new HTTPException(413, { res });\n });\n const maxSize = options.maxSize;\n return async function bodyLimit2(c, next) {\n if (!c.req.raw.body) {\n return next();\n }\n const hasTransferEncoding = c.req.raw.headers.has(\"transfer-encoding\");\n const hasContentLength = c.req.raw.headers.has(\"content-length\");\n if (hasTransferEncoding && hasContentLength) {\n }\n if (hasContentLength && !hasTransferEncoding) {\n const contentLength = parseInt(c.req.raw.headers.get(\"content-length\") || \"0\", 10);\n return contentLength > maxSize ? onError(c) : next();\n }\n let size = 0;\n const rawReader = c.req.raw.body.getReader();\n const reader = new ReadableStream({\n async start(controller) {\n try {\n for (; ; ) {\n const { done, value } = await rawReader.read();\n if (done) {\n break;\n }\n size += value.length;\n if (size > maxSize) {\n controller.error(new BodyLimitError(ERROR_MESSAGE));\n break;\n }\n controller.enqueue(value);\n }\n } finally {\n controller.close();\n }\n }\n });\n const requestInit = { body: reader, duplex: \"half\" };\n c.req.raw = new Request(c.req.raw, requestInit);\n await next();\n if (c.error instanceof BodyLimitError) {\n c.res = await onError(c);\n }\n };\n};\nexport {\n bodyLimit\n};\n","// src/utils/stream.ts\nvar StreamingApi = class {\n writer;\n encoder;\n writable;\n abortSubscribers = [];\n responseReadable;\n /**\n * Whether the stream has been aborted.\n */\n aborted = false;\n /**\n * Whether the stream has been closed normally.\n */\n closed = false;\n constructor(writable, _readable) {\n this.writable = writable;\n this.writer = writable.getWriter();\n this.encoder = new TextEncoder();\n const reader = _readable.getReader();\n this.abortSubscribers.push(async () => {\n await reader.cancel();\n });\n this.responseReadable = new ReadableStream({\n async pull(controller) {\n const { done, value } = await reader.read();\n done ? controller.close() : controller.enqueue(value);\n },\n cancel: () => {\n this.abort();\n }\n });\n }\n async write(input) {\n try {\n if (typeof input === \"string\") {\n input = this.encoder.encode(input);\n }\n await this.writer.write(input);\n } catch {\n }\n return this;\n }\n async writeln(input) {\n await this.write(input + \"\\n\");\n return this;\n }\n sleep(ms) {\n return new Promise((res) => setTimeout(res, ms));\n }\n async close() {\n try {\n await this.writer.close();\n } catch {\n }\n this.closed = true;\n }\n async pipe(body) {\n this.writer.releaseLock();\n await body.pipeTo(this.writable, { preventClose: true });\n this.writer = this.writable.getWriter();\n }\n onAbort(listener) {\n this.abortSubscribers.push(listener);\n }\n /**\n * Abort the stream.\n * You can call this method when stream is aborted by external event.\n */\n abort() {\n if (!this.aborted) {\n this.aborted = true;\n this.abortSubscribers.forEach((subscriber) => subscriber());\n }\n }\n};\nexport {\n StreamingApi\n};\n","// src/helper/streaming/utils.ts\nvar isOldBunVersion = () => {\n const version = typeof Bun !== \"undefined\" ? Bun.version : void 0;\n if (version === void 0) {\n return false;\n }\n const result = version.startsWith(\"1.1\") || version.startsWith(\"1.0\") || version.startsWith(\"0.\");\n isOldBunVersion = () => result;\n return result;\n};\nexport {\n isOldBunVersion\n};\n","// src/helper/streaming/stream.ts\nimport { StreamingApi } from \"../../utils/stream.js\";\nimport { isOldBunVersion } from \"./utils.js\";\nvar contextStash = /* @__PURE__ */ new WeakMap();\nvar stream = (c, cb, onError) => {\n const { readable, writable } = new TransformStream();\n const stream2 = new StreamingApi(writable, readable);\n if (isOldBunVersion()) {\n c.req.raw.signal.addEventListener(\"abort\", () => {\n if (!stream2.closed) {\n stream2.abort();\n }\n });\n }\n contextStash.set(stream2.responseReadable, c);\n (async () => {\n try {\n await cb(stream2);\n } catch (e) {\n if (e === void 0) {\n } else if (e instanceof Error && onError) {\n await onError(e, stream2);\n } else {\n console.error(e);\n }\n } finally {\n stream2.close();\n }\n })();\n return c.newResponse(stream2.responseReadable);\n};\nexport {\n stream\n};\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import type { ContextWithMastra } from '@mastra/core/server';\nimport {\n canAccessPublicly,\n checkRules,\n defaultAuthConfig,\n isDevPlaygroundRequest,\n isProtectedPath,\n} from '@mastra/server/auth';\nimport type { Next } from 'hono';\n\nexport const authenticationMiddleware = async (c: ContextWithMastra, next: Next) => {\n const mastra = c.get('mastra');\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = c.get('customRouteAuthConfig');\n\n if (!authConfig) {\n // No auth config, skip authentication\n return next();\n }\n\n const path = c.req.path;\n const method = c.req.method;\n const getHeader = (name: string) => c.req.header(name);\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig)) {\n // Skip authentication for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(c.req.path, c.req.method, authConfig, customRouteAuthConfig)) {\n return next();\n }\n\n // Skip authentication for public routes\n if (canAccessPublicly(c.req.path, c.req.method, authConfig)) {\n return next();\n }\n\n // Get token from header or query\n const authHeader = c.req.header('Authorization');\n let token: string | null = authHeader ? authHeader.replace('Bearer ', '') : null;\n\n if (!token && c.req.query('apiKey')) {\n token = c.req.query('apiKey') || null;\n }\n\n // Handle missing token\n if (!token) {\n return c.json({ error: 'Authentication required' }, 401);\n }\n\n try {\n // Verify token and get user data\n let user: unknown;\n\n // Client provided verify function\n if (typeof authConfig.authenticateToken === 'function') {\n user = await authConfig.authenticateToken(token, c.req);\n } else {\n throw new Error('No token verification method configured');\n }\n\n if (!user) {\n return c.json({ error: 'Invalid or expired token' }, 401);\n }\n\n // Store user in context\n c.get('requestContext').set('user', user);\n\n return next();\n } catch (err) {\n console.error(err);\n return c.json({ error: 'Invalid or expired token' }, 401);\n }\n};\n\nexport const authorizationMiddleware = async (c: ContextWithMastra, next: Next) => {\n const mastra = c.get('mastra');\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = c.get('customRouteAuthConfig');\n\n if (!authConfig) {\n // No auth config, skip authorization\n return next();\n }\n\n const path = c.req.path;\n const method = c.req.method;\n const getHeader = (name: string) => c.req.header(name);\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig)) {\n // Skip authorization for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(c.req.path, c.req.method, authConfig, customRouteAuthConfig)) {\n return next();\n }\n\n // Skip for public routes\n if (canAccessPublicly(path, method, authConfig)) {\n return next();\n }\n\n const user = c.get('requestContext').get('user');\n\n if ('authorizeUser' in authConfig && typeof authConfig.authorizeUser === 'function') {\n try {\n const isAuthorized = await authConfig.authorizeUser(user, c.req);\n\n if (isAuthorized) {\n return next();\n }\n\n return c.json({ error: 'Access denied' }, 403);\n } catch (err) {\n console.error(err);\n return c.json({ error: 'Authorization error' }, 500);\n }\n }\n\n // Client-provided authorization function\n if ('authorize' in authConfig && typeof authConfig.authorize === 'function') {\n try {\n const isAuthorized = await authConfig.authorize(path, method, user, c);\n\n if (isAuthorized) {\n return next();\n }\n\n return c.json({ error: 'Access denied' }, 403);\n } catch (err) {\n console.error(err);\n return c.json({ error: 'Authorization error' }, 500);\n }\n }\n\n // Custom rule-based authorization\n if ('rules' in authConfig && authConfig.rules && authConfig.rules.length > 0) {\n const isAuthorized = await checkRules(authConfig.rules, path, method, user);\n\n if (isAuthorized) {\n return next();\n }\n\n return c.json({ error: 'Access denied' }, 403);\n }\n\n // Default rule-based authorization\n if (defaultAuthConfig.rules && defaultAuthConfig.rules.length > 0) {\n const isAuthorized = await checkRules(defaultAuthConfig.rules, path, method, user);\n\n if (isAuthorized) {\n return next();\n }\n }\n\n return c.json({ error: 'Access denied' }, 403);\n};\n","import type { ToolsInput } from '@mastra/core/agent';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { InMemoryTaskStore } from '@mastra/server/a2a/store';\nimport { formatZodError } from '@mastra/server/handlers/error';\nimport type { MCPHttpTransportResult, MCPSseTransportResult } from '@mastra/server/handlers/mcp';\nimport type { ParsedRequestParams, ServerRoute } from '@mastra/server/server-adapter';\nimport {\n MastraServer as MastraServerBase,\n normalizeQueryParams,\n redactStreamChunk,\n} from '@mastra/server/server-adapter';\nimport { toReqRes, toFetchResponse } from 'fetch-to-node';\nimport type { Context, HonoRequest, MiddlewareHandler } from 'hono';\nimport { bodyLimit } from 'hono/body-limit';\nimport { stream } from 'hono/streaming';\nimport { ZodError } from 'zod';\n\nimport { authenticationMiddleware, authorizationMiddleware } from './auth-middleware';\n\n// Export type definitions for Hono app configuration\nexport type HonoVariables = {\n mastra: Mastra;\n requestContext: RequestContext;\n tools: ToolsInput;\n abortSignal: AbortSignal;\n taskStore: InMemoryTaskStore;\n customRouteAuthConfig?: Map<string, boolean>;\n};\n\nexport type HonoBindings = {};\n\n/**\n * Generic handler function type compatible across Hono versions.\n * Uses a minimal signature that all Hono middleware handlers satisfy.\n */\ntype HonoRouteHandler = (...args: any[]) => any;\n\n/**\n * Minimal interface representing what MastraServer needs from a Hono app.\n * This allows any Hono app instance to be passed without strict generic matching,\n * avoiding the version mismatch issues that occur with Hono's strict generic types.\n */\nexport interface HonoApp {\n use(path: string, ...handlers: HonoRouteHandler[]): unknown;\n get(path: string, ...handlers: HonoRouteHandler[]): unknown;\n post(path: string, ...handlers: HonoRouteHandler[]): unknown;\n put(path: string, ...handlers: HonoRouteHandler[]): unknown;\n delete(path: string, ...handlers: HonoRouteHandler[]): unknown;\n patch(path: string, ...handlers: HonoRouteHandler[]): unknown;\n all(path: string, ...handlers: HonoRouteHandler[]): unknown;\n}\n\nexport class MastraServer extends MastraServerBase<HonoApp, HonoRequest, Context> {\n createContextMiddleware(): MiddlewareHandler {\n return async (c, next) => {\n // Parse request context from request body and add to context\n\n let bodyRequestContext: Record<string, any> | undefined;\n let paramsRequestContext: Record<string, any> | undefined;\n\n // Parse request context from request body (POST/PUT)\n if (c.req.method === 'POST' || c.req.method === 'PUT') {\n const contentType = c.req.header('content-type');\n if (contentType?.includes('application/json')) {\n try {\n const clonedReq = c.req.raw.clone();\n const body = (await clonedReq.json()) as { requestContext?: Record<string, any> };\n if (body.requestContext) {\n bodyRequestContext = body.requestContext;\n }\n } catch {\n // Body parsing failed, continue without body\n }\n }\n }\n\n // Parse request context from query params (GET)\n if (c.req.method === 'GET') {\n try {\n const encodedRequestContext = c.req.query('requestContext');\n if (encodedRequestContext) {\n // Try JSON first\n try {\n paramsRequestContext = JSON.parse(encodedRequestContext);\n } catch {\n // Fallback to base64(JSON)\n try {\n const json = Buffer.from(encodedRequestContext, 'base64').toString('utf-8');\n paramsRequestContext = JSON.parse(json);\n } catch {\n // ignore if still invalid\n }\n }\n }\n } catch {\n // ignore query parsing errors\n }\n }\n\n const requestContext = this.mergeRequestContext({ paramsRequestContext, bodyRequestContext });\n\n // Add relevant contexts to hono context\n c.set('requestContext', requestContext);\n c.set('mastra', this.mastra);\n c.set('tools', this.tools || {});\n c.set('taskStore', this.taskStore);\n c.set('abortSignal', c.req.raw.signal);\n c.set('customRouteAuthConfig', this.customRouteAuthConfig);\n\n return next();\n };\n }\n async stream(route: ServerRoute, res: Context, result: { fullStream: ReadableStream }): Promise<any> {\n res.header('Content-Type', 'text/plain');\n res.header('Transfer-Encoding', 'chunked');\n\n const streamFormat = route.streamFormat || 'stream';\n\n return stream(\n res,\n async stream => {\n const readableStream = result instanceof ReadableStream ? result : result.fullStream;\n const reader = readableStream.getReader();\n\n stream.onAbort(() => {\n void reader.cancel('request aborted');\n });\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n if (value) {\n // Optionally redact sensitive data (system prompts, tool definitions, API keys) before sending to the client\n const shouldRedact = this.streamOptions?.redact ?? true;\n const outputValue = shouldRedact ? redactStreamChunk(value) : value;\n if (streamFormat === 'sse') {\n await stream.write(`data: ${JSON.stringify(outputValue)}\\n\\n`);\n } else {\n await stream.write(JSON.stringify(outputValue) + '\\x1E');\n }\n }\n }\n\n await stream.write('data: [DONE]\\n\\n');\n } catch (error) {\n console.error(error);\n } finally {\n await stream.close();\n }\n },\n async err => {\n console.error(err);\n },\n );\n }\n\n async getParams(route: ServerRoute, request: HonoRequest): Promise<ParsedRequestParams> {\n const urlParams = request.param();\n // Use queries() to get all values for repeated params (e.g., ?tags=a&tags=b -> { tags: ['a', 'b'] })\n const queryParams = normalizeQueryParams(request.queries());\n let body: unknown;\n if (route.method === 'POST' || route.method === 'PUT' || route.method === 'PATCH') {\n const contentType = request.header('content-type') || '';\n\n if (contentType.includes('multipart/form-data')) {\n try {\n const formData = await request.formData();\n body = await this.parseFormData(formData);\n } catch (error) {\n console.error('Failed to parse multipart form data:', error);\n // Re-throw size limit errors, let others fall through to validation\n if (error instanceof Error && error.message.toLowerCase().includes('size')) {\n throw error;\n }\n }\n } else {\n try {\n body = await request.json();\n } catch (error) {\n console.error('Failed to parse JSON body:', error);\n }\n }\n }\n return { urlParams, queryParams, body };\n }\n\n /**\n * Parse FormData into a plain object, converting File objects to Buffers.\n */\n private async parseFormData(formData: FormData): Promise<Record<string, unknown>> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of formData.entries()) {\n if (value instanceof File) {\n const arrayBuffer = await value.arrayBuffer();\n result[key] = Buffer.from(arrayBuffer);\n } else if (typeof value === 'string') {\n // Try to parse JSON strings (like 'options')\n try {\n result[key] = JSON.parse(value);\n } catch {\n result[key] = value;\n }\n } else {\n result[key] = value;\n }\n }\n\n return result;\n }\n\n async sendResponse(route: ServerRoute, response: Context, result: unknown): Promise<any> {\n if (route.responseType === 'json') {\n return response.json(result as any, 200);\n } else if (route.responseType === 'stream') {\n return this.stream(route, response, result as { fullStream: ReadableStream });\n } else if (route.responseType === 'datastream-response') {\n const fetchResponse = result as globalThis.Response;\n return fetchResponse;\n } else if (route.responseType === 'mcp-http') {\n // MCP Streamable HTTP transport\n const { server, httpPath } = result as MCPHttpTransportResult;\n const { req, res } = toReqRes(response.req.raw);\n\n try {\n await server.startHTTP({\n url: new URL(response.req.url),\n httpPath,\n req,\n res,\n });\n return await toFetchResponse(res);\n } catch {\n if (!res.headersSent) {\n res.writeHead(500, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n jsonrpc: '2.0',\n error: { code: -32603, message: 'Internal server error' },\n id: null,\n }),\n );\n return await toFetchResponse(res);\n }\n return await toFetchResponse(res);\n }\n } else if (route.responseType === 'mcp-sse') {\n // MCP SSE transport\n const { server, ssePath, messagePath } = result as MCPSseTransportResult;\n\n try {\n return await server.startHonoSSE({\n url: new URL(response.req.url),\n ssePath,\n messagePath,\n context: response,\n });\n } catch {\n return response.json({ error: 'Error handling MCP SSE request' }, 500);\n }\n } else {\n return response.status(500);\n }\n }\n\n async registerRoute(app: HonoApp, route: ServerRoute, { prefix }: { prefix?: string }): Promise<void> {\n // Determine if body limits should be applied\n const shouldApplyBodyLimit = this.bodyLimitOptions && ['POST', 'PUT', 'PATCH'].includes(route.method.toUpperCase());\n\n // Get the body size limit for this route (route-specific or default)\n const maxSize = route.maxBodySize ?? this.bodyLimitOptions?.maxSize;\n\n // Build middleware array\n const middlewares: MiddlewareHandler[] = [];\n\n if (shouldApplyBodyLimit && maxSize && this.bodyLimitOptions) {\n middlewares.push(\n bodyLimit({\n maxSize,\n onError: this.bodyLimitOptions.onError as any,\n }),\n );\n }\n\n app[route.method.toLowerCase() as 'get' | 'post' | 'put' | 'delete' | 'patch' | 'all'](\n `${prefix}${route.path}`,\n ...middlewares,\n async (c: Context) => {\n const params = await this.getParams(route, c.req);\n\n if (params.queryParams) {\n try {\n params.queryParams = await this.parseQueryParams(route, params.queryParams);\n } catch (error) {\n console.error('Error parsing query params', error);\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n return c.json(formatZodError(error, 'query parameters'), 400);\n }\n return c.json(\n {\n error: 'Invalid query parameters',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n },\n 400,\n );\n }\n }\n\n if (params.body) {\n try {\n params.body = await this.parseBody(route, params.body);\n } catch (error) {\n console.error('Error parsing body:', error instanceof Error ? error.message : String(error));\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n return c.json(formatZodError(error, 'request body'), 400);\n }\n return c.json(\n {\n error: 'Invalid request body',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n },\n 400,\n );\n }\n }\n\n const handlerParams = {\n ...params.urlParams,\n ...params.queryParams,\n ...(typeof params.body === 'object' ? params.body : {}),\n requestContext: c.get('requestContext'),\n mastra: this.mastra,\n tools: c.get('tools'),\n taskStore: c.get('taskStore'),\n abortSignal: c.get('abortSignal'),\n };\n\n try {\n const result = await route.handler(handlerParams);\n return this.sendResponse(route, c, result);\n } catch (error) {\n console.error('Error calling handler', error);\n // Check if it's an HTTPException or MastraError with a status code\n if (error && typeof error === 'object') {\n // Check for direct status property (HTTPException)\n if ('status' in error) {\n const status = (error as any).status;\n return c.json({ error: error instanceof Error ? error.message : 'Unknown error' }, status);\n }\n // Check for MastraError with status in details\n if ('details' in error && error.details && typeof error.details === 'object' && 'status' in error.details) {\n const status = (error.details as any).status;\n return c.json({ error: error instanceof Error ? error.message : 'Unknown error' }, status);\n }\n }\n return c.json({ error: error instanceof Error ? error.message : 'Unknown error' }, 500);\n }\n },\n );\n }\n\n registerContextMiddleware(): void {\n this.app.use('*', this.createContextMiddleware());\n }\n\n registerAuthMiddleware(): void {\n const authConfig = this.mastra.getServer()?.auth;\n if (!authConfig) {\n // No auth config, skip registration\n return;\n }\n\n this.app.use('*', authenticationMiddleware);\n this.app.use('*', authorizationMiddleware);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/http-exception.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/middleware/body-limit/index.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/utils/stream.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/helper/streaming/utils.js","../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/helper/streaming/stream.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js","../src/auth-middleware.ts","../src/index.ts"],"names":["util","objectUtil","MastraServerBase","stream"],"mappings":";;;;;;;;AACA,IAAI,aAAA,GAAgB,cAAc,KAAA,CAAM;AAAA,EACtC,GAAA;AAAA,EACA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAA,CAAY,MAAA,GAAS,GAAA,EAAK,OAAA,EAAS;AACjC,IAAA,KAAA,CAAM,SAAS,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,EAAS,OAAO,CAAA;AACjD,IAAA,IAAA,CAAK,MAAM,OAAA,EAAS,GAAA;AACpB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAA,GAAc;AACZ,IAAA,IAAI,KAAK,GAAA,EAAK;AACZ,MAAA,MAAM,WAAA,GAAc,IAAI,QAAA,CAAS,IAAA,CAAK,IAAI,IAAA,EAAM;AAAA,QAC9C,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,OAAA,EAAS,KAAK,GAAA,CAAI;AAAA,OACnB,CAAA;AACD,MAAA,OAAO,WAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,OAAA,EAAS;AAAA,MAChC,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AACF,CAAA;;;AC7BA,IAAI,aAAA,GAAgB,mBAAA;AACpB,IAAI,cAAA,GAAiB,cAAc,KAAA,CAAM;AAAA,EACvC,YAAY,OAAA,EAAS;AACnB,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AAAA,EACd;AACF,CAAA;AACA,IAAI,SAAA,GAAY,CAAC,OAAA,KAAY;AAC3B,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,KAAY,MAAM;AACxC,IAAA,MAAM,GAAA,GAAM,IAAI,QAAA,CAAS,aAAA,EAAe;AAAA,MACtC,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,KAAK,CAAA;AAAA,EACtC,CAAA,CAAA;AACA,EAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,EAAA,OAAO,eAAe,UAAA,CAAW,CAAA,EAAG,IAAA,EAAM;AACxC,IAAA,IAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM;AACnB,MAAA,OAAO,IAAA,EAAK;AAAA,IACd;AACA,IAAA,MAAM,sBAAsB,CAAA,CAAE,GAAA,CAAI,GAAA,CAAI,OAAA,CAAQ,IAAI,mBAAmB,CAAA;AACrE,IAAA,MAAM,mBAAmB,CAAA,CAAE,GAAA,CAAI,GAAA,CAAI,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAG/D,IAAA,IAAI,gBAAA,IAAoB,CAAC,mBAAA,EAAqB;AAC5C,MAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,CAAA,CAAE,GAAA,CAAI,GAAA,CAAI,QAAQ,GAAA,CAAI,gBAAgB,CAAA,IAAK,GAAA,EAAK,EAAE,CAAA;AACjF,MAAA,OAAO,aAAA,GAAgB,OAAA,GAAU,OAAA,CAAQ,CAAC,IAAI,IAAA,EAAK;AAAA,IACrD;AACA,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,MAAM,SAAA,GAAY,CAAA,CAAE,GAAA,CAAI,GAAA,CAAI,KAAK,SAAA,EAAU;AAC3C,IAAA,MAAM,MAAA,GAAS,IAAI,cAAA,CAAe;AAAA,MAChC,MAAM,MAAM,UAAA,EAAY;AACtB,QAAA,IAAI;AACF,UAAA,WAAW;AACT,YAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,UAAU,IAAA,EAAK;AAC7C,YAAA,IAAI,IAAA,EAAM;AACR,cAAA;AAAA,YACF;AACA,YAAA,IAAA,IAAQ,KAAA,CAAM,MAAA;AACd,YAAA,IAAI,OAAO,OAAA,EAAS;AAClB,cAAA,UAAA,CAAW,KAAA,CAAM,IAAI,cAAA,CAAe,aAAa,CAAC,CAAA;AAClD,cAAA;AAAA,YACF;AACA,YAAA,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,UAC1B;AAAA,QACF,CAAA,SAAE;AACA,UAAA,UAAA,CAAW,KAAA,EAAM;AAAA,QACnB;AAAA,MACF;AAAA,KACD,CAAA;AACD,IAAA,MAAM,WAAA,GAAc,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAQ,MAAA,EAAO;AACnD,IAAA,CAAA,CAAE,IAAI,GAAA,GAAM,IAAI,QAAQ,CAAA,CAAE,GAAA,CAAI,KAAK,WAAW,CAAA;AAC9C,IAAA,MAAM,IAAA,EAAK;AACX,IAAA,IAAI,CAAA,CAAE,iBAAiB,cAAA,EAAgB;AACrC,MAAA,CAAA,CAAE,GAAA,GAAM,MAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IACzB;AAAA,EACF,CAAA;AACF,CAAA;;;ACzDA,IAAI,eAAe,MAAM;AAAA,EACvB,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAmB,EAAC;AAAA,EACpB,gBAAA;AAAA;AAAA;AAAA;AAAA,EAIA,OAAA,GAAU,KAAA;AAAA;AAAA;AAAA;AAAA,EAIV,MAAA,GAAS,KAAA;AAAA,EACT,WAAA,CAAY,UAAU,SAAA,EAAW;AAC/B,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,SAAS,SAAA,EAAU;AACjC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,WAAA,EAAY;AAC/B,IAAA,MAAM,MAAA,GAAS,UAAU,SAAA,EAAU;AACnC,IAAA,IAAA,CAAK,gBAAA,CAAiB,KAAK,YAAY;AACrC,MAAA,MAAM,OAAO,MAAA,EAAO;AAAA,IACtB,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,cAAA,CAAe;AAAA,MACzC,MAAM,KAAK,UAAA,EAAY;AACrB,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,IAAA,GAAO,UAAA,CAAW,KAAA,EAAM,GAAI,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,MACtD,CAAA;AAAA,MACA,QAAQ,MAAM;AACZ,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACb;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EACA,MAAM,MAAM,KAAA,EAAO;AACjB,IAAA,IAAI;AACF,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AAAA,MACnC;AACA,MAAA,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAAA,IAC/B,CAAA,CAAA,MAAQ;AAAA,IACR;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EACA,MAAM,QAAQ,KAAA,EAAO;AACnB,IAAA,MAAM,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,IAAI,CAAA;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EACA,MAAM,EAAA,EAAI;AACR,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,QAAQ,UAAA,CAAW,GAAA,EAAK,EAAE,CAAC,CAAA;AAAA,EACjD;AAAA,EACA,MAAM,KAAA,GAAQ;AACZ,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,IAC1B,CAAA,CAAA,MAAQ;AAAA,IACR;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,EAChB;AAAA,EACA,MAAM,KAAK,IAAA,EAAM;AACf,IAAA,IAAA,CAAK,OAAO,WAAA,EAAY;AACxB,IAAA,MAAM,KAAK,MAAA,CAAO,IAAA,CAAK,UAAU,EAAE,YAAA,EAAc,MAAM,CAAA;AACvD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,SAAA,EAAU;AAAA,EACxC;AAAA,EACA,QAAQ,QAAA,EAAU;AAChB,IAAA,IAAA,CAAK,gBAAA,CAAiB,KAAK,QAAQ,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAQ;AACN,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,MAAA,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,CAAC,UAAA,KAAe,YAAY,CAAA;AAAA,IAC5D;AAAA,EACF;AACF,CAAA;;;AC1EA,IAAI,kBAAkB,MAAM;AAC1B,EAAA,MAAM,OAAA,GAAU,OAAO,GAAA,KAAQ,WAAA,GAAc,IAAI,OAAA,GAAU,MAAA;AAC3D,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,IAAK,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,IAAK,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA;AAChG,EAAA,eAAA,GAAkB,MAAM,MAAA;AACxB,EAAA,OAAO,MAAA;AACT,CAAA;;;ACNA,IAAI,YAAA,uBAAmC,OAAA,EAAQ;AAC/C,IAAI,MAAA,GAAS,CAAC,CAAA,EAAG,EAAA,EAAI,OAAA,KAAY;AAC/B,EAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,IAAI,eAAA,EAAgB;AACnD,EAAA,MAAM,OAAA,GAAU,IAAI,YAAA,CAAa,QAAA,EAAU,QAAQ,CAAA;AACnD,EAAA,IAAI,iBAAgB,EAAG;AACrB,IAAA,CAAA,CAAE,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,gBAAA,CAAiB,SAAS,MAAM;AAC/C,MAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,QAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,MAChB;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACA,EAAA,YAAA,CAAa,GAAA,CAAI,OAAA,CAAQ,gBAAA,EAAkB,CAAC,CAAA;AAC5C,EAAA,CAAC,YAAY;AACX,IAAA,IAAI;AACF,MAAA,MAAM,GAAG,OAAO,CAAA;AAAA,IAClB,SAAS,CAAA,EAAG;AACV,MAAA,IAAI,MAAM,MAAA,EAAQ,CAClB,MAAA,IAAW,CAAA,YAAa,KAAA,IAAS,OAAA,EAAS;AACxC,QAAA,MAAM,OAAA,CAAQ,GAAG,OAAO,CAAA;AAAA,MAC1B,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,MACjB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,IAChB;AAAA,EACF,CAAA,GAAG;AACH,EAAA,OAAO,CAAA,CAAE,WAAA,CAAY,OAAA,CAAQ,gBAAgB,CAAA;AAC/C,CAAA;;;AC9BO,IAAI,IAAA;AAAA,CACV,SAAUA,KAAAA,EAAM;AACb,EAAAA,KAAAA,CAAK,WAAA,GAAc,CAAC,CAAA,KAAM;AAAA,EAAE,CAAA;AAC5B,EAAA,SAAS,SAAS,IAAA,EAAM;AAAA,EAAE;AAC1B,EAAAA,MAAK,QAAA,GAAW,QAAA;AAChB,EAAA,SAAS,YAAY,EAAA,EAAI;AACrB,IAAA,MAAM,IAAI,KAAA,EAAM;AAAA,EACpB;AACA,EAAAA,MAAK,WAAA,GAAc,WAAA;AACnB,EAAAA,KAAAA,CAAK,WAAA,GAAc,CAAC,KAAA,KAAU;AAC1B,IAAA,MAAM,MAAM,EAAC;AACb,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,MAAA,GAAA,CAAI,IAAI,CAAA,GAAI,IAAA;AAAA,IAChB;AACA,IAAA,OAAO,GAAA;AAAA,EACX,CAAA;AACA,EAAAA,KAAAA,CAAK,kBAAA,GAAqB,CAAC,GAAA,KAAQ;AAC/B,IAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,UAAA,CAAW,GAAG,EAAE,MAAA,CAAO,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,GAAA,CAAI,CAAC,CAAC,MAAM,QAAQ,CAAA;AACpF,IAAA,MAAM,WAAW,EAAC;AAClB,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACvB,MAAA,QAAA,CAAS,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA;AAAA,IACvB;AACA,IAAA,OAAOA,KAAAA,CAAK,aAAa,QAAQ,CAAA;AAAA,EACrC,CAAA;AACA,EAAAA,KAAAA,CAAK,YAAA,GAAe,CAAC,GAAA,KAAQ;AACzB,IAAA,OAAOA,MAAK,UAAA,CAAW,GAAG,CAAA,CAAE,GAAA,CAAI,SAAU,CAAA,EAAG;AACzC,MAAA,OAAO,IAAI,CAAC,CAAA;AAAA,IAChB,CAAC,CAAA;AAAA,EACL,CAAA;AACA,EAAAA,KAAAA,CAAK,UAAA,GAAa,OAAO,MAAA,CAAO,IAAA,KAAS,UAAA,GACnC,CAAC,GAAA,KAAQ,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,GACxB,CAAC,MAAA,KAAW;AACV,IAAA,MAAM,OAAO,EAAC;AACd,IAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACtB,MAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,GAAG,CAAA,EAAG;AACnD,QAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,MACjB;AAAA,IACJ;AACA,IAAA,OAAO,IAAA;AAAA,EACX,CAAA;AACJ,EAAAA,KAAAA,CAAK,IAAA,GAAO,CAAC,GAAA,EAAK,OAAA,KAAY;AAC1B,IAAA,KAAA,MAAW,QAAQ,GAAA,EAAK;AACpB,MAAA,IAAI,QAAQ,IAAI,CAAA;AACZ,QAAA,OAAO,IAAA;AAAA,IACf;AACA,IAAA,OAAO,MAAA;AAAA,EACX,CAAA;AACA,EAAAA,KAAAA,CAAK,SAAA,GAAY,OAAO,MAAA,CAAO,SAAA,KAAc,aACvC,CAAC,GAAA,KAAQ,MAAA,CAAO,SAAA,CAAU,GAAG,CAAA,GAC7B,CAAC,GAAA,KAAQ,OAAO,GAAA,KAAQ,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,KAAM,GAAA;AACtF,EAAA,SAAS,UAAA,CAAW,KAAA,EAAO,SAAA,GAAY,KAAA,EAAO;AAC1C,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,GAAA,KAAS,OAAO,GAAA,KAAQ,QAAA,GAAW,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAA,GAAM,GAAI,CAAA,CAAE,KAAK,SAAS,CAAA;AAAA,EAC1F;AACA,EAAAA,MAAK,UAAA,GAAa,UAAA;AAClB,EAAAA,KAAAA,CAAK,qBAAA,GAAwB,CAAC,CAAA,EAAG,KAAA,KAAU;AACvC,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,MAAM,QAAA,EAAS;AAAA,IAC1B;AACA,IAAA,OAAO,KAAA;AAAA,EACX,CAAA;AACJ,CAAA,EAAG,IAAA,KAAS,IAAA,GAAO,EAAC,CAAE,CAAA;AACf,IAAI,UAAA;AAAA,CACV,SAAUC,WAAAA,EAAY;AACnB,EAAAA,WAAAA,CAAW,WAAA,GAAc,CAAC,KAAA,EAAO,MAAA,KAAW;AACxC,IAAA,OAAO;AAAA,MACH,GAAG,KAAA;AAAA,MACH,GAAG;AAAA;AAAA,KACP;AAAA,EACJ,CAAA;AACJ,CAAA,EAAG,UAAA,KAAe,UAAA,GAAa,EAAC,CAAE,CAAA;AACL,KAAK,WAAA,CAAY;AAAA,EAC1C,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACJ,CAAC;;;AC1F2B,KAAK,WAAA,CAAY;AAAA,EACzC,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA;AAAA,EACA,6BAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,qBAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,4BAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACJ,CAAC;AAKM,IAAM,QAAA,GAAN,MAAM,SAAA,SAAiB,KAAA,CAAM;AAAA,EAChC,IAAI,MAAA,GAAS;AACT,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EAChB;AAAA,EACA,YAAY,MAAA,EAAQ;AAChB,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,SAAS,EAAC;AACf,IAAA,IAAA,CAAK,QAAA,GAAW,CAAC,GAAA,KAAQ;AACrB,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,GAAG,IAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,IACtC,CAAA;AACA,IAAA,IAAA,CAAK,SAAA,GAAY,CAAC,IAAA,GAAO,EAAC,KAAM;AAC5B,MAAA,IAAA,CAAK,SAAS,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,IAAI,CAAA;AAAA,IAC1C,CAAA;AACA,IAAA,MAAM,cAAc,GAAA,CAAA,MAAA,CAAW,SAAA;AAC/B,IAAA,IAAI,OAAO,cAAA,EAAgB;AAEvB,MAAA,MAAA,CAAO,cAAA,CAAe,MAAM,WAAW,CAAA;AAAA,IAC3C,CAAA,MACK;AACD,MAAA,IAAA,CAAK,SAAA,GAAY,WAAA;AAAA,IACrB;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAClB;AAAA,EACA,OAAO,OAAA,EAAS;AACZ,IAAA,MAAM,MAAA,GAAS,OAAA,IACX,SAAU,KAAA,EAAO;AACb,MAAA,OAAO,KAAA,CAAM,OAAA;AAAA,IACjB,CAAA;AACJ,IAAA,MAAM,WAAA,GAAc,EAAE,OAAA,EAAS,EAAC,EAAE;AAClC,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAU;AAC5B,MAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAC9B,QAAA,IAAI,KAAA,CAAM,SAAS,eAAA,EAAiB;AAChC,UAAA,KAAA,CAAM,WAAA,CAAY,IAAI,YAAY,CAAA;AAAA,QACtC,CAAA,MAAA,IACS,KAAA,CAAM,IAAA,KAAS,qBAAA,EAAuB;AAC3C,UAAA,YAAA,CAAa,MAAM,eAAe,CAAA;AAAA,QACtC,CAAA,MAAA,IACS,KAAA,CAAM,IAAA,KAAS,mBAAA,EAAqB;AACzC,UAAA,YAAA,CAAa,MAAM,cAAc,CAAA;AAAA,QACrC,CAAA,MAAA,IACS,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAC9B,UAAA,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAC1C,CAAA,MACK;AACD,UAAA,IAAI,IAAA,GAAO,WAAA;AACX,UAAA,IAAI,CAAA,GAAI,CAAA;AACR,UAAA,OAAO,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ;AAC1B,YAAA,MAAM,EAAA,GAAK,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AACvB,YAAA,MAAM,QAAA,GAAW,CAAA,KAAM,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAA;AAC3C,YAAA,IAAI,CAAC,QAAA,EAAU;AACX,cAAA,IAAA,CAAK,EAAE,IAAI,IAAA,CAAK,EAAE,KAAK,EAAE,OAAA,EAAS,EAAC,EAAE;AAAA,YAQzC,CAAA,MACK;AACD,cAAA,IAAA,CAAK,EAAE,IAAI,IAAA,CAAK,EAAE,KAAK,EAAE,OAAA,EAAS,EAAC,EAAE;AACrC,cAAA,IAAA,CAAK,EAAE,CAAA,CAAE,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,YACvC;AACA,YAAA,IAAA,GAAO,KAAK,EAAE,CAAA;AACd,YAAA,CAAA,EAAA;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAA;AACA,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,OAAO,WAAA;AAAA,EACX;AAAA,EACA,OAAO,OAAO,KAAA,EAAO;AACjB,IAAA,IAAI,EAAE,iBAAiB,SAAA,CAAA,EAAW;AAC9B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,KAAK,CAAA,CAAE,CAAA;AAAA,IAC9C;AAAA,EACJ;AAAA,EACA,QAAA,GAAW;AACP,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EAChB;AAAA,EACA,IAAI,OAAA,GAAU;AACV,IAAA,OAAO,KAAK,SAAA,CAAU,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,uBAAuB,CAAC,CAAA;AAAA,EACpE;AAAA,EACA,IAAI,OAAA,GAAU;AACV,IAAA,OAAO,IAAA,CAAK,OAAO,MAAA,KAAW,CAAA;AAAA,EAClC;AAAA,EACA,OAAA,CAAQ,MAAA,GAAS,CAAC,KAAA,KAAU,MAAM,OAAA,EAAS;AACvC,IAAA,MAAM,cAAc,EAAC;AACrB,IAAA,MAAM,aAAa,EAAC;AACpB,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,MAAA,EAAQ;AAC3B,MAAA,IAAI,GAAA,CAAI,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AACrB,QAAA,MAAM,OAAA,GAAU,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAC1B,QAAA,WAAA,CAAY,OAAO,CAAA,GAAI,WAAA,CAAY,OAAO,KAAK,EAAC;AAChD,QAAA,WAAA,CAAY,OAAO,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MACzC,CAAA,MACK;AACD,QAAA,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MAC/B;AAAA,IACJ;AACA,IAAA,OAAO,EAAE,YAAY,WAAA,EAAY;AAAA,EACrC;AAAA,EACA,IAAI,UAAA,GAAa;AACb,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACxB;AACJ,CAAA;AACA,QAAA,CAAS,MAAA,GAAS,CAAC,MAAA,KAAW;AAC1B,EAAA,MAAM,KAAA,GAAQ,IAAI,QAAA,CAAS,MAAM,CAAA;AACjC,EAAA,OAAO,KAAA;AACX,CAAA;AC1HO,IAAM,wBAAA,GAA2B,OAAO,CAAA,EAAsB,IAAA,KAAe;AAClF,EAAA,MAAM,MAAA,GAAS,CAAA,CAAE,GAAA,CAAI,QAAQ,CAAA;AAC7B,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,SAAA,EAAU,EAAG,IAAA;AACvC,EAAA,MAAM,qBAAA,GAAwB,CAAA,CAAE,GAAA,CAAI,uBAAuB,CAAA;AAE3D,EAAA,IAAI,CAAC,UAAA,EAAY;AAEf,IAAA,OAAO,IAAA,EAAK;AAAA,EACd;AAEA,EAAA,MAAM,IAAA,GAAO,EAAE,GAAA,CAAI,IAAA;AACnB,EAAA,MAAM,MAAA,GAAS,EAAE,GAAA,CAAI,MAAA;AACrB,EAAA,MAAM,YAAY,CAAC,IAAA,KAAiB,CAAA,CAAE,GAAA,CAAI,OAAO,IAAI,CAAA;AAErD,EAAA,IAAI,uBAAuB,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,UAAA,EAAY,qBAAqB,CAAA,EAAG;AAEtF,IAAA,OAAO,IAAA,EAAK;AAAA,EACd;AAEA,EAAA,IAAI,CAAC,eAAA,CAAgB,CAAA,CAAE,GAAA,CAAI,IAAA,EAAM,EAAE,GAAA,CAAI,MAAA,EAAQ,UAAA,EAAY,qBAAqB,CAAA,EAAG;AACjF,IAAA,OAAO,IAAA,EAAK;AAAA,EACd;AAGA,EAAA,IAAI,iBAAA,CAAkB,EAAE,GAAA,CAAI,IAAA,EAAM,EAAE,GAAA,CAAI,MAAA,EAAQ,UAAU,CAAA,EAAG;AAC3D,IAAA,OAAO,IAAA,EAAK;AAAA,EACd;AAGA,EAAA,MAAM,UAAA,GAAa,CAAA,CAAE,GAAA,CAAI,MAAA,CAAO,eAAe,CAAA;AAC/C,EAAA,IAAI,QAAuB,UAAA,GAAa,UAAA,CAAW,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA,GAAI,IAAA;AAE5E,EAAA,IAAI,CAAC,KAAA,IAAS,CAAA,CAAE,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAA,EAAG;AACnC,IAAA,KAAA,GAAQ,CAAA,CAAE,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAA,IAAK,IAAA;AAAA,EACnC;AAGA,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAE,IAAA,CAAK,EAAE,KAAA,EAAO,yBAAA,IAA6B,GAAG,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI;AAEF,IAAA,IAAI,IAAA;AAGJ,IAAA,IAAI,OAAO,UAAA,CAAW,iBAAA,KAAsB,UAAA,EAAY;AACtD,MAAA,IAAA,GAAO,MAAM,UAAA,CAAW,iBAAA,CAAkB,KAAA,EAAO,EAAE,GAAG,CAAA;AAAA,IACxD,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,IAC3D;AAEA,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,EAAE,IAAA,CAAK,EAAE,KAAA,EAAO,0BAAA,IAA8B,GAAG,CAAA;AAAA,IAC1D;AAGA,IAAA,CAAA,CAAE,GAAA,CAAI,gBAAgB,CAAA,CAAE,GAAA,CAAI,QAAQ,IAAI,CAAA;AAExC,IAAA,OAAO,IAAA,EAAK;AAAA,EACd,SAAS,GAAA,EAAK;AACZ,IAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AACjB,IAAA,OAAO,EAAE,IAAA,CAAK,EAAE,KAAA,EAAO,0BAAA,IAA8B,GAAG,CAAA;AAAA,EAC1D;AACF,CAAA;AAEO,IAAM,uBAAA,GAA0B,OAAO,CAAA,EAAsB,IAAA,KAAe;AACjF,EAAA,MAAM,MAAA,GAAS,CAAA,CAAE,GAAA,CAAI,QAAQ,CAAA;AAC7B,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,SAAA,EAAU,EAAG,IAAA;AACvC,EAAA,MAAM,qBAAA,GAAwB,CAAA,CAAE,GAAA,CAAI,uBAAuB,CAAA;AAE3D,EAAA,IAAI,CAAC,UAAA,EAAY;AAEf,IAAA,OAAO,IAAA,EAAK;AAAA,EACd;AAEA,EAAA,MAAM,IAAA,GAAO,EAAE,GAAA,CAAI,IAAA;AACnB,EAAA,MAAM,MAAA,GAAS,EAAE,GAAA,CAAI,MAAA;AACrB,EAAA,MAAM,YAAY,CAAC,IAAA,KAAiB,CAAA,CAAE,GAAA,CAAI,OAAO,IAAI,CAAA;AAErD,EAAA,IAAI,uBAAuB,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,UAAA,EAAY,qBAAqB,CAAA,EAAG;AAEtF,IAAA,OAAO,IAAA,EAAK;AAAA,EACd;AAEA,EAAA,IAAI,CAAC,eAAA,CAAgB,CAAA,CAAE,GAAA,CAAI,IAAA,EAAM,EAAE,GAAA,CAAI,MAAA,EAAQ,UAAA,EAAY,qBAAqB,CAAA,EAAG;AACjF,IAAA,OAAO,IAAA,EAAK;AAAA,EACd;AAGA,EAAA,IAAI,iBAAA,CAAkB,IAAA,EAAM,MAAA,EAAQ,UAAU,CAAA,EAAG;AAC/C,IAAA,OAAO,IAAA,EAAK;AAAA,EACd;AAEA,EAAA,MAAM,OAAO,CAAA,CAAE,GAAA,CAAI,gBAAgB,CAAA,CAAE,IAAI,MAAM,CAAA;AAE/C,EAAA,IAAI,eAAA,IAAmB,UAAA,IAAc,OAAO,UAAA,CAAW,kBAAkB,UAAA,EAAY;AACnF,IAAA,IAAI;AACF,MAAA,MAAM,eAAe,MAAM,UAAA,CAAW,aAAA,CAAc,IAAA,EAAM,EAAE,GAAG,CAAA;AAE/D,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,OAAO,IAAA,EAAK;AAAA,MACd;AAEA,MAAA,OAAO,EAAE,IAAA,CAAK,EAAE,KAAA,EAAO,eAAA,IAAmB,GAAG,CAAA;AAAA,IAC/C,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AACjB,MAAA,OAAO,EAAE,IAAA,CAAK,EAAE,KAAA,EAAO,qBAAA,IAAyB,GAAG,CAAA;AAAA,IACrD;AAAA,EACF;AAGA,EAAA,IAAI,WAAA,IAAe,UAAA,IAAc,OAAO,UAAA,CAAW,cAAc,UAAA,EAAY;AAC3E,IAAA,IAAI;AACF,MAAA,MAAM,eAAe,MAAM,UAAA,CAAW,UAAU,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAC,CAAA;AAErE,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,OAAO,IAAA,EAAK;AAAA,MACd;AAEA,MAAA,OAAO,EAAE,IAAA,CAAK,EAAE,KAAA,EAAO,eAAA,IAAmB,GAAG,CAAA;AAAA,IAC/C,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AACjB,MAAA,OAAO,EAAE,IAAA,CAAK,EAAE,KAAA,EAAO,qBAAA,IAAyB,GAAG,CAAA;AAAA,IACrD;AAAA,EACF;AAGA,EAAA,IAAI,WAAW,UAAA,IAAc,UAAA,CAAW,SAAS,UAAA,CAAW,KAAA,CAAM,SAAS,CAAA,EAAG;AAC5E,IAAA,MAAM,eAAe,MAAM,UAAA,CAAW,WAAW,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAI,CAAA;AAE1E,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAO,IAAA,EAAK;AAAA,IACd;AAEA,IAAA,OAAO,EAAE,IAAA,CAAK,EAAE,KAAA,EAAO,eAAA,IAAmB,GAAG,CAAA;AAAA,EAC/C;AAGA,EAAA,IAAI,iBAAA,CAAkB,KAAA,IAAS,iBAAA,CAAkB,KAAA,CAAM,SAAS,CAAA,EAAG;AACjE,IAAA,MAAM,eAAe,MAAM,UAAA,CAAW,kBAAkB,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAI,CAAA;AAEjF,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAO,IAAA,EAAK;AAAA,IACd;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,IAAA,CAAK,EAAE,KAAA,EAAO,eAAA,IAAmB,GAAG,CAAA;AAC/C,CAAA;;;ACzGO,IAAM,YAAA,GAAN,cAA2BC,cAAA,CAAgD;AAAA,EAChF,uBAAA,GAA6C;AAC3C,IAAA,OAAO,OAAO,GAAG,IAAA,KAAS;AAGxB,MAAA,IAAI,kBAAA;AACJ,MAAA,IAAI,oBAAA;AAGJ,MAAA,IAAI,EAAE,GAAA,CAAI,MAAA,KAAW,UAAU,CAAA,CAAE,GAAA,CAAI,WAAW,KAAA,EAAO;AACrD,QAAA,MAAM,WAAA,GAAc,CAAA,CAAE,GAAA,CAAI,MAAA,CAAO,cAAc,CAAA;AAC/C,QAAA,IAAI,WAAA,EAAa,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAC7C,UAAA,IAAI;AACF,YAAA,MAAM,SAAA,GAAY,CAAA,CAAE,GAAA,CAAI,GAAA,CAAI,KAAA,EAAM;AAClC,YAAA,MAAM,IAAA,GAAQ,MAAM,SAAA,CAAU,IAAA,EAAK;AACnC,YAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,cAAA,kBAAA,GAAqB,IAAA,CAAK,cAAA;AAAA,YAC5B;AAAA,UACF,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IAAI,CAAA,CAAE,GAAA,CAAI,MAAA,KAAW,KAAA,EAAO;AAC1B,QAAA,IAAI;AACF,UAAA,MAAM,qBAAA,GAAwB,CAAA,CAAE,GAAA,CAAI,KAAA,CAAM,gBAAgB,CAAA;AAC1D,UAAA,IAAI,qBAAA,EAAuB;AAEzB,YAAA,IAAI;AACF,cAAA,oBAAA,GAAuB,IAAA,CAAK,MAAM,qBAAqB,CAAA;AAAA,YACzD,CAAA,CAAA,MAAQ;AAEN,cAAA,IAAI;AACF,gBAAA,MAAM,OAAO,MAAA,CAAO,IAAA,CAAK,uBAAuB,QAAQ,CAAA,CAAE,SAAS,OAAO,CAAA;AAC1E,gBAAA,oBAAA,GAAuB,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,cACxC,CAAA,CAAA,MAAQ;AAAA,cAER;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAEA,MAAA,MAAM,iBAAiB,IAAA,CAAK,mBAAA,CAAoB,EAAE,oBAAA,EAAsB,oBAAoB,CAAA;AAG5F,MAAA,CAAA,CAAE,GAAA,CAAI,kBAAkB,cAAc,CAAA;AACtC,MAAA,CAAA,CAAE,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAC3B,MAAA,CAAA,CAAE,GAAA,CAAI,iBAAA,EAAmB,IAAA,CAAK,KAAA,IAAS,EAAE,CAAA;AACzC,MAAA,CAAA,CAAE,GAAA,CAAI,WAAA,EAAa,IAAA,CAAK,SAAS,CAAA;AACjC,MAAA,CAAA,CAAE,GAAA,CAAI,aAAA,EAAe,CAAA,CAAE,GAAA,CAAI,IAAI,MAAM,CAAA;AACrC,MAAA,CAAA,CAAE,GAAA,CAAI,uBAAA,EAAyB,IAAA,CAAK,qBAAqB,CAAA;AAEzD,MAAA,OAAO,IAAA,EAAK;AAAA,IACd,CAAA;AAAA,EACF;AAAA,EACA,MAAM,MAAA,CAAO,KAAA,EAAoB,GAAA,EAAc,MAAA,EAAsD;AACnG,IAAA,GAAA,CAAI,MAAA,CAAO,gBAAgB,YAAY,CAAA;AACvC,IAAA,GAAA,CAAI,MAAA,CAAO,qBAAqB,SAAS,CAAA;AAEzC,IAAA,MAAM,YAAA,GAAe,MAAM,YAAA,IAAgB,QAAA;AAE3C,IAAA,OAAO,MAAA;AAAA,MACL,GAAA;AAAA,MACA,OAAMC,OAAAA,KAAU;AACd,QAAA,MAAM,cAAA,GAAiB,MAAA,YAAkB,cAAA,GAAiB,MAAA,GAAS,MAAA,CAAO,UAAA;AAC1E,QAAA,MAAM,MAAA,GAAS,eAAe,SAAA,EAAU;AAExC,QAAAA,OAAAA,CAAO,QAAQ,MAAM;AACnB,UAAA,KAAK,MAAA,CAAO,OAAO,iBAAiB,CAAA;AAAA,QACtC,CAAC,CAAA;AAED,QAAA,IAAI;AACF,UAAA,OAAO,IAAA,EAAM;AACX,YAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,YAAA,IAAI,IAAA,EAAM;AAEV,YAAA,IAAI,KAAA,EAAO;AAET,cAAA,MAAM,YAAA,GAAe,IAAA,CAAK,aAAA,EAAe,MAAA,IAAU,IAAA;AACnD,cAAA,MAAM,WAAA,GAAc,YAAA,GAAe,iBAAA,CAAkB,KAAK,CAAA,GAAI,KAAA;AAC9D,cAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,gBAAA,MAAMA,QAAO,KAAA,CAAM,CAAA,MAAA,EAAS,IAAA,CAAK,SAAA,CAAU,WAAW,CAAC;;AAAA,CAAM,CAAA;AAAA,cAC/D,CAAA,MAAO;AACL,gBAAA,MAAMA,QAAO,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,WAAW,IAAI,GAAM,CAAA;AAAA,cACzD;AAAA,YACF;AAAA,UACF;AAEA,UAAA,MAAMA,OAAAA,CAAO,MAAM,kBAAkB,CAAA;AAAA,QACvC,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,QACrB,CAAA,SAAE;AACA,UAAA,MAAMA,QAAO,KAAA,EAAM;AAAA,QACrB;AAAA,MACF,CAAA;AAAA,MACA,OAAM,GAAA,KAAO;AACX,QAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,MACnB;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,SAAA,CAAU,KAAA,EAAoB,OAAA,EAAoD;AACtF,IAAA,MAAM,SAAA,GAAY,QAAQ,KAAA,EAAM;AAEhC,IAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,OAAA,CAAQ,OAAA,EAAS,CAAA;AAC1D,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI,cAAA;AAEJ,IAAA,IAAI,KAAA,CAAM,WAAW,MAAA,IAAU,KAAA,CAAM,WAAW,KAAA,IAAS,KAAA,CAAM,WAAW,OAAA,EAAS;AACjF,MAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAA,CAAO,cAAc,CAAA,IAAK,EAAA;AAEtD,MAAA,IAAI,WAAA,CAAY,QAAA,CAAS,qBAAqB,CAAA,EAAG;AAC/C,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,QAAA,EAAS;AACxC,UAAA,IAAA,GAAO,MAAM,IAAA,CAAK,aAAA,CAAc,QAAQ,CAAA;AAAA,QAC1C,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,KAAA,CAAM,wCAAwC,KAAK,CAAA;AAE3D,UAAA,IAAI,KAAA,YAAiB,SAAS,KAAA,CAAM,OAAA,CAAQ,aAAY,CAAE,QAAA,CAAS,MAAM,CAAA,EAAG;AAC1E,YAAA,MAAM,KAAA;AAAA,UACR;AACA,UAAA,cAAA,GAAiB;AAAA,YACf,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,WACpD;AAAA,QACF;AAAA,MACF,CAAA,MAAA,IAAW,WAAA,CAAY,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAGnD,QAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAM;AACpC,QAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,IAAA,EAAK;AAEtC,QAAA,IAAI,QAAA,IAAY,QAAA,CAAS,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AAE1C,UAAA,IAAI;AACF,YAAA,IAAA,GAAO,IAAA,CAAK,MAAM,QAAQ,CAAA;AAAA,UAC5B,SAAS,KAAA,EAAO;AACd,YAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8B,KAAK,CAAA;AAEjD,YAAA,cAAA,GAAiB;AAAA,cACf,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,aACpD;AAAA,UACF;AAAA,QACF;AAAA,MAEF;AAAA,IACF;AACA,IAAA,OAAO,EAAE,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,cAAA,EAAe;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,cAAc,QAAA,EAAsD;AAChF,IAAA,MAAM,SAAkC,EAAC;AAEzC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,QAAA,CAAS,SAAQ,EAAG;AAC7C,MAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,QAAA,MAAM,WAAA,GAAc,MAAM,KAAA,CAAM,WAAA,EAAY;AAC5C,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA;AAAA,MACvC,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AAEpC,QAAA,IAAI;AACF,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAAA,QAChC,CAAA,CAAA,MAAQ;AACN,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,QAChB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,MAChB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAA,CAAa,KAAA,EAAoB,QAAA,EAAmB,QAAiB,MAAA,EAA+B;AACxG,IAAA,MAAM,cAAA,GAAiB,MAAA,IAAU,IAAA,CAAK,MAAA,IAAU,EAAA;AAEhD,IAAA,IAAI,KAAA,CAAM,iBAAiB,MAAA,EAAQ;AACjC,MAAA,OAAO,QAAA,CAAS,IAAA,CAAK,MAAA,EAAe,GAAG,CAAA;AAAA,IACzC,CAAA,MAAA,IAAW,KAAA,CAAM,YAAA,KAAiB,QAAA,EAAU;AAC1C,MAAA,OAAO,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,QAAA,EAAU,MAAwC,CAAA;AAAA,IAC9E,CAAA,MAAA,IAAW,KAAA,CAAM,YAAA,KAAiB,qBAAA,EAAuB;AACvD,MAAA,MAAM,aAAA,GAAgB,MAAA;AACtB,MAAA,OAAO,aAAA;AAAA,IACT,CAAA,MAAA,IAAW,KAAA,CAAM,YAAA,KAAiB,UAAA,EAAY;AAE5C,MAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,iBAAgB,GAAI,MAAA;AAC1D,MAAA,MAAM,EAAE,GAAA,EAAK,GAAA,KAAQ,QAAA,CAAS,QAAA,CAAS,IAAI,GAAG,CAAA;AAE9C,MAAA,IAAI;AAEF,QAAA,MAAM,UAAU,EAAE,GAAG,IAAA,CAAK,UAAA,EAAY,GAAG,eAAA,EAAgB;AAEzD,QAAA,MAAM,OAAO,SAAA,CAAU;AAAA,UACrB,GAAA,EAAK,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,UAC7B,QAAA,EAAU,CAAA,EAAG,cAAc,CAAA,EAAG,QAAQ,CAAA,CAAA;AAAA,UACtC,GAAA;AAAA,UACA,GAAA;AAAA,UACA,SAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,IAAI,OAAA,GAAU;AAAA,SACtD,CAAA;AACD,QAAA,OAAO,MAAM,gBAAgB,GAAG,CAAA;AAAA,MAClC,CAAA,CAAA,MAAQ;AACN,QAAA,IAAI,CAAC,IAAI,WAAA,EAAa;AACpB,UAAA,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,EAAE,cAAA,EAAgB,oBAAoB,CAAA;AACzD,UAAA,GAAA,CAAI,GAAA;AAAA,YACF,KAAK,SAAA,CAAU;AAAA,cACb,OAAA,EAAS,KAAA;AAAA,cACT,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,uBAAA,EAAwB;AAAA,cACxD,EAAA,EAAI;AAAA,aACL;AAAA,WACH;AACA,UAAA,OAAO,MAAM,gBAAgB,GAAG,CAAA;AAAA,QAClC;AACA,QAAA,OAAO,MAAM,gBAAgB,GAAG,CAAA;AAAA,MAClC;AAAA,IACF,CAAA,MAAA,IAAW,KAAA,CAAM,YAAA,KAAiB,SAAA,EAAW;AAE3C,MAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,WAAA,EAAY,GAAI,MAAA;AAEzC,MAAA,IAAI;AACF,QAAA,OAAO,MAAM,OAAO,YAAA,CAAa;AAAA,UAC/B,GAAA,EAAK,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,UAC7B,OAAA,EAAS,CAAA,EAAG,cAAc,CAAA,EAAG,OAAO,CAAA,CAAA;AAAA,UACpC,WAAA,EAAa,CAAA,EAAG,cAAc,CAAA,EAAG,WAAW,CAAA,CAAA;AAAA,UAC5C,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,SAAS,IAAA,CAAK,EAAE,KAAA,EAAO,gCAAA,IAAoC,GAAG,CAAA;AAAA,MACvE;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO,QAAA,CAAS,OAAO,GAAG,CAAA;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,GAAA,EACA,KAAA,EACA,EAAE,MAAA,EAAQ,WAAA,EAAY,GAAyB,EAAC,EACjC;AAEf,IAAA,MAAM,MAAA,GAAS,WAAA,IAAe,IAAA,CAAK,MAAA,IAAU,EAAA;AAG7C,IAAA,MAAM,oBAAA,GAAuB,IAAA,CAAK,gBAAA,IAAoB,CAAC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,WAAA,EAAa,CAAA;AAGlH,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,WAAA,IAAe,IAAA,CAAK,gBAAA,EAAkB,OAAA;AAG5D,IAAA,MAAM,cAAmC,EAAC;AAE1C,IAAA,IAAI,oBAAA,IAAwB,OAAA,IAAW,IAAA,CAAK,gBAAA,EAAkB;AAC5D,MAAA,WAAA,CAAY,IAAA;AAAA,QACV,SAAA,CAAU;AAAA,UACR,OAAA;AAAA,UACA,OAAA,EAAS,KAAK,gBAAA,CAAiB;AAAA,SAChC;AAAA,OACH;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,WAAA,EAAoE,CAAA;AAAA,MACnF,CAAA,EAAG,MAAM,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,MACtB,GAAG,WAAA;AAAA,MACH,OAAO,CAAA,KAAe;AAEpB,QAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,cAAA,CAAe,KAAA,EAAO;AAAA,UACjD,IAAA,EAAM,EAAE,GAAA,CAAI,IAAA;AAAA,UACZ,MAAA,EAAQ,EAAE,GAAA,CAAI,MAAA;AAAA,UACd,SAAA,EAAW,CAAA,IAAA,KAAQ,CAAA,CAAE,GAAA,CAAI,OAAO,IAAI,CAAA;AAAA,UACpC,QAAA,EAAU,CAAA,IAAA,KAAQ,CAAA,CAAE,GAAA,CAAI,MAAM,IAAI,CAAA;AAAA,UAClC,cAAA,EAAgB,CAAA,CAAE,GAAA,CAAI,gBAAgB;AAAA,SACvC,CAAA;AAED,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,OAAO,CAAA,CAAE,KAAK,EAAE,KAAA,EAAO,UAAU,KAAA,EAAM,EAAG,UAAU,MAAa,CAAA;AAAA,QACnE;AAEA,QAAA,MAAM,SAAS,MAAM,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,EAAE,GAAG,CAAA;AAGhD,QAAA,IAAI,OAAO,cAAA,EAAgB;AACzB,UAAA,OAAO,CAAA,CAAE,IAAA;AAAA,YACP;AAAA,cACE,KAAA,EAAO,sBAAA;AAAA,cACP,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,QAAQ,OAAA,EAAS,MAAA,CAAO,cAAA,CAAe,OAAA,EAAS;AAAA,aACpE;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAEA,QAAA,IAAI,OAAO,WAAA,EAAa;AACtB,UAAA,IAAI;AACF,YAAA,MAAA,CAAO,cAAc,MAAM,IAAA,CAAK,gBAAA,CAAiB,KAAA,EAAO,OAAO,WAAW,CAAA;AAAA,UAC5E,SAAS,KAAA,EAAO;AACd,YAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8B,KAAK,CAAA;AAEjD,YAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,cAAA,OAAO,EAAE,IAAA,CAAK,cAAA,CAAe,KAAA,EAAO,kBAAkB,GAAG,GAAG,CAAA;AAAA,YAC9D;AACA,YAAA,OAAO,CAAA,CAAE,IAAA;AAAA,cACP;AAAA,gBACE,KAAA,EAAO,0BAAA;AAAA,gBACP,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,SAAA,EAAW,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,eAAA,EAAiB;AAAA,eAClG;AAAA,cACA;AAAA,aACF;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAI,OAAO,IAAA,EAAM;AACf,UAAA,IAAI;AACF,YAAA,MAAA,CAAO,OAAO,MAAM,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,OAAO,IAAI,CAAA;AAAA,UACvD,SAAS,KAAA,EAAO;AACd,YAAA,OAAA,CAAQ,KAAA,CAAM,uBAAuB,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAE3F,YAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,cAAA,OAAO,EAAE,IAAA,CAAK,cAAA,CAAe,KAAA,EAAO,cAAc,GAAG,GAAG,CAAA;AAAA,YAC1D;AACA,YAAA,OAAO,CAAA,CAAE,IAAA;AAAA,cACP;AAAA,gBACE,KAAA,EAAO,sBAAA;AAAA,gBACP,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,SAAA,EAAW,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,eAAA,EAAiB;AAAA,eAClG;AAAA,cACA;AAAA,aACF;AAAA,UACF;AAAA,QACF;AAEA,QAAA,MAAM,aAAA,GAAgB;AAAA,UACpB,GAAG,MAAA,CAAO,SAAA;AAAA,UACV,GAAG,MAAA,CAAO,WAAA;AAAA,UACV,GAAI,OAAO,MAAA,CAAO,SAAS,QAAA,GAAW,MAAA,CAAO,OAAO,EAAC;AAAA,UACrD,cAAA,EAAgB,CAAA,CAAE,GAAA,CAAI,gBAAgB,CAAA;AAAA,UACtC,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,eAAA,EAAiB,CAAA,CAAE,GAAA,CAAI,iBAAiB,CAAA;AAAA,UACxC,SAAA,EAAW,CAAA,CAAE,GAAA,CAAI,WAAW,CAAA;AAAA,UAC5B,WAAA,EAAa,CAAA,CAAE,GAAA,CAAI,aAAa,CAAA;AAAA,UAChC,WAAA,EAAa;AAAA,SACf;AAEA,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA;AAChD,UAAA,OAAO,IAAA,CAAK,YAAA,CAAa,KAAA,EAAO,CAAA,EAAG,QAAQ,MAAM,CAAA;AAAA,QACnD,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,KAAA,CAAM,yBAAyB,KAAK,CAAA;AAE5C,UAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AAEtC,YAAA,IAAI,YAAY,KAAA,EAAO;AACrB,cAAA,MAAM,SAAU,KAAA,CAAc,MAAA;AAC9B,cAAA,OAAO,CAAA,CAAE,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAA,EAAgB,EAAG,MAAM,CAAA;AAAA,YAC3F;AAEA,YAAA,IAAI,SAAA,IAAa,KAAA,IAAS,KAAA,CAAM,OAAA,IAAW,OAAO,MAAM,OAAA,KAAY,QAAA,IAAY,QAAA,IAAY,KAAA,CAAM,OAAA,EAAS;AACzG,cAAA,MAAM,MAAA,GAAU,MAAM,OAAA,CAAgB,MAAA;AACtC,cAAA,OAAO,CAAA,CAAE,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAA,EAAgB,EAAG,MAAM,CAAA;AAAA,YAC3F;AAAA,UACF;AACA,UAAA,OAAO,CAAA,CAAE,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,eAAA,EAAgB,EAAG,GAAG,CAAA;AAAA,QACxF;AAAA,MACF;AAAA,KACF;AAAA,EACF;AAAA,EAEA,yBAAA,GAAkC;AAChC,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,yBAAyB,CAAA;AAAA,EAClD;AAAA,EAEA,sBAAA,GAA+B;AAC7B,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU,EAAG,IAAA;AAC5C,IAAA,IAAI,CAAC,UAAA,EAAY;AAEf,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,wBAAwB,CAAA;AAC1C,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,uBAAuB,CAAA;AAAA,EAC3C;AACF","file":"index.js","sourcesContent":["// src/http-exception.ts\nvar HTTPException = class extends Error {\n res;\n status;\n /**\n * Creates an instance of `HTTPException`.\n * @param status - HTTP status code for the exception. Defaults to 500.\n * @param options - Additional options for the exception.\n */\n constructor(status = 500, options) {\n super(options?.message, { cause: options?.cause });\n this.res = options?.res;\n this.status = status;\n }\n /**\n * Returns the response object associated with the exception.\n * If a response object is not provided, a new response is created with the error message and status code.\n * @returns The response object.\n */\n getResponse() {\n if (this.res) {\n const newResponse = new Response(this.res.body, {\n status: this.status,\n headers: this.res.headers\n });\n return newResponse;\n }\n return new Response(this.message, {\n status: this.status\n });\n }\n};\nexport {\n HTTPException\n};\n","// src/middleware/body-limit/index.ts\nimport { HTTPException } from \"../../http-exception.js\";\nvar ERROR_MESSAGE = \"Payload Too Large\";\nvar BodyLimitError = class extends Error {\n constructor(message) {\n super(message);\n this.name = \"BodyLimitError\";\n }\n};\nvar bodyLimit = (options) => {\n const onError = options.onError || (() => {\n const res = new Response(ERROR_MESSAGE, {\n status: 413\n });\n throw new HTTPException(413, { res });\n });\n const maxSize = options.maxSize;\n return async function bodyLimit2(c, next) {\n if (!c.req.raw.body) {\n return next();\n }\n const hasTransferEncoding = c.req.raw.headers.has(\"transfer-encoding\");\n const hasContentLength = c.req.raw.headers.has(\"content-length\");\n if (hasTransferEncoding && hasContentLength) {\n }\n if (hasContentLength && !hasTransferEncoding) {\n const contentLength = parseInt(c.req.raw.headers.get(\"content-length\") || \"0\", 10);\n return contentLength > maxSize ? onError(c) : next();\n }\n let size = 0;\n const rawReader = c.req.raw.body.getReader();\n const reader = new ReadableStream({\n async start(controller) {\n try {\n for (; ; ) {\n const { done, value } = await rawReader.read();\n if (done) {\n break;\n }\n size += value.length;\n if (size > maxSize) {\n controller.error(new BodyLimitError(ERROR_MESSAGE));\n break;\n }\n controller.enqueue(value);\n }\n } finally {\n controller.close();\n }\n }\n });\n const requestInit = { body: reader, duplex: \"half\" };\n c.req.raw = new Request(c.req.raw, requestInit);\n await next();\n if (c.error instanceof BodyLimitError) {\n c.res = await onError(c);\n }\n };\n};\nexport {\n bodyLimit\n};\n","// src/utils/stream.ts\nvar StreamingApi = class {\n writer;\n encoder;\n writable;\n abortSubscribers = [];\n responseReadable;\n /**\n * Whether the stream has been aborted.\n */\n aborted = false;\n /**\n * Whether the stream has been closed normally.\n */\n closed = false;\n constructor(writable, _readable) {\n this.writable = writable;\n this.writer = writable.getWriter();\n this.encoder = new TextEncoder();\n const reader = _readable.getReader();\n this.abortSubscribers.push(async () => {\n await reader.cancel();\n });\n this.responseReadable = new ReadableStream({\n async pull(controller) {\n const { done, value } = await reader.read();\n done ? controller.close() : controller.enqueue(value);\n },\n cancel: () => {\n this.abort();\n }\n });\n }\n async write(input) {\n try {\n if (typeof input === \"string\") {\n input = this.encoder.encode(input);\n }\n await this.writer.write(input);\n } catch {\n }\n return this;\n }\n async writeln(input) {\n await this.write(input + \"\\n\");\n return this;\n }\n sleep(ms) {\n return new Promise((res) => setTimeout(res, ms));\n }\n async close() {\n try {\n await this.writer.close();\n } catch {\n }\n this.closed = true;\n }\n async pipe(body) {\n this.writer.releaseLock();\n await body.pipeTo(this.writable, { preventClose: true });\n this.writer = this.writable.getWriter();\n }\n onAbort(listener) {\n this.abortSubscribers.push(listener);\n }\n /**\n * Abort the stream.\n * You can call this method when stream is aborted by external event.\n */\n abort() {\n if (!this.aborted) {\n this.aborted = true;\n this.abortSubscribers.forEach((subscriber) => subscriber());\n }\n }\n};\nexport {\n StreamingApi\n};\n","// src/helper/streaming/utils.ts\nvar isOldBunVersion = () => {\n const version = typeof Bun !== \"undefined\" ? Bun.version : void 0;\n if (version === void 0) {\n return false;\n }\n const result = version.startsWith(\"1.1\") || version.startsWith(\"1.0\") || version.startsWith(\"0.\");\n isOldBunVersion = () => result;\n return result;\n};\nexport {\n isOldBunVersion\n};\n","// src/helper/streaming/stream.ts\nimport { StreamingApi } from \"../../utils/stream.js\";\nimport { isOldBunVersion } from \"./utils.js\";\nvar contextStash = /* @__PURE__ */ new WeakMap();\nvar stream = (c, cb, onError) => {\n const { readable, writable } = new TransformStream();\n const stream2 = new StreamingApi(writable, readable);\n if (isOldBunVersion()) {\n c.req.raw.signal.addEventListener(\"abort\", () => {\n if (!stream2.closed) {\n stream2.abort();\n }\n });\n }\n contextStash.set(stream2.responseReadable, c);\n (async () => {\n try {\n await cb(stream2);\n } catch (e) {\n if (e === void 0) {\n } else if (e instanceof Error && onError) {\n await onError(e, stream2);\n } else {\n console.error(e);\n }\n } finally {\n stream2.close();\n }\n })();\n return c.newResponse(stream2.responseReadable);\n};\nexport {\n stream\n};\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import type { ContextWithMastra } from '@mastra/core/server';\nimport {\n canAccessPublicly,\n checkRules,\n defaultAuthConfig,\n isDevPlaygroundRequest,\n isProtectedPath,\n} from '@mastra/server/auth';\nimport type { Next } from 'hono';\n\nexport const authenticationMiddleware = async (c: ContextWithMastra, next: Next) => {\n const mastra = c.get('mastra');\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = c.get('customRouteAuthConfig');\n\n if (!authConfig) {\n // No auth config, skip authentication\n return next();\n }\n\n const path = c.req.path;\n const method = c.req.method;\n const getHeader = (name: string) => c.req.header(name);\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {\n // Skip authentication for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(c.req.path, c.req.method, authConfig, customRouteAuthConfig)) {\n return next();\n }\n\n // Skip authentication for public routes\n if (canAccessPublicly(c.req.path, c.req.method, authConfig)) {\n return next();\n }\n\n // Get token from header or query\n const authHeader = c.req.header('Authorization');\n let token: string | null = authHeader ? authHeader.replace('Bearer ', '') : null;\n\n if (!token && c.req.query('apiKey')) {\n token = c.req.query('apiKey') || null;\n }\n\n // Handle missing token\n if (!token) {\n return c.json({ error: 'Authentication required' }, 401);\n }\n\n try {\n // Verify token and get user data\n let user: unknown;\n\n // Client provided verify function\n if (typeof authConfig.authenticateToken === 'function') {\n user = await authConfig.authenticateToken(token, c.req);\n } else {\n throw new Error('No token verification method configured');\n }\n\n if (!user) {\n return c.json({ error: 'Invalid or expired token' }, 401);\n }\n\n // Store user in context\n c.get('requestContext').set('user', user);\n\n return next();\n } catch (err) {\n console.error(err);\n return c.json({ error: 'Invalid or expired token' }, 401);\n }\n};\n\nexport const authorizationMiddleware = async (c: ContextWithMastra, next: Next) => {\n const mastra = c.get('mastra');\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = c.get('customRouteAuthConfig');\n\n if (!authConfig) {\n // No auth config, skip authorization\n return next();\n }\n\n const path = c.req.path;\n const method = c.req.method;\n const getHeader = (name: string) => c.req.header(name);\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {\n // Skip authorization for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(c.req.path, c.req.method, authConfig, customRouteAuthConfig)) {\n return next();\n }\n\n // Skip for public routes\n if (canAccessPublicly(path, method, authConfig)) {\n return next();\n }\n\n const user = c.get('requestContext').get('user');\n\n if ('authorizeUser' in authConfig && typeof authConfig.authorizeUser === 'function') {\n try {\n const isAuthorized = await authConfig.authorizeUser(user, c.req);\n\n if (isAuthorized) {\n return next();\n }\n\n return c.json({ error: 'Access denied' }, 403);\n } catch (err) {\n console.error(err);\n return c.json({ error: 'Authorization error' }, 500);\n }\n }\n\n // Client-provided authorization function\n if ('authorize' in authConfig && typeof authConfig.authorize === 'function') {\n try {\n const isAuthorized = await authConfig.authorize(path, method, user, c);\n\n if (isAuthorized) {\n return next();\n }\n\n return c.json({ error: 'Access denied' }, 403);\n } catch (err) {\n console.error(err);\n return c.json({ error: 'Authorization error' }, 500);\n }\n }\n\n // Custom rule-based authorization\n if ('rules' in authConfig && authConfig.rules && authConfig.rules.length > 0) {\n const isAuthorized = await checkRules(authConfig.rules, path, method, user);\n\n if (isAuthorized) {\n return next();\n }\n\n return c.json({ error: 'Access denied' }, 403);\n }\n\n // Default rule-based authorization\n if (defaultAuthConfig.rules && defaultAuthConfig.rules.length > 0) {\n const isAuthorized = await checkRules(defaultAuthConfig.rules, path, method, user);\n\n if (isAuthorized) {\n return next();\n }\n }\n\n return c.json({ error: 'Access denied' }, 403);\n};\n","import type { ToolsInput } from '@mastra/core/agent';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { InMemoryTaskStore } from '@mastra/server/a2a/store';\nimport { formatZodError } from '@mastra/server/handlers/error';\nimport type { MCPHttpTransportResult, MCPSseTransportResult } from '@mastra/server/handlers/mcp';\nimport type { ParsedRequestParams, ServerRoute } from '@mastra/server/server-adapter';\nimport {\n MastraServer as MastraServerBase,\n normalizeQueryParams,\n redactStreamChunk,\n} from '@mastra/server/server-adapter';\nimport { toReqRes, toFetchResponse } from 'fetch-to-node';\nimport type { Context, HonoRequest, MiddlewareHandler } from 'hono';\nimport { bodyLimit } from 'hono/body-limit';\nimport { stream } from 'hono/streaming';\nimport { ZodError } from 'zod';\n\nimport { authenticationMiddleware, authorizationMiddleware } from './auth-middleware';\n\n// Export type definitions for Hono app configuration\nexport type HonoVariables = {\n mastra: Mastra;\n requestContext: RequestContext;\n registeredTools: ToolsInput;\n abortSignal: AbortSignal;\n taskStore: InMemoryTaskStore;\n customRouteAuthConfig?: Map<string, boolean>;\n};\n\nexport type HonoBindings = {};\n\n/**\n * Generic handler function type compatible across Hono versions.\n * Uses a minimal signature that all Hono middleware handlers satisfy.\n */\ntype HonoRouteHandler = (...args: any[]) => any;\n\n/**\n * Minimal interface representing what MastraServer needs from a Hono app.\n * This allows any Hono app instance to be passed without strict generic matching,\n * avoiding the version mismatch issues that occur with Hono's strict generic types.\n */\nexport interface HonoApp {\n use(path: string, ...handlers: HonoRouteHandler[]): unknown;\n get(path: string, ...handlers: HonoRouteHandler[]): unknown;\n post(path: string, ...handlers: HonoRouteHandler[]): unknown;\n put(path: string, ...handlers: HonoRouteHandler[]): unknown;\n delete(path: string, ...handlers: HonoRouteHandler[]): unknown;\n patch(path: string, ...handlers: HonoRouteHandler[]): unknown;\n all(path: string, ...handlers: HonoRouteHandler[]): unknown;\n}\n\nexport class MastraServer extends MastraServerBase<HonoApp, HonoRequest, Context> {\n createContextMiddleware(): MiddlewareHandler {\n return async (c, next) => {\n // Parse request context from request body and add to context\n\n let bodyRequestContext: Record<string, any> | undefined;\n let paramsRequestContext: Record<string, any> | undefined;\n\n // Parse request context from request body (POST/PUT)\n if (c.req.method === 'POST' || c.req.method === 'PUT') {\n const contentType = c.req.header('content-type');\n if (contentType?.includes('application/json')) {\n try {\n const clonedReq = c.req.raw.clone();\n const body = (await clonedReq.json()) as { requestContext?: Record<string, any> };\n if (body.requestContext) {\n bodyRequestContext = body.requestContext;\n }\n } catch {\n // Body parsing failed, continue without body\n }\n }\n }\n\n // Parse request context from query params (GET)\n if (c.req.method === 'GET') {\n try {\n const encodedRequestContext = c.req.query('requestContext');\n if (encodedRequestContext) {\n // Try JSON first\n try {\n paramsRequestContext = JSON.parse(encodedRequestContext);\n } catch {\n // Fallback to base64(JSON)\n try {\n const json = Buffer.from(encodedRequestContext, 'base64').toString('utf-8');\n paramsRequestContext = JSON.parse(json);\n } catch {\n // ignore if still invalid\n }\n }\n }\n } catch {\n // ignore query parsing errors\n }\n }\n\n const requestContext = this.mergeRequestContext({ paramsRequestContext, bodyRequestContext });\n\n // Add relevant contexts to hono context\n c.set('requestContext', requestContext);\n c.set('mastra', this.mastra);\n c.set('registeredTools', this.tools || {});\n c.set('taskStore', this.taskStore);\n c.set('abortSignal', c.req.raw.signal);\n c.set('customRouteAuthConfig', this.customRouteAuthConfig);\n\n return next();\n };\n }\n async stream(route: ServerRoute, res: Context, result: { fullStream: ReadableStream }): Promise<any> {\n res.header('Content-Type', 'text/plain');\n res.header('Transfer-Encoding', 'chunked');\n\n const streamFormat = route.streamFormat || 'stream';\n\n return stream(\n res,\n async stream => {\n const readableStream = result instanceof ReadableStream ? result : result.fullStream;\n const reader = readableStream.getReader();\n\n stream.onAbort(() => {\n void reader.cancel('request aborted');\n });\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n if (value) {\n // Optionally redact sensitive data (system prompts, tool definitions, API keys) before sending to the client\n const shouldRedact = this.streamOptions?.redact ?? true;\n const outputValue = shouldRedact ? redactStreamChunk(value) : value;\n if (streamFormat === 'sse') {\n await stream.write(`data: ${JSON.stringify(outputValue)}\\n\\n`);\n } else {\n await stream.write(JSON.stringify(outputValue) + '\\x1E');\n }\n }\n }\n\n await stream.write('data: [DONE]\\n\\n');\n } catch (error) {\n console.error(error);\n } finally {\n await stream.close();\n }\n },\n async err => {\n console.error(err);\n },\n );\n }\n\n async getParams(route: ServerRoute, request: HonoRequest): Promise<ParsedRequestParams> {\n const urlParams = request.param();\n // Use queries() to get all values for repeated params (e.g., ?tags=a&tags=b -> { tags: ['a', 'b'] })\n const queryParams = normalizeQueryParams(request.queries());\n let body: unknown;\n let bodyParseError: { message: string } | undefined;\n\n if (route.method === 'POST' || route.method === 'PUT' || route.method === 'PATCH') {\n const contentType = request.header('content-type') || '';\n\n if (contentType.includes('multipart/form-data')) {\n try {\n const formData = await request.formData();\n body = await this.parseFormData(formData);\n } catch (error) {\n console.error('Failed to parse multipart form data:', error);\n // Re-throw size limit errors, let others fall through to validation\n if (error instanceof Error && error.message.toLowerCase().includes('size')) {\n throw error;\n }\n bodyParseError = {\n message: error instanceof Error ? error.message : 'Failed to parse multipart form data',\n };\n }\n } else if (contentType.includes('application/json')) {\n // Clone the request to read the body text first\n // This allows us to check if there's actual content before parsing\n const clonedReq = request.raw.clone();\n const bodyText = await clonedReq.text();\n\n if (bodyText && bodyText.trim().length > 0) {\n // There's actual content - try to parse it as JSON\n try {\n body = JSON.parse(bodyText);\n } catch (error) {\n console.error('Failed to parse JSON body:', error);\n // Track JSON parse error to return 400 Bad Request\n bodyParseError = {\n message: error instanceof Error ? error.message : 'Invalid JSON in request body',\n };\n }\n }\n // Empty body is ok - body remains undefined\n }\n }\n return { urlParams, queryParams, body, bodyParseError };\n }\n\n /**\n * Parse FormData into a plain object, converting File objects to Buffers.\n */\n private async parseFormData(formData: FormData): Promise<Record<string, unknown>> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of formData.entries()) {\n if (value instanceof File) {\n const arrayBuffer = await value.arrayBuffer();\n result[key] = Buffer.from(arrayBuffer);\n } else if (typeof value === 'string') {\n // Try to parse JSON strings (like 'options')\n try {\n result[key] = JSON.parse(value);\n } catch {\n result[key] = value;\n }\n } else {\n result[key] = value;\n }\n }\n\n return result;\n }\n\n async sendResponse(route: ServerRoute, response: Context, result: unknown, prefix?: string): Promise<any> {\n const resolvedPrefix = prefix ?? this.prefix ?? '';\n\n if (route.responseType === 'json') {\n return response.json(result as any, 200);\n } else if (route.responseType === 'stream') {\n return this.stream(route, response, result as { fullStream: ReadableStream });\n } else if (route.responseType === 'datastream-response') {\n const fetchResponse = result as globalThis.Response;\n return fetchResponse;\n } else if (route.responseType === 'mcp-http') {\n // MCP Streamable HTTP transport\n const { server, httpPath, mcpOptions: routeMcpOptions } = result as MCPHttpTransportResult;\n const { req, res } = toReqRes(response.req.raw);\n\n try {\n // Merge class-level mcpOptions with route-specific options (route takes precedence)\n const options = { ...this.mcpOptions, ...routeMcpOptions };\n\n await server.startHTTP({\n url: new URL(response.req.url),\n httpPath: `${resolvedPrefix}${httpPath}`,\n req,\n res,\n options: Object.keys(options).length > 0 ? options : undefined,\n });\n return await toFetchResponse(res);\n } catch {\n if (!res.headersSent) {\n res.writeHead(500, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n jsonrpc: '2.0',\n error: { code: -32603, message: 'Internal server error' },\n id: null,\n }),\n );\n return await toFetchResponse(res);\n }\n return await toFetchResponse(res);\n }\n } else if (route.responseType === 'mcp-sse') {\n // MCP SSE transport\n const { server, ssePath, messagePath } = result as MCPSseTransportResult;\n\n try {\n return await server.startHonoSSE({\n url: new URL(response.req.url),\n ssePath: `${resolvedPrefix}${ssePath}`,\n messagePath: `${resolvedPrefix}${messagePath}`,\n context: response,\n });\n } catch {\n return response.json({ error: 'Error handling MCP SSE request' }, 500);\n }\n } else {\n return response.status(500);\n }\n }\n\n async registerRoute(\n app: HonoApp,\n route: ServerRoute,\n { prefix: prefixParam }: { prefix?: string } = {},\n ): Promise<void> {\n // Default prefix to this.prefix if not provided, or empty string\n const prefix = prefixParam ?? this.prefix ?? '';\n\n // Determine if body limits should be applied\n const shouldApplyBodyLimit = this.bodyLimitOptions && ['POST', 'PUT', 'PATCH'].includes(route.method.toUpperCase());\n\n // Get the body size limit for this route (route-specific or default)\n const maxSize = route.maxBodySize ?? this.bodyLimitOptions?.maxSize;\n\n // Build middleware array\n const middlewares: MiddlewareHandler[] = [];\n\n if (shouldApplyBodyLimit && maxSize && this.bodyLimitOptions) {\n middlewares.push(\n bodyLimit({\n maxSize,\n onError: this.bodyLimitOptions.onError as any,\n }),\n );\n }\n\n app[route.method.toLowerCase() as 'get' | 'post' | 'put' | 'delete' | 'patch' | 'all'](\n `${prefix}${route.path}`,\n ...middlewares,\n async (c: Context) => {\n // Check route-level authentication/authorization\n const authError = await this.checkRouteAuth(route, {\n path: c.req.path,\n method: c.req.method,\n getHeader: name => c.req.header(name),\n getQuery: name => c.req.query(name),\n requestContext: c.get('requestContext'),\n });\n\n if (authError) {\n return c.json({ error: authError.error }, authError.status as any);\n }\n\n const params = await this.getParams(route, c.req);\n\n // Return 400 Bad Request if body parsing failed (e.g., malformed JSON)\n if (params.bodyParseError) {\n return c.json(\n {\n error: 'Invalid request body',\n issues: [{ field: 'body', message: params.bodyParseError.message }],\n },\n 400,\n );\n }\n\n if (params.queryParams) {\n try {\n params.queryParams = await this.parseQueryParams(route, params.queryParams);\n } catch (error) {\n console.error('Error parsing query params', error);\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n return c.json(formatZodError(error, 'query parameters'), 400);\n }\n return c.json(\n {\n error: 'Invalid query parameters',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n },\n 400,\n );\n }\n }\n\n if (params.body) {\n try {\n params.body = await this.parseBody(route, params.body);\n } catch (error) {\n console.error('Error parsing body:', error instanceof Error ? error.message : String(error));\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n return c.json(formatZodError(error, 'request body'), 400);\n }\n return c.json(\n {\n error: 'Invalid request body',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n },\n 400,\n );\n }\n }\n\n const handlerParams = {\n ...params.urlParams,\n ...params.queryParams,\n ...(typeof params.body === 'object' ? params.body : {}),\n requestContext: c.get('requestContext'),\n mastra: this.mastra,\n registeredTools: c.get('registeredTools'),\n taskStore: c.get('taskStore'),\n abortSignal: c.get('abortSignal'),\n routePrefix: prefix,\n };\n\n try {\n const result = await route.handler(handlerParams);\n return this.sendResponse(route, c, result, prefix);\n } catch (error) {\n console.error('Error calling handler', error);\n // Check if it's an HTTPException or MastraError with a status code\n if (error && typeof error === 'object') {\n // Check for direct status property (HTTPException)\n if ('status' in error) {\n const status = (error as any).status;\n return c.json({ error: error instanceof Error ? error.message : 'Unknown error' }, status);\n }\n // Check for MastraError with status in details\n if ('details' in error && error.details && typeof error.details === 'object' && 'status' in error.details) {\n const status = (error.details as any).status;\n return c.json({ error: error instanceof Error ? error.message : 'Unknown error' }, status);\n }\n }\n return c.json({ error: error instanceof Error ? error.message : 'Unknown error' }, 500);\n }\n },\n );\n }\n\n registerContextMiddleware(): void {\n this.app.use('*', this.createContextMiddleware());\n }\n\n registerAuthMiddleware(): void {\n const authConfig = this.mastra.getServer()?.auth;\n if (!authConfig) {\n // No auth config, skip registration\n return;\n }\n\n this.app.use('*', authenticationMiddleware);\n this.app.use('*', authorizationMiddleware);\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/hono",
|
|
3
|
-
"version": "1.0.0",
|
|
3
|
+
"version": "1.1.0-alpha.0",
|
|
4
4
|
"description": "Mastra Hono adapter for the server",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
"license": "Apache-2.0",
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"fetch-to-node": "^2.1.0",
|
|
24
|
-
"@mastra/server": "1.0.0"
|
|
24
|
+
"@mastra/server": "1.1.0-alpha.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@types/node": "^20.19.
|
|
27
|
+
"@types/node": "^20.19.30",
|
|
28
28
|
"eslint": "^9.37.0",
|
|
29
|
-
"tsup": "^8.5.
|
|
29
|
+
"tsup": "^8.5.1",
|
|
30
30
|
"typescript": "^5.9.3",
|
|
31
31
|
"vitest": "^3.2.4",
|
|
32
32
|
"hono": "^4.11.3",
|
|
@@ -34,14 +34,14 @@
|
|
|
34
34
|
"@hono/swagger-ui": "^0.5.2",
|
|
35
35
|
"@ai-sdk/openai": "^2.0.62",
|
|
36
36
|
"zod": "^3.25.0",
|
|
37
|
-
"@internal/
|
|
38
|
-
"@internal/storage-test-utils": "0.0.
|
|
39
|
-
"@internal/
|
|
40
|
-
"@mastra/
|
|
41
|
-
"@mastra/
|
|
42
|
-
"@
|
|
43
|
-
"@mastra/
|
|
44
|
-
"@
|
|
37
|
+
"@internal/server-adapter-test-utils": "0.0.2",
|
|
38
|
+
"@internal/storage-test-utils": "0.0.51",
|
|
39
|
+
"@internal/lint": "0.0.55",
|
|
40
|
+
"@mastra/libsql": "1.1.0-alpha.0",
|
|
41
|
+
"@mastra/observability": "1.1.0-alpha.0",
|
|
42
|
+
"@internal/types-builder": "0.0.30",
|
|
43
|
+
"@mastra/core": "1.1.0-alpha.0",
|
|
44
|
+
"@mastra/memory": "1.0.1-alpha.0"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"@mastra/core": ">=1.0.0-0 <2.0.0-0",
|