@mastra/server 1.16.0-alpha.0 → 1.16.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/{chunk-P4GHYEST.js → chunk-K5SP7SOS.js} +18 -3
  3. package/dist/chunk-K5SP7SOS.js.map +1 -0
  4. package/dist/{chunk-AOAIJJY6.cjs → chunk-N6ZHI7A3.cjs} +62 -60
  5. package/dist/chunk-N6ZHI7A3.cjs.map +1 -0
  6. package/dist/{chunk-QVMLEJ63.cjs → chunk-OMNWTK4B.cjs} +18 -2
  7. package/dist/chunk-OMNWTK4B.cjs.map +1 -0
  8. package/dist/{chunk-7LQDR5AI.js → chunk-RFO7PBA6.js} +4 -2
  9. package/dist/chunk-RFO7PBA6.js.map +1 -0
  10. package/dist/{chunk-I3QRIKI5.js → chunk-VD26CDFT.js} +5 -3
  11. package/dist/chunk-VD26CDFT.js.map +1 -0
  12. package/dist/{chunk-N5RFB7A4.cjs → chunk-ZHVL7YBO.cjs} +4 -2
  13. package/dist/chunk-ZHVL7YBO.cjs.map +1 -0
  14. package/dist/docs/SKILL.md +2 -1
  15. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  16. package/dist/docs/references/docs-server-middleware.md +237 -0
  17. package/dist/docs/references/reference-server-mastra-server.md +3 -2
  18. package/dist/server/auth/helpers.d.ts +7 -0
  19. package/dist/server/auth/helpers.d.ts.map +1 -1
  20. package/dist/server/auth/index.cjs +16 -12
  21. package/dist/server/auth/index.js +1 -1
  22. package/dist/server/handlers/datasets.cjs +24 -24
  23. package/dist/server/handlers/datasets.d.ts +6 -0
  24. package/dist/server/handlers/datasets.d.ts.map +1 -1
  25. package/dist/server/handlers/datasets.js +1 -1
  26. package/dist/server/schemas/datasets.d.ts +3 -0
  27. package/dist/server/schemas/datasets.d.ts.map +1 -1
  28. package/dist/server/schemas/index.cjs +40 -40
  29. package/dist/server/schemas/index.js +1 -1
  30. package/dist/server/server-adapter/index.cjs +26 -26
  31. package/dist/server/server-adapter/index.js +2 -2
  32. package/dist/server/server-adapter/routes/datasets.d.ts +6 -0
  33. package/dist/server/server-adapter/routes/datasets.d.ts.map +1 -1
  34. package/package.json +4 -4
  35. package/dist/chunk-7LQDR5AI.js.map +0 -1
  36. package/dist/chunk-AOAIJJY6.cjs.map +0 -1
  37. package/dist/chunk-I3QRIKI5.js.map +0 -1
  38. package/dist/chunk-N5RFB7A4.cjs.map +0 -1
  39. package/dist/chunk-P4GHYEST.js.map +0 -1
  40. package/dist/chunk-QVMLEJ63.cjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # @mastra/server
2
2
 
