@mastra/server 1.15.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 (83) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/_types/@internal_core/dist/index.d.ts +7 -0
  3. package/dist/{chunk-47RDD2HN.js → chunk-APJA4LIB.js} +4 -3
  4. package/dist/chunk-APJA4LIB.js.map +1 -0
  5. package/dist/{chunk-7D3YBNO6.cjs → chunk-FOHX5HVN.cjs} +4 -3
  6. package/dist/chunk-FOHX5HVN.cjs.map +1 -0
  7. package/dist/{chunk-2SQXNXDG.cjs → chunk-FXX6WI5F.cjs} +6 -3
  8. package/dist/chunk-FXX6WI5F.cjs.map +1 -0
  9. package/dist/{chunk-P4GHYEST.js → chunk-K5SP7SOS.js} +18 -3
  10. package/dist/chunk-K5SP7SOS.js.map +1 -0
  11. package/dist/{chunk-3KRZUGE2.cjs → chunk-LG2MUCSW.cjs} +22 -19
  12. package/dist/chunk-LG2MUCSW.cjs.map +1 -0
  13. package/dist/{chunk-XJ4C64FH.cjs → chunk-MPXNKSVP.cjs} +21 -21
  14. package/dist/{chunk-XJ4C64FH.cjs.map → chunk-MPXNKSVP.cjs.map} +1 -1
  15. package/dist/{chunk-M2PIFW7O.cjs → chunk-N6ZHI7A3.cjs} +333 -58
  16. package/dist/chunk-N6ZHI7A3.cjs.map +1 -0
  17. package/dist/{chunk-QVMLEJ63.cjs → chunk-OMNWTK4B.cjs} +18 -2
  18. package/dist/chunk-OMNWTK4B.cjs.map +1 -0
  19. package/dist/{chunk-BN5YN4UU.js → chunk-R344LGXP.js} +9 -6
  20. package/dist/chunk-R344LGXP.js.map +1 -0
  21. package/dist/{chunk-5N4O5XJZ.js → chunk-RFO7PBA6.js} +86 -8
  22. package/dist/chunk-RFO7PBA6.js.map +1 -0
  23. package/dist/{chunk-H37CMPNZ.js → chunk-UYAZFEAW.js} +6 -3
  24. package/dist/chunk-UYAZFEAW.js.map +1 -0
  25. package/dist/{chunk-NDI2C7UD.js → chunk-VD26CDFT.js} +281 -9
  26. package/dist/chunk-VD26CDFT.js.map +1 -0
  27. package/dist/{chunk-EYPXYWPY.js → chunk-Y452XTPZ.js} +3 -3
  28. package/dist/{chunk-EYPXYWPY.js.map → chunk-Y452XTPZ.js.map} +1 -1
  29. package/dist/{chunk-KTKTSTDR.cjs → chunk-ZHVL7YBO.cjs} +91 -7
  30. package/dist/chunk-ZHVL7YBO.cjs.map +1 -0
  31. package/dist/docs/SKILL.md +2 -1
  32. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  33. package/dist/docs/references/docs-server-middleware.md +237 -0
  34. package/dist/docs/references/reference-server-mastra-server.md +3 -2
  35. package/dist/server/auth/helpers.d.ts +7 -0
  36. package/dist/server/auth/helpers.d.ts.map +1 -1
  37. package/dist/server/auth/index.cjs +16 -12
  38. package/dist/server/auth/index.js +1 -1
  39. package/dist/server/handlers/datasets.cjs +33 -21
  40. package/dist/server/handlers/datasets.d.ts +814 -472
  41. package/dist/server/handlers/datasets.d.ts.map +1 -1
  42. package/dist/server/handlers/datasets.js +1 -1
  43. package/dist/server/handlers/observability-new-endpoints.cjs +19 -19
  44. package/dist/server/handlers/observability-new-endpoints.d.ts +8 -0
  45. package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
  46. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  47. package/dist/server/handlers/observability.cjs +24 -24
  48. package/dist/server/handlers/observability.js +2 -2
  49. package/dist/server/handlers/scores.cjs +7 -7
  50. package/dist/server/handlers/scores.d.ts +10 -0
  51. package/dist/server/handlers/scores.d.ts.map +1 -1
  52. package/dist/server/handlers/scores.js +1 -1
  53. package/dist/server/handlers.cjs +4 -4
  54. package/dist/server/handlers.js +2 -2
  55. package/dist/server/schemas/datasets.d.ts +141 -0
  56. package/dist/server/schemas/datasets.d.ts.map +1 -1
  57. package/dist/server/schemas/index.cjs +69 -45
  58. package/dist/server/schemas/index.js +2 -2
  59. package/dist/server/schemas/scores.d.ts +8 -0
  60. package/dist/server/schemas/scores.d.ts.map +1 -1
  61. package/dist/server/server-adapter/index.cjs +58 -53
  62. package/dist/server/server-adapter/index.cjs.map +1 -1
  63. package/dist/server/server-adapter/index.js +11 -6
  64. package/dist/server/server-adapter/index.js.map +1 -1
  65. package/dist/server/server-adapter/routes/datasets.d.ts +339 -1
  66. package/dist/server/server-adapter/routes/datasets.d.ts.map +1 -1
  67. package/dist/server/server-adapter/routes/observability.d.ts +4 -0
  68. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  69. package/dist/server/server-adapter/routes/scorers.d.ts +10 -0
  70. package/dist/server/server-adapter/routes/scorers.d.ts.map +1 -1
  71. package/package.json +5 -5
  72. package/dist/chunk-2SQXNXDG.cjs.map +0 -1
  73. package/dist/chunk-3KRZUGE2.cjs.map +0 -1
  74. package/dist/chunk-47RDD2HN.js.map +0 -1
  75. package/dist/chunk-5N4O5XJZ.js.map +0 -1
  76. package/dist/chunk-7D3YBNO6.cjs.map +0 -1
  77. package/dist/chunk-BN5YN4UU.js.map +0 -1
  78. package/dist/chunk-H37CMPNZ.js.map +0 -1
  79. package/dist/chunk-KTKTSTDR.cjs.map +0 -1
  80. package/dist/chunk-M2PIFW7O.cjs.map +0 -1
  81. package/dist/chunk-NDI2C7UD.js.map +0 -1
  82. package/dist/chunk-P4GHYEST.js.map +0 -1
  83. package/dist/chunk-QVMLEJ63.cjs.map +0 -1
