@mastra/koa 1.2.0 → 1.2.1-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 CHANGED
@@ -1,5 +1,13 @@
1
1
  # @mastra/koa
2
2
 
3
+ ## 1.2.1-alpha.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`0d9efb4`](https://github.com/mastra-ai/mastra/commit/0d9efb47992c34aa90581c18b9f51f774f6252a5), [`5caa13d`](https://github.com/mastra-ai/mastra/commit/5caa13d1b2a496e2565ab124a11de9a51ad3e3b9), [`940163f`](https://github.com/mastra-ai/mastra/commit/940163fc492401d7562301e6f106ccef4fefe06f), [`b260123`](https://github.com/mastra-ai/mastra/commit/b2601234bd093d358c92081a58f9b0befdae52b3), [`47892c8`](https://github.com/mastra-ai/mastra/commit/47892c85708eac348209f99f10f9a5f5267e11c0), [`3f8f1b3`](https://github.com/mastra-ai/mastra/commit/3f8f1b31146d2a8316157171962ad825628aa251), [`45bb78b`](https://github.com/mastra-ai/mastra/commit/45bb78b70bd9db29678fe49476cd9f4ed01bfd0b), [`70eef84`](https://github.com/mastra-ai/mastra/commit/70eef84b8f44493598fdafa2980a0e7283415eda), [`d84e52d`](https://github.com/mastra-ai/mastra/commit/d84e52d0f6511283ddd21ed5fe7f945449d0f799), [`940163f`](https://github.com/mastra-ai/mastra/commit/940163fc492401d7562301e6f106ccef4fefe06f), [`24b80af`](https://github.com/mastra-ai/mastra/commit/24b80af87da93bb84d389340181e17b7477fa9ca), [`608e156`](https://github.com/mastra-ai/mastra/commit/608e156def954c9604c5e3f6d9dfce3bcc7aeab0), [`2b2e157`](https://github.com/mastra-ai/mastra/commit/2b2e157a092cd597d9d3f0000d62b8bb4a7348ed), [`59d30b5`](https://github.com/mastra-ai/mastra/commit/59d30b5d0cb44ea7a1c440e7460dfb57eac9a9b5), [`453693b`](https://github.com/mastra-ai/mastra/commit/453693bf9e265ddccecef901d50da6caaea0fbc6), [`78d1c80`](https://github.com/mastra-ai/mastra/commit/78d1c808ad90201897a300af551bcc1d34458a20), [`c204b63`](https://github.com/mastra-ai/mastra/commit/c204b632d19e66acb6d6e19b11c4540dd6ad5380), [`742a417`](https://github.com/mastra-ai/mastra/commit/742a417896088220a3b5560c354c45c5ca6d88b9)]:
8
+ - @mastra/core@1.6.0-alpha.0
9
+ - @mastra/server@1.6.0-alpha.0
10
+
3
11
  ## 1.2.0
4
12
 
5
13
  ### Minor Changes
package/dist/index.cjs CHANGED
@@ -771,6 +771,26 @@ var MastraServer = class extends serverAdapter.MastraServer {
771
771
  return;
772
772
  }
773
773
  }