3
+ ## 1.16.0-alpha.1
4
+
5
+ ### Minor Changes
6
+
7
+ - Added `getAuthenticatedUser()` to `@mastra/server/auth` so server middleware can resolve the configured auth user without changing route auth behavior. ([#14458](https://github.com/mastra-ai/mastra/pull/14458))
8
+
9
+ **Example**
10
+
11
+ ```ts
12
+ import { getAuthenticatedUser } from '@mastra/server/auth';
13
+
14
+ const user = await getAuthenticatedUser({
15
+ mastra,
16
+ token,
17
+ request: c.req.raw,
18
+ });
19
+ ```
20
+
21
+ ### Patch Changes
22
+
23
+ - Added agent version support for experiments. When triggering an experiment, you can now pass an `agentVersion` parameter to pin which agent version to use. The agent version is stored with the experiment and returned in experiment responses. ([#14562](https://github.com/mastra-ai/mastra/pull/14562))
24
+
25
+ ```ts
26
+ const client = new MastraClient();
27
+
28
+ await client.triggerDatasetExperiment({
29
+ datasetId: 'my-dataset',
30
+ targetType: 'agent',
31
+ targetId: 'my-agent',
32
+ version: 3, // pin to dataset version 3
33
+ agentVersion: 'ver_abc123', // pin to a specific agent version
34
+ });
35
+ ```
36
+
37
+ - Updated dependencies [[`7dbd611`](https://github.com/mastra-ai/mastra/commit/7dbd611a85cb1e0c0a1581c57564268cb183d86e), [`41aee84`](https://github.com/mastra-ai/mastra/commit/41aee84561ceebe28bad1ecba8702d92838f67f0)]:
38
+ - @mastra/core@1.16.0-alpha.1
39
+
3
40
  ## 1.16.0-alpha.0
4
41
 
5
42
  ### Minor Changes
@@ -174,6 +174,21 @@ var matchesOrIncludes = (values, value) => {
174
174
  return false;
175
175
  };
176
176
  var pass = { action: "next" };
177
+ var getAuthenticatedUser = async ({
178
+ mastra,
179
+ token,
180
+ request
181
+ }) => {
182
+ const normalizedToken = token.replace(/^Bearer\s+/i, "").trim();
183
+ if (!normalizedToken) {
184
+ return null;
185
+ }
186
+ const authConfig = mastra.getServer()?.auth;
187
+ if (!authConfig || typeof authConfig.authenticateToken !== "function") {
188
+ return null;
189
+ }
190
+ return await authConfig.authenticateToken(normalizedToken, request);
191
+ };
177
192
  var coreAuthMiddleware = async (ctx) => {
178
193
  const { path, method, getHeader, mastra, authConfig, customRouteAuthConfig, requestContext, rawRequest, token } = ctx;
179
194
  const hasAuthProvider = typeof authConfig.authenticateToken === "function";
@@ -290,6 +305,6 @@ var checkRules = async (rules, path, method, user) => {
290
305
  return false;
291
306
  };
292
307
 
293
- export { canAccessPublicly, checkRules, coreAuthMiddleware, defaultAuthConfig, isCustomRoutePublic, isDevPlaygroundRequest, isProtectedCustomRoute, isProtectedPath, matchesOrIncludes, pathMatchesPattern, pathMatchesRule };
294
- //# sourceMappingURL=chunk-P4GHYEST.js.map
295
- //# sourceMappingURL=chunk-P4GHYEST.js.map
308
+ export { canAccessPublicly, checkRules, coreAuthMiddleware, defaultAuthConfig, getAuthenticatedUser, isCustomRoutePublic, isDevPlaygroundRequest, isProtectedCustomRoute, isProtectedPath, matchesOrIncludes, pathMatchesPattern, pathMatchesRule };
309
+ //# sourceMappingURL=chunk-K5SP7SOS.js.map
310
+ //# sourceMappingURL=chunk-K5SP7SOS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/auth/defaults.ts","../src/server/auth/path-pattern.ts","../src/server/auth/helpers.ts"],"names":[],"mappings":";AAGO,IAAM,iBAAA,GAAsC;AAAA,EACjD,SAAA,EAAW,CAAC,QAAQ,CAAA;AAAA,EACpB,MAAA,EAAQ,CAAC,MAAA,EAAQ,aAAa,CAAA;AAAA;AAAA,EAE9B,KAAA,EAAO;AAAA;AAAA,IAEL;AAAA,MACE,WAAW,CAAA,IAAA,KAAQ;AACjB,QAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AAC7C,UAAA,IAAI,aAAa,IAAA,EAAM;AACrB,YAAA,OAAO,CAAC,CAAC,IAAA,CAAK,OAAA;AAAA,UAChB;AAEA,UAAA,IAAI,UAAU,IAAA,EAAM;AAClB,YAAA,OAAO,KAAK,IAAA,KAAS,OAAA;AAAA,UACvB;AAAA,QACF;AACA,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAAA,MACA,KAAA,EAAO;AAAA;AACT;AAEJ;;;ACcO,SAAS,KAAA,CAAM,OAAwB,KAAA,EAAgC;AAC5E,EAAA,IAAI,iBAAiB,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,SAAS,KAAA,EAAM;AAElE,EAAA,IAAI,CAAA;AACJ,EAAA,IAAI,CAAA;AACJ,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,GAAA;AACJ,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAE3B,EAAA,GAAA,CAAI,CAAC,CAAA,IAAK,GAAA,CAAI,KAAA,EAAM;AAEpB,EAAA,OAAQ,GAAA,GAAM,GAAA,CAAI,KAAA,EAAM,EAAI;AAC1B,IAAA,CAAA,GAAI,IAAI,CAAC,CAAA;AACT,IAAA,IAAI,MAAM,GAAA,EAAK;AACb,MAAA,IAAA,CAAK,KAAK,CAAC,CAAA;AACX,MAAA,OAAA,IAAW,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,GAAM,YAAA,GAAe,OAAA;AAAA,IAC7C,CAAA,MAAA,IAAW,MAAM,GAAA,EAAK;AACpB,MAAA,CAAA,GAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAA;AACtB,MAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAA;AACxB,MAAA,IAAA,CAAK,KAAK,GAAA,CAAI,SAAA,CAAU,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA,GAAI,CAAA,GAAI,CAAC,CAAC,CAAC,GAAA,GAAM,GAAA,GAAM,GAAA,CAAI,MAAM,CAAC,CAAA;AAChE,MAAA,OAAA,IAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,gBAAA,GAAmB,WAAA;AAC9C,MAAA,IAAI,CAAC,CAAC,CAAC,GAAA,cAAiB,CAAC,CAAC,CAAC,CAAA,GAAI,GAAA,GAAM,EAAA,IAAM,IAAA,GAAO,GAAA,CAAI,UAAU,GAAG,CAAA;AAAA,IACrE,CAAA,MAAO;AACL,MAAA,OAAA,IAAW,GAAA,GAAM,GAAA;AAAA,IACnB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,OAAA,EAAS,IAAI,MAAA,CAAO,GAAA,GAAM,WAA+B,QAAQ,GAAG;AAAA,GACtE;AACF;;;AC3DO,IAAM,sBAAA,GAAyB,CACpC,IAAA,EACA,MAAA,EACA,qBAAA,KACY;AACZ,EAAA,IAAI,CAAC,qBAAA,EAAuB;AAC1B,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,MAAM,aAAA,GAAgB,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AACvC,EAAA,IAAI,qBAAA,CAAsB,GAAA,CAAI,aAAa,CAAA,EAAG;AAC5C,IAAA,OAAO,qBAAA,CAAsB,GAAA,CAAI,aAAa,CAAA,KAAM,IAAA;AAAA,EACtD;AAGA,EAAA,MAAM,WAAA,GAAc,OAAO,IAAI,CAAA,CAAA;AAC/B,EAAA,IAAI,qBAAA,CAAsB,GAAA,CAAI,WAAW,CAAA,EAAG;AAC1C,IAAA,OAAO,qBAAA,CAAsB,GAAA,CAAI,WAAW,CAAA,KAAM,IAAA;AAAA,EACpD;AAGA,EAAA,KAAA,MAAW,CAAC,QAAA,EAAU,YAAY,CAAA,IAAK,qBAAA,CAAsB,SAAQ,EAAG;AACtE,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAA;AACvC,IAAA,IAAI,eAAe,EAAA,EAAI;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,SAAA,CAAU,CAAA,EAAG,UAAU,CAAA;AACpD,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA;AAGtD,IAAA,IAAI,WAAA,KAAgB,MAAA,IAAU,WAAA,KAAgB,KAAA,EAAO;AACnD,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,kBAAA,CAAmB,IAAA,EAAM,YAAY,CAAA,EAAG;AAC1C,MAAA,OAAO,YAAA,KAAiB,IAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAOO,IAAM,yBAAyB,CACpC,IAAA,EACA,MAAA,EACA,SAAA,EACA,YACA,qBAAA,KACY;AACZ,EAAA,MAAM,eAAA,GAAkB,CAAC,GAAI,iBAAA,CAAkB,SAAA,IAAa,EAAC,EAAI,GAAI,UAAA,CAAW,SAAA,IAAa,EAAG,CAAA;AAChG,EAAA,OACE,OAAA,CAAQ,IAAI,UAAA,KAAe,MAAA;AAAA,GAEzB,CAAC,UAAA,CAAW,IAAA,EAAM,MAAA,EAAQ,eAAe,KAAK,CAAC,sBAAA,CAAuB,IAAA,EAAM,MAAA,EAAQ,qBAAqB,CAAA;AAAA,EAEzG,SAAA,CAAU,yBAAyB,CAAA,KAAM,MAAA,CAAA;AAE/C;AAEO,IAAM,mBAAA,GAAsB,CACjC,IAAA,EACA,MAAA,EACA,qBAAA,KACY;AACZ,EAAA,IAAI,CAAC,qBAAA,EAAuB;AAC1B,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,MAAM,aAAA,GAAgB,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AACvC,EAAA,IAAI,qBAAA,CAAsB,GAAA,CAAI,aAAa,CAAA,EAAG;AAC5C,IAAA,OAAO,CAAC,qBAAA,CAAsB,GAAA,CAAI,aAAa,CAAA;AAAA,EACjD;AAGA,EAAA,MAAM,WAAA,GAAc,OAAO,IAAI,CAAA,CAAA;AAC/B,EAAA,IAAI,qBAAA,CAAsB,GAAA,CAAI,WAAW,CAAA,EAAG;AAC1C,IAAA,OAAO,CAAC,qBAAA,CAAsB,GAAA,CAAI,WAAW,CAAA;AAAA,EAC/C;AAGA,EAAA,KAAA,MAAW,CAAC,QAAA,EAAU,YAAY,CAAA,IAAK,qBAAA,CAAsB,SAAQ,EAAG;AACtE,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAA;AACvC,IAAA,IAAI,eAAe,EAAA,EAAI;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,SAAA,CAAU,CAAA,EAAG,UAAU,CAAA;AACpD,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA;AAGtD,IAAA,IAAI,WAAA,KAAgB,MAAA,IAAU,WAAA,KAAgB,KAAA,EAAO;AACnD,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,kBAAA,CAAmB,IAAA,EAAM,YAAY,CAAA,EAAG;AAC1C,MAAA,OAAO,CAAC,YAAA;AAAA,IACV;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAQO,IAAM,eAAA,GAAkB,CAC7B,IAAA,EACA,MAAA,EACA,YACA,qBAAA,KACY;AACZ,EAAA,MAAM,eAAA,GAAkB,CAAC,GAAI,iBAAA,CAAkB,SAAA,IAAa,EAAC,EAAI,GAAI,UAAA,CAAW,SAAA,IAAa,EAAG,CAAA;AAChG,EAAA,OAAO,UAAA,CAAW,MAAM,MAAA,EAAQ,eAAe,KAAK,sBAAA,CAAuB,IAAA,EAAM,QAAQ,qBAAqB,CAAA;AAChH;AAEO,IAAM,iBAAA,GAAoB,CAAC,IAAA,EAAc,MAAA,EAAgB,UAAA,KAA0C;AAExG,EAAA,MAAM,YAAA,GAAe,CAAC,GAAI,iBAAA,CAAkB,MAAA,IAAU,EAAC,EAAI,GAAI,UAAA,CAAW,MAAA,IAAU,EAAG,CAAA;AAEvF,EAAA,OAAO,UAAA,CAAW,IAAA,EAAM,MAAA,EAAQ,YAAY,CAAA;AAC9C;AAEA,IAAM,UAAA,GAAa,CACjB,IAAA,EACA,MAAA,EACA,QAAA,KACY;AACZ,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,uBAAuB,QAAA,EAAU;AAC1C,IAAA,IAAI,+BAA+B,MAAA,EAAQ;AACzC,MAAA,IAAI,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAA,EAAG;AAClC,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,mBAAA,KAAwB,QAAA,IAAY,kBAAA,CAAmB,IAAA,EAAM,mBAAmB,CAAA,EAAG;AAC5F,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,MAAM,OAAA,CAAQ,mBAAmB,CAAA,IAAK,mBAAA,CAAoB,WAAW,CAAA,EAAG;AAC1E,MAAA,MAAM,CAAC,OAAA,EAAS,eAAe,CAAA,GAAI,mBAAA;AACnC,MAAA,IAAI,mBAAmB,IAAA,EAAM,OAAO,KAAK,iBAAA,CAAkB,eAAA,EAAiB,MAAM,CAAA,EAAG;AACnF,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT,CAAA;AAEO,IAAM,kBAAA,GAAqB,CAAC,IAAA,EAAc,OAAA,KAA6B;AAQ5E,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,OAAO,CAAA;AACxC,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEO,IAAM,eAAA,GAAkB,CAAC,IAAA,EAAc,QAAA,KAA8D;AAC1G,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,IAAA,OAAO,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AAAA,EAC1C;AAEA,EAAA,IAAI,oBAAoB,MAAA,EAAQ;AAC9B,IAAA,OAAO,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,EAC3B;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,IAAA,OAAO,SAAS,IAAA,CAAK,CAAA,CAAA,KAAK,kBAAA,CAAmB,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EACvD;AAEA,EAAA,OAAO,KAAA;AACT;AAEO,IAAM,iBAAA,GAAoB,CAAC,MAAA,EAA2B,KAAA,KAA2B;AACtF,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,OAAO,MAAA,KAAW,KAAA;AAAA,EACpB;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,IAAA,OAAO,MAAA,CAAO,SAAS,KAAK,CAAA;AAAA,EAC9B;AAEA,EAAA,OAAO,KAAA;AACT;AAqBA,IAAM,IAAA,GAAmB,EAAE,MAAA,EAAQ,MAAA,EAAO;AAQnC,IAAM,uBAAuB,OAAwB;AAAA,EAC1D,MAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,KAA0D;AACxD,EAAA,MAAM,kBAAkB,KAAA,CAAM,OAAA,CAAQ,aAAA,EAAe,EAAE,EAAE,IAAA,EAAK;AAC9D,EAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,SAAA,EAAU,EAAG,IAAA;AACvC,EAAA,IAAI,CAAC,UAAA,IAAc,OAAO,UAAA,CAAW,sBAAsB,UAAA,EAAY;AACrE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAQ,MAAM,UAAA,CAAW,iBAAA,CAAkB,eAAA,EAAiB,OAAc,CAAA;AAC5E;AAMO,IAAM,kBAAA,GAAqB,OAAO,GAAA,KAAoD;AAC3F,EAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,YAAY,qBAAA,EAAuB,cAAA,EAAgB,UAAA,EAAY,KAAA,EAAM,GAAI,GAAA;AAOlH,EAAA,MAAM,eAAA,GAAkB,OAAO,UAAA,CAAW,iBAAA,KAAsB,UAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,sBAAA,CAAuB,IAAA,EAAM,QAAQ,SAAA,EAAW,UAAA,EAAY,qBAAqB,CAAA,EAAG;AAC1G,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,eAAA,CAAgB,IAAA,EAAM,MAAA,EAAQ,UAAA,EAAY,qBAAqB,CAAA,EAAG;AACrE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,iBAAA,CAAkB,IAAA,EAAM,MAAA,EAAQ,UAAU,CAAA,EAAG;AAC/C,IAAA,OAAO,IAAA;AAAA,EACT;AAIA,EAAA,IAAI,IAAA;AAEJ,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,UAAA,CAAW,iBAAA,KAAsB,UAAA,EAAY;AACtD,MAAA,IAAA,GAAO,MAAM,UAAA,CAAW,iBAAA,CAAkB,KAAA,IAAS,IAAI,UAAiB,CAAA;AAAA,IAC1E,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,IAC3D;AAEA,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,EAAE,QAAQ,OAAA,EAAS,MAAA,EAAQ,KAAK,IAAA,EAAM,EAAE,KAAA,EAAO,0BAAA,EAA2B,EAAE;AAAA,IACrF;AAEA,IAAA,cAAA,CAAe,GAAA,CAAI,QAAQ,IAAI,CAAA;AAE/B,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,GAAe,OAAO,SAAA,EAAU;AACtC,MAAA,MAAM,eAAe,YAAA,EAAc,IAAA;AAEnC,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,SAAS,QAAA,IAAY,EAAE,QAAQ,IAAA,CAAA,EAAO;AACxD,UAAA,MAAA,CAAO,SAAA,EAAU,EAAG,IAAA,CAAK,mFAAmF,CAAA;AAAA,QAC9G,CAAA,MAAO;AACL,UAAA,MAAM,WAAA,GAAc,MAAM,YAAA,CAAa,cAAA,CAAe,IAAc,CAAA;AACpE,UAAA,cAAA,CAAe,GAAA,CAAI,mBAAmB,WAAW,CAAA;AAEjD,UAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,QAAA,CAAS,IAAc,CAAA;AACxD,UAAA,cAAA,CAAe,GAAA,CAAI,aAAa,KAAK,CAAA;AAAA,QACvC;AAAA,MACF;AAAA,IACF,SAAS,SAAA,EAAW;AAClB,MAAA,MAAA,CAAO,SAAA,EAAU,EAAG,KAAA,CAAM,6CAAA,EAA+C;AAAA,QACvE,KAAA,EAAO,SAAA,YAAqB,KAAA,GAAQ,EAAE,OAAA,EAAS,UAAU,OAAA,EAAS,KAAA,EAAO,SAAA,CAAU,KAAA,EAAM,GAAI;AAAA,OAC9F,CAAA;AAAA,IACH;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAA,CAAO,SAAA,EAAU,EAAG,KAAA,CAAM,sBAAA,EAAwB;AAAA,MAChD,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,EAAE,OAAA,EAAS,IAAI,OAAA,EAAS,KAAA,EAAO,GAAA,CAAI,KAAA,EAAM,GAAI;AAAA,KAC5E,CAAA;AACD,IAAA,OAAO,EAAE,QAAQ,OAAA,EAAS,MAAA,EAAQ,KAAK,IAAA,EAAM,EAAE,KAAA,EAAO,0BAAA,EAA2B,EAAE;AAAA,EACrF;AAIA,EAAA,IAAI,eAAA,IAAmB,UAAA,IAAc,OAAO,UAAA,CAAW,kBAAkB,UAAA,EAAY;AACnF,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,GAAe,MAAM,UAAA,CAAW,aAAA,CAAc,MAAM,UAAiB,CAAA;AAE3E,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,OAAO,EAAE,QAAQ,OAAA,EAAS,MAAA,EAAQ,KAAK,IAAA,EAAM,EAAE,KAAA,EAAO,eAAA,EAAgB,EAAE;AAAA,MAC1E;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,SAAA,EAAU,EAAG,KAAA,CAAM,sCAAA,EAAwC;AAAA,QAChE,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,EAAE,OAAA,EAAS,IAAI,OAAA,EAAS,KAAA,EAAO,GAAA,CAAI,KAAA,EAAM,GAAI;AAAA,OAC5E,CAAA;AACD,MAAA,OAAO,EAAE,QAAQ,OAAA,EAAS,MAAA,EAAQ,KAAK,IAAA,EAAM,EAAE,KAAA,EAAO,qBAAA,EAAsB,EAAE;AAAA,IAChF;AAAA,EACF,WAAW,WAAA,IAAe,UAAA,IAAc,OAAO,UAAA,CAAW,cAAc,UAAA,EAAY;AAClF,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,GAAe,IAAI,qBAAA,EAAsB;AAC/C,MAAA,MAAM,eAAe,MAAM,UAAA,CAAW,UAAU,IAAA,EAAM,MAAA,EAAQ,MAAM,YAAmB,CAAA;AAEvF,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,OAAO,EAAE,QAAQ,OAAA,EAAS,MAAA,EAAQ,KAAK,IAAA,EAAM,EAAE,KAAA,EAAO,eAAA,EAAgB,EAAE;AAAA,MAC1E;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,SAAA,EAAU,EAAG,KAAA,CAAM,kCAAA,EAAoC;AAAA,QAC5D,KAAA,EAAO,GAAA,YAAe,KAAA,GAAQ,EAAE,OAAA,EAAS,IAAI,OAAA,EAAS,KAAA,EAAO,GAAA,CAAI,KAAA,EAAM,GAAI,GAAA;AAAA,QAC3E,IAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,OAAO,EAAE,QAAQ,OAAA,EAAS,MAAA,EAAQ,KAAK,IAAA,EAAM,EAAE,KAAA,EAAO,qBAAA,EAAsB,EAAE;AAAA,IAChF;AAAA,EACF,CAAA,MAAA,IAAW,WAAW,UAAA,IAAc,UAAA,CAAW,SAAS,UAAA,CAAW,KAAA,CAAM,SAAS,CAAA,EAAG;AACnF,IAAA,MAAM,eAAe,MAAM,UAAA,CAAW,WAAW,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAI,CAAA;AAE1E,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,OAAO,EAAE,QAAQ,OAAA,EAAS,MAAA,EAAQ,KAAK,IAAA,EAAM,EAAE,KAAA,EAAO,eAAA,EAAgB,EAAE;AAAA,IAC1E;AAAA,EACF,CAAA,MAAO;AAIL,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,SAAA,EAAU,EAAG,IAAA;AACzC,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI,iBAAA,CAAkB,KAAA,IAAS,iBAAA,CAAkB,KAAA,CAAM,SAAS,CAAA,EAAG;AACjE,QAAA,MAAM,eAAe,MAAM,UAAA,CAAW,kBAAkB,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAI,CAAA;AAEjF,QAAA,IAAI,CAAC,YAAA,EAAc;AACjB,UAAA,OAAO,EAAE,QAAQ,OAAA,EAAS,MAAA,EAAQ,KAAK,IAAA,EAAM,EAAE,KAAA,EAAO,eAAA,EAAgB,EAAE;AAAA,QAC1E;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAO,EAAE,QAAQ,OAAA,EAAS,MAAA,EAAQ,KAAK,IAAA,EAAM,EAAE,KAAA,EAAO,eAAA,EAAgB,EAAE;AAAA,MAC1E;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAGO,IAAM,UAAA,GAAa,OACxB,KAAA,EACA,IAAA,EACA,QACA,IAAA,KACqB;AAErB,EAAA,KAAA,MAAW,CAAA,IAAK,KAAA,IAAS,EAAC,EAAG;AAC3B,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAC,CAAA;AAEtB,IAAA,IAAI,CAAC,eAAA,CAAgB,IAAA,EAAM,IAAA,CAAK,IAAI,CAAA,EAAG;AACrC,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,KAAK,OAAA,IAAW,CAAC,kBAAkB,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA,EAAG;AAC5D,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,YAAY,IAAA,CAAK,SAAA;AACvB,IAAA,IAAI,OAAO,cAAc,UAAA,EAAY;AACnC,MAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,OAAA,EAAQ,CACnC,IAAA,CAAK,MAAM,SAAA,CAAU,IAAI,CAAC,CAAA,CAC1B,KAAA,CAAM,MAAM,KAAK,CAAA;AAEpB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF,CAAA,MAAA,IAAW,KAAK,KAAA,EAAO;AACrB,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,OAAO,KAAA;AACT","file":"chunk-K5SP7SOS.js","sourcesContent":["import type { MastraAuthConfig } from '@mastra/core/server';\n\n// Default configuration that can be extended by clients\nexport const defaultAuthConfig: MastraAuthConfig = {\n protected: ['/api/*'],\n public: ['/api', '/api/auth/*'],\n // Simple rule system\n rules: [\n // Admin users can do anything\n {\n condition: user => {\n if (typeof user === 'object' && user !== null) {\n if ('isAdmin' in user) {\n return !!user.isAdmin;\n }\n\n if ('role' in user) {\n return user.role === 'admin';\n }\n }\n return false;\n },\n allow: true,\n },\n ],\n};\n","/**\n * Path pattern matching utility\n * Inlined from regexparam v3.0.0 (MIT License)\n * https://github.com/lukeed/regexparam\n *\n * Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nexport interface ParsedPattern {\n keys: string[] | false;\n pattern: RegExp;\n}\n\n/**\n * Parse a route pattern into a RegExp\n * Supports:\n * - Named parameters: /users/:id\n * - Optional parameters: /users/:id?\n * - Wildcards: /files/*\n * - Mixed patterns: /api/:version/users/:id\n */\nexport function parse(input: string | RegExp, loose?: boolean): ParsedPattern {\n if (input instanceof RegExp) return { keys: false, pattern: input };\n\n let c: string;\n let o: number;\n let tmp: string | undefined;\n let ext: number;\n const keys: string[] = [];\n let pattern = '';\n const arr = input.split('/');\n\n arr[0] || arr.shift();\n\n while ((tmp = arr.shift())) {\n c = tmp[0]!;\n if (c === '*') {\n keys.push(c);\n pattern += tmp[1] === '?' ? '(?:/(.*))?' : '/(.*)';\n } else if (c === ':') {\n o = tmp.indexOf('?', 1);\n ext = tmp.indexOf('.', 1);\n keys.push(tmp.substring(1, !!~o ? o : !!~ext ? ext : tmp.length));\n pattern += !!~o && !~ext ? '(?:/([^/]+?))?' : '/([^/]+?)';\n if (!!~ext) pattern += (!!~o ? '?' : '') + '\\\\' + tmp.substring(ext);\n } else {\n pattern += '/' + tmp;\n }\n }\n\n return {\n keys: keys,\n pattern: new RegExp('^' + pattern + (loose ? '(?=$|/)' : '/?$'), 'i'),\n };\n}\n\n/**\n * Test if a path matches a pattern\n */\nexport function matchPath(path: string, pattern: string | RegExp): boolean {\n const { pattern: regex } = parse(pattern);\n return regex.test(path);\n}\n","import type { IRBACProvider, EEUser } from '@mastra/core/auth/ee';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { MastraAuthConfig } from '@mastra/core/server';\nimport type { HonoRequest } from 'hono';\n\nimport { defaultAuthConfig } from './defaults';\nimport { parse } from './path-pattern';\n\n/**\n * Check if a route is a registered custom route that requires authentication.\n * Returns true only if the route is explicitly registered with requiresAuth: true.\n * Returns false if the route is not in the config or has requiresAuth: false.\n */\nexport const isProtectedCustomRoute = (\n path: string,\n method: string,\n customRouteAuthConfig?: Map<string, boolean>,\n): boolean => {\n if (!customRouteAuthConfig) {\n return false;\n }\n\n // Check exact match first (fast path for static routes)\n const exactRouteKey = `${method}:${path}`;\n if (customRouteAuthConfig.has(exactRouteKey)) {\n return customRouteAuthConfig.get(exactRouteKey) === true;\n }\n\n // Check exact match for ALL method\n const allRouteKey = `ALL:${path}`;\n if (customRouteAuthConfig.has(allRouteKey)) {\n return customRouteAuthConfig.get(allRouteKey) === true;\n }\n\n // Check pattern matches for dynamic routes (e.g., '/users/:id')\n for (const [routeKey, requiresAuth] of customRouteAuthConfig.entries()) {\n const colonIndex = routeKey.indexOf(':');\n if (colonIndex === -1) {\n continue; // Skip malformed keys\n }\n\n const routeMethod = routeKey.substring(0, colonIndex);\n const routePattern = routeKey.substring(colonIndex + 1);\n\n // Check if method matches (exact match or ALL)\n if (routeMethod !== method && routeMethod !== 'ALL') {\n continue;\n }\n\n // Check if path matches the pattern\n if (pathMatchesPattern(path, routePattern)) {\n return requiresAuth === true;\n }\n }\n\n return false; // Not in config = not a protected custom route\n};\n\n/**\n * Check if request is from dev playground\n * @param getHeader - Function to get header value from request\n * @param customRouteAuthConfig - Map of custom route auth configurations\n */\nexport const isDevPlaygroundRequest = (\n path: string,\n method: string,\n getHeader: (name: string) => string | undefined,\n authConfig: MastraAuthConfig,\n customRouteAuthConfig?: Map<string, boolean>,\n): boolean => {\n const protectedAccess = [...(defaultAuthConfig.protected || []), ...(authConfig.protected || [])];\n return (\n process.env.MASTRA_DEV === 'true' &&\n // Allow if path doesn't match protected patterns AND is not a protected custom route\n ((!isAnyMatch(path, method, protectedAccess) && !isProtectedCustomRoute(path, method, customRouteAuthConfig)) ||\n // Or if has playground header\n getHeader('x-mastra-dev-playground') === 'true')\n );\n};\n\nexport const isCustomRoutePublic = (\n path: string,\n method: string,\n customRouteAuthConfig?: Map<string, boolean>,\n): boolean => {\n if (!customRouteAuthConfig) {\n return false;\n }\n\n // Check exact match first (fast path for static routes)\n const exactRouteKey = `${method}:${path}`;\n if (customRouteAuthConfig.has(exactRouteKey)) {\n return !customRouteAuthConfig.get(exactRouteKey); // True when route opts out of auth\n }\n\n // Check exact match for ALL method\n const allRouteKey = `ALL:${path}`;\n if (customRouteAuthConfig.has(allRouteKey)) {\n return !customRouteAuthConfig.get(allRouteKey);\n }\n\n // Check pattern matches for dynamic routes (e.g., '/users/:id')\n for (const [routeKey, requiresAuth] of customRouteAuthConfig.entries()) {\n const colonIndex = routeKey.indexOf(':');\n if (colonIndex === -1) {\n continue; // Skip malformed keys\n }\n\n const routeMethod = routeKey.substring(0, colonIndex);\n const routePattern = routeKey.substring(colonIndex + 1);\n\n // Check if method matches (exact match or ALL)\n if (routeMethod !== method && routeMethod !== 'ALL') {\n continue;\n }\n\n // Check if path matches the pattern\n if (pathMatchesPattern(path, routePattern)) {\n return !requiresAuth; // True when route opts out of auth\n }\n }\n\n return false;\n};\n\n// NOTE: This uses isProtectedCustomRoute (default-allow for unknown paths) rather than\n// !isCustomRoutePublic (default-deny). This is intentional — all registered server and\n// custom routes are auth-checked via registerRoute/checkRouteAuth regardless of this\n// function. The '/api/*' protected pattern exists as a user-facing override mechanism.\n// The old default-deny logic incorrectly blocked non-API paths (e.g. '/', '/agents')\n// which prevented the studio login page from loading in production.\nexport const isProtectedPath = (\n path: string,\n method: string,\n authConfig: MastraAuthConfig,\n customRouteAuthConfig?: Map<string, boolean>,\n): boolean => {\n const protectedAccess = [...(defaultAuthConfig.protected || []), ...(authConfig.protected || [])];\n return isAnyMatch(path, method, protectedAccess) || isProtectedCustomRoute(path, method, customRouteAuthConfig);\n};\n\nexport const canAccessPublicly = (path: string, method: string, authConfig: MastraAuthConfig): boolean => {\n // Check if this path+method combination is publicly accessible\n const publicAccess = [...(defaultAuthConfig.public || []), ...(authConfig.public || [])];\n\n return isAnyMatch(path, method, publicAccess);\n};\n\nconst isAnyMatch = (\n path: string,\n method: string,\n patterns: MastraAuthConfig['protected'] | MastraAuthConfig['public'],\n): boolean => {\n if (!patterns) {\n return false;\n }\n\n for (const patternPathOrMethod of patterns) {\n if (patternPathOrMethod instanceof RegExp) {\n if (patternPathOrMethod.test(path)) {\n return true;\n }\n }\n\n if (typeof patternPathOrMethod === 'string' && pathMatchesPattern(path, patternPathOrMethod)) {\n return true;\n }\n\n if (Array.isArray(patternPathOrMethod) && patternPathOrMethod.length === 2) {\n const [pattern, methodOrMethods] = patternPathOrMethod;\n if (pathMatchesPattern(path, pattern) && matchesOrIncludes(methodOrMethods, method)) {\n return true;\n }\n }\n }\n\n return false;\n};\n\nexport const pathMatchesPattern = (path: string, pattern: string): boolean => {\n // Use regexparam for battle-tested path matching\n // Supports:\n // - Exact paths: '/api/users'\n // - Wildcards: '/api/agents/*' matches '/api/agents/123'\n // - Path parameters: '/users/:id' matches '/users/123'\n // - Optional parameters: '/users/:id?' matches '/users' and '/users/123'\n // - Mixed patterns: '/api/:version/users/:id/profile'\n const { pattern: regex } = parse(pattern);\n return regex.test(path);\n};\n\nexport const pathMatchesRule = (path: string, rulePath: string | RegExp | string[] | undefined): boolean => {\n if (!rulePath) return true; // No path specified means all paths\n\n if (typeof rulePath === 'string') {\n return pathMatchesPattern(path, rulePath);\n }\n\n if (rulePath instanceof RegExp) {\n return rulePath.test(path);\n }\n\n if (Array.isArray(rulePath)) {\n return rulePath.some(p => pathMatchesPattern(path, p));\n }\n\n return false;\n};\n\nexport const matchesOrIncludes = (values: string | string[], value: string): boolean => {\n if (typeof values === 'string') {\n return values === value;\n }\n\n if (Array.isArray(values)) {\n return values.includes(value);\n }\n\n return false;\n};\n\n// ── Core auth middleware ──\n// Framework-agnostic auth logic extracted from adapter middlewares.\n// Each adapter builds an AuthMiddlewareContext and delegates to coreAuthMiddleware.\n\nexport interface AuthMiddlewareContext {\n path: string;\n method: string;\n getHeader: (name: string) => string | undefined;\n mastra: Mastra;\n authConfig: MastraAuthConfig;\n customRouteAuthConfig?: Map<string, boolean>;\n requestContext: { get: (key: string) => unknown; set: (key: string, value: unknown) => void };\n rawRequest: unknown;\n token: string | null;\n buildAuthorizeContext: () => unknown;\n}\n\nexport type AuthResult = { action: 'next' } | { action: 'error'; status: number; body: Record<string, unknown> };\n\nconst pass: AuthResult = { action: 'next' };\n\nexport interface GetAuthenticatedUserOptions {\n mastra: Mastra;\n token: string;\n request: Request | HonoRequest;\n}\n\nexport const getAuthenticatedUser = async <TUser = unknown>({\n mastra,\n token,\n request,\n}: GetAuthenticatedUserOptions): Promise<TUser | null> => {\n const normalizedToken = token.replace(/^Bearer\\s+/i, '').trim();\n if (!normalizedToken) {\n return null;\n }\n\n const authConfig = mastra.getServer()?.auth;\n if (!authConfig || typeof authConfig.authenticateToken !== 'function') {\n return null;\n }\n\n return (await authConfig.authenticateToken(normalizedToken, request as any)) as TUser | null;\n};\n\n/**\n * Single auth middleware: authenticate → authorize.\n * Skip checks (dev playground, unprotected path, public path) are evaluated once.\n */\nexport const coreAuthMiddleware = async (ctx: AuthMiddlewareContext): Promise<AuthResult> => {\n const { path, method, getHeader, mastra, authConfig, customRouteAuthConfig, requestContext, rawRequest, token } = ctx;\n\n // ── Skip checks (evaluated once) ──\n\n // Only bypass auth for dev playground when no real auth provider is configured.\n // When auth IS configured (has authenticateToken), we need the full auth flow\n // so user/roles/permissions are set in requestContext.\n const hasAuthProvider = typeof authConfig.authenticateToken === 'function';\n if (!hasAuthProvider && isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {\n return pass;\n }\n\n if (!isProtectedPath(path, method, authConfig, customRouteAuthConfig)) {\n return pass;\n }\n\n if (canAccessPublicly(path, method, authConfig)) {\n return pass;\n }\n\n // ── Authentication ──\n\n let user: unknown;\n\n try {\n if (typeof authConfig.authenticateToken === 'function') {\n user = await authConfig.authenticateToken(token ?? '', rawRequest as any);\n } else {\n throw new Error('No token verification method configured');\n }\n\n if (!user) {\n return { action: 'error', status: 401, body: { error: 'Invalid or expired token' } };\n }\n\n requestContext.set('user', user);\n\n try {\n const serverConfig = mastra.getServer();\n const rbacProvider = serverConfig?.rbac as IRBACProvider<EEUser> | undefined;\n\n if (rbacProvider) {\n if (!user || typeof user !== 'object' || !('id' in user)) {\n mastra.getLogger()?.warn('RBAC: authenticated user missing required \"id\" field, skipping permission loading');\n } else {\n const permissions = await rbacProvider.getPermissions(user as EEUser);\n requestContext.set('userPermissions', permissions);\n\n const roles = await rbacProvider.getRoles(user as EEUser);\n requestContext.set('userRoles', roles);\n }\n }\n } catch (rbacError) {\n mastra.getLogger()?.error('RBAC: failed to load user permissions/roles', {\n error: rbacError instanceof Error ? { message: rbacError.message, stack: rbacError.stack } : rbacError,\n });\n }\n } catch (err) {\n mastra.getLogger()?.error('Authentication error', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n });\n return { action: 'error', status: 401, body: { error: 'Invalid or expired token' } };\n }\n\n // ── Authorization ──\n\n if ('authorizeUser' in authConfig && typeof authConfig.authorizeUser === 'function') {\n try {\n const isAuthorized = await authConfig.authorizeUser(user, rawRequest as any);\n\n if (!isAuthorized) {\n return { action: 'error', status: 403, body: { error: 'Access denied' } };\n }\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 return { action: 'error', status: 500, body: { error: 'Authorization error' } };\n }\n } else if ('authorize' in authConfig && typeof authConfig.authorize === 'function') {\n try {\n const authorizeCtx = ctx.buildAuthorizeContext();\n const isAuthorized = await authConfig.authorize(path, method, user, authorizeCtx as any);\n\n if (!isAuthorized) {\n return { action: 'error', status: 403, body: { error: 'Access denied' } };\n }\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 return { action: 'error', status: 500, body: { error: 'Authorization error' } };\n }\n } else 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 { action: 'error', status: 403, body: { error: 'Access denied' } };\n }\n } else {\n // No explicit authorization configured (authorizeUser, authorize, or rules)\n // Check if RBAC is configured - if not, allow authenticated users through\n // (auth-only mode = authenticated users get full access)\n const rbacProvider = mastra.getServer()?.rbac;\n if (rbacProvider) {\n if (defaultAuthConfig.rules && defaultAuthConfig.rules.length > 0) {\n const isAuthorized = await checkRules(defaultAuthConfig.rules, path, method, user);\n\n if (!isAuthorized) {\n return { action: 'error', status: 403, body: { error: 'Access denied' } };\n }\n } else {\n return { action: 'error', status: 403, body: { error: 'Access denied' } };\n }\n }\n }\n\n return pass;\n};\n\n// Check authorization rules\nexport const checkRules = async (\n rules: MastraAuthConfig['rules'],\n path: string,\n method: string,\n user: unknown,\n): Promise<boolean> => {\n // Go through rules in order (first match wins)\n for (const i in rules || []) {\n const rule = rules?.[i]!;\n // Check if rule applies to this path\n if (!pathMatchesRule(path, rule.path)) {\n continue;\n }\n\n // Check if rule applies to this method\n if (rule.methods && !matchesOrIncludes(rule.methods, method)) {\n continue;\n }\n\n // Rule matches, check conditions\n const condition = rule.condition;\n if (typeof condition === 'function') {\n const allowed = await Promise.resolve()\n .then(() => condition(user))\n .catch(() => false);\n\n if (allowed) {\n return true;\n }\n } else if (rule.allow) {\n return true;\n }\n }\n\n // No matching rules, deny by default\n return false;\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkN5RFB7A4_cjs = require('./chunk-N5RFB7A4.cjs');
3
+ var chunkZHVL7YBO_cjs = require('./chunk-ZHVL7YBO.cjs');
4
4
  var chunkZYXDUS6Q_cjs = require('./chunk-ZYXDUS6Q.cjs');
5
5
  var chunkY2BKW5ND_cjs = require('./chunk-Y2BKW5ND.cjs');
6
6
  var chunkYJLDMFSE_cjs = require('./chunk-YJLDMFSE.cjs');
@@ -38,8 +38,8 @@ var LIST_DATASETS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
38
38
  method: "GET",
39
39
  path: "/datasets",
40
40
  responseType: "json",
41
- queryParamSchema: chunkN5RFB7A4_cjs.paginationQuerySchema,
42
- responseSchema: chunkN5RFB7A4_cjs.listDatasetsResponseSchema,
41
+ queryParamSchema: chunkZHVL7YBO_cjs.paginationQuerySchema,
42
+ responseSchema: chunkZHVL7YBO_cjs.listDatasetsResponseSchema,
43
43
  summary: "List all datasets",
44
44
  description: "Returns a paginated list of all datasets",
45
45
  tags: ["Datasets"],
@@ -65,8 +65,8 @@ var CREATE_DATASET_ROUTE = chunkYJLDMFSE_cjs.createRoute({
65
65
  method: "POST",
66
66
  path: "/datasets",
67
67
  responseType: "json",
68
- bodySchema: chunkN5RFB7A4_cjs.createDatasetBodySchema,
69
- responseSchema: chunkN5RFB7A4_cjs.datasetResponseSchema,
68
+ bodySchema: chunkZHVL7YBO_cjs.createDatasetBodySchema,
69
+ responseSchema: chunkZHVL7YBO_cjs.datasetResponseSchema,
70
70
  summary: "Create a new dataset",
71
71
  description: "Creates a new dataset with the specified name and optional metadata",
72
72
  tags: ["Datasets"],
@@ -108,8 +108,8 @@ var GET_DATASET_ROUTE = chunkYJLDMFSE_cjs.createRoute({
108
108
  method: "GET",
109
109
  path: "/datasets/:datasetId",
110
110
  responseType: "json",
111
- pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
112
- responseSchema: chunkN5RFB7A4_cjs.datasetResponseSchema.nullable(),
111
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetIdPathParams,
112
+ responseSchema: chunkZHVL7YBO_cjs.datasetResponseSchema.nullable(),
113
113
  summary: "Get dataset by ID",
114
114
  description: "Returns details for a specific dataset",
115
115
  tags: ["Datasets"],
@@ -131,9 +131,9 @@ var UPDATE_DATASET_ROUTE = chunkYJLDMFSE_cjs.createRoute({
131
131
  method: "PATCH",
132
132
  path: "/datasets/:datasetId",
133
133
  responseType: "json",
134
- pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
135
- bodySchema: chunkN5RFB7A4_cjs.updateDatasetBodySchema,
136
- responseSchema: chunkN5RFB7A4_cjs.datasetResponseSchema,
134
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetIdPathParams,
135
+ bodySchema: chunkZHVL7YBO_cjs.updateDatasetBodySchema,
136
+ responseSchema: chunkZHVL7YBO_cjs.datasetResponseSchema,
137
137
  summary: "Update dataset",
138
138
  description: "Updates a dataset with the specified fields",
139
139
  tags: ["Datasets"],
@@ -189,7 +189,7 @@ var DELETE_DATASET_ROUTE = chunkYJLDMFSE_cjs.createRoute({
189
189
  method: "DELETE",
190
190
  path: "/datasets/:datasetId",
191
191
  responseType: "json",
192
- pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
192
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetIdPathParams,
193
193
  responseSchema: chunkZYXDUS6Q_cjs.successResponseSchema,
194
194
  summary: "Delete dataset",
195
195
  description: "Deletes a dataset and all its items",
@@ -213,9 +213,9 @@ var LIST_ITEMS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
213
213
  method: "GET",
214
214
  path: "/datasets/:datasetId/items",
215
215
  responseType: "json",
216
- pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
217
- queryParamSchema: chunkN5RFB7A4_cjs.listItemsQuerySchema,
218
- responseSchema: chunkN5RFB7A4_cjs.listItemsResponseSchema,
216
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetIdPathParams,
217
+ queryParamSchema: chunkZHVL7YBO_cjs.listItemsQuerySchema,
218
+ responseSchema: chunkZHVL7YBO_cjs.listItemsResponseSchema,
219
219
  summary: "List dataset items",
220
220
  description: "Returns a paginated list of items in the dataset",
221
221
  tags: ["Datasets"],
@@ -247,9 +247,9 @@ var ADD_ITEM_ROUTE = chunkYJLDMFSE_cjs.createRoute({
247
247
  method: "POST",
248
248
  path: "/datasets/:datasetId/items",
249
249
  responseType: "json",
250
- pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
251
- bodySchema: chunkN5RFB7A4_cjs.addItemBodySchema,
252
- responseSchema: chunkN5RFB7A4_cjs.datasetItemResponseSchema,
250
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetIdPathParams,
251
+ bodySchema: chunkZHVL7YBO_cjs.addItemBodySchema,
252
+ responseSchema: chunkZHVL7YBO_cjs.datasetItemResponseSchema,
253
253
  summary: "Add item to dataset",
254
254
  description: "Adds a new item to the dataset (auto-increments dataset version)",
255
255
  tags: ["Datasets"],
@@ -278,8 +278,8 @@ var GET_ITEM_ROUTE = chunkYJLDMFSE_cjs.createRoute({
278
278
  method: "GET",
279
279
  path: "/datasets/:datasetId/items/:itemId",
280
280
  responseType: "json",
281
- pathParamSchema: chunkN5RFB7A4_cjs.datasetAndItemIdPathParams,
282
- responseSchema: chunkN5RFB7A4_cjs.datasetItemResponseSchema.nullable(),
281
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetAndItemIdPathParams,
282
+ responseSchema: chunkZHVL7YBO_cjs.datasetItemResponseSchema.nullable(),
283
283
  summary: "Get dataset item by ID",
284
284
  description: "Returns details for a specific dataset item",
285
285
  tags: ["Datasets"],
@@ -305,9 +305,9 @@ var UPDATE_ITEM_ROUTE = chunkYJLDMFSE_cjs.createRoute({
305
305
  method: "PATCH",
306
306
  path: "/datasets/:datasetId/items/:itemId",
307
307
  responseType: "json",
308
- pathParamSchema: chunkN5RFB7A4_cjs.datasetAndItemIdPathParams,
309
- bodySchema: chunkN5RFB7A4_cjs.updateItemBodySchema,
310
- responseSchema: chunkN5RFB7A4_cjs.datasetItemResponseSchema,
308
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetAndItemIdPathParams,
309
+ bodySchema: chunkZHVL7YBO_cjs.updateItemBodySchema,
310
+ responseSchema: chunkZHVL7YBO_cjs.datasetItemResponseSchema,
311
311
  summary: "Update dataset item",
312
312
  description: "Updates a dataset item (auto-increments dataset version)",
313
313
  tags: ["Datasets"],
@@ -340,7 +340,7 @@ var DELETE_ITEM_ROUTE = chunkYJLDMFSE_cjs.createRoute({
340
340
  method: "DELETE",
341
341
  path: "/datasets/:datasetId/items/:itemId",
342
342
  responseType: "json",
343
- pathParamSchema: chunkN5RFB7A4_cjs.datasetAndItemIdPathParams,
343
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetAndItemIdPathParams,
344
344
  responseSchema: chunkZYXDUS6Q_cjs.successResponseSchema,
345
345
  summary: "Delete dataset item",
346
346
  description: "Deletes a dataset item",
@@ -368,9 +368,9 @@ var LIST_EXPERIMENTS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
368
368
  method: "GET",
369
369
  path: "/datasets/:datasetId/experiments",
370
370
  responseType: "json",
371
- pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
372
- queryParamSchema: chunkN5RFB7A4_cjs.paginationQuerySchema,
373
- responseSchema: chunkN5RFB7A4_cjs.listExperimentsResponseSchema,
371
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetIdPathParams,
372
+ queryParamSchema: chunkZHVL7YBO_cjs.paginationQuerySchema,
373
+ responseSchema: chunkZHVL7YBO_cjs.listExperimentsResponseSchema,
374
374
  summary: "List experiments for dataset",
375
375
  description: "Returns a paginated list of experiments for the dataset",
376
376
  tags: ["Datasets"],
@@ -394,9 +394,9 @@ var TRIGGER_EXPERIMENT_ROUTE = chunkYJLDMFSE_cjs.createRoute({
394
394
  method: "POST",
395
395
  path: "/datasets/:datasetId/experiments",
396
396
  responseType: "json",
397
- pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
398
- bodySchema: chunkN5RFB7A4_cjs.triggerExperimentBodySchema,
399
- responseSchema: chunkN5RFB7A4_cjs.experimentSummaryResponseSchema,
397
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetIdPathParams,
398
+ bodySchema: chunkZHVL7YBO_cjs.triggerExperimentBodySchema,
399
+ responseSchema: chunkZHVL7YBO_cjs.experimentSummaryResponseSchema,
400
400
  summary: "Trigger a new experiment",
401
401
  description: "Triggers a new experiment on the dataset against the specified target. Returns immediately with pending status; execution happens in background.",
402
402
  tags: ["Datasets"],
@@ -409,6 +409,7 @@ var TRIGGER_EXPERIMENT_ROUTE = chunkYJLDMFSE_cjs.createRoute({
409
409
  targetId,
410
410
  scorerIds,
411
411
  version,
412
+ agentVersion,
412
413
  maxConcurrency,
413
414
  requestContext: rawRequestContext
414
415
  } = params;
@@ -419,6 +420,7 @@ var TRIGGER_EXPERIMENT_ROUTE = chunkYJLDMFSE_cjs.createRoute({
419
420
  targetId,
420
421
  scorers: scorerIds,
421
422
  version,
423
+ agentVersion,
422
424
  maxConcurrency,
423
425
  requestContext: requestContext$1
424
426
  });
@@ -444,8 +446,8 @@ var GET_EXPERIMENT_ROUTE = chunkYJLDMFSE_cjs.createRoute({
444
446
  method: "GET",
445
447
  path: "/datasets/:datasetId/experiments/:experimentId",
446
448
  responseType: "json",
447
- pathParamSchema: chunkN5RFB7A4_cjs.datasetAndExperimentIdPathParams,
448
- responseSchema: chunkN5RFB7A4_cjs.experimentResponseSchema.nullable(),
449
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetAndExperimentIdPathParams,
450
+ responseSchema: chunkZHVL7YBO_cjs.experimentResponseSchema.nullable(),
449
451
  summary: "Get experiment by ID",
450
452
  description: "Returns details for a specific experiment",
451
453
  tags: ["Datasets"],
@@ -471,9 +473,9 @@ var LIST_EXPERIMENT_RESULTS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
471
473
  method: "GET",
472
474
  path: "/datasets/:datasetId/experiments/:experimentId/results",
473
475
  responseType: "json",
474
- pathParamSchema: chunkN5RFB7A4_cjs.datasetAndExperimentIdPathParams,
475
- queryParamSchema: chunkN5RFB7A4_cjs.paginationQuerySchema,
476
- responseSchema: chunkN5RFB7A4_cjs.listExperimentResultsResponseSchema,
476
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetAndExperimentIdPathParams,
477
+ queryParamSchema: chunkZHVL7YBO_cjs.paginationQuerySchema,
478
+ responseSchema: chunkZHVL7YBO_cjs.listExperimentResultsResponseSchema,
477
479
  summary: "List experiment results",
478
480
  description: "Returns a paginated list of results for the experiment",
479
481
  tags: ["Datasets"],
@@ -504,9 +506,9 @@ var UPDATE_EXPERIMENT_RESULT_ROUTE = chunkYJLDMFSE_cjs.createRoute({
504
506
  method: "PATCH",
505
507
  path: "/datasets/:datasetId/experiments/:experimentId/results/:resultId",
506
508
  responseType: "json",
507
- pathParamSchema: chunkN5RFB7A4_cjs.experimentResultIdPathParams,
508
- bodySchema: chunkN5RFB7A4_cjs.updateExperimentResultBodySchema,
509
- responseSchema: chunkN5RFB7A4_cjs.experimentResultResponseSchema,
509
+ pathParamSchema: chunkZHVL7YBO_cjs.experimentResultIdPathParams,
510
+ bodySchema: chunkZHVL7YBO_cjs.updateExperimentResultBodySchema,
511
+ responseSchema: chunkZHVL7YBO_cjs.experimentResultResponseSchema,
510
512
  summary: "Update an experiment result",
511
513
  description: "Updates the status and/or tags on an experiment result",
512
514
  tags: ["Datasets"],
@@ -541,9 +543,9 @@ var COMPARE_EXPERIMENTS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
541
543
  method: "POST",
542
544
  path: "/datasets/:datasetId/compare",
543
545
  responseType: "json",
544
- pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
545
- bodySchema: chunkN5RFB7A4_cjs.compareExperimentsBodySchema,
546
- responseSchema: chunkN5RFB7A4_cjs.comparisonResponseSchema,
546
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetIdPathParams,
547
+ bodySchema: chunkZHVL7YBO_cjs.compareExperimentsBodySchema,
548
+ responseSchema: chunkZHVL7YBO_cjs.comparisonResponseSchema,
547
549
  summary: "Compare two experiments",
548
550
  description: "Compares two experiments to detect score regressions",
549
551
  tags: ["Datasets"],
@@ -570,9 +572,9 @@ var LIST_DATASET_VERSIONS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
570
572
  method: "GET",
571
573
  path: "/datasets/:datasetId/versions",
572
574
  responseType: "json",
573
- pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
574
- queryParamSchema: chunkN5RFB7A4_cjs.paginationQuerySchema,
575
- responseSchema: chunkN5RFB7A4_cjs.listDatasetVersionsResponseSchema,
575
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetIdPathParams,
576
+ queryParamSchema: chunkZHVL7YBO_cjs.paginationQuerySchema,
577
+ responseSchema: chunkZHVL7YBO_cjs.listDatasetVersionsResponseSchema,
576
578
  summary: "List dataset versions",
577
579
  description: "Returns a paginated list of all versions for the dataset",
578
580
  tags: ["Datasets"],
@@ -596,8 +598,8 @@ var LIST_ITEM_VERSIONS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
596
598
  method: "GET",
597
599
  path: "/datasets/:datasetId/items/:itemId/history",
598
600
  responseType: "json",
599
- pathParamSchema: chunkN5RFB7A4_cjs.datasetAndItemIdPathParams,
600
- responseSchema: chunkN5RFB7A4_cjs.listItemVersionsResponseSchema,
601
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetAndItemIdPathParams,
602
+ responseSchema: chunkZHVL7YBO_cjs.listItemVersionsResponseSchema,
601
603
  summary: "Get item history",
602
604
  description: "Returns the full SCD-2 history of the item across all dataset versions",
603
605
  tags: ["Datasets"],
@@ -623,8 +625,8 @@ var GET_ITEM_VERSION_ROUTE = chunkYJLDMFSE_cjs.createRoute({
623
625
  method: "GET",
624
626
  path: "/datasets/:datasetId/items/:itemId/versions/:datasetVersion",
625
627
  responseType: "json",
626
- pathParamSchema: chunkN5RFB7A4_cjs.datasetItemVersionPathParams,
627
- responseSchema: chunkN5RFB7A4_cjs.datasetItemResponseSchema.nullable(),
628
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetItemVersionPathParams,
629
+ responseSchema: chunkZHVL7YBO_cjs.datasetItemResponseSchema.nullable(),
628
630
  summary: "Get item at specific dataset version",
629
631
  description: "Returns the item as it existed at a specific dataset version",
630
632
  tags: ["Datasets"],
@@ -653,9 +655,9 @@ var BATCH_INSERT_ITEMS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
653
655
  method: "POST",
654
656
  path: "/datasets/:datasetId/items/batch",
655
657
  responseType: "json",
656
- pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
657
- bodySchema: chunkN5RFB7A4_cjs.batchInsertItemsBodySchema,
658
- responseSchema: chunkN5RFB7A4_cjs.batchInsertItemsResponseSchema,
658
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetIdPathParams,
659
+ bodySchema: chunkZHVL7YBO_cjs.batchInsertItemsBodySchema,
660
+ responseSchema: chunkZHVL7YBO_cjs.batchInsertItemsResponseSchema,
659
661
  summary: "Batch insert items to dataset",
660
662
  description: "Adds multiple items to the dataset in a single operation (single version entry)",
661
663
  tags: ["Datasets"],
@@ -685,9 +687,9 @@ var BATCH_DELETE_ITEMS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
685
687
  method: "DELETE",
686
688
  path: "/datasets/:datasetId/items/batch",
687
689
  responseType: "json",
688
- pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
689
- bodySchema: chunkN5RFB7A4_cjs.batchDeleteItemsBodySchema,
690
- responseSchema: chunkN5RFB7A4_cjs.batchDeleteItemsResponseSchema,
690
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetIdPathParams,
691
+ bodySchema: chunkZHVL7YBO_cjs.batchDeleteItemsBodySchema,
692
+ responseSchema: chunkZHVL7YBO_cjs.batchDeleteItemsResponseSchema,
691
693
  summary: "Batch delete items from dataset",
692
694
  description: "Deletes multiple items from the dataset in a single operation (single version entry)",
693
695
  tags: ["Datasets"],
@@ -724,9 +726,9 @@ var GENERATE_ITEMS_ROUTE = chunkYJLDMFSE_cjs.createRoute({
724
726
  method: "POST",
725
727
  path: "/datasets/:datasetId/generate-items",
726
728
  responseType: "json",
727
- pathParamSchema: chunkN5RFB7A4_cjs.datasetIdPathParams,
728
- bodySchema: chunkN5RFB7A4_cjs.generateItemsBodySchema,
729
- responseSchema: chunkN5RFB7A4_cjs.generateItemsResponseSchema,
729
+ pathParamSchema: chunkZHVL7YBO_cjs.datasetIdPathParams,
730
+ bodySchema: chunkZHVL7YBO_cjs.generateItemsBodySchema,
731
+ responseSchema: chunkZHVL7YBO_cjs.generateItemsResponseSchema,
730
732
  summary: "Generate dataset items using AI",
731
733
  description: "Uses an LLM to generate synthetic dataset items based on the dataset schema and a user prompt. Returns generated items for review \u2014 they are NOT automatically added to the dataset.",
732
734
  tags: ["Datasets"],
@@ -827,8 +829,8 @@ var CLUSTER_FAILURES_ROUTE = chunkYJLDMFSE_cjs.createRoute({
827
829
  method: "POST",
828
830
  path: "/datasets/cluster-failures",
829
831
  responseType: "json",
830
- bodySchema: chunkN5RFB7A4_cjs.clusterFailuresBodySchema,
831
- responseSchema: chunkN5RFB7A4_cjs.clusterFailuresResponseSchema,
832
+ bodySchema: chunkZHVL7YBO_cjs.clusterFailuresBodySchema,
833
+ responseSchema: chunkZHVL7YBO_cjs.clusterFailuresResponseSchema,
832
834
  summary: "Cluster experiment failures using AI",
833
835
  description: "Uses an LLM to analyze failure items from an experiment and group them into meaningful failure pattern clusters.",
834
836
  tags: ["Datasets"],
@@ -928,5 +930,5 @@ exports.TRIGGER_EXPERIMENT_ROUTE = TRIGGER_EXPERIMENT_ROUTE;
928
930
  exports.UPDATE_DATASET_ROUTE = UPDATE_DATASET_ROUTE;
929
931
  exports.UPDATE_EXPERIMENT_RESULT_ROUTE = UPDATE_EXPERIMENT_RESULT_ROUTE;
930
932
  exports.UPDATE_ITEM_ROUTE = UPDATE_ITEM_ROUTE;
931
- //# sourceMappingURL=chunk-AOAIJJY6.cjs.map
932
- //# sourceMappingURL=chunk-AOAIJJY6.cjs.map
933
+ //# sourceMappingURL=chunk-N6ZHI7A3.cjs.map
934
+ //# sourceMappingURL=chunk-N6ZHI7A3.cjs.map