@@ -9,6 +9,10 @@ var z__default = /*#__PURE__*/_interopDefault(z);
9
9
 
10
10
  var jsonSchemaObject = z__default.default.lazy(() => z__default.default.record(z__default.default.string(), z__default.default.unknown()));
11
11
  var jsonSchemaField = z__default.default.union([jsonSchemaObject, z__default.default.null()]).optional();
12
+ var datasetItemSourceSchema = z__default.default.object({
13
+ type: z__default.default.enum(["csv", "json", "trace", "llm", "experiment-result"]).describe("How this item was created"),
14
+ referenceId: z__default.default.string().optional().describe("Reference identifier (e.g., trace id, csv filename)")
15
+ }).optional().describe("Source/provenance of this dataset item");
12
16
  var datasetIdPathParams = z__default.default.object({
13
17
  datasetId: z__default.default.string().describe("Unique identifier for the dataset")
14
18
  });
@@ -22,6 +26,11 @@ var datasetAndExperimentIdPathParams = z__default.default.object({
22
26
  datasetId: z__default.default.string().describe("Unique identifier for the dataset"),
23
27
  experimentId: z__default.default.string().describe("Unique identifier for the experiment")
24
28
  });
29
+ var experimentResultIdPathParams = z__default.default.object({
30
+ datasetId: z__default.default.string().describe("Unique identifier for the dataset"),
31
+ experimentId: z__default.default.string().describe("Unique identifier for the experiment"),
32
+ resultId: z__default.default.string().describe("Unique identifier for the experiment result")
33
+ });
25
34
  var datasetAndItemIdPathParams = z__default.default.object({
26
35
  datasetId: z__default.default.string().describe("Unique identifier for the dataset"),
27
36
  itemId: z__default.default.string().describe("Unique identifier for the dataset item")
@@ -43,7 +52,9 @@ var createDatasetBodySchema = z__default.default.object({
43
52
  metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Additional metadata"),
44
53
  inputSchema: jsonSchemaField.describe("JSON Schema for validating item input"),
45
54
  groundTruthSchema: jsonSchemaField.describe("JSON Schema for validating item groundTruth"),
46
- requestContextSchema: jsonSchemaField.describe("JSON Schema describing expected request context shape")
55
+ requestContextSchema: jsonSchemaField.describe("JSON Schema describing expected request context shape"),
56
+ targetType: z__default.default.string().optional().describe("Target entity type (e.g. agent, workflow, scorer)"),
57
+ targetIds: z__default.default.array(z__default.default.string()).optional().describe("IDs of target entities this dataset is attached to")
47
58
  });
48
59
  var updateDatasetBodySchema = z__default.default.object({
49
60
  name: z__default.default.string().optional().describe("Name of the dataset"),
@@ -51,25 +62,31 @@ var updateDatasetBodySchema = z__default.default.object({
51
62
  metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Additional metadata"),
52
63
  inputSchema: jsonSchemaField.describe("JSON Schema for validating item input"),
53
64
  groundTruthSchema: jsonSchemaField.describe("JSON Schema for validating item groundTruth"),
54
- requestContextSchema: jsonSchemaField.describe("JSON Schema describing expected request context shape")
65
+ requestContextSchema: jsonSchemaField.describe("JSON Schema describing expected request context shape"),
66
+ tags: z__default.default.array(z__default.default.string()).optional().describe("Tag definitions for categorizing experiment results"),
67
+ targetType: z__default.default.string().optional().describe("Target entity type (e.g. agent, workflow, scorer)"),
68
+ targetIds: z__default.default.array(z__default.default.string()).optional().describe("IDs of target entities this dataset is attached to")
55
69
  });
56
70
  var addItemBodySchema = z__default.default.object({
57
71
  input: z__default.default.unknown().describe("Input data for the dataset item"),
58
72
  groundTruth: z__default.default.unknown().optional().describe("Expected output for comparison"),
59
73
  requestContext: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Request context preset for this item"),
60
- metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Additional metadata")
74
+ metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Additional metadata"),
75
+ source: datasetItemSourceSchema
61
76
  });
62
77
  var updateItemBodySchema = z__default.default.object({
63
78
  input: z__default.default.unknown().optional().describe("Input data for the dataset item"),
64
79
  groundTruth: z__default.default.unknown().optional().describe("Expected output for comparison"),
65
80
  requestContext: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Request context preset for this item"),
66
- metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Additional metadata")
81
+ metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Additional metadata"),
82
+ source: datasetItemSourceSchema
67
83
  });
68
84
  var triggerExperimentBodySchema = z__default.default.object({
69
85
  targetType: z__default.default.enum(["agent", "workflow", "scorer"]).describe("Type of target to run against"),
70
86
  targetId: z__default.default.string().describe("ID of the target"),
71
87
  scorerIds: z__default.default.array(z__default.default.string()).optional().describe("IDs of scorers to apply"),
72
88
  version: z__default.default.coerce.number().int().optional().describe("Pin to specific dataset version"),
89
+ agentVersion: z__default.default.string().optional().describe("Agent version ID to use for experiment"),
73
90
  maxConcurrency: z__default.default.number().optional().describe("Maximum concurrent executions"),
74
91
  requestContext: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional().describe("Global request context passed to the target")
75
92
  });
@@ -85,6 +102,9 @@ var datasetResponseSchema = z__default.default.object({
85
102
  inputSchema: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional(),
86
103
  groundTruthSchema: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional(),
87
104
  requestContextSchema: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional(),
105
+ tags: z__default.default.array(z__default.default.string()).optional().nullable(),
106
+ targetType: z__default.default.string().optional().nullable(),
107
+ targetIds: z__default.default.array(z__default.default.string()).optional().nullable(),
88
108
  version: z__default.default.number().int(),
89
109
  createdAt: z__default.default.coerce.date(),
90
110
  updatedAt: z__default.default.coerce.date()
@@ -97,6 +117,7 @@ var datasetItemResponseSchema = z__default.default.object({
97
117
  groundTruth: z__default.default.unknown().optional(),
98
118
  requestContext: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional(),
99
119
  metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional(),
120
+ source: datasetItemSourceSchema,
100
121
  createdAt: z__default.default.coerce.date(),
101
122
  updatedAt: z__default.default.coerce.date()
102
123
  });
@@ -104,6 +125,7 @@ var experimentResponseSchema = z__default.default.object({
104
125
  id: z__default.default.string(),
105
126
  datasetId: z__default.default.string().nullable(),
106
127
  datasetVersion: z__default.default.number().int().nullable(),
128
+ agentVersion: z__default.default.string().nullable().optional(),
107
129
  targetType: z__default.default.enum(["agent", "workflow", "scorer", "processor"]),
108
130
  targetId: z__default.default.string(),
109
131
  name: z__default.default.string().optional(),
@@ -143,8 +165,14 @@ var experimentResultResponseSchema = z__default.default.object({
143
165
  completedAt: z__default.default.coerce.date(),
144
166
  retryCount: z__default.default.number(),
145
167
  traceId: z__default.default.string().nullable(),
168
+ status: z__default.default.enum(["needs-review", "reviewed", "complete"]).nullable().optional(),
169
+ tags: z__default.default.array(z__default.default.string()).nullable().optional(),
146
170
  createdAt: z__default.default.coerce.date()
147
171
  });
172
+ var updateExperimentResultBodySchema = z__default.default.object({
173
+ status: z__default.default.enum(["needs-review", "reviewed", "complete"]).nullable().optional(),
174
+ tags: z__default.default.array(z__default.default.string()).optional()
175
+ });
148
176
  var comparisonItemSchema = z__default.default.object({
149
177
  itemId: z__default.default.string(),
150
178
  input: z__default.default.unknown().nullable(),
@@ -244,7 +272,8 @@ var batchInsertItemsBodySchema = z__default.default.object({
244
272
  input: z__default.default.unknown(),
245
273
  groundTruth: z__default.default.unknown().optional(),
246
274
  requestContext: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional(),
247
- metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional()
275
+ metadata: z__default.default.record(z__default.default.string(), z__default.default.unknown()).optional(),
276
+ source: datasetItemSourceSchema
248
277
  })
249
278
  )
250
279
  });
@@ -259,12 +288,63 @@ var batchDeleteItemsResponseSchema = z__default.default.object({
259
288
  success: z__default.default.boolean(),
260
289
  deletedCount: z__default.default.number()
261
290
  });
291
+ var generateItemsBodySchema = z__default.default.object({
292
+ modelId: z__default.default.string().describe('Model identifier in "provider/model" format (e.g., "openai/gpt-4o")'),
293
+ prompt: z__default.default.string().describe("Description of the kind of test data to generate"),
294
+ count: z__default.default.number().int().min(1).max(50).default(5).describe("Number of items to generate"),
295
+ agentContext: z__default.default.object({
296
+ description: z__default.default.string().optional(),
297
+ instructions: z__default.default.string().optional(),
298
+ tools: z__default.default.array(z__default.default.string()).optional()
299
+ }).optional().describe("Context about the agent to generate relevant test data")
300
+ });
301
+ var generatedItemSchema = z__default.default.object({
302
+ input: z__default.default.unknown(),
303
+ groundTruth: z__default.default.unknown().optional()
304
+ });
305
+ var generateItemsResponseSchema = z__default.default.object({
306
+ items: z__default.default.array(generatedItemSchema)
307
+ });
308
+ var clusterFailuresBodySchema = z__default.default.object({
309
+ modelId: z__default.default.string().describe('Model identifier in "provider/model" format (e.g., "openai/gpt-4o")'),
310
+ items: z__default.default.array(
311
+ z__default.default.object({
312
+ id: z__default.default.string(),
313
+ input: z__default.default.unknown(),
314
+ output: z__default.default.unknown().optional(),
315
+ error: z__default.default.string().optional(),
316
+ scores: z__default.default.record(z__default.default.string(), z__default.default.number()).optional(),
317
+ existingTags: z__default.default.array(z__default.default.string()).optional().describe("Tags already applied to this item")
318
+ })
319
+ ).min(1).max(200).describe("Failure items to cluster"),
320
+ availableTags: z__default.default.array(z__default.default.string()).optional().describe("Existing tag vocabulary from the dataset. The LLM should prefer reusing these tags when applicable."),
321
+ prompt: z__default.default.string().optional().describe('Optional user instructions to guide the analysis (e.g., "focus on tool usage failures")')
322
+ });
323
+ var failureClusterSchema = z__default.default.object({
324
+ id: z__default.default.string().describe("A unique cluster identifier"),
325
+ label: z__default.default.string().describe("Short label for this failure pattern"),
326
+ description: z__default.default.string().describe("Description of the common pattern"),
327
+ itemIds: z__default.default.array(z__default.default.string()).describe("IDs of items belonging to this cluster")
328
+ });
329
+ var clusterFailuresResponseSchema = z__default.default.object({
330
+ clusters: z__default.default.array(failureClusterSchema),
331
+ /** Per-item proposed tag assignments. Each entry maps an item ID to the tags the LLM suggests adding. */
332
+ proposedTags: z__default.default.array(
333
+ z__default.default.object({
334
+ itemId: z__default.default.string(),
335
+ tags: z__default.default.array(z__default.default.string()),
336
+ reason: z__default.default.string().describe("Brief explanation of why these tags were assigned to this item")
337
+ })
338
+ ).optional()
339
+ });
262
340
 
263
341
  exports.addItemBodySchema = addItemBodySchema;
264
342
  exports.batchDeleteItemsBodySchema = batchDeleteItemsBodySchema;
265
343
  exports.batchDeleteItemsResponseSchema = batchDeleteItemsResponseSchema;
266
344
  exports.batchInsertItemsBodySchema = batchInsertItemsBodySchema;
267
345
  exports.batchInsertItemsResponseSchema = batchInsertItemsResponseSchema;
346
+ exports.clusterFailuresBodySchema = clusterFailuresBodySchema;
347
+ exports.clusterFailuresResponseSchema = clusterFailuresResponseSchema;
268
348
  exports.compareExperimentsBodySchema = compareExperimentsBodySchema;
269
349
  exports.comparisonResponseSchema = comparisonResponseSchema;
270
350
  exports.createDatasetBodySchema = createDatasetBodySchema;
@@ -277,8 +357,11 @@ exports.datasetResponseSchema = datasetResponseSchema;
277
357
  exports.datasetVersionResponseSchema = datasetVersionResponseSchema;
278
358
  exports.experimentIdPathParams = experimentIdPathParams;
279
359
  exports.experimentResponseSchema = experimentResponseSchema;
360
+ exports.experimentResultIdPathParams = experimentResultIdPathParams;
280
361
  exports.experimentResultResponseSchema = experimentResultResponseSchema;
281
362
  exports.experimentSummaryResponseSchema = experimentSummaryResponseSchema;
363
+ exports.generateItemsBodySchema = generateItemsBodySchema;
364
+ exports.generateItemsResponseSchema = generateItemsResponseSchema;
282
365
  exports.itemIdPathParams = itemIdPathParams;
283
366
  exports.itemVersionResponseSchema = itemVersionResponseSchema;
284
367
  exports.listDatasetVersionsResponseSchema = listDatasetVersionsResponseSchema;
@@ -292,6 +375,7 @@ exports.paginationQuerySchema = paginationQuerySchema;
292
375
  exports.scorerResultSchema = scorerResultSchema;
293
376
  exports.triggerExperimentBodySchema = triggerExperimentBodySchema;
294
377
  exports.updateDatasetBodySchema = updateDatasetBodySchema;
378
+ exports.updateExperimentResultBodySchema = updateExperimentResultBodySchema;
295
379
  exports.updateItemBodySchema = updateItemBodySchema;
296
- //# sourceMappingURL=chunk-KTKTSTDR.cjs.map
297
- //# sourceMappingURL=chunk-KTKTSTDR.cjs.map
380
+ //# sourceMappingURL=chunk-ZHVL7YBO.cjs.map
381
+ //# sourceMappingURL=chunk-ZHVL7YBO.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/schemas/datasets.ts"],"names":["z","paginationInfoSchema"],"mappings":"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","file":"chunk-ZHVL7YBO.cjs","sourcesContent":["import z from 'zod';\nimport { paginationInfoSchema } from './common';\n\n// ============================================================================\n// JSON Schema Types (for inputSchema/groundTruthSchema fields)\n// ============================================================================\n\n// JSON Schema type (simplified for storage - full spec too complex)\nconst jsonSchemaObject: z.ZodType<Record<string, unknown>> = z.lazy(() => z.record(z.string(), z.unknown()));\n\n// JSON Schema field (object or null to disable)\nconst jsonSchemaField = z.union([jsonSchemaObject, z.null()]).optional();\n\n// Dataset item source tracking\nconst datasetItemSourceSchema = z\n .object({\n type: z.enum(['csv', 'json', 'trace', 'llm', 'experiment-result']).describe('How this item was created'),\n referenceId: z.string().optional().describe('Reference identifier (e.g., trace id, csv filename)'),\n })\n .optional()\n .describe('Source/provenance of this dataset item');\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\nexport const datasetIdPathParams = z.object({\n datasetId: z.string().describe('Unique identifier for the dataset'),\n});\n\nexport const experimentIdPathParams = z.object({\n experimentId: z.string().describe('Unique identifier for the experiment'),\n});\n\nexport const itemIdPathParams = z.object({\n itemId: z.string().describe('Unique identifier for the dataset item'),\n});\n\nexport const datasetAndExperimentIdPathParams = z.object({\n datasetId: z.string().describe('Unique identifier for the dataset'),\n experimentId: z.string().describe('Unique identifier for the experiment'),\n});\n\nexport const experimentResultIdPathParams = z.object({\n datasetId: z.string().describe('Unique identifier for the dataset'),\n experimentId: z.string().describe('Unique identifier for the experiment'),\n resultId: z.string().describe('Unique identifier for the experiment result'),\n});\n\nexport const datasetAndItemIdPathParams = z.object({\n datasetId: z.string().describe('Unique identifier for the dataset'),\n itemId: z.string().describe('Unique identifier for the dataset item'),\n});\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\nexport const paginationQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n});\n\nexport const listItemsQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n version: z.coerce.number().int().optional(), // Optional version filter for snapshot semantics\n search: z.string().optional(),\n});\n\n// ============================================================================\n// Request Body Schemas\n// ============================================================================\n\nexport const createDatasetBodySchema = z.object({\n name: z.string().describe('Name of the dataset'),\n description: z.string().optional().describe('Description of the dataset'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata'),\n inputSchema: jsonSchemaField.describe('JSON Schema for validating item input'),\n groundTruthSchema: jsonSchemaField.describe('JSON Schema for validating item groundTruth'),\n requestContextSchema: jsonSchemaField.describe('JSON Schema describing expected request context shape'),\n targetType: z.string().optional().describe('Target entity type (e.g. agent, workflow, scorer)'),\n targetIds: z.array(z.string()).optional().describe('IDs of target entities this dataset is attached to'),\n});\n\nexport const updateDatasetBodySchema = z.object({\n name: z.string().optional().describe('Name of the dataset'),\n description: z.string().optional().describe('Description of the dataset'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata'),\n inputSchema: jsonSchemaField.describe('JSON Schema for validating item input'),\n groundTruthSchema: jsonSchemaField.describe('JSON Schema for validating item groundTruth'),\n requestContextSchema: jsonSchemaField.describe('JSON Schema describing expected request context shape'),\n tags: z.array(z.string()).optional().describe('Tag definitions for categorizing experiment results'),\n targetType: z.string().optional().describe('Target entity type (e.g. agent, workflow, scorer)'),\n targetIds: z.array(z.string()).optional().describe('IDs of target entities this dataset is attached to'),\n});\n\nexport const addItemBodySchema = z.object({\n input: z.unknown().describe('Input data for the dataset item'),\n groundTruth: z.unknown().optional().describe('Expected output for comparison'),\n requestContext: z.record(z.string(), z.unknown()).optional().describe('Request context preset for this item'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata'),\n source: datasetItemSourceSchema,\n});\n\nexport const updateItemBodySchema = z.object({\n input: z.unknown().optional().describe('Input data for the dataset item'),\n groundTruth: z.unknown().optional().describe('Expected output for comparison'),\n requestContext: z.record(z.string(), z.unknown()).optional().describe('Request context preset for this item'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata'),\n source: datasetItemSourceSchema,\n});\n\nexport const triggerExperimentBodySchema = z.object({\n targetType: z.enum(['agent', 'workflow', 'scorer']).describe('Type of target to run against'),\n targetId: z.string().describe('ID of the target'),\n scorerIds: z.array(z.string()).optional().describe('IDs of scorers to apply'),\n version: z.coerce.number().int().optional().describe('Pin to specific dataset version'),\n agentVersion: z.string().optional().describe('Agent version ID to use for experiment'),\n maxConcurrency: z.number().optional().describe('Maximum concurrent executions'),\n requestContext: z.record(z.string(), z.unknown()).optional().describe('Global request context passed to the target'),\n});\n\nexport const compareExperimentsBodySchema = z.object({\n experimentIdA: z.string().describe('ID of baseline experiment'),\n experimentIdB: z.string().describe('ID of candidate experiment'),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\n// Dataset entity schema\nexport const datasetResponseSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional().nullable(),\n metadata: z.record(z.string(), z.unknown()).optional().nullable(),\n inputSchema: z.record(z.string(), z.unknown()).optional(),\n groundTruthSchema: z.record(z.string(), z.unknown()).optional(),\n requestContextSchema: z.record(z.string(), z.unknown()).optional(),\n tags: z.array(z.string()).optional().nullable(),\n targetType: z.string().optional().nullable(),\n targetIds: z.array(z.string()).optional().nullable(),\n version: z.number().int(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\n// Dataset item entity schema\nexport const datasetItemResponseSchema = z.object({\n id: z.string(),\n datasetId: z.string(),\n datasetVersion: z.number().int(),\n input: z.unknown(),\n groundTruth: z.unknown().optional(),\n requestContext: z.record(z.string(), z.unknown()).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n source: datasetItemSourceSchema,\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\n// Experiment entity schema\nexport const experimentResponseSchema = z.object({\n id: z.string(),\n datasetId: z.string().nullable(),\n datasetVersion: z.number().int().nullable(),\n agentVersion: z.string().nullable().optional(),\n targetType: z.enum(['agent', 'workflow', 'scorer', 'processor']),\n targetId: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n status: z.enum(['pending', 'running', 'completed', 'failed']),\n totalItems: z.number(),\n succeededCount: z.number(),\n failedCount: z.number(),\n skippedCount: z.number(),\n startedAt: z.coerce.date().nullable(),\n completedAt: z.coerce.date().nullable(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\n// Scorer result schema\nexport const scorerResultSchema = z.object({\n scorerId: z.string(),\n scorerName: z.string(),\n score: z.number().nullable(),\n reason: z.string().nullable(),\n error: z.string().nullable(),\n});\n\n// Experiment result entity schema\nexport const experimentResultResponseSchema = z.object({\n id: z.string(),\n experimentId: z.string(),\n itemId: z.string(),\n itemDatasetVersion: z.number().int().nullable(),\n input: z.unknown(),\n output: z.unknown().nullable(),\n groundTruth: z.unknown().nullable(),\n error: z\n .object({\n message: z.string(),\n stack: z.string().optional(),\n code: z.string().optional(),\n })\n .nullable(),\n startedAt: z.coerce.date(),\n completedAt: z.coerce.date(),\n retryCount: z.number(),\n traceId: z.string().nullable(),\n status: z.enum(['needs-review', 'reviewed', 'complete']).nullable().optional(),\n tags: z.array(z.string()).nullable().optional(),\n createdAt: z.coerce.date(),\n});\n\nexport const updateExperimentResultBodySchema = z.object({\n status: z.enum(['needs-review', 'reviewed', 'complete']).nullable().optional(),\n tags: z.array(z.string()).optional(),\n});\n\n// Comparison item schema (MVP shape)\nconst comparisonItemSchema = z.object({\n itemId: z.string(),\n input: z.unknown().nullable(),\n groundTruth: z.unknown().nullable(),\n results: z.record(\n z.string(),\n z\n .object({\n output: z.unknown().nullable(),\n scores: z.record(z.string(), z.number().nullable()),\n })\n .nullable(),\n ),\n});\n\n// Comparison result schema\nexport const comparisonResponseSchema = z.object({\n baselineId: z.string(),\n items: z.array(comparisonItemSchema),\n});\n\n// Experiment summary schema (returned by trigger experiment)\n// Note: completedAt is nullable for pending/running experiments (async trigger)\nexport const experimentSummaryResponseSchema = z.object({\n experimentId: z.string(),\n status: z.enum(['pending', 'running', 'completed', 'failed']),\n totalItems: z.number(),\n succeededCount: z.number(),\n failedCount: z.number(),\n startedAt: z.coerce.date(),\n completedAt: z.coerce.date().nullable(),\n results: z.array(\n z.object({\n itemId: z.string(),\n itemDatasetVersion: z.number().int().nullable(),\n input: z.unknown(),\n output: z.unknown().nullable(),\n groundTruth: z.unknown().nullable(),\n error: z.string().nullable(),\n startedAt: z.coerce.date(),\n completedAt: z.coerce.date(),\n retryCount: z.number(),\n scores: z.array(\n z.object({\n scorerId: z.string(),\n scorerName: z.string(),\n score: z.number().nullable(),\n reason: z.string().nullable(),\n error: z.string().nullable(),\n }),\n ),\n }),\n ),\n});\n\n// ============================================================================\n// List Response Schemas\n// ============================================================================\n\nexport const listDatasetsResponseSchema = z.object({\n datasets: z.array(datasetResponseSchema),\n pagination: paginationInfoSchema,\n});\n\nexport const listItemsResponseSchema = z.object({\n items: z.array(datasetItemResponseSchema),\n pagination: paginationInfoSchema,\n});\n\nexport const listExperimentsResponseSchema = z.object({\n experiments: z.array(experimentResponseSchema),\n pagination: paginationInfoSchema,\n});\n\nexport const listExperimentResultsResponseSchema = z.object({\n results: z.array(experimentResultResponseSchema),\n pagination: paginationInfoSchema,\n});\n\n// ============================================================================\n// Version Schemas\n// ============================================================================\n\n// Path params for item version routes\nexport const datasetItemVersionPathParams = z.object({\n datasetId: z.string().describe('Unique identifier for the dataset'),\n itemId: z.string().describe('Unique identifier for the dataset item'),\n datasetVersion: z.coerce.number().int().describe('Dataset version number'),\n});\n\n// Item history row response schema (SCD-2 DatasetItemRow shape)\nexport const itemVersionResponseSchema = z.object({\n id: z.string(),\n datasetId: z.string(),\n datasetVersion: z.number().int(),\n input: z.unknown(),\n groundTruth: z.unknown().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n validTo: z.number().int().nullable(),\n isDeleted: z.boolean(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n});\n\nexport const listItemVersionsResponseSchema = z.object({\n history: z.array(itemVersionResponseSchema),\n});\n\n// Dataset version response schema\nexport const datasetVersionResponseSchema = z.object({\n id: z.string(),\n datasetId: z.string(),\n version: z.number().int(),\n createdAt: z.coerce.date(),\n});\n\nexport const listDatasetVersionsResponseSchema = z.object({\n versions: z.array(datasetVersionResponseSchema),\n pagination: paginationInfoSchema,\n});\n\n// ============================================================================\n// Batch Operation Schemas\n// ============================================================================\n\nexport const batchInsertItemsBodySchema = z.object({\n items: z.array(\n z.object({\n input: z.unknown(),\n groundTruth: z.unknown().optional(),\n requestContext: z.record(z.string(), z.unknown()).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n source: datasetItemSourceSchema,\n }),\n ),\n});\n\nexport const batchInsertItemsResponseSchema = z.object({\n items: z.array(datasetItemResponseSchema),\n count: z.number(),\n});\n\nexport const batchDeleteItemsBodySchema = z.object({\n itemIds: z.array(z.string()),\n});\n\nexport const batchDeleteItemsResponseSchema = z.object({\n success: z.boolean(),\n deletedCount: z.number(),\n});\n\n// ============================================================================\n// AI Generation Schemas\n// ============================================================================\n\nexport const generateItemsBodySchema = z.object({\n modelId: z.string().describe('Model identifier in \"provider/model\" format (e.g., \"openai/gpt-4o\")'),\n prompt: z.string().describe('Description of the kind of test data to generate'),\n count: z.number().int().min(1).max(50).default(5).describe('Number of items to generate'),\n agentContext: z\n .object({\n description: z.string().optional(),\n instructions: z.string().optional(),\n tools: z.array(z.string()).optional(),\n })\n .optional()\n .describe('Context about the agent to generate relevant test data'),\n});\n\nconst generatedItemSchema = z.object({\n input: z.unknown(),\n groundTruth: z.unknown().optional(),\n});\n\nexport const generateItemsResponseSchema = z.object({\n items: z.array(generatedItemSchema),\n});\n\n// ============================================================================\n// Cluster Failures\n// ============================================================================\n\nexport const clusterFailuresBodySchema = z.object({\n modelId: z.string().describe('Model identifier in \"provider/model\" format (e.g., \"openai/gpt-4o\")'),\n items: z\n .array(\n z.object({\n id: z.string(),\n input: z.unknown(),\n output: z.unknown().optional(),\n error: z.string().optional(),\n scores: z.record(z.string(), z.number()).optional(),\n existingTags: z.array(z.string()).optional().describe('Tags already applied to this item'),\n }),\n )\n .min(1)\n .max(200)\n .describe('Failure items to cluster'),\n availableTags: z\n .array(z.string())\n .optional()\n .describe('Existing tag vocabulary from the dataset. The LLM should prefer reusing these tags when applicable.'),\n prompt: z\n .string()\n .optional()\n .describe('Optional user instructions to guide the analysis (e.g., \"focus on tool usage failures\")'),\n});\n\nconst failureClusterSchema = z.object({\n id: z.string().describe('A unique cluster identifier'),\n label: z.string().describe('Short label for this failure pattern'),\n description: z.string().describe('Description of the common pattern'),\n itemIds: z.array(z.string()).describe('IDs of items belonging to this cluster'),\n});\n\nexport const clusterFailuresResponseSchema = z.object({\n clusters: z.array(failureClusterSchema),\n /** Per-item proposed tag assignments. Each entry maps an item ID to the tags the LLM suggests adding. */\n proposedTags: z\n .array(\n z.object({\n itemId: z.string(),\n tags: z.array(z.string()),\n reason: z.string().describe('Brief explanation of why these tags were assigned to this item'),\n }),\n )\n .optional(),\n});\n"]}
@@ -3,7 +3,7 @@ name: mastra-server
3
3
  description: Documentation for @mastra/server. Use when working with @mastra/server APIs, configuration, or implementation.
4
4
  metadata:
5
5
  package: "@mastra/server"
6
- version: "1.15.0"
6
+ version: "1.16.0-alpha.1"
7
7
  ---
8
8
 
9
9
  ## When to use
@@ -17,6 +17,7 @@ Read the individual reference documents for detailed explanations and code examp
17
17
  ### Docs
18
18
 
19
19
  - [Custom adapters](references/docs-server-custom-adapters.md) - Create a custom server adapter for frameworks other than Hono or Express.
20
+ - [Middleware](references/docs-server-middleware.md) - Apply custom middleware functions to intercept requests.
20
21
 
21
22
  ### Reference
22
23
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.15.0",
2
+ "version": "1.16.0-alpha.1",
3
3
  "package": "@mastra/server",
4
4
  "exports": {},
5
5
  "modules": {}
@@ -0,0 +1,237 @@
1
+ # Middleware
2
+
3
+ Mastra servers can execute custom middleware functions before or after an API route handler is invoked. This is useful for things like authentication, logging, injecting request-specific context or adding CORS headers.
4
+
5
+ A middleware receives the [Hono](https://hono.dev) `Context` (`c`) and a `next` function. If it returns a `Response` the request is short-circuited. Calling `next()` continues processing the next middleware or route handler.
6
+
7
+ ```typescript
8
+ import { Mastra } from '@mastra/core'
9
+
10
+ export const mastra = new Mastra({
11
+ server: {
12
+ middleware: [
13
+ {
14
+ handler: async (c, next) => {
15
+ // Example: Add authentication check
16
+ const authHeader = c.req.header('Authorization')
17
+ if (!authHeader) {
18
+ return new Response('Unauthorized', { status: 401 })
19
+ }
20
+
21
+ await next()
22
+ },
23
+ path: '/api/*',
24
+ },
25
+ // Add a global request logger
26
+ async (c, next) => {
27
+ console.log(`${c.req.method} ${c.req.url}`)
28
+ await next()
29
+ },
30
+ ],
31
+ },
32
+ })
33
+ ```
34
+
35
+ To attach middleware to a single route pass the `middleware` option to `registerApiRoute`:
36
+
37
+ ```typescript
38
+ registerApiRoute('/my-custom-route', {
39
+ method: 'GET',
40
+ middleware: [
41
+ async (c, next) => {
42
+ console.log(`${c.req.method} ${c.req.url}`)
43
+ await next()
44
+ },
45
+ ],
46
+ handler: async c => {
47
+ const mastra = c.get('mastra')
48
+ return c.json({ message: 'Hello, world!' })
49
+ },
50
+ })
51
+ ```
52
+
53
+ ## Common examples
54
+
55
+ ### Using `RequestContext`
56
+
57
+ You can populate `RequestContext` dynamically in server middleware by extracting information from the request. In this example, the `temperature-unit` is set based on the Cloudflare `CF-IPCountry` header to ensure responses match the user's locale.
58
+
59
+ ```typescript
60
+ import { Mastra } from '@mastra/core'
61
+ import { RequestContext } from '@mastra/core/request-context'
62
+ import { testWeatherAgent } from './agents/test-weather-agent'
63
+
64
+ export const mastra = new Mastra({
65
+ agents: { testWeatherAgent },
66
+ server: {
67
+ middleware: [
68
+ async (context, next) => {
69
+ const country = context.req.header('CF-IPCountry')
70
+ const requestContext = context.get('requestContext')
71
+
72
+ requestContext.set('temperature-unit', country === 'US' ? 'fahrenheit' : 'celsius')
73
+
74
+ await next()
75
+ },
76
+ ],
77
+ },
78
+ })
79
+ ```
80
+
81
+ ### Authentication
82
+
83
+ ```typescript
84
+ {
85
+ handler: async (c, next) => {
86
+ const authHeader = c.req.header('Authorization');
87
+ if (!authHeader || !authHeader.startsWith('Bearer ')) {
88
+ return new Response('Unauthorized', { status: 401 });
89
+ }
90
+
91
+ // Validate token here
92
+ await next();
93
+ },
94
+ path: '/api/*',
95
+ }
96
+ ```
97
+
98
+ ### Authorization (User Isolation)
99
+
100
+ Authentication verifies who the user is. Authorization controls what they can access. Without authorization middleware, an authenticated user could access other users' threads by guessing IDs or manipulating the `resourceId` parameter.
101
+
102
+ Mastra provides reserved context keys that, when set by middleware, take precedence over client-provided values. The server automatically enforces these keys across memory and agent endpoints:
103
+
104
+ ```typescript
105
+ import { Mastra } from '@mastra/core'
106
+ import { MASTRA_RESOURCE_ID_KEY } from '@mastra/core/request-context'
107
+ import { getAuthenticatedUser } from '@mastra/server/auth'
108
+
109
+ export const mastra = new Mastra({
110
+ server: {
111
+ auth: {
112
+ authenticateToken: async token => {
113
+ // Your auth logic returns the user
114
+ return verifyToken(token) // { id: 'user-123', ... }
115
+ },
116
+ },
117
+ middleware: [
118
+ {
119
+ path: '/api/*',
120
+ handler: async (c, next) => {
121
+ const token = c.req.header('Authorization')
122
+ if (!token) {
123
+ return c.json({ error: 'Unauthorized' }, 401)
124
+ }
125
+
126
+ const user = await getAuthenticatedUser<{ id: string }>({
127
+ mastra: c.get('mastra'),
128
+ token,
129
+ request: c.req.raw,
130
+ })
131
+ const requestContext = c.get('requestContext')
132
+
133
+ if (!user) {
134
+ return c.json({ error: 'Unauthorized' }, 401)
135
+ }
136
+
137
+ // Force all API operations to use this user's ID
138
+ // This takes precedence over any client-provided resourceId
139
+ requestContext.set(MASTRA_RESOURCE_ID_KEY, user.id)
140
+
141
+ return next()
142
+ },
143
+ },
144
+ ],
145
+ },
146
+ })
147
+ ```
148
+
149
+ `server.middleware` runs before Mastra's per-route auth checks. When middleware needs the authenticated user, call `getAuthenticatedUser()` to resolve it from the configured auth provider without changing the default route auth flow.
150
+
151
+ With this middleware, the server automatically:
152
+
153
+ - **Filters thread listing** to only return threads owned by the user
154
+ - **Validates thread access** and returns 403 if accessing another user's thread
155
+ - **Forces thread creation** to use the authenticated user's ID
156
+ - **Validates message operations** including deletion, ensuring messages belong to owned threads
157
+
158
+ Even if a client passes `?resourceId=other-user-id`, the middleware-set value takes precedence. Attempts to access threads or messages owned by other users will return a 403 error.
159
+
160
+ #### Using `MASTRA_THREAD_ID_KEY`
161
+
162
+ You can also set `MASTRA_THREAD_ID_KEY` to override the client-provided thread ID:
163
+
164
+ ```typescript
165
+ import { MASTRA_RESOURCE_ID_KEY, MASTRA_THREAD_ID_KEY } from '@mastra/core/request-context'
166
+
167
+ // Force operations to use a specific thread
168
+ requestContext.set(MASTRA_THREAD_ID_KEY, validatedThreadId)
169
+ ```
170
+
171
+ This is useful when you want to restrict operations to a specific thread that you've validated through other means.
172
+
173
+ ### CORS support
174
+
175
+ ```typescript
176
+ {
177
+ handler: async (c, next) => {
178
+ c.header('Access-Control-Allow-Origin', '*');
179
+ c.header(
180
+ 'Access-Control-Allow-Methods',
181
+ 'GET, POST, PUT, DELETE, OPTIONS',
182
+ );
183
+ c.header(
184
+ 'Access-Control-Allow-Headers',
185
+ 'Content-Type, Authorization',
186
+ );
187
+
188
+ if (c.req.method === 'OPTIONS') {
189
+ return new Response(null, { status: 204 });
190
+ }
191
+
192
+ await next();
193
+ },
194
+ }
195
+ ```
196
+
197
+ ### Request logging
198
+
199
+ ```typescript
200
+ {
201
+ handler: async (c, next) => {
202
+ const start = Date.now();
203
+ await next();
204
+ const duration = Date.now() - start;
205
+ console.log(`${c.req.method} ${c.req.url} - ${duration}ms`);
206
+ },
207
+ }
208
+ ```
209
+
210
+ ### Special Mastra headers
211
+
212
+ When integrating with Mastra Cloud or custom clients the following headers can be inspected by middleware to tailor behavior:
213
+
214
+ ```typescript
215
+ {
216
+ handler: async (c, next) => {
217
+ const isFromMastraCloud = c.req.header('x-mastra-cloud') === 'true';
218
+ const clientType = c.req.header('x-mastra-client-type');
219
+ const isStudio =
220
+ c.req.header('x-studio') === 'true';
221
+
222
+ if (isFromMastraCloud) {
223
+ // Special handling
224
+ }
225
+ await next();
226
+ },
227
+ }
228
+ ```
229
+
230
+ - `x-mastra-cloud`: request originates from Mastra Cloud
231
+ - `x-mastra-client-type`: identifies the client SDK, e.g. `js` or `python`
232
+ - `x-studio`: request triggered from Studio
233
+
234
+ # Related
235
+
236
+ - [Request Context](https://mastra.ai/docs/server/request-context)
237
+ - [Reserved Keys](https://mastra.ai/docs/server/request-context)
@@ -69,7 +69,7 @@ abstract registerContextMiddleware(): void
69
69
 
70
70
  ### `registerAuthMiddleware()`
71
71
 
72
- Register authentication and authorization middleware.
72
+ Run the adapter auth hook during initialization. Official adapters may implement this as a no-op when auth is enforced per-route.
73
73
 
74
74
  ```typescript
75
75
  abstract registerAuthMiddleware(): void
@@ -266,7 +266,8 @@ export class MyServer extends MastraServer<MyApp, MyRequest, MyResponse> {
266
266
  registerAuthMiddleware(): void {
267
267
  const auth = this.mastra.getServer()?.auth
268
268
  if (!auth) return
269
- // Implement auth
269
+ // Register global auth middleware, or leave this empty and
270
+ // enforce auth when routes are registered.
270
271
  }
271
272
 
272
273
  async registerRoute(app, route, { prefix }) {
@@ -1,5 +1,6 @@
1
1
  import type { Mastra } from '@mastra/core/mastra';
2
2
  import type { MastraAuthConfig } from '@mastra/core/server';
3
+ import type { HonoRequest } from 'hono';
3
4
  /**
4
5
  * Check if a route is a registered custom route that requires authentication.
5
6
  * Returns true only if the route is explicitly registered with requiresAuth: true.
@@ -40,6 +41,12 @@ export type AuthResult = {
40
41
  status: number;
41
42
  body: Record<string, unknown>;
42
43
  };
44
+ export interface GetAuthenticatedUserOptions {
45
+ mastra: Mastra;
46
+ token: string;
47
+ request: Request | HonoRequest;
48
+ }
49
+ export declare const getAuthenticatedUser: <TUser = unknown>({ mastra, token, request, }: GetAuthenticatedUserOptions) => Promise<TUser | null>;
43
50
  /**
44
51
  * Single auth middleware: authenticate → authorize.
45
52
  * Skip checks (dev playground, unprotected path, public path) are evaluated once.
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/server/auth/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAK5D;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,EACZ,QAAQ,MAAM,EACd,wBAAwB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3C,OAuCF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,EACZ,QAAQ,MAAM,EACd,WAAW,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EAC/C,YAAY,gBAAgB,EAC5B,wBAAwB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3C,OASF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,MAAM,MAAM,EACZ,QAAQ,MAAM,EACd,wBAAwB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3C,OAuCF,CAAC;AAQF,eAAO,MAAM,eAAe,GAC1B,MAAM,MAAM,EACZ,QAAQ,MAAM,EACd,YAAY,gBAAgB,EAC5B,wBAAwB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3C,OAGF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,EAAE,YAAY,gBAAgB,KAAG,OAK9F,CAAC;AAiCF,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,OAUlE,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,KAAG,OAgBhG,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,MAAM,KAAG,OAU5E,CAAC;AAMF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,gBAAgB,CAAC;IAC7B,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,cAAc,EAAE;QAAE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;QAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAC;IAC9F,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,qBAAqB,EAAE,MAAM,OAAO,CAAC;CACtC;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAIjH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAU,KAAK,qBAAqB,KAAG,OAAO,CAAC,UAAU,CAyHvF,CAAC;AAGF,eAAO,MAAM,UAAU,GACrB,OAAO,gBAAgB,CAAC,OAAO,CAAC,EAChC,MAAM,MAAM,EACZ,QAAQ,MAAM,EACd,MAAM,OAAO,KACZ,OAAO,CAAC,OAAO,CA+BjB,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/server/auth/helpers.ts"],"names":[],"mappings":"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"}