774
+ if (params.urlParams) {
775
+ try {
776
+ params.urlParams = await this.parsePathParams(route, params.urlParams);
777
+ } catch (error$1) {
778
+ this.mastra.getLogger()?.error("Error parsing path params", {
779
+ error: error$1 instanceof Error ? { message: error$1.message, stack: error$1.stack } : error$1
780
+ });
781
+ if (error$1 instanceof ZodError) {
782
+ ctx.status = 400;
783
+ ctx.body = error.formatZodError(error$1, "path parameters");
784
+ return;
785
+ }
786
+ ctx.status = 400;
787
+ ctx.body = {
788
+ error: "Invalid path parameters",
789
+ issues: [{ field: "unknown", message: error$1 instanceof Error ? error$1.message : "Unknown error" }]
790
+ };
791
+ return;
792
+ }
793
+ }
774
794
  const handlerParams = {
775
795
  ...params.urlParams,
776
796
  ...params.queryParams,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../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","redactStreamChunk","normalizeQueryParams","busboy","Busboy","error","formatZodError"],"mappings":"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","file":"index.cjs","sourcesContent":["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 {\n canAccessPublicly,\n checkRules,\n defaultAuthConfig,\n isDevPlaygroundRequest,\n isProtectedPath,\n} from '@mastra/server/auth';\nimport type { Context, Middleware, Next } from 'koa';\n\nexport const authenticationMiddleware: Middleware = async (ctx: Context, next: Next) => {\n const mastra = ctx.state.mastra;\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = ctx.state.customRouteAuthConfig;\n\n if (!authConfig) {\n // No auth config, skip authentication\n return next();\n }\n\n const path = String(ctx.path || '/');\n const method = String(ctx.method || 'GET');\n const getHeader = (name: string) => ctx.headers[name.toLowerCase()] as string | undefined;\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {\n // Skip authentication for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(path, method, authConfig, customRouteAuthConfig)) {\n return next();\n }\n\n // Skip authentication for public routes\n if (canAccessPublicly(path, method, authConfig)) {\n return next();\n }\n\n // Get token from header or query\n const authHeader = ctx.headers.authorization;\n let token: string | null = authHeader ? authHeader.replace('Bearer ', '') : null;\n\n const query = ctx.query as Record<string, string>;\n if (!token && query.apiKey) {\n token = query.apiKey || null;\n }\n\n // Handle missing token\n if (!token) {\n ctx.status = 401;\n ctx.body = { error: 'Authentication required' };\n return;\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 // Note: The auth config function signature accepts HonoRequest, but in practice\n // it should work with any request object that has the necessary properties\n user = await authConfig.authenticateToken(token, ctx.request as any);\n } else {\n throw new Error('No token verification method configured');\n }\n\n if (!user) {\n ctx.status = 401;\n ctx.body = { error: 'Invalid or expired token' };\n return;\n }\n\n // Store user in context\n ctx.state.requestContext.set('user', user);\n\n return next();\n } catch (err) {\n mastra.getLogger()?.error('Authentication error', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n });\n ctx.status = 401;\n ctx.body = { error: 'Invalid or expired token' };\n return;\n }\n};\n\nexport const authorizationMiddleware: Middleware = async (ctx: Context, next: Next) => {\n const mastra = ctx.state.mastra;\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = ctx.state.customRouteAuthConfig;\n\n if (!authConfig) {\n // No auth config, skip authorization\n return next();\n }\n\n const path = String(ctx.path || '/');\n const method = String(ctx.method || 'GET');\n const getHeader = (name: string) => ctx.headers[name.toLowerCase()] as string | undefined;\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {\n // Skip authorization for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(path, 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 = ctx.state.requestContext.get('user');\n\n if ('authorizeUser' in authConfig && typeof authConfig.authorizeUser === 'function') {\n try {\n const isAuthorized = await authConfig.authorizeUser(user, ctx.request as any);\n\n if (isAuthorized) {\n return next();\n }\n\n ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n return;\n } catch (err) {\n mastra.getLogger()?.error('Authorization error in authorizeUser', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n });\n ctx.status = 500;\n ctx.body = { error: 'Authorization error' };\n return;\n }\n }\n\n // Client-provided authorization function\n if ('authorize' in authConfig && typeof authConfig.authorize === 'function') {\n try {\n // Note: The authorize function signature expects ContextWithMastra as 4th param\n // For Koa, we pass a compatible object with similar structure\n const context = {\n get: (key: string) => {\n if (key === 'mastra') return ctx.state.mastra;\n if (key === 'requestContext') return ctx.state.requestContext;\n if (key === 'tools') return ctx.state.tools;\n if (key === 'taskStore') return ctx.state.taskStore;\n if (key === 'customRouteAuthConfig') return ctx.state.customRouteAuthConfig;\n return undefined;\n },\n req: ctx.request as any,\n } as any;\n\n const isAuthorized = await authConfig.authorize(path, method, user, context);\n\n if (isAuthorized) {\n return next();\n }\n\n ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n return;\n } catch (err) {\n mastra.getLogger()?.error('Authorization error in authorize', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n path,\n method,\n });\n ctx.status = 500;\n ctx.body = { error: 'Authorization error' };\n return;\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 ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n return;\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 ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n};\n","import { Busboy } from '@fastify/busboy';\nimport 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 type Koa from 'koa';\nimport type { Context, Middleware, Next } from 'koa';\nimport { ZodError } from 'zod';\n\nimport { authenticationMiddleware, authorizationMiddleware } from './auth-middleware';\n\n// Extend Koa types to include Mastra context\ndeclare module 'koa' {\n interface DefaultState {\n mastra: Mastra;\n requestContext: RequestContext;\n tools: ToolsInput;\n abortSignal: AbortSignal;\n taskStore: InMemoryTaskStore;\n customRouteAuthConfig?: Map<string, boolean>;\n }\n interface Request {\n body?: unknown;\n }\n}\n\nexport class MastraServer extends MastraServerBase<Koa, Context, Context> {\n async init() {\n this.registerErrorMiddleware();\n await super.init();\n }\n\n /**\n * Register a global error-handling middleware at the top of the middleware chain.\n * This acts as a safety net for errors that propagate past route handlers\n * (e.g., from auth middleware, context middleware, or when route handlers re-throw).\n *\n * When `server.onError` is configured, calls it and uses the response.\n * Otherwise provides a default JSON error response.\n *\n * Errors are emitted on the app for logging (Koa convention) but NOT re-thrown,\n * so this middleware is the final error boundary. Users who need custom error handling\n * should use `server.onError` or register their own middleware between this and the routes.\n */\n private registerErrorMiddleware(): void {\n this.app.use(async (ctx: Context, next: Next) => {\n try {\n await next();\n } catch (err) {\n // Try onError first (may have already been called in registerRoute,\n // but this catches errors from other middleware too)\n if (await this.handleOnError(err, ctx)) {\n return;\n }\n\n // Default error handling\n const error = err instanceof Error ? err : new Error(String(err));\n let status = 500;\n if (err && typeof err === 'object') {\n if ('status' in err) {\n status = (err as any).status;\n } else if (\n 'details' in err &&\n (err as any).details &&\n typeof (err as any).details === 'object' &&\n 'status' in (err as any).details\n ) {\n status = (err as any).details.status;\n }\n }\n ctx.status = status;\n ctx.body = { error: error.message || 'Unknown error' };\n\n // Emit the error for logging (standard Koa pattern) but don't re-throw\n // since this middleware is the final error boundary.\n ctx.app.emit('error', err, ctx);\n }\n });\n }\n\n /**\n * Try to handle an error using the `server.onError` hook.\n * Creates a minimal context shim compatible with the Hono-style onError signature.\n *\n * @returns true if the error was handled and the response was set on ctx\n */\n private async handleOnError(err: unknown, ctx: Context): Promise<boolean> {\n // Guard against double invocation (route catch → re-throw → error middleware)\n if ((ctx as any)._mastraOnErrorAttempted) return false;\n (ctx as any)._mastraOnErrorAttempted = true;\n\n const onError = this.mastra.getServer()?.onError;\n if (!onError) return false;\n\n const error = err instanceof Error ? err : new Error(String(err));\n\n // Create a minimal context shim compatible with the onError signature\n const shimContext = {\n json: (data: unknown, status: number = 200) =>\n new Response(JSON.stringify(data), {\n status,\n headers: { 'Content-Type': 'application/json' },\n }),\n req: {\n path: ctx.path,\n method: ctx.method,\n header: (name: string) => {\n const value = ctx.headers[name.toLowerCase()];\n if (Array.isArray(value)) return value.join(', ');\n return value;\n },\n url: ctx.url,\n },\n };\n\n try {\n const response = await onError(error, shimContext as any);\n // Apply the Response from onError to the Koa context\n ctx.status = response.status;\n const contentType = response.headers.get('content-type') || '';\n if (contentType.includes('application/json')) {\n ctx.body = await response.json();\n } else {\n ctx.body = await response.text();\n }\n return true;\n } catch (onErrorErr) {\n this.mastra.getLogger()?.error('Error in custom onError handler', {\n error: onErrorErr instanceof Error ? { message: onErrorErr.message, stack: onErrorErr.stack } : onErrorErr,\n });\n return false;\n }\n }\n\n createContextMiddleware(): Middleware {\n return async (ctx: Context, next: Next) => {\n // Parse request context from request body and add to context\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 (ctx.method === 'POST' || ctx.method === 'PUT') {\n const contentType = ctx.headers['content-type'];\n if (contentType?.includes('application/json') && ctx.request.body) {\n const body = ctx.request.body as { requestContext?: Record<string, any> };\n if (body.requestContext) {\n bodyRequestContext = body.requestContext;\n }\n }\n }\n\n // Parse request context from query params (GET)\n if (ctx.method === 'GET') {\n try {\n const query = ctx.query;\n const encodedRequestContext = query.requestContext;\n if (typeof encodedRequestContext === 'string') {\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 // Set context in state object\n ctx.state.requestContext = requestContext;\n ctx.state.mastra = this.mastra;\n ctx.state.tools = this.tools || {};\n if (this.taskStore) {\n ctx.state.taskStore = this.taskStore;\n }\n ctx.state.customRouteAuthConfig = this.customRouteAuthConfig;\n\n // Create abort controller for request cancellation\n const controller = new AbortController();\n ctx.req.on('close', () => {\n // Only abort if the response wasn't successfully completed\n if (!ctx.res.writableEnded) {\n controller.abort();\n }\n });\n ctx.state.abortSignal = controller.signal;\n\n await next();\n };\n }\n\n async stream(route: ServerRoute, ctx: Context, result: { fullStream: ReadableStream }): Promise<void> {\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const streamFormat = route.streamFormat || 'stream';\n\n // Set status and headers via ctx.res directly since we're bypassing Koa's response\n const sseHeaders =\n streamFormat === 'sse'\n ? {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n 'X-Accel-Buffering': 'no',\n }\n : {\n 'Content-Type': 'text/plain',\n };\n\n ctx.res.writeHead(200, {\n ...sseHeaders,\n 'Transfer-Encoding': 'chunked',\n });\n\n const readableStream = result instanceof ReadableStream ? result : result.fullStream;\n const reader = readableStream.getReader();\n\n ctx.res.on('close', () => {\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 ctx.res.write(`data: ${JSON.stringify(outputValue)}\\n\\n`);\n } else {\n ctx.res.write(JSON.stringify(outputValue) + '\\x1E');\n }\n }\n }\n } catch (error) {\n this.mastra.getLogger()?.error('Error in stream processing', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\n } finally {\n ctx.res.end();\n }\n }\n\n async getParams(route: ServerRoute, ctx: Context): Promise<ParsedRequestParams> {\n const urlParams = (ctx.params || {}) as Record<string, string>;\n // Koa's ctx.query is ParsedUrlQuery which is Record<string, string | string[]>\n const queryParams = normalizeQueryParams((ctx.query || {}) as Record<string, unknown>);\n let body: unknown;\n let bodyParseError: { message: string } | undefined;\n\n if (route.method === 'POST' || route.method === 'PUT' || route.method === 'PATCH' || route.method === 'DELETE') {\n const contentType = ctx.headers['content-type'] || '';\n\n if (contentType.includes('multipart/form-data')) {\n try {\n const maxFileSize = route.maxBodySize ?? this.bodyLimitOptions?.maxSize;\n body = await this.parseMultipartFormData(ctx, maxFileSize);\n } catch (error) {\n this.mastra.getLogger()?.error('Failed to parse multipart form data', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\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 {\n body = ctx.request.body;\n }\n }\n\n return { urlParams, queryParams, body, bodyParseError };\n }\n\n /**\n * Parse multipart/form-data using @fastify/busboy.\n * Converts file uploads to Buffers and parses JSON field values.\n *\n * @param ctx - The Koa context object\n * @param maxFileSize - Optional maximum file size in bytes\n */\n private parseMultipartFormData(ctx: Context, maxFileSize?: number): Promise<Record<string, unknown>> {\n return new Promise((resolve, reject) => {\n const result: Record<string, unknown> = {};\n\n const busboy = new Busboy({\n headers: {\n 'content-type': ctx.headers['content-type'] as string,\n },\n limits: maxFileSize ? { fileSize: maxFileSize } : undefined,\n });\n\n busboy.on('file', (fieldname: string, file: NodeJS.ReadableStream) => {\n const chunks: Buffer[] = [];\n let limitExceeded = false;\n\n file.on('data', (chunk: Buffer) => {\n chunks.push(chunk);\n });\n\n file.on('limit', () => {\n limitExceeded = true;\n reject(new Error(`File size limit exceeded${maxFileSize ? ` (max: ${maxFileSize} bytes)` : ''}`));\n });\n\n file.on('end', () => {\n if (!limitExceeded) {\n result[fieldname] = Buffer.concat(chunks);\n }\n });\n });\n\n busboy.on('field', (fieldname: string, value: string) => {\n // Try to parse JSON strings (like 'options')\n try {\n result[fieldname] = JSON.parse(value);\n } catch {\n result[fieldname] = value;\n }\n });\n\n busboy.on('finish', () => {\n resolve(result);\n });\n\n busboy.on('error', (error: Error) => {\n reject(error);\n });\n\n // Pipe the raw request to busboy\n ctx.req.pipe(busboy);\n });\n }\n\n async sendResponse(route: ServerRoute, ctx: Context, result: unknown, prefix?: string): Promise<void> {\n const resolvedPrefix = prefix ?? this.prefix ?? '';\n\n if (route.responseType === 'json') {\n ctx.body = result;\n } else if (route.responseType === 'stream') {\n await this.stream(route, ctx, result as { fullStream: ReadableStream });\n } else if (route.responseType === 'datastream-response') {\n // Handle AI SDK Response objects - pipe Response.body to Koa response\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const fetchResponse = result as globalThis.Response;\n const headers: Record<string, string> = {};\n fetchResponse.headers.forEach((value, key) => {\n headers[key] = value;\n });\n ctx.res.writeHead(fetchResponse.status, headers);\n\n if (fetchResponse.body) {\n const reader = fetchResponse.body.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n ctx.res.write(value);\n }\n } finally {\n ctx.res.end();\n }\n } else {\n ctx.res.end();\n }\n } else if (route.responseType === 'mcp-http') {\n // MCP Streamable HTTP transport\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const { server, httpPath, mcpOptions: routeMcpOptions } = result as MCPHttpTransportResult;\n\n try {\n // Attach parsed body to raw request so MCP server's readJsonBody can use it\n const rawReq = ctx.req as typeof ctx.req & { body?: unknown };\n if (ctx.request.body !== undefined) {\n rawReq.body = ctx.request.body;\n }\n\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(ctx.url, `http://${ctx.headers.host}`),\n httpPath: `${resolvedPrefix}${httpPath}`,\n req: rawReq,\n res: ctx.res,\n options: Object.keys(options).length > 0 ? options : undefined,\n });\n // Response handled by startHTTP\n } catch {\n if (!ctx.res.headersSent) {\n ctx.res.writeHead(500, { 'Content-Type': 'application/json' });\n ctx.res.end(\n JSON.stringify({\n jsonrpc: '2.0',\n error: { code: -32603, message: 'Internal server error' },\n id: null,\n }),\n );\n }\n }\n } else if (route.responseType === 'mcp-sse') {\n // MCP SSE transport\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const { server, ssePath, messagePath } = result as MCPSseTransportResult;\n\n try {\n // Attach parsed body to raw request so MCP server's readJsonBody can use it\n const rawReq = ctx.req as typeof ctx.req & { body?: unknown };\n if (ctx.request.body !== undefined) {\n rawReq.body = ctx.request.body;\n }\n\n await server.startSSE({\n url: new URL(ctx.url, `http://${ctx.headers.host}`),\n ssePath: `${resolvedPrefix}${ssePath}`,\n messagePath: `${resolvedPrefix}${messagePath}`,\n req: rawReq,\n res: ctx.res,\n });\n // Response handled by startSSE\n } catch {\n if (!ctx.res.headersSent) {\n ctx.res.writeHead(500, { 'Content-Type': 'application/json' });\n ctx.res.end(JSON.stringify({ error: 'Error handling MCP SSE request' }));\n }\n }\n } else {\n ctx.status = 500;\n }\n }\n\n async registerRoute(app: Koa, route: ServerRoute, { prefix: prefixParam }: { prefix?: string } = {}): Promise<void> {\n // Default prefix to this.prefix if not provided, or empty string\n const prefix = prefixParam ?? this.prefix ?? '';\n\n const fullPath = `${prefix}${route.path}`;\n\n // Convert Express-style :param to Koa-style :param (they're the same)\n const koaPath = fullPath;\n\n // Define the route handler\n const handler = async (ctx: Context, next: Next) => {\n // Check if this route matches the request\n const pathRegex = this.pathToRegex(koaPath);\n const match = pathRegex.exec(ctx.path);\n\n if (!match) {\n await next();\n return;\n }\n\n // Check HTTP method\n if (route.method.toUpperCase() !== 'ALL' && ctx.method.toUpperCase() !== route.method.toUpperCase()) {\n await next();\n return;\n }\n\n // Extract URL params from regex match\n const paramNames = this.extractParamNames(koaPath);\n ctx.params = {};\n paramNames.forEach((name, index) => {\n ctx.params[name] = match[index + 1];\n });\n\n // Check route-level authentication/authorization\n const authError = await this.checkRouteAuth(route, {\n path: String(ctx.path || '/'),\n method: String(ctx.method || 'GET'),\n getHeader: name => ctx.headers[name.toLowerCase()] as string | undefined,\n getQuery: name => (ctx.query as Record<string, string>)[name],\n requestContext: ctx.state.requestContext,\n });\n\n if (authError) {\n ctx.status = authError.status;\n ctx.body = { error: authError.error };\n return;\n }\n\n const params = await this.getParams(route, ctx);\n\n // Return 400 Bad Request if body parsing failed (e.g., malformed multipart data)\n if (params.bodyParseError) {\n ctx.status = 400;\n ctx.body = {\n error: 'Invalid request body',\n issues: [{ field: 'body', message: params.bodyParseError.message }],\n };\n return;\n }\n\n if (params.queryParams) {\n try {\n params.queryParams = await this.parseQueryParams(route, params.queryParams);\n } catch (error) {\n this.mastra.getLogger()?.error('Error parsing query params', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n ctx.status = 400;\n ctx.body = formatZodError(error, 'query parameters');\n return;\n }\n ctx.status = 400;\n ctx.body = {\n error: 'Invalid query parameters',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n };\n return;\n }\n }\n\n if (params.body) {\n try {\n params.body = await this.parseBody(route, params.body);\n } catch (error) {\n this.mastra.getLogger()?.error('Error parsing body', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n ctx.status = 400;\n ctx.body = formatZodError(error, 'request body');\n return;\n }\n ctx.status = 400;\n ctx.body = {\n error: 'Invalid request body',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n };\n return;\n }\n }\n\n const handlerParams = {\n ...params.urlParams,\n ...params.queryParams,\n ...(typeof params.body === 'object' ? params.body : {}),\n requestContext: ctx.state.requestContext,\n mastra: this.mastra,\n tools: ctx.state.tools,\n taskStore: ctx.state.taskStore,\n abortSignal: ctx.state.abortSignal,\n routePrefix: prefix,\n };\n\n try {\n const result = await route.handler(handlerParams);\n await this.sendResponse(route, ctx, result, prefix);\n } catch (error) {\n this.mastra.getLogger()?.error('Error calling handler', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n path: route.path,\n method: route.method,\n });\n // Attach status code to the error for upstream middleware\n if (error && typeof error === 'object') {\n if (!('status' in error)) {\n // Check for MastraError with status in details\n if ('details' in error && error.details && typeof error.details === 'object' && 'status' in error.details) {\n (error as any).status = (error.details as any).status;\n }\n }\n }\n\n // Try to call server.onError if configured\n if (await this.handleOnError(error, ctx)) {\n return;\n }\n\n // Re-throw so the error propagates up Koa's middleware chain\n throw error;\n }\n };\n\n // Register the middleware\n app.use(handler);\n }\n\n /**\n * Convert Express-style path to regex for matching\n */\n private pathToRegex(path: string): RegExp {\n // First replace :param with a placeholder that won't be affected by escaping\n const PARAM_PLACEHOLDER = '\\x00PARAM\\x00';\n const pathWithPlaceholders = path.replace(/:[^/]+/g, PARAM_PLACEHOLDER);\n\n // Escape all regex meta-characters so the path is treated literally\n const escapedPath = pathWithPlaceholders.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n // Replace placeholders with capture groups and escape forward slashes\n const regexPath = escapedPath.replace(new RegExp(PARAM_PLACEHOLDER, 'g'), '([^/]+)').replace(/\\//g, '\\\\/');\n\n return new RegExp(`^${regexPath}$`);\n }\n\n /**\n * Extract parameter names from path\n */\n private extractParamNames(path: string): string[] {\n const matches = path.match(/:[^/]+/g) || [];\n return matches.map(m => m.slice(1)); // Remove the leading ':'\n }\n\n async registerCustomApiRoutes(): Promise<void> {\n if (!(await this.buildCustomRouteHandler())) return;\n\n this.app.use(async (ctx: Context, next: Next) => {\n const response = await this.handleCustomRouteRequest(\n `${ctx.protocol}://${ctx.host}${ctx.originalUrl || ctx.url}`,\n ctx.method,\n ctx.headers as Record<string, string | string[] | undefined>,\n ctx.request.body,\n ctx.state.requestContext,\n );\n if (!response) return next();\n ctx.respond = false;\n await this.writeCustomRouteResponse(response, ctx.res);\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/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","redactStreamChunk","normalizeQueryParams","busboy","Busboy","error","formatZodError"],"mappings":"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","file":"index.cjs","sourcesContent":["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 {\n canAccessPublicly,\n checkRules,\n defaultAuthConfig,\n isDevPlaygroundRequest,\n isProtectedPath,\n} from '@mastra/server/auth';\nimport type { Context, Middleware, Next } from 'koa';\n\nexport const authenticationMiddleware: Middleware = async (ctx: Context, next: Next) => {\n const mastra = ctx.state.mastra;\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = ctx.state.customRouteAuthConfig;\n\n if (!authConfig) {\n // No auth config, skip authentication\n return next();\n }\n\n const path = String(ctx.path || '/');\n const method = String(ctx.method || 'GET');\n const getHeader = (name: string) => ctx.headers[name.toLowerCase()] as string | undefined;\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {\n // Skip authentication for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(path, method, authConfig, customRouteAuthConfig)) {\n return next();\n }\n\n // Skip authentication for public routes\n if (canAccessPublicly(path, method, authConfig)) {\n return next();\n }\n\n // Get token from header or query\n const authHeader = ctx.headers.authorization;\n let token: string | null = authHeader ? authHeader.replace('Bearer ', '') : null;\n\n const query = ctx.query as Record<string, string>;\n if (!token && query.apiKey) {\n token = query.apiKey || null;\n }\n\n // Handle missing token\n if (!token) {\n ctx.status = 401;\n ctx.body = { error: 'Authentication required' };\n return;\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 // Note: The auth config function signature accepts HonoRequest, but in practice\n // it should work with any request object that has the necessary properties\n user = await authConfig.authenticateToken(token, ctx.request as any);\n } else {\n throw new Error('No token verification method configured');\n }\n\n if (!user) {\n ctx.status = 401;\n ctx.body = { error: 'Invalid or expired token' };\n return;\n }\n\n // Store user in context\n ctx.state.requestContext.set('user', user);\n\n return next();\n } catch (err) {\n mastra.getLogger()?.error('Authentication error', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n });\n ctx.status = 401;\n ctx.body = { error: 'Invalid or expired token' };\n return;\n }\n};\n\nexport const authorizationMiddleware: Middleware = async (ctx: Context, next: Next) => {\n const mastra = ctx.state.mastra;\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = ctx.state.customRouteAuthConfig;\n\n if (!authConfig) {\n // No auth config, skip authorization\n return next();\n }\n\n const path = String(ctx.path || '/');\n const method = String(ctx.method || 'GET');\n const getHeader = (name: string) => ctx.headers[name.toLowerCase()] as string | undefined;\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {\n // Skip authorization for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(path, 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 = ctx.state.requestContext.get('user');\n\n if ('authorizeUser' in authConfig && typeof authConfig.authorizeUser === 'function') {\n try {\n const isAuthorized = await authConfig.authorizeUser(user, ctx.request as any);\n\n if (isAuthorized) {\n return next();\n }\n\n ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n return;\n } catch (err) {\n mastra.getLogger()?.error('Authorization error in authorizeUser', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n });\n ctx.status = 500;\n ctx.body = { error: 'Authorization error' };\n return;\n }\n }\n\n // Client-provided authorization function\n if ('authorize' in authConfig && typeof authConfig.authorize === 'function') {\n try {\n // Note: The authorize function signature expects ContextWithMastra as 4th param\n // For Koa, we pass a compatible object with similar structure\n const context = {\n get: (key: string) => {\n if (key === 'mastra') return ctx.state.mastra;\n if (key === 'requestContext') return ctx.state.requestContext;\n if (key === 'tools') return ctx.state.tools;\n if (key === 'taskStore') return ctx.state.taskStore;\n if (key === 'customRouteAuthConfig') return ctx.state.customRouteAuthConfig;\n return undefined;\n },\n req: ctx.request as any,\n } as any;\n\n const isAuthorized = await authConfig.authorize(path, method, user, context);\n\n if (isAuthorized) {\n return next();\n }\n\n ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n return;\n } catch (err) {\n mastra.getLogger()?.error('Authorization error in authorize', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n path,\n method,\n });\n ctx.status = 500;\n ctx.body = { error: 'Authorization error' };\n return;\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 ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n return;\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 ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n};\n","import { Busboy } from '@fastify/busboy';\nimport 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 type Koa from 'koa';\nimport type { Context, Middleware, Next } from 'koa';\nimport { ZodError } from 'zod';\n\nimport { authenticationMiddleware, authorizationMiddleware } from './auth-middleware';\n\n// Extend Koa types to include Mastra context\ndeclare module 'koa' {\n interface DefaultState {\n mastra: Mastra;\n requestContext: RequestContext;\n tools: ToolsInput;\n abortSignal: AbortSignal;\n taskStore: InMemoryTaskStore;\n customRouteAuthConfig?: Map<string, boolean>;\n }\n interface Request {\n body?: unknown;\n }\n}\n\nexport class MastraServer extends MastraServerBase<Koa, Context, Context> {\n async init() {\n this.registerErrorMiddleware();\n await super.init();\n }\n\n /**\n * Register a global error-handling middleware at the top of the middleware chain.\n * This acts as a safety net for errors that propagate past route handlers\n * (e.g., from auth middleware, context middleware, or when route handlers re-throw).\n *\n * When `server.onError` is configured, calls it and uses the response.\n * Otherwise provides a default JSON error response.\n *\n * Errors are emitted on the app for logging (Koa convention) but NOT re-thrown,\n * so this middleware is the final error boundary. Users who need custom error handling\n * should use `server.onError` or register their own middleware between this and the routes.\n */\n private registerErrorMiddleware(): void {\n this.app.use(async (ctx: Context, next: Next) => {\n try {\n await next();\n } catch (err) {\n // Try onError first (may have already been called in registerRoute,\n // but this catches errors from other middleware too)\n if (await this.handleOnError(err, ctx)) {\n return;\n }\n\n // Default error handling\n const error = err instanceof Error ? err : new Error(String(err));\n let status = 500;\n if (err && typeof err === 'object') {\n if ('status' in err) {\n status = (err as any).status;\n } else if (\n 'details' in err &&\n (err as any).details &&\n typeof (err as any).details === 'object' &&\n 'status' in (err as any).details\n ) {\n status = (err as any).details.status;\n }\n }\n ctx.status = status;\n ctx.body = { error: error.message || 'Unknown error' };\n\n // Emit the error for logging (standard Koa pattern) but don't re-throw\n // since this middleware is the final error boundary.\n ctx.app.emit('error', err, ctx);\n }\n });\n }\n\n /**\n * Try to handle an error using the `server.onError` hook.\n * Creates a minimal context shim compatible with the Hono-style onError signature.\n *\n * @returns true if the error was handled and the response was set on ctx\n */\n private async handleOnError(err: unknown, ctx: Context): Promise<boolean> {\n // Guard against double invocation (route catch → re-throw → error middleware)\n if ((ctx as any)._mastraOnErrorAttempted) return false;\n (ctx as any)._mastraOnErrorAttempted = true;\n\n const onError = this.mastra.getServer()?.onError;\n if (!onError) return false;\n\n const error = err instanceof Error ? err : new Error(String(err));\n\n // Create a minimal context shim compatible with the onError signature\n const shimContext = {\n json: (data: unknown, status: number = 200) =>\n new Response(JSON.stringify(data), {\n status,\n headers: { 'Content-Type': 'application/json' },\n }),\n req: {\n path: ctx.path,\n method: ctx.method,\n header: (name: string) => {\n const value = ctx.headers[name.toLowerCase()];\n if (Array.isArray(value)) return value.join(', ');\n return value;\n },\n url: ctx.url,\n },\n };\n\n try {\n const response = await onError(error, shimContext as any);\n // Apply the Response from onError to the Koa context\n ctx.status = response.status;\n const contentType = response.headers.get('content-type') || '';\n if (contentType.includes('application/json')) {\n ctx.body = await response.json();\n } else {\n ctx.body = await response.text();\n }\n return true;\n } catch (onErrorErr) {\n this.mastra.getLogger()?.error('Error in custom onError handler', {\n error: onErrorErr instanceof Error ? { message: onErrorErr.message, stack: onErrorErr.stack } : onErrorErr,\n });\n return false;\n }\n }\n\n createContextMiddleware(): Middleware {\n return async (ctx: Context, next: Next) => {\n // Parse request context from request body and add to context\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 (ctx.method === 'POST' || ctx.method === 'PUT') {\n const contentType = ctx.headers['content-type'];\n if (contentType?.includes('application/json') && ctx.request.body) {\n const body = ctx.request.body as { requestContext?: Record<string, any> };\n if (body.requestContext) {\n bodyRequestContext = body.requestContext;\n }\n }\n }\n\n // Parse request context from query params (GET)\n if (ctx.method === 'GET') {\n try {\n const query = ctx.query;\n const encodedRequestContext = query.requestContext;\n if (typeof encodedRequestContext === 'string') {\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 // Set context in state object\n ctx.state.requestContext = requestContext;\n ctx.state.mastra = this.mastra;\n ctx.state.tools = this.tools || {};\n if (this.taskStore) {\n ctx.state.taskStore = this.taskStore;\n }\n ctx.state.customRouteAuthConfig = this.customRouteAuthConfig;\n\n // Create abort controller for request cancellation\n const controller = new AbortController();\n ctx.req.on('close', () => {\n // Only abort if the response wasn't successfully completed\n if (!ctx.res.writableEnded) {\n controller.abort();\n }\n });\n ctx.state.abortSignal = controller.signal;\n\n await next();\n };\n }\n\n async stream(route: ServerRoute, ctx: Context, result: { fullStream: ReadableStream }): Promise<void> {\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const streamFormat = route.streamFormat || 'stream';\n\n // Set status and headers via ctx.res directly since we're bypassing Koa's response\n const sseHeaders =\n streamFormat === 'sse'\n ? {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n 'X-Accel-Buffering': 'no',\n }\n : {\n 'Content-Type': 'text/plain',\n };\n\n ctx.res.writeHead(200, {\n ...sseHeaders,\n 'Transfer-Encoding': 'chunked',\n });\n\n const readableStream = result instanceof ReadableStream ? result : result.fullStream;\n const reader = readableStream.getReader();\n\n ctx.res.on('close', () => {\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 ctx.res.write(`data: ${JSON.stringify(outputValue)}\\n\\n`);\n } else {\n ctx.res.write(JSON.stringify(outputValue) + '\\x1E');\n }\n }\n }\n } catch (error) {\n this.mastra.getLogger()?.error('Error in stream processing', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\n } finally {\n ctx.res.end();\n }\n }\n\n async getParams(route: ServerRoute, ctx: Context): Promise<ParsedRequestParams> {\n const urlParams = (ctx.params || {}) as Record<string, string>;\n // Koa's ctx.query is ParsedUrlQuery which is Record<string, string | string[]>\n const queryParams = normalizeQueryParams((ctx.query || {}) as Record<string, unknown>);\n let body: unknown;\n let bodyParseError: { message: string } | undefined;\n\n if (route.method === 'POST' || route.method === 'PUT' || route.method === 'PATCH' || route.method === 'DELETE') {\n const contentType = ctx.headers['content-type'] || '';\n\n if (contentType.includes('multipart/form-data')) {\n try {\n const maxFileSize = route.maxBodySize ?? this.bodyLimitOptions?.maxSize;\n body = await this.parseMultipartFormData(ctx, maxFileSize);\n } catch (error) {\n this.mastra.getLogger()?.error('Failed to parse multipart form data', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\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 {\n body = ctx.request.body;\n }\n }\n\n return { urlParams, queryParams, body, bodyParseError };\n }\n\n /**\n * Parse multipart/form-data using @fastify/busboy.\n * Converts file uploads to Buffers and parses JSON field values.\n *\n * @param ctx - The Koa context object\n * @param maxFileSize - Optional maximum file size in bytes\n */\n private parseMultipartFormData(ctx: Context, maxFileSize?: number): Promise<Record<string, unknown>> {\n return new Promise((resolve, reject) => {\n const result: Record<string, unknown> = {};\n\n const busboy = new Busboy({\n headers: {\n 'content-type': ctx.headers['content-type'] as string,\n },\n limits: maxFileSize ? { fileSize: maxFileSize } : undefined,\n });\n\n busboy.on('file', (fieldname: string, file: NodeJS.ReadableStream) => {\n const chunks: Buffer[] = [];\n let limitExceeded = false;\n\n file.on('data', (chunk: Buffer) => {\n chunks.push(chunk);\n });\n\n file.on('limit', () => {\n limitExceeded = true;\n reject(new Error(`File size limit exceeded${maxFileSize ? ` (max: ${maxFileSize} bytes)` : ''}`));\n });\n\n file.on('end', () => {\n if (!limitExceeded) {\n result[fieldname] = Buffer.concat(chunks);\n }\n });\n });\n\n busboy.on('field', (fieldname: string, value: string) => {\n // Try to parse JSON strings (like 'options')\n try {\n result[fieldname] = JSON.parse(value);\n } catch {\n result[fieldname] = value;\n }\n });\n\n busboy.on('finish', () => {\n resolve(result);\n });\n\n busboy.on('error', (error: Error) => {\n reject(error);\n });\n\n // Pipe the raw request to busboy\n ctx.req.pipe(busboy);\n });\n }\n\n async sendResponse(route: ServerRoute, ctx: Context, result: unknown, prefix?: string): Promise<void> {\n const resolvedPrefix = prefix ?? this.prefix ?? '';\n\n if (route.responseType === 'json') {\n ctx.body = result;\n } else if (route.responseType === 'stream') {\n await this.stream(route, ctx, result as { fullStream: ReadableStream });\n } else if (route.responseType === 'datastream-response') {\n // Handle AI SDK Response objects - pipe Response.body to Koa response\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const fetchResponse = result as globalThis.Response;\n const headers: Record<string, string> = {};\n fetchResponse.headers.forEach((value, key) => {\n headers[key] = value;\n });\n ctx.res.writeHead(fetchResponse.status, headers);\n\n if (fetchResponse.body) {\n const reader = fetchResponse.body.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n ctx.res.write(value);\n }\n } finally {\n ctx.res.end();\n }\n } else {\n ctx.res.end();\n }\n } else if (route.responseType === 'mcp-http') {\n // MCP Streamable HTTP transport\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const { server, httpPath, mcpOptions: routeMcpOptions } = result as MCPHttpTransportResult;\n\n try {\n // Attach parsed body to raw request so MCP server's readJsonBody can use it\n const rawReq = ctx.req as typeof ctx.req & { body?: unknown };\n if (ctx.request.body !== undefined) {\n rawReq.body = ctx.request.body;\n }\n\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(ctx.url, `http://${ctx.headers.host}`),\n httpPath: `${resolvedPrefix}${httpPath}`,\n req: rawReq,\n res: ctx.res,\n options: Object.keys(options).length > 0 ? options : undefined,\n });\n // Response handled by startHTTP\n } catch {\n if (!ctx.res.headersSent) {\n ctx.res.writeHead(500, { 'Content-Type': 'application/json' });\n ctx.res.end(\n JSON.stringify({\n jsonrpc: '2.0',\n error: { code: -32603, message: 'Internal server error' },\n id: null,\n }),\n );\n }\n }\n } else if (route.responseType === 'mcp-sse') {\n // MCP SSE transport\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const { server, ssePath, messagePath } = result as MCPSseTransportResult;\n\n try {\n // Attach parsed body to raw request so MCP server's readJsonBody can use it\n const rawReq = ctx.req as typeof ctx.req & { body?: unknown };\n if (ctx.request.body !== undefined) {\n rawReq.body = ctx.request.body;\n }\n\n await server.startSSE({\n url: new URL(ctx.url, `http://${ctx.headers.host}`),\n ssePath: `${resolvedPrefix}${ssePath}`,\n messagePath: `${resolvedPrefix}${messagePath}`,\n req: rawReq,\n res: ctx.res,\n });\n // Response handled by startSSE\n } catch {\n if (!ctx.res.headersSent) {\n ctx.res.writeHead(500, { 'Content-Type': 'application/json' });\n ctx.res.end(JSON.stringify({ error: 'Error handling MCP SSE request' }));\n }\n }\n } else {\n ctx.status = 500;\n }\n }\n\n async registerRoute(app: Koa, route: ServerRoute, { prefix: prefixParam }: { prefix?: string } = {}): Promise<void> {\n // Default prefix to this.prefix if not provided, or empty string\n const prefix = prefixParam ?? this.prefix ?? '';\n\n const fullPath = `${prefix}${route.path}`;\n\n // Convert Express-style :param to Koa-style :param (they're the same)\n const koaPath = fullPath;\n\n // Define the route handler\n const handler = async (ctx: Context, next: Next) => {\n // Check if this route matches the request\n const pathRegex = this.pathToRegex(koaPath);\n const match = pathRegex.exec(ctx.path);\n\n if (!match) {\n await next();\n return;\n }\n\n // Check HTTP method\n if (route.method.toUpperCase() !== 'ALL' && ctx.method.toUpperCase() !== route.method.toUpperCase()) {\n await next();\n return;\n }\n\n // Extract URL params from regex match\n const paramNames = this.extractParamNames(koaPath);\n ctx.params = {};\n paramNames.forEach((name, index) => {\n ctx.params[name] = match[index + 1];\n });\n\n // Check route-level authentication/authorization\n const authError = await this.checkRouteAuth(route, {\n path: String(ctx.path || '/'),\n method: String(ctx.method || 'GET'),\n getHeader: name => ctx.headers[name.toLowerCase()] as string | undefined,\n getQuery: name => (ctx.query as Record<string, string>)[name],\n requestContext: ctx.state.requestContext,\n });\n\n if (authError) {\n ctx.status = authError.status;\n ctx.body = { error: authError.error };\n return;\n }\n\n const params = await this.getParams(route, ctx);\n\n // Return 400 Bad Request if body parsing failed (e.g., malformed multipart data)\n if (params.bodyParseError) {\n ctx.status = 400;\n ctx.body = {\n error: 'Invalid request body',\n issues: [{ field: 'body', message: params.bodyParseError.message }],\n };\n return;\n }\n\n if (params.queryParams) {\n try {\n params.queryParams = await this.parseQueryParams(route, params.queryParams);\n } catch (error) {\n this.mastra.getLogger()?.error('Error parsing query params', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n ctx.status = 400;\n ctx.body = formatZodError(error, 'query parameters');\n return;\n }\n ctx.status = 400;\n ctx.body = {\n error: 'Invalid query parameters',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n };\n return;\n }\n }\n\n if (params.body) {\n try {\n params.body = await this.parseBody(route, params.body);\n } catch (error) {\n this.mastra.getLogger()?.error('Error parsing body', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n ctx.status = 400;\n ctx.body = formatZodError(error, 'request body');\n return;\n }\n ctx.status = 400;\n ctx.body = {\n error: 'Invalid request body',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n };\n return;\n }\n }\n\n // Parse path params through pathParamSchema for type coercion (e.g., z.coerce.number())\n if (params.urlParams) {\n try {\n params.urlParams = await this.parsePathParams(route, params.urlParams);\n } catch (error) {\n this.mastra.getLogger()?.error('Error parsing path params', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\n if (error instanceof ZodError) {\n ctx.status = 400;\n ctx.body = formatZodError(error, 'path parameters');\n return;\n }\n ctx.status = 400;\n ctx.body = {\n error: 'Invalid path parameters',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n };\n return;\n }\n }\n\n const handlerParams = {\n ...params.urlParams,\n ...params.queryParams,\n ...(typeof params.body === 'object' ? params.body : {}),\n requestContext: ctx.state.requestContext,\n mastra: this.mastra,\n tools: ctx.state.tools,\n taskStore: ctx.state.taskStore,\n abortSignal: ctx.state.abortSignal,\n routePrefix: prefix,\n };\n\n try {\n const result = await route.handler(handlerParams);\n await this.sendResponse(route, ctx, result, prefix);\n } catch (error) {\n this.mastra.getLogger()?.error('Error calling handler', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n path: route.path,\n method: route.method,\n });\n // Attach status code to the error for upstream middleware\n if (error && typeof error === 'object') {\n if (!('status' in error)) {\n // Check for MastraError with status in details\n if ('details' in error && error.details && typeof error.details === 'object' && 'status' in error.details) {\n (error as any).status = (error.details as any).status;\n }\n }\n }\n\n // Try to call server.onError if configured\n if (await this.handleOnError(error, ctx)) {\n return;\n }\n\n // Re-throw so the error propagates up Koa's middleware chain\n throw error;\n }\n };\n\n // Register the middleware\n app.use(handler);\n }\n\n /**\n * Convert Express-style path to regex for matching\n */\n private pathToRegex(path: string): RegExp {\n // First replace :param with a placeholder that won't be affected by escaping\n const PARAM_PLACEHOLDER = '\\x00PARAM\\x00';\n const pathWithPlaceholders = path.replace(/:[^/]+/g, PARAM_PLACEHOLDER);\n\n // Escape all regex meta-characters so the path is treated literally\n const escapedPath = pathWithPlaceholders.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n // Replace placeholders with capture groups and escape forward slashes\n const regexPath = escapedPath.replace(new RegExp(PARAM_PLACEHOLDER, 'g'), '([^/]+)').replace(/\\//g, '\\\\/');\n\n return new RegExp(`^${regexPath}$`);\n }\n\n /**\n * Extract parameter names from path\n */\n private extractParamNames(path: string): string[] {\n const matches = path.match(/:[^/]+/g) || [];\n return matches.map(m => m.slice(1)); // Remove the leading ':'\n }\n\n async registerCustomApiRoutes(): Promise<void> {\n if (!(await this.buildCustomRouteHandler())) return;\n\n this.app.use(async (ctx: Context, next: Next) => {\n const response = await this.handleCustomRouteRequest(\n `${ctx.protocol}://${ctx.host}${ctx.originalUrl || ctx.url}`,\n ctx.method,\n ctx.headers as Record<string, string | string[] | undefined>,\n ctx.request.body,\n ctx.state.requestContext,\n );\n if (!response) return next();\n ctx.respond = false;\n await this.writeCustomRouteResponse(response, ctx.res);\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 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,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;AACvC,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAMrD,OAAO,QAAQ,KAAK,CAAC;IACnB,UAAU,YAAY;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,cAAc,CAAC;QAC/B,KAAK,EAAE,UAAU,CAAC;QAClB,WAAW,EAAE,WAAW,CAAC;QACzB,SAAS,EAAE,iBAAiB,CAAC;QAC7B,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC9C;IACD,UAAU,OAAO;QACf,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB;CACF;AAED,qBAAa,YAAa,SAAQ,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;IACjE,IAAI;IAKV;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,uBAAuB;IAoC/B;;;;;OAKG;YACW,aAAa;IAgD3B,uBAAuB,IAAI,UAAU;IAkE/B,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;QAAE,UAAU,EAAE,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwD/F,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAkC/E;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAqDxB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuG/F,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqJnH;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKnB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9C,yBAAyB,IAAI,IAAI;IAIjC,sBAAsB,IAAI,IAAI;CAU/B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,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;AACvC,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAMrD,OAAO,QAAQ,KAAK,CAAC;IACnB,UAAU,YAAY;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,cAAc,CAAC;QAC/B,KAAK,EAAE,UAAU,CAAC;QAClB,WAAW,EAAE,WAAW,CAAC;QACzB,SAAS,EAAE,iBAAiB,CAAC;QAC7B,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC9C;IACD,UAAU,OAAO;QACf,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB;CACF;AAED,qBAAa,YAAa,SAAQ,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;IACjE,IAAI;IAKV;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,uBAAuB;IAoC/B;;;;;OAKG;YACW,aAAa;IAgD3B,uBAAuB,IAAI,UAAU;IAkE/B,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;QAAE,UAAU,EAAE,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwD/F,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAkC/E;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAqDxB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuG/F,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2KnH;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKnB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9C,yBAAyB,IAAI,IAAI;IAIjC,sBAAsB,IAAI,IAAI;CAU/B"}
package/dist/index.js CHANGED
@@ -769,6 +769,26 @@ var MastraServer = class extends MastraServer$1 {
769
769
  return;
770
770
  }
771
771
  }
772
+ if (params.urlParams) {
773
+ try {
774
+ params.urlParams = await this.parsePathParams(route, params.urlParams);
775
+ } catch (error) {
776
+ this.mastra.getLogger()?.error("Error parsing path params", {
777
+ error: error instanceof Error ? { message: error.message, stack: error.stack } : error
778
+ });
779
+ if (error instanceof ZodError) {
780
+ ctx.status = 400;
781
+ ctx.body = formatZodError(error, "path parameters");
782
+ return;
783
+ }
784
+ ctx.status = 400;
785
+ ctx.body = {
786
+ error: "Invalid path parameters",
787
+ issues: [{ field: "unknown", message: error instanceof Error ? error.message : "Unknown error" }]
788
+ };
789
+ return;
790
+ }
791
+ }
772
792
  const handlerParams = {
773
793
  ...params.urlParams,
774
794
  ...params.queryParams,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../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"],"mappings":"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","file":"index.js","sourcesContent":["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 {\n canAccessPublicly,\n checkRules,\n defaultAuthConfig,\n isDevPlaygroundRequest,\n isProtectedPath,\n} from '@mastra/server/auth';\nimport type { Context, Middleware, Next } from 'koa';\n\nexport const authenticationMiddleware: Middleware = async (ctx: Context, next: Next) => {\n const mastra = ctx.state.mastra;\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = ctx.state.customRouteAuthConfig;\n\n if (!authConfig) {\n // No auth config, skip authentication\n return next();\n }\n\n const path = String(ctx.path || '/');\n const method = String(ctx.method || 'GET');\n const getHeader = (name: string) => ctx.headers[name.toLowerCase()] as string | undefined;\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {\n // Skip authentication for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(path, method, authConfig, customRouteAuthConfig)) {\n return next();\n }\n\n // Skip authentication for public routes\n if (canAccessPublicly(path, method, authConfig)) {\n return next();\n }\n\n // Get token from header or query\n const authHeader = ctx.headers.authorization;\n let token: string | null = authHeader ? authHeader.replace('Bearer ', '') : null;\n\n const query = ctx.query as Record<string, string>;\n if (!token && query.apiKey) {\n token = query.apiKey || null;\n }\n\n // Handle missing token\n if (!token) {\n ctx.status = 401;\n ctx.body = { error: 'Authentication required' };\n return;\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 // Note: The auth config function signature accepts HonoRequest, but in practice\n // it should work with any request object that has the necessary properties\n user = await authConfig.authenticateToken(token, ctx.request as any);\n } else {\n throw new Error('No token verification method configured');\n }\n\n if (!user) {\n ctx.status = 401;\n ctx.body = { error: 'Invalid or expired token' };\n return;\n }\n\n // Store user in context\n ctx.state.requestContext.set('user', user);\n\n return next();\n } catch (err) {\n mastra.getLogger()?.error('Authentication error', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n });\n ctx.status = 401;\n ctx.body = { error: 'Invalid or expired token' };\n return;\n }\n};\n\nexport const authorizationMiddleware: Middleware = async (ctx: Context, next: Next) => {\n const mastra = ctx.state.mastra;\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = ctx.state.customRouteAuthConfig;\n\n if (!authConfig) {\n // No auth config, skip authorization\n return next();\n }\n\n const path = String(ctx.path || '/');\n const method = String(ctx.method || 'GET');\n const getHeader = (name: string) => ctx.headers[name.toLowerCase()] as string | undefined;\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {\n // Skip authorization for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(path, 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 = ctx.state.requestContext.get('user');\n\n if ('authorizeUser' in authConfig && typeof authConfig.authorizeUser === 'function') {\n try {\n const isAuthorized = await authConfig.authorizeUser(user, ctx.request as any);\n\n if (isAuthorized) {\n return next();\n }\n\n ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n return;\n } catch (err) {\n mastra.getLogger()?.error('Authorization error in authorizeUser', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n });\n ctx.status = 500;\n ctx.body = { error: 'Authorization error' };\n return;\n }\n }\n\n // Client-provided authorization function\n if ('authorize' in authConfig && typeof authConfig.authorize === 'function') {\n try {\n // Note: The authorize function signature expects ContextWithMastra as 4th param\n // For Koa, we pass a compatible object with similar structure\n const context = {\n get: (key: string) => {\n if (key === 'mastra') return ctx.state.mastra;\n if (key === 'requestContext') return ctx.state.requestContext;\n if (key === 'tools') return ctx.state.tools;\n if (key === 'taskStore') return ctx.state.taskStore;\n if (key === 'customRouteAuthConfig') return ctx.state.customRouteAuthConfig;\n return undefined;\n },\n req: ctx.request as any,\n } as any;\n\n const isAuthorized = await authConfig.authorize(path, method, user, context);\n\n if (isAuthorized) {\n return next();\n }\n\n ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n return;\n } catch (err) {\n mastra.getLogger()?.error('Authorization error in authorize', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n path,\n method,\n });\n ctx.status = 500;\n ctx.body = { error: 'Authorization error' };\n return;\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 ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n return;\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 ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n};\n","import { Busboy } from '@fastify/busboy';\nimport 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 type Koa from 'koa';\nimport type { Context, Middleware, Next } from 'koa';\nimport { ZodError } from 'zod';\n\nimport { authenticationMiddleware, authorizationMiddleware } from './auth-middleware';\n\n// Extend Koa types to include Mastra context\ndeclare module 'koa' {\n interface DefaultState {\n mastra: Mastra;\n requestContext: RequestContext;\n tools: ToolsInput;\n abortSignal: AbortSignal;\n taskStore: InMemoryTaskStore;\n customRouteAuthConfig?: Map<string, boolean>;\n }\n interface Request {\n body?: unknown;\n }\n}\n\nexport class MastraServer extends MastraServerBase<Koa, Context, Context> {\n async init() {\n this.registerErrorMiddleware();\n await super.init();\n }\n\n /**\n * Register a global error-handling middleware at the top of the middleware chain.\n * This acts as a safety net for errors that propagate past route handlers\n * (e.g., from auth middleware, context middleware, or when route handlers re-throw).\n *\n * When `server.onError` is configured, calls it and uses the response.\n * Otherwise provides a default JSON error response.\n *\n * Errors are emitted on the app for logging (Koa convention) but NOT re-thrown,\n * so this middleware is the final error boundary. Users who need custom error handling\n * should use `server.onError` or register their own middleware between this and the routes.\n */\n private registerErrorMiddleware(): void {\n this.app.use(async (ctx: Context, next: Next) => {\n try {\n await next();\n } catch (err) {\n // Try onError first (may have already been called in registerRoute,\n // but this catches errors from other middleware too)\n if (await this.handleOnError(err, ctx)) {\n return;\n }\n\n // Default error handling\n const error = err instanceof Error ? err : new Error(String(err));\n let status = 500;\n if (err && typeof err === 'object') {\n if ('status' in err) {\n status = (err as any).status;\n } else if (\n 'details' in err &&\n (err as any).details &&\n typeof (err as any).details === 'object' &&\n 'status' in (err as any).details\n ) {\n status = (err as any).details.status;\n }\n }\n ctx.status = status;\n ctx.body = { error: error.message || 'Unknown error' };\n\n // Emit the error for logging (standard Koa pattern) but don't re-throw\n // since this middleware is the final error boundary.\n ctx.app.emit('error', err, ctx);\n }\n });\n }\n\n /**\n * Try to handle an error using the `server.onError` hook.\n * Creates a minimal context shim compatible with the Hono-style onError signature.\n *\n * @returns true if the error was handled and the response was set on ctx\n */\n private async handleOnError(err: unknown, ctx: Context): Promise<boolean> {\n // Guard against double invocation (route catch → re-throw → error middleware)\n if ((ctx as any)._mastraOnErrorAttempted) return false;\n (ctx as any)._mastraOnErrorAttempted = true;\n\n const onError = this.mastra.getServer()?.onError;\n if (!onError) return false;\n\n const error = err instanceof Error ? err : new Error(String(err));\n\n // Create a minimal context shim compatible with the onError signature\n const shimContext = {\n json: (data: unknown, status: number = 200) =>\n new Response(JSON.stringify(data), {\n status,\n headers: { 'Content-Type': 'application/json' },\n }),\n req: {\n path: ctx.path,\n method: ctx.method,\n header: (name: string) => {\n const value = ctx.headers[name.toLowerCase()];\n if (Array.isArray(value)) return value.join(', ');\n return value;\n },\n url: ctx.url,\n },\n };\n\n try {\n const response = await onError(error, shimContext as any);\n // Apply the Response from onError to the Koa context\n ctx.status = response.status;\n const contentType = response.headers.get('content-type') || '';\n if (contentType.includes('application/json')) {\n ctx.body = await response.json();\n } else {\n ctx.body = await response.text();\n }\n return true;\n } catch (onErrorErr) {\n this.mastra.getLogger()?.error('Error in custom onError handler', {\n error: onErrorErr instanceof Error ? { message: onErrorErr.message, stack: onErrorErr.stack } : onErrorErr,\n });\n return false;\n }\n }\n\n createContextMiddleware(): Middleware {\n return async (ctx: Context, next: Next) => {\n // Parse request context from request body and add to context\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 (ctx.method === 'POST' || ctx.method === 'PUT') {\n const contentType = ctx.headers['content-type'];\n if (contentType?.includes('application/json') && ctx.request.body) {\n const body = ctx.request.body as { requestContext?: Record<string, any> };\n if (body.requestContext) {\n bodyRequestContext = body.requestContext;\n }\n }\n }\n\n // Parse request context from query params (GET)\n if (ctx.method === 'GET') {\n try {\n const query = ctx.query;\n const encodedRequestContext = query.requestContext;\n if (typeof encodedRequestContext === 'string') {\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 // Set context in state object\n ctx.state.requestContext = requestContext;\n ctx.state.mastra = this.mastra;\n ctx.state.tools = this.tools || {};\n if (this.taskStore) {\n ctx.state.taskStore = this.taskStore;\n }\n ctx.state.customRouteAuthConfig = this.customRouteAuthConfig;\n\n // Create abort controller for request cancellation\n const controller = new AbortController();\n ctx.req.on('close', () => {\n // Only abort if the response wasn't successfully completed\n if (!ctx.res.writableEnded) {\n controller.abort();\n }\n });\n ctx.state.abortSignal = controller.signal;\n\n await next();\n };\n }\n\n async stream(route: ServerRoute, ctx: Context, result: { fullStream: ReadableStream }): Promise<void> {\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const streamFormat = route.streamFormat || 'stream';\n\n // Set status and headers via ctx.res directly since we're bypassing Koa's response\n const sseHeaders =\n streamFormat === 'sse'\n ? {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n 'X-Accel-Buffering': 'no',\n }\n : {\n 'Content-Type': 'text/plain',\n };\n\n ctx.res.writeHead(200, {\n ...sseHeaders,\n 'Transfer-Encoding': 'chunked',\n });\n\n const readableStream = result instanceof ReadableStream ? result : result.fullStream;\n const reader = readableStream.getReader();\n\n ctx.res.on('close', () => {\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 ctx.res.write(`data: ${JSON.stringify(outputValue)}\\n\\n`);\n } else {\n ctx.res.write(JSON.stringify(outputValue) + '\\x1E');\n }\n }\n }\n } catch (error) {\n this.mastra.getLogger()?.error('Error in stream processing', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\n } finally {\n ctx.res.end();\n }\n }\n\n async getParams(route: ServerRoute, ctx: Context): Promise<ParsedRequestParams> {\n const urlParams = (ctx.params || {}) as Record<string, string>;\n // Koa's ctx.query is ParsedUrlQuery which is Record<string, string | string[]>\n const queryParams = normalizeQueryParams((ctx.query || {}) as Record<string, unknown>);\n let body: unknown;\n let bodyParseError: { message: string } | undefined;\n\n if (route.method === 'POST' || route.method === 'PUT' || route.method === 'PATCH' || route.method === 'DELETE') {\n const contentType = ctx.headers['content-type'] || '';\n\n if (contentType.includes('multipart/form-data')) {\n try {\n const maxFileSize = route.maxBodySize ?? this.bodyLimitOptions?.maxSize;\n body = await this.parseMultipartFormData(ctx, maxFileSize);\n } catch (error) {\n this.mastra.getLogger()?.error('Failed to parse multipart form data', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\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 {\n body = ctx.request.body;\n }\n }\n\n return { urlParams, queryParams, body, bodyParseError };\n }\n\n /**\n * Parse multipart/form-data using @fastify/busboy.\n * Converts file uploads to Buffers and parses JSON field values.\n *\n * @param ctx - The Koa context object\n * @param maxFileSize - Optional maximum file size in bytes\n */\n private parseMultipartFormData(ctx: Context, maxFileSize?: number): Promise<Record<string, unknown>> {\n return new Promise((resolve, reject) => {\n const result: Record<string, unknown> = {};\n\n const busboy = new Busboy({\n headers: {\n 'content-type': ctx.headers['content-type'] as string,\n },\n limits: maxFileSize ? { fileSize: maxFileSize } : undefined,\n });\n\n busboy.on('file', (fieldname: string, file: NodeJS.ReadableStream) => {\n const chunks: Buffer[] = [];\n let limitExceeded = false;\n\n file.on('data', (chunk: Buffer) => {\n chunks.push(chunk);\n });\n\n file.on('limit', () => {\n limitExceeded = true;\n reject(new Error(`File size limit exceeded${maxFileSize ? ` (max: ${maxFileSize} bytes)` : ''}`));\n });\n\n file.on('end', () => {\n if (!limitExceeded) {\n result[fieldname] = Buffer.concat(chunks);\n }\n });\n });\n\n busboy.on('field', (fieldname: string, value: string) => {\n // Try to parse JSON strings (like 'options')\n try {\n result[fieldname] = JSON.parse(value);\n } catch {\n result[fieldname] = value;\n }\n });\n\n busboy.on('finish', () => {\n resolve(result);\n });\n\n busboy.on('error', (error: Error) => {\n reject(error);\n });\n\n // Pipe the raw request to busboy\n ctx.req.pipe(busboy);\n });\n }\n\n async sendResponse(route: ServerRoute, ctx: Context, result: unknown, prefix?: string): Promise<void> {\n const resolvedPrefix = prefix ?? this.prefix ?? '';\n\n if (route.responseType === 'json') {\n ctx.body = result;\n } else if (route.responseType === 'stream') {\n await this.stream(route, ctx, result as { fullStream: ReadableStream });\n } else if (route.responseType === 'datastream-response') {\n // Handle AI SDK Response objects - pipe Response.body to Koa response\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const fetchResponse = result as globalThis.Response;\n const headers: Record<string, string> = {};\n fetchResponse.headers.forEach((value, key) => {\n headers[key] = value;\n });\n ctx.res.writeHead(fetchResponse.status, headers);\n\n if (fetchResponse.body) {\n const reader = fetchResponse.body.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n ctx.res.write(value);\n }\n } finally {\n ctx.res.end();\n }\n } else {\n ctx.res.end();\n }\n } else if (route.responseType === 'mcp-http') {\n // MCP Streamable HTTP transport\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const { server, httpPath, mcpOptions: routeMcpOptions } = result as MCPHttpTransportResult;\n\n try {\n // Attach parsed body to raw request so MCP server's readJsonBody can use it\n const rawReq = ctx.req as typeof ctx.req & { body?: unknown };\n if (ctx.request.body !== undefined) {\n rawReq.body = ctx.request.body;\n }\n\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(ctx.url, `http://${ctx.headers.host}`),\n httpPath: `${resolvedPrefix}${httpPath}`,\n req: rawReq,\n res: ctx.res,\n options: Object.keys(options).length > 0 ? options : undefined,\n });\n // Response handled by startHTTP\n } catch {\n if (!ctx.res.headersSent) {\n ctx.res.writeHead(500, { 'Content-Type': 'application/json' });\n ctx.res.end(\n JSON.stringify({\n jsonrpc: '2.0',\n error: { code: -32603, message: 'Internal server error' },\n id: null,\n }),\n );\n }\n }\n } else if (route.responseType === 'mcp-sse') {\n // MCP SSE transport\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const { server, ssePath, messagePath } = result as MCPSseTransportResult;\n\n try {\n // Attach parsed body to raw request so MCP server's readJsonBody can use it\n const rawReq = ctx.req as typeof ctx.req & { body?: unknown };\n if (ctx.request.body !== undefined) {\n rawReq.body = ctx.request.body;\n }\n\n await server.startSSE({\n url: new URL(ctx.url, `http://${ctx.headers.host}`),\n ssePath: `${resolvedPrefix}${ssePath}`,\n messagePath: `${resolvedPrefix}${messagePath}`,\n req: rawReq,\n res: ctx.res,\n });\n // Response handled by startSSE\n } catch {\n if (!ctx.res.headersSent) {\n ctx.res.writeHead(500, { 'Content-Type': 'application/json' });\n ctx.res.end(JSON.stringify({ error: 'Error handling MCP SSE request' }));\n }\n }\n } else {\n ctx.status = 500;\n }\n }\n\n async registerRoute(app: Koa, route: ServerRoute, { prefix: prefixParam }: { prefix?: string } = {}): Promise<void> {\n // Default prefix to this.prefix if not provided, or empty string\n const prefix = prefixParam ?? this.prefix ?? '';\n\n const fullPath = `${prefix}${route.path}`;\n\n // Convert Express-style :param to Koa-style :param (they're the same)\n const koaPath = fullPath;\n\n // Define the route handler\n const handler = async (ctx: Context, next: Next) => {\n // Check if this route matches the request\n const pathRegex = this.pathToRegex(koaPath);\n const match = pathRegex.exec(ctx.path);\n\n if (!match) {\n await next();\n return;\n }\n\n // Check HTTP method\n if (route.method.toUpperCase() !== 'ALL' && ctx.method.toUpperCase() !== route.method.toUpperCase()) {\n await next();\n return;\n }\n\n // Extract URL params from regex match\n const paramNames = this.extractParamNames(koaPath);\n ctx.params = {};\n paramNames.forEach((name, index) => {\n ctx.params[name] = match[index + 1];\n });\n\n // Check route-level authentication/authorization\n const authError = await this.checkRouteAuth(route, {\n path: String(ctx.path || '/'),\n method: String(ctx.method || 'GET'),\n getHeader: name => ctx.headers[name.toLowerCase()] as string | undefined,\n getQuery: name => (ctx.query as Record<string, string>)[name],\n requestContext: ctx.state.requestContext,\n });\n\n if (authError) {\n ctx.status = authError.status;\n ctx.body = { error: authError.error };\n return;\n }\n\n const params = await this.getParams(route, ctx);\n\n // Return 400 Bad Request if body parsing failed (e.g., malformed multipart data)\n if (params.bodyParseError) {\n ctx.status = 400;\n ctx.body = {\n error: 'Invalid request body',\n issues: [{ field: 'body', message: params.bodyParseError.message }],\n };\n return;\n }\n\n if (params.queryParams) {\n try {\n params.queryParams = await this.parseQueryParams(route, params.queryParams);\n } catch (error) {\n this.mastra.getLogger()?.error('Error parsing query params', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n ctx.status = 400;\n ctx.body = formatZodError(error, 'query parameters');\n return;\n }\n ctx.status = 400;\n ctx.body = {\n error: 'Invalid query parameters',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n };\n return;\n }\n }\n\n if (params.body) {\n try {\n params.body = await this.parseBody(route, params.body);\n } catch (error) {\n this.mastra.getLogger()?.error('Error parsing body', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n ctx.status = 400;\n ctx.body = formatZodError(error, 'request body');\n return;\n }\n ctx.status = 400;\n ctx.body = {\n error: 'Invalid request body',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n };\n return;\n }\n }\n\n const handlerParams = {\n ...params.urlParams,\n ...params.queryParams,\n ...(typeof params.body === 'object' ? params.body : {}),\n requestContext: ctx.state.requestContext,\n mastra: this.mastra,\n tools: ctx.state.tools,\n taskStore: ctx.state.taskStore,\n abortSignal: ctx.state.abortSignal,\n routePrefix: prefix,\n };\n\n try {\n const result = await route.handler(handlerParams);\n await this.sendResponse(route, ctx, result, prefix);\n } catch (error) {\n this.mastra.getLogger()?.error('Error calling handler', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n path: route.path,\n method: route.method,\n });\n // Attach status code to the error for upstream middleware\n if (error && typeof error === 'object') {\n if (!('status' in error)) {\n // Check for MastraError with status in details\n if ('details' in error && error.details && typeof error.details === 'object' && 'status' in error.details) {\n (error as any).status = (error.details as any).status;\n }\n }\n }\n\n // Try to call server.onError if configured\n if (await this.handleOnError(error, ctx)) {\n return;\n }\n\n // Re-throw so the error propagates up Koa's middleware chain\n throw error;\n }\n };\n\n // Register the middleware\n app.use(handler);\n }\n\n /**\n * Convert Express-style path to regex for matching\n */\n private pathToRegex(path: string): RegExp {\n // First replace :param with a placeholder that won't be affected by escaping\n const PARAM_PLACEHOLDER = '\\x00PARAM\\x00';\n const pathWithPlaceholders = path.replace(/:[^/]+/g, PARAM_PLACEHOLDER);\n\n // Escape all regex meta-characters so the path is treated literally\n const escapedPath = pathWithPlaceholders.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n // Replace placeholders with capture groups and escape forward slashes\n const regexPath = escapedPath.replace(new RegExp(PARAM_PLACEHOLDER, 'g'), '([^/]+)').replace(/\\//g, '\\\\/');\n\n return new RegExp(`^${regexPath}$`);\n }\n\n /**\n * Extract parameter names from path\n */\n private extractParamNames(path: string): string[] {\n const matches = path.match(/:[^/]+/g) || [];\n return matches.map(m => m.slice(1)); // Remove the leading ':'\n }\n\n async registerCustomApiRoutes(): Promise<void> {\n if (!(await this.buildCustomRouteHandler())) return;\n\n this.app.use(async (ctx: Context, next: Next) => {\n const response = await this.handleCustomRouteRequest(\n `${ctx.protocol}://${ctx.host}${ctx.originalUrl || ctx.url}`,\n ctx.method,\n ctx.headers as Record<string, string | string[] | undefined>,\n ctx.request.body,\n ctx.state.requestContext,\n );\n if (!response) return next();\n ctx.respond = false;\n await this.writeCustomRouteResponse(response, ctx.res);\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/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"],"mappings":"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","file":"index.js","sourcesContent":["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 {\n canAccessPublicly,\n checkRules,\n defaultAuthConfig,\n isDevPlaygroundRequest,\n isProtectedPath,\n} from '@mastra/server/auth';\nimport type { Context, Middleware, Next } from 'koa';\n\nexport const authenticationMiddleware: Middleware = async (ctx: Context, next: Next) => {\n const mastra = ctx.state.mastra;\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = ctx.state.customRouteAuthConfig;\n\n if (!authConfig) {\n // No auth config, skip authentication\n return next();\n }\n\n const path = String(ctx.path || '/');\n const method = String(ctx.method || 'GET');\n const getHeader = (name: string) => ctx.headers[name.toLowerCase()] as string | undefined;\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {\n // Skip authentication for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(path, method, authConfig, customRouteAuthConfig)) {\n return next();\n }\n\n // Skip authentication for public routes\n if (canAccessPublicly(path, method, authConfig)) {\n return next();\n }\n\n // Get token from header or query\n const authHeader = ctx.headers.authorization;\n let token: string | null = authHeader ? authHeader.replace('Bearer ', '') : null;\n\n const query = ctx.query as Record<string, string>;\n if (!token && query.apiKey) {\n token = query.apiKey || null;\n }\n\n // Handle missing token\n if (!token) {\n ctx.status = 401;\n ctx.body = { error: 'Authentication required' };\n return;\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 // Note: The auth config function signature accepts HonoRequest, but in practice\n // it should work with any request object that has the necessary properties\n user = await authConfig.authenticateToken(token, ctx.request as any);\n } else {\n throw new Error('No token verification method configured');\n }\n\n if (!user) {\n ctx.status = 401;\n ctx.body = { error: 'Invalid or expired token' };\n return;\n }\n\n // Store user in context\n ctx.state.requestContext.set('user', user);\n\n return next();\n } catch (err) {\n mastra.getLogger()?.error('Authentication error', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n });\n ctx.status = 401;\n ctx.body = { error: 'Invalid or expired token' };\n return;\n }\n};\n\nexport const authorizationMiddleware: Middleware = async (ctx: Context, next: Next) => {\n const mastra = ctx.state.mastra;\n const authConfig = mastra.getServer()?.auth;\n const customRouteAuthConfig = ctx.state.customRouteAuthConfig;\n\n if (!authConfig) {\n // No auth config, skip authorization\n return next();\n }\n\n const path = String(ctx.path || '/');\n const method = String(ctx.method || 'GET');\n const getHeader = (name: string) => ctx.headers[name.toLowerCase()] as string | undefined;\n\n if (isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {\n // Skip authorization for dev playground requests\n return next();\n }\n\n if (!isProtectedPath(path, 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 = ctx.state.requestContext.get('user');\n\n if ('authorizeUser' in authConfig && typeof authConfig.authorizeUser === 'function') {\n try {\n const isAuthorized = await authConfig.authorizeUser(user, ctx.request as any);\n\n if (isAuthorized) {\n return next();\n }\n\n ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n return;\n } catch (err) {\n mastra.getLogger()?.error('Authorization error in authorizeUser', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n });\n ctx.status = 500;\n ctx.body = { error: 'Authorization error' };\n return;\n }\n }\n\n // Client-provided authorization function\n if ('authorize' in authConfig && typeof authConfig.authorize === 'function') {\n try {\n // Note: The authorize function signature expects ContextWithMastra as 4th param\n // For Koa, we pass a compatible object with similar structure\n const context = {\n get: (key: string) => {\n if (key === 'mastra') return ctx.state.mastra;\n if (key === 'requestContext') return ctx.state.requestContext;\n if (key === 'tools') return ctx.state.tools;\n if (key === 'taskStore') return ctx.state.taskStore;\n if (key === 'customRouteAuthConfig') return ctx.state.customRouteAuthConfig;\n return undefined;\n },\n req: ctx.request as any,\n } as any;\n\n const isAuthorized = await authConfig.authorize(path, method, user, context);\n\n if (isAuthorized) {\n return next();\n }\n\n ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n return;\n } catch (err) {\n mastra.getLogger()?.error('Authorization error in authorize', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n path,\n method,\n });\n ctx.status = 500;\n ctx.body = { error: 'Authorization error' };\n return;\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 ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n return;\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 ctx.status = 403;\n ctx.body = { error: 'Access denied' };\n};\n","import { Busboy } from '@fastify/busboy';\nimport 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 type Koa from 'koa';\nimport type { Context, Middleware, Next } from 'koa';\nimport { ZodError } from 'zod';\n\nimport { authenticationMiddleware, authorizationMiddleware } from './auth-middleware';\n\n// Extend Koa types to include Mastra context\ndeclare module 'koa' {\n interface DefaultState {\n mastra: Mastra;\n requestContext: RequestContext;\n tools: ToolsInput;\n abortSignal: AbortSignal;\n taskStore: InMemoryTaskStore;\n customRouteAuthConfig?: Map<string, boolean>;\n }\n interface Request {\n body?: unknown;\n }\n}\n\nexport class MastraServer extends MastraServerBase<Koa, Context, Context> {\n async init() {\n this.registerErrorMiddleware();\n await super.init();\n }\n\n /**\n * Register a global error-handling middleware at the top of the middleware chain.\n * This acts as a safety net for errors that propagate past route handlers\n * (e.g., from auth middleware, context middleware, or when route handlers re-throw).\n *\n * When `server.onError` is configured, calls it and uses the response.\n * Otherwise provides a default JSON error response.\n *\n * Errors are emitted on the app for logging (Koa convention) but NOT re-thrown,\n * so this middleware is the final error boundary. Users who need custom error handling\n * should use `server.onError` or register their own middleware between this and the routes.\n */\n private registerErrorMiddleware(): void {\n this.app.use(async (ctx: Context, next: Next) => {\n try {\n await next();\n } catch (err) {\n // Try onError first (may have already been called in registerRoute,\n // but this catches errors from other middleware too)\n if (await this.handleOnError(err, ctx)) {\n return;\n }\n\n // Default error handling\n const error = err instanceof Error ? err : new Error(String(err));\n let status = 500;\n if (err && typeof err === 'object') {\n if ('status' in err) {\n status = (err as any).status;\n } else if (\n 'details' in err &&\n (err as any).details &&\n typeof (err as any).details === 'object' &&\n 'status' in (err as any).details\n ) {\n status = (err as any).details.status;\n }\n }\n ctx.status = status;\n ctx.body = { error: error.message || 'Unknown error' };\n\n // Emit the error for logging (standard Koa pattern) but don't re-throw\n // since this middleware is the final error boundary.\n ctx.app.emit('error', err, ctx);\n }\n });\n }\n\n /**\n * Try to handle an error using the `server.onError` hook.\n * Creates a minimal context shim compatible with the Hono-style onError signature.\n *\n * @returns true if the error was handled and the response was set on ctx\n */\n private async handleOnError(err: unknown, ctx: Context): Promise<boolean> {\n // Guard against double invocation (route catch → re-throw → error middleware)\n if ((ctx as any)._mastraOnErrorAttempted) return false;\n (ctx as any)._mastraOnErrorAttempted = true;\n\n const onError = this.mastra.getServer()?.onError;\n if (!onError) return false;\n\n const error = err instanceof Error ? err : new Error(String(err));\n\n // Create a minimal context shim compatible with the onError signature\n const shimContext = {\n json: (data: unknown, status: number = 200) =>\n new Response(JSON.stringify(data), {\n status,\n headers: { 'Content-Type': 'application/json' },\n }),\n req: {\n path: ctx.path,\n method: ctx.method,\n header: (name: string) => {\n const value = ctx.headers[name.toLowerCase()];\n if (Array.isArray(value)) return value.join(', ');\n return value;\n },\n url: ctx.url,\n },\n };\n\n try {\n const response = await onError(error, shimContext as any);\n // Apply the Response from onError to the Koa context\n ctx.status = response.status;\n const contentType = response.headers.get('content-type') || '';\n if (contentType.includes('application/json')) {\n ctx.body = await response.json();\n } else {\n ctx.body = await response.text();\n }\n return true;\n } catch (onErrorErr) {\n this.mastra.getLogger()?.error('Error in custom onError handler', {\n error: onErrorErr instanceof Error ? { message: onErrorErr.message, stack: onErrorErr.stack } : onErrorErr,\n });\n return false;\n }\n }\n\n createContextMiddleware(): Middleware {\n return async (ctx: Context, next: Next) => {\n // Parse request context from request body and add to context\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 (ctx.method === 'POST' || ctx.method === 'PUT') {\n const contentType = ctx.headers['content-type'];\n if (contentType?.includes('application/json') && ctx.request.body) {\n const body = ctx.request.body as { requestContext?: Record<string, any> };\n if (body.requestContext) {\n bodyRequestContext = body.requestContext;\n }\n }\n }\n\n // Parse request context from query params (GET)\n if (ctx.method === 'GET') {\n try {\n const query = ctx.query;\n const encodedRequestContext = query.requestContext;\n if (typeof encodedRequestContext === 'string') {\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 // Set context in state object\n ctx.state.requestContext = requestContext;\n ctx.state.mastra = this.mastra;\n ctx.state.tools = this.tools || {};\n if (this.taskStore) {\n ctx.state.taskStore = this.taskStore;\n }\n ctx.state.customRouteAuthConfig = this.customRouteAuthConfig;\n\n // Create abort controller for request cancellation\n const controller = new AbortController();\n ctx.req.on('close', () => {\n // Only abort if the response wasn't successfully completed\n if (!ctx.res.writableEnded) {\n controller.abort();\n }\n });\n ctx.state.abortSignal = controller.signal;\n\n await next();\n };\n }\n\n async stream(route: ServerRoute, ctx: Context, result: { fullStream: ReadableStream }): Promise<void> {\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const streamFormat = route.streamFormat || 'stream';\n\n // Set status and headers via ctx.res directly since we're bypassing Koa's response\n const sseHeaders =\n streamFormat === 'sse'\n ? {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n 'X-Accel-Buffering': 'no',\n }\n : {\n 'Content-Type': 'text/plain',\n };\n\n ctx.res.writeHead(200, {\n ...sseHeaders,\n 'Transfer-Encoding': 'chunked',\n });\n\n const readableStream = result instanceof ReadableStream ? result : result.fullStream;\n const reader = readableStream.getReader();\n\n ctx.res.on('close', () => {\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 ctx.res.write(`data: ${JSON.stringify(outputValue)}\\n\\n`);\n } else {\n ctx.res.write(JSON.stringify(outputValue) + '\\x1E');\n }\n }\n }\n } catch (error) {\n this.mastra.getLogger()?.error('Error in stream processing', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\n } finally {\n ctx.res.end();\n }\n }\n\n async getParams(route: ServerRoute, ctx: Context): Promise<ParsedRequestParams> {\n const urlParams = (ctx.params || {}) as Record<string, string>;\n // Koa's ctx.query is ParsedUrlQuery which is Record<string, string | string[]>\n const queryParams = normalizeQueryParams((ctx.query || {}) as Record<string, unknown>);\n let body: unknown;\n let bodyParseError: { message: string } | undefined;\n\n if (route.method === 'POST' || route.method === 'PUT' || route.method === 'PATCH' || route.method === 'DELETE') {\n const contentType = ctx.headers['content-type'] || '';\n\n if (contentType.includes('multipart/form-data')) {\n try {\n const maxFileSize = route.maxBodySize ?? this.bodyLimitOptions?.maxSize;\n body = await this.parseMultipartFormData(ctx, maxFileSize);\n } catch (error) {\n this.mastra.getLogger()?.error('Failed to parse multipart form data', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\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 {\n body = ctx.request.body;\n }\n }\n\n return { urlParams, queryParams, body, bodyParseError };\n }\n\n /**\n * Parse multipart/form-data using @fastify/busboy.\n * Converts file uploads to Buffers and parses JSON field values.\n *\n * @param ctx - The Koa context object\n * @param maxFileSize - Optional maximum file size in bytes\n */\n private parseMultipartFormData(ctx: Context, maxFileSize?: number): Promise<Record<string, unknown>> {\n return new Promise((resolve, reject) => {\n const result: Record<string, unknown> = {};\n\n const busboy = new Busboy({\n headers: {\n 'content-type': ctx.headers['content-type'] as string,\n },\n limits: maxFileSize ? { fileSize: maxFileSize } : undefined,\n });\n\n busboy.on('file', (fieldname: string, file: NodeJS.ReadableStream) => {\n const chunks: Buffer[] = [];\n let limitExceeded = false;\n\n file.on('data', (chunk: Buffer) => {\n chunks.push(chunk);\n });\n\n file.on('limit', () => {\n limitExceeded = true;\n reject(new Error(`File size limit exceeded${maxFileSize ? ` (max: ${maxFileSize} bytes)` : ''}`));\n });\n\n file.on('end', () => {\n if (!limitExceeded) {\n result[fieldname] = Buffer.concat(chunks);\n }\n });\n });\n\n busboy.on('field', (fieldname: string, value: string) => {\n // Try to parse JSON strings (like 'options')\n try {\n result[fieldname] = JSON.parse(value);\n } catch {\n result[fieldname] = value;\n }\n });\n\n busboy.on('finish', () => {\n resolve(result);\n });\n\n busboy.on('error', (error: Error) => {\n reject(error);\n });\n\n // Pipe the raw request to busboy\n ctx.req.pipe(busboy);\n });\n }\n\n async sendResponse(route: ServerRoute, ctx: Context, result: unknown, prefix?: string): Promise<void> {\n const resolvedPrefix = prefix ?? this.prefix ?? '';\n\n if (route.responseType === 'json') {\n ctx.body = result;\n } else if (route.responseType === 'stream') {\n await this.stream(route, ctx, result as { fullStream: ReadableStream });\n } else if (route.responseType === 'datastream-response') {\n // Handle AI SDK Response objects - pipe Response.body to Koa response\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const fetchResponse = result as globalThis.Response;\n const headers: Record<string, string> = {};\n fetchResponse.headers.forEach((value, key) => {\n headers[key] = value;\n });\n ctx.res.writeHead(fetchResponse.status, headers);\n\n if (fetchResponse.body) {\n const reader = fetchResponse.body.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n ctx.res.write(value);\n }\n } finally {\n ctx.res.end();\n }\n } else {\n ctx.res.end();\n }\n } else if (route.responseType === 'mcp-http') {\n // MCP Streamable HTTP transport\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const { server, httpPath, mcpOptions: routeMcpOptions } = result as MCPHttpTransportResult;\n\n try {\n // Attach parsed body to raw request so MCP server's readJsonBody can use it\n const rawReq = ctx.req as typeof ctx.req & { body?: unknown };\n if (ctx.request.body !== undefined) {\n rawReq.body = ctx.request.body;\n }\n\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(ctx.url, `http://${ctx.headers.host}`),\n httpPath: `${resolvedPrefix}${httpPath}`,\n req: rawReq,\n res: ctx.res,\n options: Object.keys(options).length > 0 ? options : undefined,\n });\n // Response handled by startHTTP\n } catch {\n if (!ctx.res.headersSent) {\n ctx.res.writeHead(500, { 'Content-Type': 'application/json' });\n ctx.res.end(\n JSON.stringify({\n jsonrpc: '2.0',\n error: { code: -32603, message: 'Internal server error' },\n id: null,\n }),\n );\n }\n }\n } else if (route.responseType === 'mcp-sse') {\n // MCP SSE transport\n // Tell Koa we're handling the response ourselves\n ctx.respond = false;\n\n const { server, ssePath, messagePath } = result as MCPSseTransportResult;\n\n try {\n // Attach parsed body to raw request so MCP server's readJsonBody can use it\n const rawReq = ctx.req as typeof ctx.req & { body?: unknown };\n if (ctx.request.body !== undefined) {\n rawReq.body = ctx.request.body;\n }\n\n await server.startSSE({\n url: new URL(ctx.url, `http://${ctx.headers.host}`),\n ssePath: `${resolvedPrefix}${ssePath}`,\n messagePath: `${resolvedPrefix}${messagePath}`,\n req: rawReq,\n res: ctx.res,\n });\n // Response handled by startSSE\n } catch {\n if (!ctx.res.headersSent) {\n ctx.res.writeHead(500, { 'Content-Type': 'application/json' });\n ctx.res.end(JSON.stringify({ error: 'Error handling MCP SSE request' }));\n }\n }\n } else {\n ctx.status = 500;\n }\n }\n\n async registerRoute(app: Koa, route: ServerRoute, { prefix: prefixParam }: { prefix?: string } = {}): Promise<void> {\n // Default prefix to this.prefix if not provided, or empty string\n const prefix = prefixParam ?? this.prefix ?? '';\n\n const fullPath = `${prefix}${route.path}`;\n\n // Convert Express-style :param to Koa-style :param (they're the same)\n const koaPath = fullPath;\n\n // Define the route handler\n const handler = async (ctx: Context, next: Next) => {\n // Check if this route matches the request\n const pathRegex = this.pathToRegex(koaPath);\n const match = pathRegex.exec(ctx.path);\n\n if (!match) {\n await next();\n return;\n }\n\n // Check HTTP method\n if (route.method.toUpperCase() !== 'ALL' && ctx.method.toUpperCase() !== route.method.toUpperCase()) {\n await next();\n return;\n }\n\n // Extract URL params from regex match\n const paramNames = this.extractParamNames(koaPath);\n ctx.params = {};\n paramNames.forEach((name, index) => {\n ctx.params[name] = match[index + 1];\n });\n\n // Check route-level authentication/authorization\n const authError = await this.checkRouteAuth(route, {\n path: String(ctx.path || '/'),\n method: String(ctx.method || 'GET'),\n getHeader: name => ctx.headers[name.toLowerCase()] as string | undefined,\n getQuery: name => (ctx.query as Record<string, string>)[name],\n requestContext: ctx.state.requestContext,\n });\n\n if (authError) {\n ctx.status = authError.status;\n ctx.body = { error: authError.error };\n return;\n }\n\n const params = await this.getParams(route, ctx);\n\n // Return 400 Bad Request if body parsing failed (e.g., malformed multipart data)\n if (params.bodyParseError) {\n ctx.status = 400;\n ctx.body = {\n error: 'Invalid request body',\n issues: [{ field: 'body', message: params.bodyParseError.message }],\n };\n return;\n }\n\n if (params.queryParams) {\n try {\n params.queryParams = await this.parseQueryParams(route, params.queryParams);\n } catch (error) {\n this.mastra.getLogger()?.error('Error parsing query params', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n ctx.status = 400;\n ctx.body = formatZodError(error, 'query parameters');\n return;\n }\n ctx.status = 400;\n ctx.body = {\n error: 'Invalid query parameters',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n };\n return;\n }\n }\n\n if (params.body) {\n try {\n params.body = await this.parseBody(route, params.body);\n } catch (error) {\n this.mastra.getLogger()?.error('Error parsing body', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\n // Zod validation errors should return 400 Bad Request with structured issues\n if (error instanceof ZodError) {\n ctx.status = 400;\n ctx.body = formatZodError(error, 'request body');\n return;\n }\n ctx.status = 400;\n ctx.body = {\n error: 'Invalid request body',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n };\n return;\n }\n }\n\n // Parse path params through pathParamSchema for type coercion (e.g., z.coerce.number())\n if (params.urlParams) {\n try {\n params.urlParams = await this.parsePathParams(route, params.urlParams);\n } catch (error) {\n this.mastra.getLogger()?.error('Error parsing path params', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n });\n if (error instanceof ZodError) {\n ctx.status = 400;\n ctx.body = formatZodError(error, 'path parameters');\n return;\n }\n ctx.status = 400;\n ctx.body = {\n error: 'Invalid path parameters',\n issues: [{ field: 'unknown', message: error instanceof Error ? error.message : 'Unknown error' }],\n };\n return;\n }\n }\n\n const handlerParams = {\n ...params.urlParams,\n ...params.queryParams,\n ...(typeof params.body === 'object' ? params.body : {}),\n requestContext: ctx.state.requestContext,\n mastra: this.mastra,\n tools: ctx.state.tools,\n taskStore: ctx.state.taskStore,\n abortSignal: ctx.state.abortSignal,\n routePrefix: prefix,\n };\n\n try {\n const result = await route.handler(handlerParams);\n await this.sendResponse(route, ctx, result, prefix);\n } catch (error) {\n this.mastra.getLogger()?.error('Error calling handler', {\n error: error instanceof Error ? { message: error.message, stack: error.stack } : error,\n path: route.path,\n method: route.method,\n });\n // Attach status code to the error for upstream middleware\n if (error && typeof error === 'object') {\n if (!('status' in error)) {\n // Check for MastraError with status in details\n if ('details' in error && error.details && typeof error.details === 'object' && 'status' in error.details) {\n (error as any).status = (error.details as any).status;\n }\n }\n }\n\n // Try to call server.onError if configured\n if (await this.handleOnError(error, ctx)) {\n return;\n }\n\n // Re-throw so the error propagates up Koa's middleware chain\n throw error;\n }\n };\n\n // Register the middleware\n app.use(handler);\n }\n\n /**\n * Convert Express-style path to regex for matching\n */\n private pathToRegex(path: string): RegExp {\n // First replace :param with a placeholder that won't be affected by escaping\n const PARAM_PLACEHOLDER = '\\x00PARAM\\x00';\n const pathWithPlaceholders = path.replace(/:[^/]+/g, PARAM_PLACEHOLDER);\n\n // Escape all regex meta-characters so the path is treated literally\n const escapedPath = pathWithPlaceholders.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n // Replace placeholders with capture groups and escape forward slashes\n const regexPath = escapedPath.replace(new RegExp(PARAM_PLACEHOLDER, 'g'), '([^/]+)').replace(/\\//g, '\\\\/');\n\n return new RegExp(`^${regexPath}$`);\n }\n\n /**\n * Extract parameter names from path\n */\n private extractParamNames(path: string): string[] {\n const matches = path.match(/:[^/]+/g) || [];\n return matches.map(m => m.slice(1)); // Remove the leading ':'\n }\n\n async registerCustomApiRoutes(): Promise<void> {\n if (!(await this.buildCustomRouteHandler())) return;\n\n this.app.use(async (ctx: Context, next: Next) => {\n const response = await this.handleCustomRouteRequest(\n `${ctx.protocol}://${ctx.host}${ctx.originalUrl || ctx.url}`,\n ctx.method,\n ctx.headers as Record<string, string | string[] | undefined>,\n ctx.request.body,\n ctx.state.requestContext,\n );\n if (!response) return next();\n ctx.respond = false;\n await this.writeCustomRouteResponse(response, ctx.res);\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/koa",
3
- "version": "1.2.0",
3
+ "version": "1.2.1-alpha.0",
4
4
  "description": "Mastra Koa adapter for the server",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -21,7 +21,7 @@
21
21
  "license": "Apache-2.0",
22
22
  "dependencies": {
23
23
  "@fastify/busboy": "^3.2.0",
24
- "@mastra/server": "1.5.0"
24
+ "@mastra/server": "1.6.0-alpha.0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^20.19.30",
@@ -35,15 +35,15 @@
35
35
  "@types/koa-bodyparser": "^4.3.13",
36
36
  "@ai-sdk/openai": "^2.0.62",
37
37
  "zod": "^3.25.0",
38
- "@internal/lint": "0.0.60",
39
38
  "@internal/server-adapter-test-utils": "0.0.6",
39
+ "@internal/lint": "0.0.60",
40
40
  "@internal/storage-test-utils": "0.0.56",
41
- "@mastra/core": "1.5.0",
42
41
  "@mastra/evals": "1.1.2",
43
- "@mastra/libsql": "1.5.0",
44
- "@mastra/memory": "1.4.0",
42
+ "@mastra/libsql": "1.6.0-alpha.0",
45
43
  "@internal/types-builder": "0.0.35",
46
- "@mastra/observability": "1.2.0"
44
+ "@mastra/core": "1.6.0-alpha.0",
45
+ "@mastra/observability": "1.2.1-alpha.0",
46
+ "@mastra/memory": "1.5.0-alpha.0"
47
47
  },
48
48
  "peerDependencies": {
49
49
  "@mastra/core": ">=1.0.0-0 <2.0.0-0",