@mastra/server 1.42.0-alpha.3 → 1.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/dist/_types/@internal_voice/dist/routes/index.d.ts +2 -2
  3. package/dist/{api-schema-manifest-PM5DJ67P.js → api-schema-manifest-AOVCLL52.js} +3 -3
  4. package/dist/{api-schema-manifest-PM5DJ67P.js.map → api-schema-manifest-AOVCLL52.js.map} +1 -1
  5. package/dist/{api-schema-manifest-HYO7FJWX.cjs → api-schema-manifest-ZCDIT4ND.cjs} +4 -4
  6. package/dist/{api-schema-manifest-HYO7FJWX.cjs.map → api-schema-manifest-ZCDIT4ND.cjs.map} +1 -1
  7. package/dist/{chunk-BSHJ4HUN.js → chunk-2AUEGAGY.js} +5 -5
  8. package/dist/{chunk-BSHJ4HUN.js.map → chunk-2AUEGAGY.js.map} +1 -1
  9. package/dist/{chunk-WTBVC25D.cjs → chunk-2DZPC7UL.cjs} +16 -16
  10. package/dist/{chunk-WTBVC25D.cjs.map → chunk-2DZPC7UL.cjs.map} +1 -1
  11. package/dist/{chunk-ZZE7ETO3.js → chunk-2EDEJS35.js} +14 -6
  12. package/dist/chunk-2EDEJS35.js.map +1 -0
  13. package/dist/{chunk-RULES2JK.js → chunk-33NUESB3.js} +4 -4
  14. package/dist/{chunk-RULES2JK.js.map → chunk-33NUESB3.js.map} +1 -1
  15. package/dist/{chunk-MPJDL7M4.cjs → chunk-3ATWQ4MY.cjs} +28 -28
  16. package/dist/{chunk-MPJDL7M4.cjs.map → chunk-3ATWQ4MY.cjs.map} +1 -1
  17. package/dist/{chunk-BWNJBSXL.js → chunk-3ENQND57.js} +3 -3
  18. package/dist/{chunk-BWNJBSXL.js.map → chunk-3ENQND57.js.map} +1 -1
  19. package/dist/{chunk-BTBUILA3.cjs → chunk-45B57OCM.cjs} +285 -285
  20. package/dist/{chunk-BTBUILA3.cjs.map → chunk-45B57OCM.cjs.map} +1 -1
  21. package/dist/{chunk-JRPPHAGE.cjs → chunk-47PV6AIJ.cjs} +16 -16
  22. package/dist/{chunk-JRPPHAGE.cjs.map → chunk-47PV6AIJ.cjs.map} +1 -1
  23. package/dist/{chunk-P4IMQYF3.cjs → chunk-47PVLKIL.cjs} +8 -5
  24. package/dist/chunk-47PVLKIL.cjs.map +1 -0
  25. package/dist/{chunk-PWK5YPS6.js → chunk-4FU74W2B.js} +5 -5
  26. package/dist/{chunk-PWK5YPS6.js.map → chunk-4FU74W2B.js.map} +1 -1
  27. package/dist/{chunk-LBVQK4LO.cjs → chunk-4PQR3D5Y.cjs} +11 -9
  28. package/dist/chunk-4PQR3D5Y.cjs.map +1 -0
  29. package/dist/{chunk-7U7OWTR2.js → chunk-56AYHXOU.js} +3 -3
  30. package/dist/{chunk-7U7OWTR2.js.map → chunk-56AYHXOU.js.map} +1 -1
  31. package/dist/{chunk-UTUIQVXH.js → chunk-5DHLIFRG.js} +3 -3
  32. package/dist/{chunk-UTUIQVXH.js.map → chunk-5DHLIFRG.js.map} +1 -1
  33. package/dist/{chunk-23S37FLK.js → chunk-5FOSK5R3.js} +6 -4
  34. package/dist/chunk-5FOSK5R3.js.map +1 -0
  35. package/dist/{chunk-K3SHMUQG.js → chunk-5JJBM47G.js} +3 -3
  36. package/dist/{chunk-K3SHMUQG.js.map → chunk-5JJBM47G.js.map} +1 -1
  37. package/dist/{chunk-6IYRTJAM.js → chunk-5LPDB56F.js} +8 -8
  38. package/dist/{chunk-6IYRTJAM.js.map → chunk-5LPDB56F.js.map} +1 -1
  39. package/dist/{chunk-HJVMQDSZ.js → chunk-67TV3EH4.js} +3 -3
  40. package/dist/{chunk-HJVMQDSZ.js.map → chunk-67TV3EH4.js.map} +1 -1
  41. package/dist/{chunk-RXT5WOCU.js → chunk-6XJTDCOF.js} +4 -4
  42. package/dist/{chunk-RXT5WOCU.js.map → chunk-6XJTDCOF.js.map} +1 -1
  43. package/dist/{chunk-4W7KQRF5.cjs → chunk-AAPSZTLM.cjs} +10 -3
  44. package/dist/chunk-AAPSZTLM.cjs.map +1 -0
  45. package/dist/{chunk-RSAMJC5Y.cjs → chunk-ASSXEY4X.cjs} +4 -4
  46. package/dist/chunk-ASSXEY4X.cjs.map +1 -0
  47. package/dist/{chunk-2TM4EPMU.cjs → chunk-AUFCEKYY.cjs} +3 -3
  48. package/dist/{chunk-2TM4EPMU.cjs.map → chunk-AUFCEKYY.cjs.map} +1 -1
  49. package/dist/{chunk-DA6XYIJE.cjs → chunk-BLR7PQHQ.cjs} +49 -21
  50. package/dist/chunk-BLR7PQHQ.cjs.map +1 -0
  51. package/dist/{chunk-O3QIULED.js → chunk-CFSFBIXK.js} +4 -4
  52. package/dist/{chunk-O3QIULED.js.map → chunk-CFSFBIXK.js.map} +1 -1
  53. package/dist/{chunk-AQ7EVXCZ.js → chunk-CGZYNGDZ.js} +35 -35
  54. package/dist/{chunk-AQ7EVXCZ.js.map → chunk-CGZYNGDZ.js.map} +1 -1
  55. package/dist/{chunk-ZQ4GLVIX.js → chunk-CHP6ZIVF.js} +3 -3
  56. package/dist/{chunk-ZQ4GLVIX.js.map → chunk-CHP6ZIVF.js.map} +1 -1
  57. package/dist/{chunk-LHLSK2AE.js → chunk-CNTHQXAJ.js} +7 -7
  58. package/dist/{chunk-LHLSK2AE.js.map → chunk-CNTHQXAJ.js.map} +1 -1
  59. package/dist/{chunk-UIVHXCOY.cjs → chunk-DBCEECWQ.cjs} +43 -43
  60. package/dist/{chunk-UIVHXCOY.cjs.map → chunk-DBCEECWQ.cjs.map} +1 -1
  61. package/dist/{chunk-7OSWGIVM.js → chunk-DG7CIXRF.js} +5 -5
  62. package/dist/{chunk-7OSWGIVM.js.map → chunk-DG7CIXRF.js.map} +1 -1
  63. package/dist/{chunk-KPAAQAZX.js → chunk-E7WK76NL.js} +5 -5
  64. package/dist/{chunk-KPAAQAZX.js.map → chunk-E7WK76NL.js.map} +1 -1
  65. package/dist/{chunk-3SZS6A34.cjs → chunk-EBLD2M5C.cjs} +14 -14
  66. package/dist/{chunk-3SZS6A34.cjs.map → chunk-EBLD2M5C.cjs.map} +1 -1
  67. package/dist/{chunk-W6KDN66O.js → chunk-ENOL2V5E.js} +6 -6
  68. package/dist/{chunk-W6KDN66O.js.map → chunk-ENOL2V5E.js.map} +1 -1
  69. package/dist/{chunk-Q3ESI7U3.cjs → chunk-EOYMMYEW.cjs} +24 -24
  70. package/dist/{chunk-Q3ESI7U3.cjs.map → chunk-EOYMMYEW.cjs.map} +1 -1
  71. package/dist/{chunk-TYHVZSA4.js → chunk-EYMUSHXR.js} +5 -5
  72. package/dist/{chunk-TYHVZSA4.js.map → chunk-EYMUSHXR.js.map} +1 -1
  73. package/dist/{chunk-FSSG5YQJ.js → chunk-F6QQPQAR.js} +4 -4
  74. package/dist/{chunk-FSSG5YQJ.js.map → chunk-F6QQPQAR.js.map} +1 -1
  75. package/dist/{chunk-QVFQUBC7.cjs → chunk-FVUJRSNB.cjs} +62 -62
  76. package/dist/{chunk-QVFQUBC7.cjs.map → chunk-FVUJRSNB.cjs.map} +1 -1
  77. package/dist/{chunk-SILGPCNA.js → chunk-GBVJ4OYO.js} +3 -3
  78. package/dist/{chunk-SILGPCNA.js.map → chunk-GBVJ4OYO.js.map} +1 -1
  79. package/dist/{chunk-YH4WGIEH.js → chunk-HATXNJ4V.js} +6 -4
  80. package/dist/chunk-HATXNJ4V.js.map +1 -0
  81. package/dist/{chunk-R6NHDZOY.js → chunk-HIU5CJ4M.js} +3 -3
  82. package/dist/{chunk-R6NHDZOY.js.map → chunk-HIU5CJ4M.js.map} +1 -1
  83. package/dist/{chunk-AW7D2YUT.cjs → chunk-HRRB4YVI.cjs} +14 -14
  84. package/dist/{chunk-AW7D2YUT.cjs.map → chunk-HRRB4YVI.cjs.map} +1 -1
  85. package/dist/{chunk-SLM5OKHX.cjs → chunk-HVATI3FQ.cjs} +5 -5
  86. package/dist/{chunk-SLM5OKHX.cjs.map → chunk-HVATI3FQ.cjs.map} +1 -1
  87. package/dist/{chunk-XIV5JLFM.cjs → chunk-HVJTEOVD.cjs} +112 -112
  88. package/dist/{chunk-XIV5JLFM.cjs.map → chunk-HVJTEOVD.cjs.map} +1 -1
  89. package/dist/{chunk-BVLZQ7YB.cjs → chunk-I7S765JQ.cjs} +3 -3
  90. package/dist/{chunk-BVLZQ7YB.cjs.map → chunk-I7S765JQ.cjs.map} +1 -1
  91. package/dist/{chunk-UB6NBWGC.js → chunk-IG6CTC3P.js} +6 -6
  92. package/dist/{chunk-UB6NBWGC.js.map → chunk-IG6CTC3P.js.map} +1 -1
  93. package/dist/{chunk-ZN3JHWNH.js → chunk-IIBX2ZWU.js} +4 -4
  94. package/dist/{chunk-ZN3JHWNH.js.map → chunk-IIBX2ZWU.js.map} +1 -1
  95. package/dist/{chunk-AUO32DAZ.cjs → chunk-IQFKZCCF.cjs} +11 -11
  96. package/dist/{chunk-AUO32DAZ.cjs.map → chunk-IQFKZCCF.cjs.map} +1 -1
  97. package/dist/{chunk-PPNPOLWL.cjs → chunk-JUFS6SVC.cjs} +4 -4
  98. package/dist/{chunk-PPNPOLWL.cjs.map → chunk-JUFS6SVC.cjs.map} +1 -1
  99. package/dist/{chunk-VX3MJR4P.cjs → chunk-KGUHJRHZ.cjs} +10 -10
  100. package/dist/{chunk-VX3MJR4P.cjs.map → chunk-KGUHJRHZ.cjs.map} +1 -1
  101. package/dist/{chunk-OY7BRU3T.js → chunk-LHF6URCC.js} +3 -3
  102. package/dist/{chunk-OY7BRU3T.js.map → chunk-LHF6URCC.js.map} +1 -1
  103. package/dist/{chunk-UQVZFNT2.js → chunk-LKJFSUN3.js} +5 -5
  104. package/dist/{chunk-UQVZFNT2.js.map → chunk-LKJFSUN3.js.map} +1 -1
  105. package/dist/{chunk-U5XIOTTD.cjs → chunk-LLXZIBZA.cjs} +25 -25
  106. package/dist/{chunk-U5XIOTTD.cjs.map → chunk-LLXZIBZA.cjs.map} +1 -1
  107. package/dist/{chunk-H7TPN2Y6.js → chunk-LPT77UR6.js} +8 -5
  108. package/dist/chunk-LPT77UR6.js.map +1 -0
  109. package/dist/{chunk-SLTGLKKQ.js → chunk-LQZHT5U7.js} +3 -3
  110. package/dist/{chunk-SLTGLKKQ.js.map → chunk-LQZHT5U7.js.map} +1 -1
  111. package/dist/{chunk-L4Z7J32P.js → chunk-LRNQED43.js} +4 -4
  112. package/dist/{chunk-L4Z7J32P.js.map → chunk-LRNQED43.js.map} +1 -1
  113. package/dist/{chunk-KDMOWJ4W.js → chunk-M7VWJI7N.js} +47 -19
  114. package/dist/chunk-M7VWJI7N.js.map +1 -0
  115. package/dist/{chunk-HZB2CRC6.cjs → chunk-MGC46CGD.cjs} +5 -5
  116. package/dist/{chunk-HZB2CRC6.cjs.map → chunk-MGC46CGD.cjs.map} +1 -1
  117. package/dist/{chunk-7OJ75STQ.cjs → chunk-N4H2ICZJ.cjs} +55 -55
  118. package/dist/{chunk-7OJ75STQ.cjs.map → chunk-N4H2ICZJ.cjs.map} +1 -1
  119. package/dist/{chunk-FPKJAWB4.cjs → chunk-NQHBWI24.cjs} +9 -9
  120. package/dist/{chunk-FPKJAWB4.cjs.map → chunk-NQHBWI24.cjs.map} +1 -1
  121. package/dist/{chunk-PMMVJSIC.js → chunk-NRRXP52B.js} +4 -4
  122. package/dist/{chunk-PMMVJSIC.js.map → chunk-NRRXP52B.js.map} +1 -1
  123. package/dist/{chunk-VBQKBXAI.cjs → chunk-NV2MI4K7.cjs} +11 -11
  124. package/dist/{chunk-VBQKBXAI.cjs.map → chunk-NV2MI4K7.cjs.map} +1 -1
  125. package/dist/{chunk-OHPJKAQ6.js → chunk-P66SSC7A.js} +3 -3
  126. package/dist/{chunk-OHPJKAQ6.js.map → chunk-P66SSC7A.js.map} +1 -1
  127. package/dist/{chunk-7OWSBMQT.cjs → chunk-PIHZRT4S.cjs} +58 -58
  128. package/dist/{chunk-7OWSBMQT.cjs.map → chunk-PIHZRT4S.cjs.map} +1 -1
  129. package/dist/{chunk-WOMWA56V.cjs → chunk-PMGFP7II.cjs} +10 -10
  130. package/dist/{chunk-WOMWA56V.cjs.map → chunk-PMGFP7II.cjs.map} +1 -1
  131. package/dist/{chunk-SSCEURZV.cjs → chunk-PWBN74RE.cjs} +4 -4
  132. package/dist/{chunk-SSCEURZV.cjs.map → chunk-PWBN74RE.cjs.map} +1 -1
  133. package/dist/{chunk-H7KDCXLQ.cjs → chunk-PXLC5SNM.cjs} +3 -3
  134. package/dist/chunk-PXLC5SNM.cjs.map +1 -0
  135. package/dist/{chunk-RCGUVZFM.cjs → chunk-Q2BOTNC2.cjs} +5 -5
  136. package/dist/{chunk-RCGUVZFM.cjs.map → chunk-Q2BOTNC2.cjs.map} +1 -1
  137. package/dist/{chunk-7CNI6HVA.js → chunk-QENIOSK7.js} +7 -7
  138. package/dist/{chunk-7CNI6HVA.js.map → chunk-QENIOSK7.js.map} +1 -1
  139. package/dist/{chunk-PLV74XAL.js → chunk-QM23NJBM.js} +3 -3
  140. package/dist/{chunk-PLV74XAL.js.map → chunk-QM23NJBM.js.map} +1 -1
  141. package/dist/{chunk-34CXJCW6.cjs → chunk-QXWZ2DKR.cjs} +10 -10
  142. package/dist/{chunk-34CXJCW6.cjs.map → chunk-QXWZ2DKR.cjs.map} +1 -1
  143. package/dist/{chunk-3CPWBXXK.cjs → chunk-RBLDPJSS.cjs} +3 -3
  144. package/dist/{chunk-3CPWBXXK.cjs.map → chunk-RBLDPJSS.cjs.map} +1 -1
  145. package/dist/{chunk-AFQ3OCPR.js → chunk-RSERW55W.js} +6 -6
  146. package/dist/{chunk-AFQ3OCPR.js.map → chunk-RSERW55W.js.map} +1 -1
  147. package/dist/{chunk-QYI23DSK.cjs → chunk-RV4T5P5S.cjs} +16 -16
  148. package/dist/{chunk-QYI23DSK.cjs.map → chunk-RV4T5P5S.cjs.map} +1 -1
  149. package/dist/{chunk-4BLUIUHS.cjs → chunk-RVD3DGBZ.cjs} +5 -5
  150. package/dist/{chunk-4BLUIUHS.cjs.map → chunk-RVD3DGBZ.cjs.map} +1 -1
  151. package/dist/{chunk-GFZR6THV.js → chunk-RY5RETAD.js} +3 -3
  152. package/dist/{chunk-GFZR6THV.js.map → chunk-RY5RETAD.js.map} +1 -1
  153. package/dist/{chunk-UW2M6ACA.cjs → chunk-S4UGB72N.cjs} +34 -34
  154. package/dist/{chunk-UW2M6ACA.cjs.map → chunk-S4UGB72N.cjs.map} +1 -1
  155. package/dist/{chunk-7FCDZBRJ.cjs → chunk-S5DWQRTK.cjs} +53 -45
  156. package/dist/chunk-S5DWQRTK.cjs.map +1 -0
  157. package/dist/{chunk-CSDD3WKD.cjs → chunk-S5SAMHVP.cjs} +13 -13
  158. package/dist/{chunk-CSDD3WKD.cjs.map → chunk-S5SAMHVP.cjs.map} +1 -1
  159. package/dist/{chunk-EUFT3MIX.js → chunk-SFAWHLOX.js} +3 -3
  160. package/dist/chunk-SFAWHLOX.js.map +1 -0
  161. package/dist/{chunk-65T6KVYX.cjs → chunk-SXKQ7CSX.cjs} +6 -3
  162. package/dist/chunk-SXKQ7CSX.cjs.map +1 -0
  163. package/dist/{chunk-ZAWZ2BWD.cjs → chunk-T43AU375.cjs} +8 -8
  164. package/dist/{chunk-ZAWZ2BWD.cjs.map → chunk-T43AU375.cjs.map} +1 -1
  165. package/dist/{chunk-AC7GMUBN.cjs → chunk-TIRYJGUG.cjs} +20 -20
  166. package/dist/{chunk-AC7GMUBN.cjs.map → chunk-TIRYJGUG.cjs.map} +1 -1
  167. package/dist/{chunk-MOCFYZKQ.js → chunk-UGPCLDUD.js} +9 -9
  168. package/dist/{chunk-MOCFYZKQ.js.map → chunk-UGPCLDUD.js.map} +1 -1
  169. package/dist/{chunk-XVXSDMTB.js → chunk-WHHPEKNA.js} +6 -6
  170. package/dist/{chunk-XVXSDMTB.js.map → chunk-WHHPEKNA.js.map} +1 -1
  171. package/dist/{chunk-Y5CIOSHU.js → chunk-WMHXUJKB.js} +10 -3
  172. package/dist/chunk-WMHXUJKB.js.map +1 -0
  173. package/dist/{chunk-4GK7UEOF.js → chunk-X6U7V5SG.js} +4 -4
  174. package/dist/chunk-X6U7V5SG.js.map +1 -0
  175. package/dist/{chunk-4V2VNFVM.js → chunk-X7I4NICM.js} +5 -5
  176. package/dist/{chunk-4V2VNFVM.js.map → chunk-X7I4NICM.js.map} +1 -1
  177. package/dist/{chunk-QH3IFRYL.cjs → chunk-XBXH5HQ7.cjs} +7 -7
  178. package/dist/{chunk-QH3IFRYL.cjs.map → chunk-XBXH5HQ7.cjs.map} +1 -1
  179. package/dist/{chunk-ADW6D5RD.cjs → chunk-XLE2TOFR.cjs} +6 -6
  180. package/dist/{chunk-ADW6D5RD.cjs.map → chunk-XLE2TOFR.cjs.map} +1 -1
  181. package/dist/{chunk-F3SWX6WJ.cjs → chunk-YIR53RXV.cjs} +14 -14
  182. package/dist/{chunk-F3SWX6WJ.cjs.map → chunk-YIR53RXV.cjs.map} +1 -1
  183. package/dist/{chunk-WWDHYJH6.js → chunk-YLKGNASD.js} +6 -6
  184. package/dist/{chunk-WWDHYJH6.js.map → chunk-YLKGNASD.js.map} +1 -1
  185. package/dist/{chunk-KE4V4LJE.cjs → chunk-YLWKZ3VK.cjs} +7 -7
  186. package/dist/{chunk-KE4V4LJE.cjs.map → chunk-YLWKZ3VK.cjs.map} +1 -1
  187. package/dist/{chunk-TIIYB6H2.cjs → chunk-Z6GOXY4U.cjs} +23 -23
  188. package/dist/{chunk-TIIYB6H2.cjs.map → chunk-Z6GOXY4U.cjs.map} +1 -1
  189. package/dist/{chunk-3XKDVCIP.js → chunk-ZJDT7PBG.js} +5 -5
  190. package/dist/{chunk-3XKDVCIP.js.map → chunk-ZJDT7PBG.js.map} +1 -1
  191. package/dist/{dist-OTRIGGK5.js → dist-D63ZZGV3.js} +5 -5
  192. package/dist/{dist-OTRIGGK5.js.map → dist-D63ZZGV3.js.map} +1 -1
  193. package/dist/{dist-DQ2NPGYX.cjs → dist-QDOBLME7.cjs} +20 -20
  194. package/dist/{dist-DQ2NPGYX.cjs.map → dist-QDOBLME7.cjs.map} +1 -1
  195. package/dist/docs/SKILL.md +1 -1
  196. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  197. package/dist/{observational-memory-G52HNRHE-RHA4V77M.js → observational-memory-NIGWGBLT-SBZMVFBE.js} +3 -3
  198. package/dist/{observational-memory-G52HNRHE-RHA4V77M.js.map → observational-memory-NIGWGBLT-SBZMVFBE.js.map} +1 -1
  199. package/dist/{observational-memory-G52HNRHE-73KIWQ2G.cjs → observational-memory-NIGWGBLT-XWKXVCLV.cjs} +26 -26
  200. package/dist/{observational-memory-G52HNRHE-73KIWQ2G.cjs.map → observational-memory-NIGWGBLT-XWKXVCLV.cjs.map} +1 -1
  201. package/dist/server/auth/helpers.d.ts.map +1 -1
  202. package/dist/server/auth/index.cjs +19 -19
  203. package/dist/server/auth/index.js +2 -2
  204. package/dist/server/constants.d.ts +7 -0
  205. package/dist/server/constants.d.ts.map +1 -1
  206. package/dist/server/handlers/a2a.cjs +14 -14
  207. package/dist/server/handlers/a2a.js +1 -1
  208. package/dist/server/handlers/agent-builder.cjs +17 -17
  209. package/dist/server/handlers/agent-builder.js +1 -1
  210. package/dist/server/handlers/agent-versions.cjs +8 -8
  211. package/dist/server/handlers/agent-versions.js +1 -1
  212. package/dist/server/handlers/agents.cjs +46 -46
  213. package/dist/server/handlers/agents.js +1 -1
  214. package/dist/server/handlers/auth.cjs +13 -13
  215. package/dist/server/handlers/auth.d.ts.map +1 -1
  216. package/dist/server/handlers/auth.js +1 -1
  217. package/dist/server/handlers/authorship.cjs +12 -12
  218. package/dist/server/handlers/authorship.js +1 -1
  219. package/dist/server/handlers/builder-registry.cjs +6 -6
  220. package/dist/server/handlers/builder-registry.js +1 -1
  221. package/dist/server/handlers/channels.cjs +5 -5
  222. package/dist/server/handlers/channels.js +1 -1
  223. package/dist/server/handlers/conversations.cjs +5 -5
  224. package/dist/server/handlers/conversations.js +1 -1
  225. package/dist/server/handlers/datasets.cjs +26 -26
  226. package/dist/server/handlers/datasets.js +1 -1
  227. package/dist/server/handlers/editor-builder.cjs +6 -6
  228. package/dist/server/handlers/editor-builder.d.ts +11 -7
  229. package/dist/server/handlers/editor-builder.d.ts.map +1 -1
  230. package/dist/server/handlers/editor-builder.js +1 -1
  231. package/dist/server/handlers/favorites-enrichment.cjs +4 -4
  232. package/dist/server/handlers/favorites-enrichment.js +1 -1
  233. package/dist/server/handlers/logs.cjs +4 -4
  234. package/dist/server/handlers/logs.js +1 -1
  235. package/dist/server/handlers/mcp-client-versions.cjs +8 -8
  236. package/dist/server/handlers/mcp-client-versions.js +1 -1
  237. package/dist/server/handlers/memory.cjs +27 -27
  238. package/dist/server/handlers/memory.js +1 -1
  239. package/dist/server/handlers/prompt-block-versions.cjs +8 -8
  240. package/dist/server/handlers/prompt-block-versions.js +1 -1
  241. package/dist/server/handlers/responses.cjs +4 -4
  242. package/dist/server/handlers/responses.js +1 -1
  243. package/dist/server/handlers/responses.storage.cjs +8 -8
  244. package/dist/server/handlers/responses.storage.js +1 -1
  245. package/dist/server/handlers/scorer-versions.cjs +8 -8
  246. package/dist/server/handlers/scorer-versions.js +1 -1
  247. package/dist/server/handlers/scores.cjs +7 -7
  248. package/dist/server/handlers/scores.js +1 -1
  249. package/dist/server/handlers/stored-agent-favorites.cjs +3 -3
  250. package/dist/server/handlers/stored-agent-favorites.js +1 -1
  251. package/dist/server/handlers/stored-agents.cjs +9 -9
  252. package/dist/server/handlers/stored-agents.js +1 -1
  253. package/dist/server/handlers/stored-mcp-clients.cjs +6 -6
  254. package/dist/server/handlers/stored-mcp-clients.js +1 -1
  255. package/dist/server/handlers/stored-prompt-blocks.cjs +6 -6
  256. package/dist/server/handlers/stored-prompt-blocks.js +1 -1
  257. package/dist/server/handlers/stored-scorers.cjs +6 -6
  258. package/dist/server/handlers/stored-scorers.js +1 -1
  259. package/dist/server/handlers/stored-skill-favorites.cjs +3 -3
  260. package/dist/server/handlers/stored-skill-favorites.js +1 -1
  261. package/dist/server/handlers/stored-skills.cjs +7 -7
  262. package/dist/server/handlers/stored-skills.js +1 -1
  263. package/dist/server/handlers/stored-workspaces.cjs +6 -6
  264. package/dist/server/handlers/stored-workspaces.js +1 -1
  265. package/dist/server/handlers/system.cjs +3 -3
  266. package/dist/server/handlers/system.js +1 -1
  267. package/dist/server/handlers/tool-providers.cjs +14 -14
  268. package/dist/server/handlers/tool-providers.d.ts +2 -2
  269. package/dist/server/handlers/tool-providers.js +1 -1
  270. package/dist/server/handlers/tools.cjs +6 -6
  271. package/dist/server/handlers/tools.js +1 -1
  272. package/dist/server/handlers/utils.cjs +10 -10
  273. package/dist/server/handlers/utils.js +1 -1
  274. package/dist/server/handlers/voice.cjs +8 -8
  275. package/dist/server/handlers/voice.js +1 -1
  276. package/dist/server/handlers/workflows.cjs +27 -27
  277. package/dist/server/handlers/workflows.d.ts.map +1 -1
  278. package/dist/server/handlers/workflows.js +1 -1
  279. package/dist/server/handlers/workspace.cjs +26 -26
  280. package/dist/server/handlers/workspace.js +1 -1
  281. package/dist/server/handlers.cjs +37 -37
  282. package/dist/server/handlers.js +13 -13
  283. package/dist/server/schemas/index.cjs +725 -725
  284. package/dist/server/schemas/index.js +14 -14
  285. package/dist/server/schemas/tool-providers.d.ts +1 -1
  286. package/dist/server/schemas/tool-providers.d.ts.map +1 -1
  287. package/dist/server/server-adapter/index.cjs +129 -43
  288. package/dist/server/server-adapter/index.cjs.map +1 -1
  289. package/dist/server/server-adapter/index.d.ts +58 -5
  290. package/dist/server/server-adapter/index.d.ts.map +1 -1
  291. package/dist/server/server-adapter/index.js +102 -20
  292. package/dist/server/server-adapter/index.js.map +1 -1
  293. package/dist/server/server-adapter/routes/index.d.ts +2 -0
  294. package/dist/server/server-adapter/routes/index.d.ts.map +1 -1
  295. package/dist/server/server-adapter/routes/tool-providers.d.ts +2 -2
  296. package/package.json +8 -8
  297. package/dist/chunk-23S37FLK.js.map +0 -1
  298. package/dist/chunk-4GK7UEOF.js.map +0 -1
  299. package/dist/chunk-4W7KQRF5.cjs.map +0 -1
  300. package/dist/chunk-65T6KVYX.cjs.map +0 -1
  301. package/dist/chunk-7FCDZBRJ.cjs.map +0 -1
  302. package/dist/chunk-DA6XYIJE.cjs.map +0 -1
  303. package/dist/chunk-EUFT3MIX.js.map +0 -1
  304. package/dist/chunk-H7KDCXLQ.cjs.map +0 -1
  305. package/dist/chunk-H7TPN2Y6.js.map +0 -1
  306. package/dist/chunk-KDMOWJ4W.js.map +0 -1
  307. package/dist/chunk-LBVQK4LO.cjs.map +0 -1
  308. package/dist/chunk-P4IMQYF3.cjs.map +0 -1
  309. package/dist/chunk-RSAMJC5Y.cjs.map +0 -1
  310. package/dist/chunk-Y5CIOSHU.js.map +0 -1
  311. package/dist/chunk-YH4WGIEH.js.map +0 -1
  312. package/dist/chunk-ZZE7ETO3.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/server/server-adapter/routes/fga-manifest.ts","../../../src/server/server-adapter/redact.ts","../../../src/server/server-adapter/index.ts"],"names":["MASTRA_RESOURCE_ID_KEY","getEffectivePermission","isProtectedFGARoute","z","MastraServerBase","normalizeRoutePath","requestContext","RequestContext","isReservedRequestContextKey","isStudioClientTypeHeader","MASTRA_CLIENT_TYPE_HEADER","MASTRA_IS_STUDIO_KEY","coreAuthMiddleware","SERVER_ROUTES","Hono","Readable","pipeline","generateOpenAPIDocument","convertCustomRoutesToOpenAPIPaths","formatZodError"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { FGARouteConfig, MastraFGAPermissionInput } from '@mastra/core/auth/ee';\n\nimport { MASTRA_RESOURCE_ID_KEY } from '../../constants';\nimport { getEffectivePermission } from './permissions';\nimport type { ServerRoute } from './index';\n\nfunction isProtectedFGARoute(route: Pick<ServerRoute, 'requiresAuth'>): boolean {\n return route.requiresAuth !== false;\n}\n\nfunction getToolRoutePermission(path: string): MastraFGAPermissionInput {\n return path.includes('/execute') ? 'tools:execute' : 'tools:read';\n}\n\nfunction getAgentToolResourceId(agentId: string, toolId: string): string {\n return `${agentId}:${toolId}`;\n}\n\nfunction getMCPToolResourceId(serverId: string, toolId: string): string {\n return JSON.stringify([serverId, toolId]);\n}\n\nconst STORED_ROUTE_FGA: Record<string, { resourceType: string; idParams: string[] }> = {\n agents: { resourceType: 'stored-agents', idParams: ['storedAgentId', 'agentId'] },\n 'mcp-clients': { resourceType: 'stored-mcp-clients', idParams: ['storedMCPClientId', 'mcpClientId'] },\n 'prompt-blocks': { resourceType: 'stored-prompt-blocks', idParams: ['storedPromptBlockId', 'promptBlockId'] },\n scorers: { resourceType: 'stored-scorers', idParams: ['storedScorerId', 'scorerId'] },\n skills: { resourceType: 'stored-skills', idParams: ['storedSkillId'] },\n workspaces: { resourceType: 'stored-workspaces', idParams: ['storedWorkspaceId'] },\n};\n\nfunction getStoredResourceRouteFGAConfig(path: string, permission: MastraFGAPermissionInput): FGARouteConfig | null {\n const match = path.match(/^\\/stored\\/([^/]+)/);\n if (!match?.[1]) {\n return null;\n }\n\n const config = STORED_ROUTE_FGA[match[1]];\n if (!config) {\n return null;\n }\n\n return {\n resourceType: config.resourceType,\n resourceId: (params, { requestContext }) => {\n for (const idParam of config.idParams) {\n const id = params[idParam];\n if (typeof id === 'string' && id) {\n return id;\n }\n }\n\n const scopedResourceId = requestContext?.get(MASTRA_RESOURCE_ID_KEY);\n return typeof scopedResourceId === 'string' && scopedResourceId ? scopedResourceId : config.resourceType;\n },\n permission,\n };\n}\n\nexport function getBuiltInRouteFGAConfig(route: ServerRoute): FGARouteConfig | null {\n if (!isProtectedFGARoute(route) || !route.path || !route.method) {\n return null;\n }\n\n const permission = getEffectivePermission(route) as MastraFGAPermissionInput | null;\n if (!permission) {\n return null;\n }\n\n const path = route.path;\n const storedRouteConfig = getStoredResourceRouteFGAConfig(path, permission);\n if (storedRouteConfig) {\n return storedRouteConfig;\n }\n\n if (path.startsWith('/agents/:agentId/tools/:toolId')) {\n return {\n resourceType: 'tool',\n resourceId: ({ agentId, toolId }) => getAgentToolResourceId(String(agentId), String(toolId)),\n permission: getToolRoutePermission(path),\n };\n }\n\n if (path.startsWith('/agents/:agentId')) {\n return { resourceType: 'agent', resourceIdParam: 'agentId', permission };\n }\n\n if (path.startsWith('/workflows/:workflowId')) {\n return { resourceType: 'workflow', resourceIdParam: 'workflowId', permission };\n }\n\n if (path.startsWith('/tools/:toolId')) {\n return { resourceType: 'tool', resourceIdParam: 'toolId', permission };\n }\n\n if (path.startsWith('/mcp/:serverId/tools/:toolId')) {\n return {\n resourceType: 'tool',\n resourceId: ({ serverId, toolId }) => getMCPToolResourceId(String(serverId), String(toolId)),\n permission: getToolRoutePermission(path),\n };\n }\n\n if (path.startsWith('/mcp/:serverId')) {\n return { resourceType: 'mcp', resourceIdParam: 'serverId', permission };\n }\n\n if (path.startsWith('/memory/threads/:threadId') || path.startsWith('/memory/network/threads/:threadId')) {\n return { resourceType: 'thread', resourceIdParam: 'threadId', permission };\n }\n\n if (path === '/memory/threads' || path === '/memory/network/threads') {\n return {\n resourceType: 'thread',\n resourceId: ({ threadId, resourceId }) => {\n if (typeof threadId === 'string') return threadId;\n return typeof resourceId === 'string' ? resourceId : undefined;\n },\n permission,\n };\n }\n\n if (path === '/memory/save-messages' || path === '/memory/network/save-messages') {\n return {\n resourceType: 'thread',\n resourceId: ({ messages }) => {\n if (!Array.isArray(messages)) return undefined;\n const threadId = messages.find(\n message => message && typeof message === 'object' && 'threadId' in message,\n )?.threadId;\n return typeof threadId === 'string' ? threadId : undefined;\n },\n permission,\n };\n }\n\n if (path === '/v1/responses') {\n return { resourceType: 'agent', resourceIdParam: 'agent_id', permission };\n }\n\n if (path.startsWith('/v1/responses/:responseId')) {\n return { resourceType: 'response', resourceIdParam: 'responseId', permission };\n }\n\n if (path === '/v1/conversations') {\n return { resourceType: 'agent', resourceIdParam: 'agent_id', permission };\n }\n\n if (path.startsWith('/v1/conversations/:conversationId')) {\n return { resourceType: 'conversation', resourceIdParam: 'conversationId', permission };\n }\n\n return null;\n}\n","import type { ChunkType } from '@mastra/core/stream';\n\n/**\n * Redacts request data from a v2 format payload.\n * Removes `metadata.request` and `output.steps[].request` from the payload.\n */\nfunction redactV2Payload(payload: Record<string, unknown>): Record<string, unknown> {\n const redactedPayload = { ...payload };\n\n // Remove metadata.request\n if (redactedPayload.metadata && typeof redactedPayload.metadata === 'object') {\n const { request, ...metadataRest } = redactedPayload.metadata as Record<string, unknown>;\n redactedPayload.metadata = metadataRest;\n }\n\n // Remove request from output.steps[]\n if (redactedPayload.output && typeof redactedPayload.output === 'object') {\n const output = { ...(redactedPayload.output as Record<string, unknown>) };\n if (Array.isArray(output.steps)) {\n output.steps = output.steps.map((step: Record<string, unknown>) => {\n if (step && typeof step === 'object') {\n const { request, ...stepRest } = step;\n return stepRest;\n }\n return step;\n });\n }\n redactedPayload.output = output;\n }\n\n return redactedPayload;\n}\n\n/**\n * Redacts sensitive data from stream chunks before they are sent to clients.\n *\n * This function strips out request bodies that may contain sensitive information\n * such as system prompts, tool definitions, API keys, and other configuration data.\n *\n * Handles both v1 (legacy) and v2 stream formats:\n *\n * v1 format (fields at root level):\n * - `step-start.request` - Contains the full LLM request body\n * - `step-finish.request` - Contains the request body\n * - `finish.request` - Contains the request body (if present)\n *\n * v2 format (fields nested in payload):\n * - `step-start.payload.request` - Contains the full LLM request body\n * - `step-finish.payload.metadata.request` - Contains the request metadata\n * - `step-finish.payload.output.steps[].request` - Contains request data for each step\n * - `finish.payload.metadata.request` - Contains the request metadata\n * - `finish.payload.output.steps[].request` - Contains request data for each step\n *\n * @param chunk - The stream chunk to redact\n * @returns A new chunk with sensitive data removed, or the original chunk if no redaction needed\n */\nexport function redactStreamChunk<OUTPUT = undefined>(chunk: ChunkType<OUTPUT>): ChunkType<OUTPUT> {\n if (!chunk || typeof chunk !== 'object') {\n return chunk;\n }\n\n const typedChunk = chunk as Record<string, unknown>;\n\n switch (chunk.type) {\n case 'step-start': {\n // Check if this is v2 format (has payload) or v1 format (request at root)\n if ('payload' in typedChunk && typedChunk.payload && typeof typedChunk.payload === 'object') {\n // v2 format: Remove request from payload\n const { payload, ...rest } = typedChunk;\n const { request, ...payloadRest } = payload as Record<string, unknown>;\n return {\n ...rest,\n type: 'step-start',\n payload: {\n ...payloadRest,\n // Keep an empty request object to maintain structure but remove body\n request: {},\n },\n } as ChunkType<OUTPUT>;\n } else if ('request' in typedChunk) {\n // v1 format: Remove request at root level\n const { request, ...rest } = typedChunk;\n return {\n ...rest,\n type: 'step-start',\n // Keep an empty request object to maintain structure\n request: {},\n } as unknown as ChunkType<OUTPUT>;\n }\n return chunk;\n }\n\n case 'step-finish': {\n // Check if this is v2 format (has payload) or v1 format (request at root)\n if ('payload' in typedChunk && typedChunk.payload && typeof typedChunk.payload === 'object') {\n // v2 format: Remove request from metadata and output.steps[].request\n const { payload, ...rest } = typedChunk;\n return {\n ...rest,\n type: 'step-finish',\n payload: redactV2Payload(payload as Record<string, unknown>),\n } as ChunkType<OUTPUT>;\n } else if ('request' in typedChunk) {\n // v1 format: Remove request at root level\n const { request, ...rest } = typedChunk;\n return {\n ...rest,\n type: 'step-finish',\n } as unknown as ChunkType<OUTPUT>;\n }\n return chunk;\n }\n\n case 'finish': {\n // Check if this is v2 format (has payload) or v1 format (request at root)\n if ('payload' in typedChunk && typedChunk.payload && typeof typedChunk.payload === 'object') {\n // v2 format: Remove request from metadata and output.steps[].request\n const { payload, ...rest } = typedChunk;\n return {\n ...rest,\n type: 'finish',\n payload: redactV2Payload(payload as Record<string, unknown>),\n } as ChunkType<OUTPUT>;\n } else if ('request' in typedChunk) {\n // v1 format: Remove request at root level\n const { request, ...rest } = typedChunk;\n return {\n ...rest,\n type: 'finish',\n } as unknown as ChunkType<OUTPUT>;\n }\n return chunk;\n }\n\n default:\n // Other chunk types don't contain sensitive request data\n return chunk;\n }\n}\n","import { Readable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\nimport type { ToolsInput } from '@mastra/core/agent';\nimport type { FGARouteConfig, FGARouteInfo, IFGAProvider, MastraFGAPermissionInput } from '@mastra/core/auth/ee';\nimport type { Mastra } from '@mastra/core/mastra';\nimport { RequestContext } from '@mastra/core/request-context';\nimport { MastraServerBase } from '@mastra/core/server';\nimport type { ApiRoute, HttpLoggingConfig, ValidationErrorContext, ValidationErrorResponse } from '@mastra/core/server';\nimport { Hono } from 'hono';\nimport type { ZodError } from 'zod/v4';\nimport { z } from 'zod/v4';\n\nimport type { InMemoryTaskStore } from '../a2a/store';\nimport { coreAuthMiddleware } from '../auth/helpers';\nimport {\n MASTRA_CLIENT_TYPE_HEADER,\n MASTRA_IS_STUDIO_KEY,\n isReservedRequestContextKey,\n isStudioClientTypeHeader,\n} from '../constants';\nimport { formatZodError } from '../handlers/error';\nexport { isZodError, type ZodErrorLike } from '../handlers/error';\nimport { normalizeRoutePath } from '../utils';\nimport { generateOpenAPIDocument, convertCustomRoutesToOpenAPIPaths } from './openapi-utils';\nimport type { ServerRoute } from './routes';\nimport { SERVER_ROUTES, getEffectivePermission } from './routes';\nimport { getBuiltInRouteFGAConfig } from './routes/fga-manifest';\n\nexport * from './routes';\nexport { redactStreamChunk } from './redact';\nexport {\n MASTRA_CLIENT_TYPE_HEADER,\n MASTRA_IS_STUDIO_KEY,\n MASTRA_STUDIO_CLIENT_TYPE,\n isReservedRequestContextKey,\n isStudioClientTypeHeader,\n} from '../constants';\n\nexport { WorkflowRegistry, normalizeRoutePath } from '../utils';\n\nexport interface OpenAPIConfig {\n title?: string;\n version?: string;\n description?: string;\n path?: string;\n}\n\nexport interface BodyLimitOptions {\n maxSize: number;\n onError: (error: unknown) => unknown;\n}\n\nexport interface StreamOptions {\n /**\n * When true (default), redacts sensitive data from stream chunks\n * (system prompts, tool definitions, API keys) before sending to clients.\n *\n * Set to false to include full request data in stream chunks (useful for\n * debugging or internal services that need access to this data).\n *\n * @default true\n */\n redact?: boolean;\n}\n\n/**\n * MCP transport options for configuring MCP HTTP and SSE transports.\n */\nexport interface MCPOptions {\n /**\n * When true, runs in stateless mode without session management.\n * Ideal for serverless environments (Cloudflare Workers, Vercel Edge, etc.)\n * where you can't maintain persistent connections across requests.\n *\n * @default false\n */\n serverless?: boolean;\n /**\n * Custom session ID generator function.\n */\n sessionIdGenerator?: () => string;\n}\n\n/**\n * Query parameter values parsed from HTTP requests.\n * Supports both single values and arrays (for repeated query params like ?tag=a&tag=b).\n */\nexport type QueryParamValue = string | string[];\n\n/**\n * Parsed request parameters returned by getParams().\n */\nexport interface ParsedRequestParams {\n urlParams: Record<string, string>;\n queryParams: Record<string, QueryParamValue>;\n body: unknown;\n /**\n * Error that occurred while parsing the request body.\n * When set, the server should return a 400 Bad Request response.\n */\n bodyParseError?: {\n message: string;\n };\n}\n\nfunction isAbortSignalError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n const { code, name } = error as { code?: string; name?: string };\n return name === 'AbortError' || code === 'ABORT_ERR';\n}\n\nfunction isExpectedResponseCloseError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n const { code } = error as { code?: string };\n return (\n code === 'ECONNRESET' ||\n code === 'EPIPE' ||\n code === 'ERR_STREAM_DESTROYED' ||\n code === 'ERR_STREAM_WRITE_AFTER_END' ||\n code === 'ERR_STREAM_PREMATURE_CLOSE'\n );\n}\n\nfunction isResponseClosed(response: { writableEnded?: boolean; destroyed?: boolean }): boolean {\n return Boolean(response.writableEnded || response.destroyed);\n}\n\nfunction isProtectedFGARoute(route: Pick<ServerRoute, 'requiresAuth'>): boolean {\n return route.requiresAuth !== false;\n}\n\nfunction formatRoute(route: Pick<ServerRoute, 'method' | 'path'>): string {\n return `${route.method} ${route.path}`;\n}\n\nfunction getFGAProvider(mastra: any): IFGAProvider | undefined {\n return mastra?.getServer?.()?.fga as IFGAProvider | undefined;\n}\n\nfunction getFGARouteInfo(route: ServerRoute): FGARouteInfo {\n return {\n path: route.path,\n method: route.method,\n requiresAuth: route.requiresAuth,\n requiresPermission: route.requiresPermission,\n fga: route.fga,\n };\n}\n\nfunction getRoutePermissions(route: ServerRoute): MastraFGAPermissionInput[] {\n return [getEffectivePermission(route), route.fga?.permission]\n .flatMap(value => (Array.isArray(value) ? value : [value]))\n .filter((permission): permission is MastraFGAPermissionInput => Boolean(permission));\n}\n\nasync function resolveRouteFGAConfig(\n fgaProvider: IFGAProvider,\n route: ServerRoute,\n requestContext: RequestContext,\n params: Record<string, unknown>,\n): Promise<FGARouteConfig | null | undefined> {\n if (route.fga) {\n return route.fga;\n }\n\n const resolvedConfig = await fgaProvider.resolveRouteFGA?.({\n route: getFGARouteInfo(route),\n params,\n requestContext,\n });\n if (resolvedConfig) {\n return resolvedConfig;\n }\n\n return getBuiltInRouteFGAConfig(route);\n}\n\nfunction getSchemaTypeName(schema: z.ZodTypeAny): string | undefined {\n const schemaDef = (schema as any)?._def ?? (schema as any)?.def;\n return schemaDef?.typeName ?? schemaDef?.type;\n}\n\nfunction unwrapOptionalNullable(schema: z.ZodTypeAny): z.ZodTypeAny {\n let inner = schema;\n let typeName = getSchemaTypeName(inner);\n\n while (\n typeName === 'ZodOptional' ||\n typeName === 'ZodNullable' ||\n typeName === 'optional' ||\n typeName === 'nullable'\n ) {\n const innerDef = (inner as any)?._def ?? (inner as any)?.def;\n if (!innerDef?.innerType) {\n return inner;\n }\n inner = innerDef.innerType;\n typeName = getSchemaTypeName(inner);\n }\n\n return inner;\n}\n\nfunction parseComplexQueryParams(\n queryParamSchema: z.ZodTypeAny,\n params: Record<string, QueryParamValue>,\n): Record<string, QueryParamValue | unknown> {\n if (!(queryParamSchema instanceof z.ZodObject)) {\n return params;\n }\n\n const parsedParams: Record<string, QueryParamValue | unknown> = { ...params };\n const shape = queryParamSchema.shape as Record<string, z.ZodTypeAny>;\n\n for (const [key, fieldSchema] of Object.entries(shape)) {\n const rawValue = parsedParams[key];\n if (typeof rawValue !== 'string') {\n continue;\n }\n\n const unwrappedField = unwrapOptionalNullable(fieldSchema);\n const typeName = getSchemaTypeName(unwrappedField);\n const isComplex =\n typeName === 'ZodObject' ||\n typeName === 'ZodArray' ||\n typeName === 'ZodRecord' ||\n typeName === 'object' ||\n typeName === 'array' ||\n typeName === 'record';\n\n if (!isComplex) {\n continue;\n }\n\n try {\n parsedParams[key] = JSON.parse(rawValue);\n } catch {\n // Keep original string; schema validation will surface a clear error.\n }\n }\n\n return parsedParams;\n}\n\n/**\n * Normalizes query parameters from various HTTP framework formats to a consistent structure.\n * Handles both single string values and arrays (for repeated query params like ?tag=a&tag=b).\n * Reconstructs bracket-notation keys (e.g., `orderBy[field]=createdAt`) into JSON strings\n * so that z.preprocess JSON.parse can handle them.\n * Filters out non-string values that some frameworks may include.\n *\n * @param rawQuery - Raw query parameters from the HTTP framework (may contain strings, arrays, or nested objects)\n * @returns Normalized query parameters as Record<string, string | string[]>\n */\nexport function normalizeQueryParams(rawQuery: Record<string, unknown>): Record<string, QueryParamValue> {\n const queryParams: Record<string, QueryParamValue> = {};\n // Collect bracket-notation keys: e.g., \"orderBy[field]\" → parent \"orderBy\", child \"field\"\n const bracketGroups: Record<string, Record<string, string>> = {};\n\n for (const [key, value] of Object.entries(rawQuery)) {\n const bracketMatch = key.match(/^([^[]+)\\[([^\\]]+)\\]$/);\n if (bracketMatch) {\n const parent = bracketMatch[1]!;\n const child = bracketMatch[2]!;\n const strValue = Array.isArray(value)\n ? value.filter((v): v is string => typeof v === 'string')[0]\n : typeof value === 'string'\n ? value\n : undefined;\n if (strValue !== undefined) {\n if (!bracketGroups[parent]) {\n bracketGroups[parent] = {};\n }\n bracketGroups[parent]![child] = strValue;\n }\n } else if (typeof value === 'string') {\n queryParams[key] = value;\n } else if (Array.isArray(value)) {\n // Filter to only string values (some frameworks include nested objects)\n const stringValues = value.filter((v): v is string => typeof v === 'string');\n // Convert single-value arrays back to strings for compatibility\n queryParams[key] = stringValues.length === 1 ? stringValues[0]! : stringValues;\n }\n }\n\n // Merge bracket groups as JSON strings (only if the parent key wasn't already set directly)\n for (const [parent, children] of Object.entries(bracketGroups)) {\n if (!(parent in queryParams)) {\n queryParams[parent] = JSON.stringify(children);\n }\n }\n\n return queryParams;\n}\n\n/**\n * Abstract base class for server adapters that handle HTTP requests.\n *\n * This class extends `MastraServerBase` to inherit app storage functionality\n * and provides the framework for registering routes, middleware, and handling requests.\n *\n * Framework-specific adapters in @mastra/hono and @mastra/express extend this class\n * (both named `MastraServer` in their respective packages) and implement the abstract\n * methods for their specific framework.\n *\n * @template TApp - The type of the server app (e.g., Hono, Express Application)\n * @template TRequest - The type of the request object\n * @template TResponse - The type of the response object\n */\nexport abstract class MastraServer<TApp, TRequest, TResponse> extends MastraServerBase<TApp> {\n protected mastra: Mastra;\n protected bodyLimitOptions?: BodyLimitOptions;\n protected tools?: ToolsInput;\n protected prefix?: string;\n protected openapiPath?: string;\n protected taskStore?: InMemoryTaskStore;\n protected customRouteAuthConfig?: Map<string, boolean>;\n protected streamOptions: StreamOptions;\n protected httpLoggingConfig?: HttpLoggingConfig;\n protected customApiRoutes?: ApiRoute[];\n protected mcpOptions?: MCPOptions;\n private customRouteHandler:\n | ((request: Request, env?: { requestContext?: RequestContext }) => Promise<Response>)\n | null = null;\n\n constructor({\n app,\n mastra,\n bodyLimitOptions,\n tools,\n prefix = '/api',\n openapiPath = '',\n taskStore,\n customRouteAuthConfig,\n streamOptions,\n customApiRoutes,\n mcpOptions,\n }: {\n app: TApp;\n mastra: Mastra;\n bodyLimitOptions?: BodyLimitOptions;\n tools?: ToolsInput;\n prefix?: string;\n openapiPath?: string;\n taskStore?: InMemoryTaskStore;\n customRouteAuthConfig?: Map<string, boolean>;\n streamOptions?: StreamOptions;\n customApiRoutes?: ApiRoute[];\n /**\n * MCP transport options applied to all MCP HTTP and SSE routes.\n * Individual routes can override these via MCPHttpTransportResult.mcpOptions.\n */\n mcpOptions?: MCPOptions;\n }) {\n super({ app, name: 'MastraServer' });\n this.mastra = mastra;\n this.bodyLimitOptions = bodyLimitOptions;\n this.tools = tools;\n this.prefix = normalizeRoutePath(prefix);\n this.openapiPath = openapiPath;\n this.taskStore = taskStore;\n this.customRouteAuthConfig = customRouteAuthConfig;\n this.streamOptions = { redact: true, ...streamOptions };\n this.customApiRoutes = customApiRoutes;\n this.mcpOptions = mcpOptions;\n\n // Parse HTTP logging configuration\n const serverConfig = mastra.getServer();\n this.httpLoggingConfig = this.parseLoggingConfig(serverConfig?.build?.apiReqLogs);\n\n // Automatically register this adapter with Mastra so getServerApp() works\n mastra.setMastraServer(this);\n }\n\n /**\n * Parses the apiReqLogs configuration into a normalized HttpLoggingConfig.\n * @param config - The raw config value from server.build.apiReqLogs\n * @returns Normalized HttpLoggingConfig or undefined if disabled\n */\n private parseLoggingConfig(config?: boolean | HttpLoggingConfig): HttpLoggingConfig | undefined {\n if (config === true) {\n // Default configuration when enabled with just `true`\n return {\n enabled: true,\n level: 'info',\n redactHeaders: ['authorization', 'cookie'],\n };\n }\n if (typeof config === 'object' && config.enabled) {\n // Merge user config with defaults\n return {\n enabled: true,\n level: config.level || 'info',\n excludePaths: config.excludePaths,\n includeHeaders: config.includeHeaders,\n includeQueryParams: config.includeQueryParams,\n redactHeaders: [...new Set([...['authorization', 'cookie'], ...(config.redactHeaders || [])])],\n };\n }\n return undefined;\n }\n\n /**\n * Determines if a request to the given path should be logged.\n * @param path - The request path to check\n * @returns true if the request should be logged, false otherwise\n */\n protected shouldLogRequest(path: string): boolean {\n if (!this.httpLoggingConfig?.enabled) {\n return false;\n }\n\n // Uses segment-aware matching so '/health' excludes '/health' and '/health/deep' but not '/healthcheck'\n const excludePaths = this.httpLoggingConfig.excludePaths || [];\n return !excludePaths.some((excluded: string) => path === excluded || path.startsWith(excluded + '/'));\n }\n\n protected mergeRequestContext({\n paramsRequestContext,\n bodyRequestContext,\n }: {\n paramsRequestContext?: Record<string, any>;\n bodyRequestContext?: Record<string, any>;\n }): RequestContext {\n const requestContext = new RequestContext();\n if (bodyRequestContext) {\n for (const [key, value] of Object.entries(bodyRequestContext)) {\n if (isReservedRequestContextKey(key)) continue;\n requestContext.set(key, value);\n }\n }\n if (paramsRequestContext) {\n for (const [key, value] of Object.entries(paramsRequestContext)) {\n if (isReservedRequestContextKey(key)) continue;\n requestContext.set(key, value);\n }\n }\n return requestContext;\n }\n\n protected applyRequestMetadataToContext({\n requestContext,\n getHeader,\n }: {\n requestContext: RequestContext;\n getHeader: (name: string) => string | undefined;\n }): void {\n if (isStudioClientTypeHeader(getHeader(MASTRA_CLIENT_TYPE_HEADER))) {\n requestContext.set(MASTRA_IS_STUDIO_KEY, true);\n }\n }\n\n /**\n * Check if the current request should be authenticated/authorized.\n * Returns null if auth passes, or an error response if it fails.\n *\n * This is a thin wrapper around coreAuthMiddleware that:\n * 1. Handles route-level requiresAuth opt-out (not available in global middleware)\n * 2. Delegates all other auth logic to coreAuthMiddleware\n * 3. Translates the AuthResult into the {status, error} format adapters expect\n */\n protected async checkRouteAuth(\n route: ServerRoute,\n context: {\n path: string;\n method: string;\n getHeader: (name: string) => string | undefined;\n getQuery: (name: string) => string | undefined;\n requestContext: RequestContext;\n /** Raw Request object for cookie-based auth providers */\n request?: Request;\n /** Build framework-specific context for authorize() callback */\n buildAuthorizeContext?: () => unknown;\n },\n ): Promise<{ status: number; error: string; headers?: Record<string, string> } | null> {\n const authConfig = this.mastra.getServer()?.auth;\n\n // No auth config means no auth required\n if (!authConfig) {\n return null;\n }\n\n // Check route-level requiresAuth flag first (explicit per-route setting)\n // This opt-out is route-specific and not available in the global middleware\n if (route.requiresAuth === false) {\n return null;\n }\n\n // Extract token from headers/query\n const authHeader = context.getHeader('authorization');\n let token: string | null = authHeader ? authHeader.replace('Bearer ', '') : null;\n if (!token) {\n token = context.getQuery('apiKey') || null;\n }\n\n const fallbackHeaders = new Headers();\n for (const headerName of ['authorization', 'cookie']) {\n const headerValue = context.getHeader(headerName);\n if (headerValue) {\n fallbackHeaders.set(headerName, headerValue);\n }\n }\n\n // Delegate to coreAuthMiddleware for all auth logic\n const result = await coreAuthMiddleware({\n path: context.path,\n method: context.method,\n getHeader: context.getHeader,\n mastra: this.mastra,\n authConfig,\n customRouteAuthConfig: this.customRouteAuthConfig,\n requestContext: context.requestContext,\n rawRequest:\n context.request ??\n new Request(`http://localhost${context.path}`, { method: context.method, headers: fallbackHeaders }),\n token,\n buildAuthorizeContext: context.buildAuthorizeContext ?? (() => null),\n requiresAuth: route.requiresAuth,\n });\n\n if (result.action === 'next') {\n // Pass through any refresh headers (e.g. Set-Cookie from transparent session refresh)\n if (result.headers) {\n return { status: 200, error: '', headers: result.headers };\n }\n return null;\n }\n\n // Translate AuthResult error to the {status, error} format adapters expect\n const errorBody = result.body as { error?: string } | undefined;\n return { status: result.status, error: errorBody?.error ?? 'Access denied', headers: result.headers };\n }\n\n /**\n * Check if the user has the required permission for a route.\n *\n * Uses convention-based permission derivation:\n * 1. If route has explicit `requiresPermission`, use that\n * 2. Otherwise, derive permission from path/method (e.g., GET /agents → agents:read)\n * 3. Routes with `requiresAuth: false` skip permission checks\n *\n * When the route specifies an array of permissions, the user needs ANY ONE\n * of them (logical OR).\n *\n * @param route - The route being accessed\n * @param userPermissions - The user's permissions from the request context\n * @returns Error response if permission denied, null if allowed\n */\n protected checkRoutePermission(\n route: ServerRoute,\n userPermissions: string[] | undefined,\n hasPermissionFn: (userPerms: string[], required: string) => boolean,\n ): { status: number; error: string; message: string } | null {\n // If RBAC is not configured, skip permission checks entirely\n // Auth-only mode = authenticated users get full access\n const rbacProvider = this.mastra.getServer()?.rbac;\n if (!rbacProvider) {\n return null;\n }\n\n // Get the effective permission (explicit or derived)\n const requiredPermission = getEffectivePermission(route);\n\n // No permission required (public route or couldn't derive)\n if (!requiredPermission) {\n return null;\n }\n\n // Check if user has the required permission(s)\n // When an array is provided, user needs ANY ONE of them (logical OR)\n const permissions = Array.isArray(requiredPermission) ? requiredPermission : [requiredPermission];\n const hasAny = userPermissions && permissions.some(perm => hasPermissionFn(userPermissions, perm));\n\n if (!hasAny) {\n return {\n status: 403,\n error: 'Forbidden',\n message: `Missing required permission: ${permissions.join(' or ')}`,\n };\n }\n\n return null;\n }\n\n abstract stream(route: ServerRoute, response: TResponse, result: unknown): Promise<unknown>;\n abstract getParams(route: ServerRoute, request: TRequest): Promise<ParsedRequestParams>;\n abstract sendResponse(route: ServerRoute, response: TResponse, result: unknown): Promise<unknown>;\n abstract registerRoute(app: TApp, route: ServerRoute, { prefix }: { prefix?: string }): Promise<void>;\n abstract registerContextMiddleware(): void;\n abstract registerAuthMiddleware(): void;\n abstract registerHttpLoggingMiddleware(): void;\n\n async init() {\n this.registerContextMiddleware();\n this.registerAuthMiddleware();\n this.registerHttpLoggingMiddleware();\n await this.validateEELicense();\n await this.validateAgentBuilderLicense();\n await this.validateFGAPolicyCoverage();\n await this.registerCustomApiRoutes();\n await this.registerRoutes();\n }\n\n /**\n * Validate that EE features have a valid license in production.\n * Throws if RBAC or FGA is configured without a valid license outside dev/test environments.\n */\n async validateEELicense(): Promise<void> {\n const serverConfig = this.mastra.getServer();\n const configuredFeatures = [serverConfig?.rbac ? 'RBAC' : null, serverConfig?.fga ? 'FGA' : null].filter(\n (feature): feature is string => feature !== null,\n );\n\n if (configuredFeatures.length === 0) return;\n\n try {\n const { isEEEnabled } = await import('@mastra/core/auth/ee');\n if (!isEEEnabled()) {\n const featureList = configuredFeatures.join(' and ');\n throw new Error(\n `[mastra/auth-ee] ${featureList} ${configuredFeatures.length === 1 ? 'is' : 'are'} configured but no valid EE license was found.\\n` +\n `${featureList} ${configuredFeatures.length === 1 ? 'requires' : 'require'} a Mastra Enterprise License for production use.\\n` +\n 'Set the MASTRA_EE_LICENSE environment variable with your license key.\\n' +\n 'Learn more: https://github.com/mastra-ai/mastra/blob/main/ee/LICENSE',\n );\n }\n } catch (err) {\n if (err instanceof Error && err.message.startsWith('[mastra/auth-ee]')) {\n throw err;\n }\n // @mastra/core/auth/ee module not available; EE authorization cannot function.\n throw new Error(\n `[mastra/auth-ee] ${configuredFeatures.join(' and ')} ${configuredFeatures.length === 1 ? 'is' : 'are'} configured but the EE module (@mastra/core/auth/ee) could not be loaded.\\n` +\n 'Ensure @mastra/core is updated to a version that includes EE support.',\n );\n }\n }\n\n /**\n * Validate that an Agent Builder configuration has a valid EE license.\n * Throws if the editor is configured with builder support but no valid EE license is available.\n */\n async validateAgentBuilderLicense(): Promise<void> {\n const editor = this.mastra.getEditor();\n if (!editor?.hasEnabledBuilderConfig?.()) return;\n\n try {\n const { isEEEnabled } = await import('@mastra/core/auth/ee');\n if (!isEEEnabled()) {\n throw new Error(\n '[mastra/auth-ee] Agent Builder is configured but no valid EE license was found.\\n' +\n 'Agent Builder requires a Mastra Enterprise License for production use.\\n' +\n 'Set the MASTRA_EE_LICENSE environment variable with your license key.\\n' +\n 'Learn more: https://github.com/mastra-ai/mastra/blob/main/ee/LICENSE',\n );\n }\n } catch (err) {\n if (err instanceof Error && err.message.startsWith('[mastra/auth-ee]')) {\n throw err;\n }\n // @mastra/core/auth/ee module not available — Agent Builder cannot function\n throw new Error(\n '[mastra/auth-ee] Agent Builder is configured but the EE module (@mastra/core/auth/ee) could not be loaded.\\n' +\n 'Ensure @mastra/core is updated to a version that includes EE support.',\n );\n }\n }\n\n /**\n * Validate route-level FGA policy coverage when an FGA provider opts into\n * startup checks.\n */\n async validateFGAPolicyCoverage(): Promise<void> {\n const serverConfig = this.mastra.getServer();\n const fgaProvider = serverConfig?.fga;\n if (!fgaProvider) return;\n\n const customRoutes = (this.customApiRoutes ?? serverConfig?.apiRoutes ?? []).filter(\n route => !route._mastraInternal,\n );\n const routes = [...SERVER_ROUTES, ...customRoutes] as ServerRoute[];\n\n if (fgaProvider.validatePermissions) {\n const permissions = [...new Set(routes.flatMap(route => getRoutePermissions(route)))];\n await fgaProvider.validatePermissions(permissions);\n }\n\n const auditMode = fgaProvider.auditProtectedRoutes ?? (fgaProvider.requireForProtectedRoutes ? 'warn' : false);\n if (!auditMode || fgaProvider.resolveRouteFGA) return;\n\n const missingRoutes = routes.filter(\n route => isProtectedFGARoute(route) && !route.fga && !getBuiltInRouteFGAConfig(route),\n );\n\n if (missingRoutes.length === 0) return;\n\n const routeList = missingRoutes.map(route => formatRoute(route as ServerRoute));\n const message =\n `[mastra/auth-ee] FGA is configured but ${missingRoutes.length} protected route` +\n `${missingRoutes.length === 1 ? ' is' : 's are'} missing FGA metadata: ${routeList.join(', ')}`;\n\n if (auditMode === 'error') {\n throw new Error(message);\n }\n\n this.mastra.getLogger()?.warn(message, {\n routes: routeList,\n count: missingRoutes.length,\n });\n }\n\n /**\n * Override in adapters to register custom API routes defined via registerApiRoute().\n * Called by init() between registerAuthMiddleware() and registerRoutes().\n */\n async registerCustomApiRoutes(): Promise<void> {\n // Default no-op. Adapters override this to register custom routes\n // using their framework-specific middleware.\n }\n\n /**\n * Validates that no custom route path collides with the built-in route prefix.\n * Throws if any route path starts with the server's `apiPrefix`.\n */\n protected validateCustomRoutePaths(routes: ApiRoute[]): void {\n const prefix = this.prefix ?? '';\n if (!prefix) return;\n for (const route of routes) {\n if (route._mastraInternal) continue;\n if (route.path.startsWith(`${prefix}/`) || route.path === prefix) {\n throw new Error(\n `Custom API route \"${route.path}\" must not start with \"${prefix}\" — ` +\n `that path is reserved for built-in Mastra routes. ` +\n `Choose a different path (e.g. \"${route.path.replace(prefix, '/custom')}\").`,\n );\n }\n }\n }\n\n /**\n * Creates an internal Hono sub-app with all custom API routes registered.\n * Stores the handler on this instance for use by handleCustomRouteRequest().\n * Returns true if custom routes were found and registered.\n */\n protected async buildCustomRouteHandler(): Promise<boolean> {\n const routes = this.customApiRoutes ?? this.mastra.getServer()?.apiRoutes;\n if (!routes || routes.length === 0) return false;\n\n const NOT_FOUND_HEADER = 'x-mastra-custom-route-not-found';\n const mastra = this.mastra;\n\n const app = new Hono<{\n Bindings: { requestContext?: RequestContext };\n Variables: { mastra: Mastra; requestContext: RequestContext };\n }>();\n\n // Internal context middleware — sets variables that custom route handlers expect\n app.use('*', async (c, next) => {\n c.set('mastra', mastra);\n c.set('requestContext', c.env?.requestContext ?? new RequestContext());\n await next();\n });\n\n // Propagate the server's onError handler so errors from custom route handlers\n // are caught here (not swallowed by Hono's default plain-text 500).\n const serverOnError = this.mastra.getServer()?.onError;\n app.onError((err, c) => {\n if (serverOnError) {\n return serverOnError(err, c as unknown as Parameters<typeof serverOnError>[1]);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n });\n\n this.validateCustomRoutePaths(routes);\n\n // Register each custom route\n for (const route of routes) {\n const handler =\n 'handler' in route && route.handler\n ? route.handler\n : 'createHandler' in route\n ? await route.createHandler({ mastra })\n : undefined;\n if (!handler) continue;\n\n const middlewares: any[] = [];\n if (route.middleware) {\n middlewares.push(...(Array.isArray(route.middleware) ? route.middleware : [route.middleware]));\n }\n\n const allHandlers = [...middlewares, handler];\n if (route.method === 'ALL') {\n app.all(route.path, allHandlers[0]!, ...allHandlers.slice(1));\n } else {\n app.on(route.method, route.path, allHandlers[0]!, ...allHandlers.slice(1));\n }\n }\n\n // Mark unmatched requests so the adapter bridge can fall through to next()\n app.notFound(() => new Response(null, { status: 404, headers: { [NOT_FOUND_HEADER]: 'true' } }));\n\n this.customRouteHandler = async (request, env) => app.fetch(request, env);\n return true;\n }\n\n /**\n * Forwards a request to the internal custom route handler.\n * Returns the Response if a custom route matched, or null to fall through.\n */\n protected async handleCustomRouteRequest(\n url: string,\n method: string,\n headers: Record<string, string | string[] | undefined>,\n body: unknown,\n requestContext?: RequestContext,\n signal?: AbortSignal,\n ): Promise<Response | null> {\n if (!this.customRouteHandler) return null;\n\n const fetchHeaders = new Headers();\n for (const [key, value] of Object.entries(headers)) {\n if (typeof value === 'string') fetchHeaders.set(key, value);\n else if (Array.isArray(value))\n value.forEach(v => {\n fetchHeaders.append(key, v);\n });\n }\n\n const init: RequestInit = { method, headers: fetchHeaders, signal };\n if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(method) && body !== undefined) {\n if (body instanceof ArrayBuffer || body instanceof Uint8Array || body instanceof ReadableStream) {\n init.body = body as any;\n if (body instanceof ReadableStream) {\n (init as any).duplex = 'half';\n }\n } else {\n const contentType = (typeof headers['content-type'] === 'string' ? headers['content-type'] : '') || '';\n if (contentType.includes('application/json')) {\n init.body = JSON.stringify(body);\n } else if (typeof body === 'string') {\n init.body = body;\n }\n }\n }\n\n const request = new globalThis.Request(url, init);\n const response = await this.customRouteHandler(request, { requestContext });\n\n if (response.headers.get('x-mastra-custom-route-not-found') === 'true') return null;\n return response;\n }\n\n /**\n * Pipes a custom route Response to a Node.js ServerResponse (http.ServerResponse).\n * Works with Koa (ctx.res), Express (res), and Fastify (reply.raw).\n */\n protected async writeCustomRouteResponse(\n response: Response,\n nodeRes: {\n writeHead(status: number, headers: Record<string, string | string[]>): void;\n write(chunk: unknown): void;\n end(data?: string): void;\n writableEnded?: boolean;\n destroyed?: boolean;\n } & NodeJS.WritableStream,\n signal?: AbortSignal,\n ): Promise<void> {\n const headers: Record<string, string | string[]> = {};\n response.headers.forEach((value, key) => {\n if (key.toLowerCase() !== 'set-cookie') {\n headers[key] = value;\n }\n });\n const setCookies = response.headers.getSetCookie?.();\n if (setCookies && setCookies.length > 0) {\n headers['set-cookie'] = setCookies;\n }\n if (isResponseClosed(nodeRes)) {\n await response.body?.cancel();\n return;\n }\n nodeRes.writeHead(response.status, headers);\n\n if (response.body) {\n let responseBodyError: unknown;\n let responseBodyErrorAfterResponseClosed = false;\n try {\n const responseStream = Readable.fromWeb(response.body as any);\n // This listener must run before pipeline's cleanup so source errors are\n // not mistaken for client disconnects after pipeline destroys nodeRes.\n responseStream.once('error', error => {\n responseBodyError = error;\n responseBodyErrorAfterResponseClosed = isResponseClosed(nodeRes);\n });\n if (signal) {\n await pipeline(responseStream, nodeRes, { signal });\n } else {\n await pipeline(responseStream, nodeRes);\n }\n } catch (error) {\n const expectedSignalAbort =\n signal?.aborted && isAbortSignalError(error) && (!responseBodyError || responseBodyErrorAfterResponseClosed);\n const expectedResponseClose =\n (!responseBodyError || responseBodyErrorAfterResponseClosed) &&\n isResponseClosed(nodeRes) &&\n isExpectedResponseCloseError(error);\n // Request cancellation is expected unless the response body already reported its own error.\n if (!expectedSignalAbort && !expectedResponseClose) {\n throw error;\n }\n }\n } else {\n const text = await response.text();\n if (!isResponseClosed(nodeRes)) {\n nodeRes.end(text);\n }\n }\n }\n\n /**\n * Builds the OpenAPI spec object with servers field and custom route paths.\n */\n private buildOpenAPISpec(config: { title: string; version: string; description: string }, prefix?: string): any {\n const openApiSpec = generateOpenAPIDocument(SERVER_ROUTES, config);\n\n if (prefix) {\n openApiSpec.servers = [{ url: prefix }];\n }\n\n // Custom routes are served at root (/), not under the API prefix — add per-path servers override.\n const allCustomRoutes = this.customApiRoutes ?? this.mastra.getServer()?.apiRoutes;\n if (allCustomRoutes && allCustomRoutes.length > 0) {\n const customPaths = convertCustomRoutesToOpenAPIPaths(allCustomRoutes);\n if (prefix) {\n for (const pathKey of Object.keys(customPaths)) {\n if (!customPaths[pathKey].servers) {\n customPaths[pathKey].servers = [{ url: '/' }];\n }\n }\n }\n openApiSpec.paths = { ...openApiSpec.paths, ...customPaths };\n }\n\n return openApiSpec;\n }\n\n async registerOpenAPIRoute(app: TApp, config: OpenAPIConfig = {}, { prefix }: { prefix?: string }): Promise<void> {\n const {\n title = 'Mastra API',\n version = '1.0.0',\n description = 'Mastra Server API',\n path = '/openapi.json',\n } = config;\n\n const openApiSpec = this.buildOpenAPISpec({ title, version, description }, prefix);\n\n const openApiRoute: ServerRoute = {\n method: 'GET',\n path,\n responseType: 'json',\n handler: async () => openApiSpec,\n };\n\n await this.registerRoute(app, openApiRoute, { prefix });\n }\n\n async registerRoutes(): Promise<void> {\n // Register routes sequentially to maintain order - important for routers where\n // more specific routes (e.g., /versions/compare) must be registered before\n // parameterized routes (e.g., /versions/:versionId)\n for (const route of SERVER_ROUTES) {\n await this.registerRoute(this.app, route, { prefix: this.prefix });\n }\n\n if (this.openapiPath) {\n const specConfig = {\n title: 'Mastra API',\n version: '1.0.0',\n description: 'Mastra Server API',\n };\n\n await this.registerOpenAPIRoute(this.app, { ...specConfig, path: this.openapiPath }, { prefix: this.prefix });\n }\n }\n\n async parsePathParams(route: ServerRoute, params: Record<string, string>): Promise<Record<string, any>> {\n const pathParamSchema = route.pathParamSchema;\n if (!pathParamSchema) {\n return params;\n }\n\n return pathParamSchema.parseAsync(params) as Promise<Record<string, any>>;\n }\n\n async parseQueryParams(route: ServerRoute, params: Record<string, QueryParamValue>): Promise<Record<string, any>> {\n const queryParamSchema = route.queryParamSchema;\n if (!queryParamSchema) {\n return params;\n }\n\n const normalizedParams = parseComplexQueryParams(queryParamSchema as z.ZodTypeAny, params);\n return queryParamSchema.parseAsync(normalizedParams) as Promise<Record<string, any>>;\n }\n\n async parseBody(route: ServerRoute, body: unknown): Promise<unknown> {\n const bodySchema = route.bodySchema;\n if (!bodySchema) {\n return body;\n }\n\n return bodySchema.parseAsync(body);\n }\n\n private static readonly CONTEXT_LABELS: Record<ValidationErrorContext, string> = {\n query: 'query parameters',\n body: 'request body',\n path: 'path parameters',\n };\n\n protected resolveValidationError(\n route: ServerRoute,\n error: ZodError,\n context: ValidationErrorContext,\n ): ValidationErrorResponse {\n const hook = route.onValidationError ?? this.mastra.getServer()?.onValidationError;\n\n if (hook) {\n try {\n const result = hook(error, context);\n if (result) {\n return result;\n }\n } catch (hookError) {\n this.mastra.getLogger()?.error('Error in custom onValidationError hook', {\n error: hookError instanceof Error ? { message: hookError.message, stack: hookError.stack } : hookError,\n });\n }\n }\n\n return {\n status: 400,\n body: formatZodError(error, MastraServer.CONTEXT_LABELS[context]),\n };\n }\n}\n\n/**\n * Check FGA authorization for an HTTP route.\n * Returns null if authorized or FGA not configured, or an error object if denied.\n */\nexport async function checkRouteFGA(\n mastra: any,\n route: ServerRoute,\n requestContext: RequestContext,\n params: Record<string, unknown>,\n): Promise<{ status: number; error: string; message: string } | null> {\n const fgaProvider = getFGAProvider(mastra);\n if (!fgaProvider) return null;\n\n const fgaConfig = await resolveRouteFGAConfig(fgaProvider, route, requestContext, params);\n if (!fgaConfig) {\n if (fgaProvider.requireForProtectedRoutes && isProtectedFGARoute(route)) {\n return {\n status: 403,\n error: 'Forbidden',\n message: 'FGA authorization denied: route FGA metadata is required',\n };\n }\n return null;\n }\n\n const user = requestContext?.get('user');\n if (!user) {\n return {\n status: 403,\n error: 'Forbidden',\n message: 'FGA authorization denied: authenticated user is required',\n };\n }\n\n const resourceId =\n typeof fgaConfig.resourceId === 'function'\n ? fgaConfig.resourceId(params, { requestContext })\n : fgaConfig.resourceId || (fgaConfig.resourceIdParam ? (params[fgaConfig.resourceIdParam] as string) : undefined);\n if (!fgaConfig.resourceType || !resourceId) {\n return {\n status: 403,\n error: 'Forbidden',\n message: 'FGA authorization denied: route FGA metadata is incomplete',\n };\n }\n const effectivePermission = route.path ? getEffectivePermission(route) : null;\n const permission =\n fgaConfig.permission ||\n effectivePermission ||\n `${getFGAResourcePermissionSlug(fgaConfig.resourceType)}:${deriveFGAAction(route.method)}`;\n\n const authorized = await fgaProvider.check(user, {\n resource: { type: fgaConfig.resourceType, id: resourceId },\n permission,\n context: { resourceId, requestContext },\n });\n\n if (!authorized) {\n return {\n status: 403,\n error: 'Forbidden',\n message: `FGA authorization denied: cannot ${permission} on ${fgaConfig.resourceType}:${resourceId}`,\n };\n }\n\n return null;\n}\n\nfunction deriveFGAAction(method: string): string {\n switch (method.toUpperCase()) {\n case 'GET':\n return 'read';\n case 'DELETE':\n return 'delete';\n case 'POST':\n case 'PUT':\n case 'PATCH':\n return 'write';\n default:\n return 'read';\n }\n}\n\nfunction getFGAResourcePermissionSlug(resourceType: string): string {\n const resourcePermissionSlugs: Record<string, string> = {\n agent: 'agents',\n workflow: 'workflows',\n tool: 'tools',\n thread: 'memory',\n };\n\n return resourcePermissionSlugs[resourceType] ?? resourceType;\n}\n"]}
1
+ {"version":3,"sources":["../../../src/server/server-adapter/routes/fga-manifest.ts","../../../src/server/server-adapter/redact.ts","../../../src/server/server-adapter/index.ts"],"names":["MASTRA_RESOURCE_ID_KEY","getEffectivePermission","isProtectedFGARoute","MASTRA_AUTH_MODE_KEY","z","MastraServerBase","normalizeRoutePath","requestContext","RequestContext","isReservedRequestContextKey","isStudioClientTypeHeader","MASTRA_CLIENT_TYPE_HEADER","MASTRA_IS_STUDIO_KEY","coreAuthMiddleware","SERVER_ROUTES","Hono","Readable","pipeline","generateOpenAPIDocument","convertCustomRoutesToOpenAPIPaths","formatZodError"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { FGARouteConfig, MastraFGAPermissionInput } from '@mastra/core/auth/ee';\n\nimport { MASTRA_RESOURCE_ID_KEY } from '../../constants';\nimport { getEffectivePermission } from './permissions';\nimport type { ServerRoute } from './index';\n\nfunction isProtectedFGARoute(route: Pick<ServerRoute, 'requiresAuth'>): boolean {\n return route.requiresAuth !== false;\n}\n\nfunction getToolRoutePermission(path: string): MastraFGAPermissionInput {\n return path.includes('/execute') ? 'tools:execute' : 'tools:read';\n}\n\nfunction getAgentToolResourceId(agentId: string, toolId: string): string {\n return `${agentId}:${toolId}`;\n}\n\nfunction getMCPToolResourceId(serverId: string, toolId: string): string {\n return JSON.stringify([serverId, toolId]);\n}\n\nconst STORED_ROUTE_FGA: Record<string, { resourceType: string; idParams: string[] }> = {\n agents: { resourceType: 'stored-agents', idParams: ['storedAgentId', 'agentId'] },\n 'mcp-clients': { resourceType: 'stored-mcp-clients', idParams: ['storedMCPClientId', 'mcpClientId'] },\n 'prompt-blocks': { resourceType: 'stored-prompt-blocks', idParams: ['storedPromptBlockId', 'promptBlockId'] },\n scorers: { resourceType: 'stored-scorers', idParams: ['storedScorerId', 'scorerId'] },\n skills: { resourceType: 'stored-skills', idParams: ['storedSkillId'] },\n workspaces: { resourceType: 'stored-workspaces', idParams: ['storedWorkspaceId'] },\n};\n\nfunction getStoredResourceRouteFGAConfig(path: string, permission: MastraFGAPermissionInput): FGARouteConfig | null {\n const match = path.match(/^\\/stored\\/([^/]+)/);\n if (!match?.[1]) {\n return null;\n }\n\n const config = STORED_ROUTE_FGA[match[1]];\n if (!config) {\n return null;\n }\n\n return {\n resourceType: config.resourceType,\n resourceId: (params, { requestContext }) => {\n for (const idParam of config.idParams) {\n const id = params[idParam];\n if (typeof id === 'string' && id) {\n return id;\n }\n }\n\n const scopedResourceId = requestContext?.get(MASTRA_RESOURCE_ID_KEY);\n return typeof scopedResourceId === 'string' && scopedResourceId ? scopedResourceId : config.resourceType;\n },\n permission,\n };\n}\n\nexport function getBuiltInRouteFGAConfig(route: ServerRoute): FGARouteConfig | null {\n if (!isProtectedFGARoute(route) || !route.path || !route.method) {\n return null;\n }\n\n const permission = getEffectivePermission(route) as MastraFGAPermissionInput | null;\n if (!permission) {\n return null;\n }\n\n const path = route.path;\n const storedRouteConfig = getStoredResourceRouteFGAConfig(path, permission);\n if (storedRouteConfig) {\n return storedRouteConfig;\n }\n\n if (path.startsWith('/agents/:agentId/tools/:toolId')) {\n return {\n resourceType: 'tool',\n resourceId: ({ agentId, toolId }) => getAgentToolResourceId(String(agentId), String(toolId)),\n permission: getToolRoutePermission(path),\n };\n }\n\n if (path.startsWith('/agents/:agentId')) {\n return { resourceType: 'agent', resourceIdParam: 'agentId', permission };\n }\n\n if (path.startsWith('/workflows/:workflowId')) {\n return { resourceType: 'workflow', resourceIdParam: 'workflowId', permission };\n }\n\n if (path.startsWith('/tools/:toolId')) {\n return { resourceType: 'tool', resourceIdParam: 'toolId', permission };\n }\n\n if (path.startsWith('/mcp/:serverId/tools/:toolId')) {\n return {\n resourceType: 'tool',\n resourceId: ({ serverId, toolId }) => getMCPToolResourceId(String(serverId), String(toolId)),\n permission: getToolRoutePermission(path),\n };\n }\n\n if (path.startsWith('/mcp/:serverId')) {\n return { resourceType: 'mcp', resourceIdParam: 'serverId', permission };\n }\n\n if (path.startsWith('/memory/threads/:threadId') || path.startsWith('/memory/network/threads/:threadId')) {\n return { resourceType: 'thread', resourceIdParam: 'threadId', permission };\n }\n\n if (path === '/memory/threads' || path === '/memory/network/threads') {\n return {\n resourceType: 'thread',\n resourceId: ({ threadId, resourceId }) => {\n if (typeof threadId === 'string') return threadId;\n return typeof resourceId === 'string' ? resourceId : undefined;\n },\n permission,\n };\n }\n\n if (path === '/memory/save-messages' || path === '/memory/network/save-messages') {\n return {\n resourceType: 'thread',\n resourceId: ({ messages }) => {\n if (!Array.isArray(messages)) return undefined;\n const threadId = messages.find(\n message => message && typeof message === 'object' && 'threadId' in message,\n )?.threadId;\n return typeof threadId === 'string' ? threadId : undefined;\n },\n permission,\n };\n }\n\n if (path === '/v1/responses') {\n return { resourceType: 'agent', resourceIdParam: 'agent_id', permission };\n }\n\n if (path.startsWith('/v1/responses/:responseId')) {\n return { resourceType: 'response', resourceIdParam: 'responseId', permission };\n }\n\n if (path === '/v1/conversations') {\n return { resourceType: 'agent', resourceIdParam: 'agent_id', permission };\n }\n\n if (path.startsWith('/v1/conversations/:conversationId')) {\n return { resourceType: 'conversation', resourceIdParam: 'conversationId', permission };\n }\n\n return null;\n}\n","import type { ChunkType } from '@mastra/core/stream';\n\n/**\n * Redacts request data from a v2 format payload.\n * Removes `metadata.request` and `output.steps[].request` from the payload.\n */\nfunction redactV2Payload(payload: Record<string, unknown>): Record<string, unknown> {\n const redactedPayload = { ...payload };\n\n // Remove metadata.request\n if (redactedPayload.metadata && typeof redactedPayload.metadata === 'object') {\n const { request, ...metadataRest } = redactedPayload.metadata as Record<string, unknown>;\n redactedPayload.metadata = metadataRest;\n }\n\n // Remove request from output.steps[]\n if (redactedPayload.output && typeof redactedPayload.output === 'object') {\n const output = { ...(redactedPayload.output as Record<string, unknown>) };\n if (Array.isArray(output.steps)) {\n output.steps = output.steps.map((step: Record<string, unknown>) => {\n if (step && typeof step === 'object') {\n const { request, ...stepRest } = step;\n return stepRest;\n }\n return step;\n });\n }\n redactedPayload.output = output;\n }\n\n return redactedPayload;\n}\n\n/**\n * Redacts sensitive data from stream chunks before they are sent to clients.\n *\n * This function strips out request bodies that may contain sensitive information\n * such as system prompts, tool definitions, API keys, and other configuration data.\n *\n * Handles both v1 (legacy) and v2 stream formats:\n *\n * v1 format (fields at root level):\n * - `step-start.request` - Contains the full LLM request body\n * - `step-finish.request` - Contains the request body\n * - `finish.request` - Contains the request body (if present)\n *\n * v2 format (fields nested in payload):\n * - `step-start.payload.request` - Contains the full LLM request body\n * - `step-finish.payload.metadata.request` - Contains the request metadata\n * - `step-finish.payload.output.steps[].request` - Contains request data for each step\n * - `finish.payload.metadata.request` - Contains the request metadata\n * - `finish.payload.output.steps[].request` - Contains request data for each step\n *\n * @param chunk - The stream chunk to redact\n * @returns A new chunk with sensitive data removed, or the original chunk if no redaction needed\n */\nexport function redactStreamChunk<OUTPUT = undefined>(chunk: ChunkType<OUTPUT>): ChunkType<OUTPUT> {\n if (!chunk || typeof chunk !== 'object') {\n return chunk;\n }\n\n const typedChunk = chunk as Record<string, unknown>;\n\n switch (chunk.type) {\n case 'step-start': {\n // Check if this is v2 format (has payload) or v1 format (request at root)\n if ('payload' in typedChunk && typedChunk.payload && typeof typedChunk.payload === 'object') {\n // v2 format: Remove request from payload\n const { payload, ...rest } = typedChunk;\n const { request, ...payloadRest } = payload as Record<string, unknown>;\n return {\n ...rest,\n type: 'step-start',\n payload: {\n ...payloadRest,\n // Keep an empty request object to maintain structure but remove body\n request: {},\n },\n } as ChunkType<OUTPUT>;\n } else if ('request' in typedChunk) {\n // v1 format: Remove request at root level\n const { request, ...rest } = typedChunk;\n return {\n ...rest,\n type: 'step-start',\n // Keep an empty request object to maintain structure\n request: {},\n } as unknown as ChunkType<OUTPUT>;\n }\n return chunk;\n }\n\n case 'step-finish': {\n // Check if this is v2 format (has payload) or v1 format (request at root)\n if ('payload' in typedChunk && typedChunk.payload && typeof typedChunk.payload === 'object') {\n // v2 format: Remove request from metadata and output.steps[].request\n const { payload, ...rest } = typedChunk;\n return {\n ...rest,\n type: 'step-finish',\n payload: redactV2Payload(payload as Record<string, unknown>),\n } as ChunkType<OUTPUT>;\n } else if ('request' in typedChunk) {\n // v1 format: Remove request at root level\n const { request, ...rest } = typedChunk;\n return {\n ...rest,\n type: 'step-finish',\n } as unknown as ChunkType<OUTPUT>;\n }\n return chunk;\n }\n\n case 'finish': {\n // Check if this is v2 format (has payload) or v1 format (request at root)\n if ('payload' in typedChunk && typedChunk.payload && typeof typedChunk.payload === 'object') {\n // v2 format: Remove request from metadata and output.steps[].request\n const { payload, ...rest } = typedChunk;\n return {\n ...rest,\n type: 'finish',\n payload: redactV2Payload(payload as Record<string, unknown>),\n } as ChunkType<OUTPUT>;\n } else if ('request' in typedChunk) {\n // v1 format: Remove request at root level\n const { request, ...rest } = typedChunk;\n return {\n ...rest,\n type: 'finish',\n } as unknown as ChunkType<OUTPUT>;\n }\n return chunk;\n }\n\n default:\n // Other chunk types don't contain sensitive request data\n return chunk;\n }\n}\n","import { Readable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\nimport type { ToolsInput } from '@mastra/core/agent';\nimport type { FGARouteConfig, FGARouteInfo, IFGAProvider, MastraFGAPermissionInput } from '@mastra/core/auth/ee';\nimport type { Mastra } from '@mastra/core/mastra';\nimport { RequestContext } from '@mastra/core/request-context';\nimport { MastraServerBase } from '@mastra/core/server';\nimport type { ApiRoute, HttpLoggingConfig, ValidationErrorContext, ValidationErrorResponse } from '@mastra/core/server';\nimport { Hono } from 'hono';\nimport type { ZodError } from 'zod/v4';\nimport { z } from 'zod/v4';\n\nimport type { InMemoryTaskStore } from '../a2a/store';\nimport { coreAuthMiddleware } from '../auth/helpers';\nimport {\n MASTRA_AUTH_MODE_KEY,\n MASTRA_CLIENT_TYPE_HEADER,\n MASTRA_IS_STUDIO_KEY,\n isReservedRequestContextKey,\n isStudioClientTypeHeader,\n} from '../constants';\nimport type { MastraAuthMode } from '../constants';\nimport { formatZodError } from '../handlers/error';\nexport { isZodError, type ZodErrorLike } from '../handlers/error';\nimport { normalizeRoutePath } from '../utils';\nimport { generateOpenAPIDocument, convertCustomRoutesToOpenAPIPaths } from './openapi-utils';\nimport type { ServerRoute } from './routes';\nimport { SERVER_ROUTES, getEffectivePermission } from './routes';\nimport { getBuiltInRouteFGAConfig } from './routes/fga-manifest';\n\nexport * from './routes';\nexport { redactStreamChunk } from './redact';\nexport {\n MASTRA_AUTH_MODE_KEY,\n MASTRA_CLIENT_TYPE_HEADER,\n MASTRA_IS_STUDIO_KEY,\n MASTRA_STUDIO_CLIENT_TYPE,\n isReservedRequestContextKey,\n isStudioClientTypeHeader,\n} from '../constants';\nexport type { MastraAuthMode } from '../constants';\n\nexport { WorkflowRegistry, normalizeRoutePath } from '../utils';\n\nexport interface OpenAPIConfig {\n title?: string;\n version?: string;\n description?: string;\n path?: string;\n}\n\nexport interface BodyLimitOptions {\n maxSize: number;\n onError: (error: unknown) => unknown;\n}\n\nexport interface StreamOptions {\n /**\n * When true (default), redacts sensitive data from stream chunks\n * (system prompts, tool definitions, API keys) before sending to clients.\n *\n * Set to false to include full request data in stream chunks (useful for\n * debugging or internal services that need access to this data).\n *\n * @default true\n */\n redact?: boolean;\n}\n\n/**\n * MCP transport options for configuring MCP HTTP and SSE transports.\n */\nexport interface MCPOptions {\n /**\n * When true, runs in stateless mode without session management.\n * Ideal for serverless environments (Cloudflare Workers, Vercel Edge, etc.)\n * where you can't maintain persistent connections across requests.\n *\n * @default false\n */\n serverless?: boolean;\n /**\n * Custom session ID generator function.\n */\n sessionIdGenerator?: () => string;\n}\n\n/**\n * Query parameter values parsed from HTTP requests.\n * Supports both single values and arrays (for repeated query params like ?tag=a&tag=b).\n */\nexport type QueryParamValue = string | string[];\n\n/**\n * Parsed request parameters returned by getParams().\n */\nexport interface ParsedRequestParams {\n urlParams: Record<string, string>;\n queryParams: Record<string, QueryParamValue>;\n body: unknown;\n /**\n * Error that occurred while parsing the request body.\n * When set, the server should return a 400 Bad Request response.\n */\n bodyParseError?: {\n message: string;\n };\n}\n\nfunction isAbortSignalError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n const { code, name } = error as { code?: string; name?: string };\n return name === 'AbortError' || code === 'ABORT_ERR';\n}\n\nfunction isExpectedResponseCloseError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n const { code } = error as { code?: string };\n return (\n code === 'ECONNRESET' ||\n code === 'EPIPE' ||\n code === 'ERR_STREAM_DESTROYED' ||\n code === 'ERR_STREAM_WRITE_AFTER_END' ||\n code === 'ERR_STREAM_PREMATURE_CLOSE'\n );\n}\n\nfunction isResponseClosed(response: { writableEnded?: boolean; destroyed?: boolean }): boolean {\n return Boolean(response.writableEnded || response.destroyed);\n}\n\nfunction isProtectedFGARoute(route: Pick<ServerRoute, 'requiresAuth'>): boolean {\n return route.requiresAuth !== false;\n}\n\nfunction formatRoute(route: Pick<ServerRoute, 'method' | 'path'>): string {\n return `${route.method} ${route.path}`;\n}\n\nfunction getFGAProvider(mastra: any, requestContext?: RequestContext): IFGAProvider | undefined {\n // If we have request context, check auth mode to determine which FGA provider to use\n if (requestContext) {\n const authMode = requestContext.get(MASTRA_AUTH_MODE_KEY);\n if (authMode === 'studio') {\n const studioFga = mastra?.getStudio?.()?.fga;\n if (studioFga) return studioFga as IFGAProvider;\n }\n }\n // Fall back to server FGA\n return mastra?.getServer?.()?.fga as IFGAProvider | undefined;\n}\n\nfunction getFGARouteInfo(route: ServerRoute): FGARouteInfo {\n return {\n path: route.path,\n method: route.method,\n requiresAuth: route.requiresAuth,\n requiresPermission: route.requiresPermission,\n fga: route.fga,\n };\n}\n\nfunction getRoutePermissions(route: ServerRoute): MastraFGAPermissionInput[] {\n return [getEffectivePermission(route), route.fga?.permission]\n .flatMap(value => (Array.isArray(value) ? value : [value]))\n .filter((permission): permission is MastraFGAPermissionInput => Boolean(permission));\n}\n\nasync function resolveRouteFGAConfig(\n fgaProvider: IFGAProvider,\n route: ServerRoute,\n requestContext: RequestContext,\n params: Record<string, unknown>,\n): Promise<FGARouteConfig | null | undefined> {\n if (route.fga) {\n return route.fga;\n }\n\n const resolvedConfig = await fgaProvider.resolveRouteFGA?.({\n route: getFGARouteInfo(route),\n params,\n requestContext,\n });\n if (resolvedConfig) {\n return resolvedConfig;\n }\n\n return getBuiltInRouteFGAConfig(route);\n}\n\nfunction getSchemaTypeName(schema: z.ZodTypeAny): string | undefined {\n const schemaDef = (schema as any)?._def ?? (schema as any)?.def;\n return schemaDef?.typeName ?? schemaDef?.type;\n}\n\nfunction unwrapOptionalNullable(schema: z.ZodTypeAny): z.ZodTypeAny {\n let inner = schema;\n let typeName = getSchemaTypeName(inner);\n\n while (\n typeName === 'ZodOptional' ||\n typeName === 'ZodNullable' ||\n typeName === 'optional' ||\n typeName === 'nullable'\n ) {\n const innerDef = (inner as any)?._def ?? (inner as any)?.def;\n if (!innerDef?.innerType) {\n return inner;\n }\n inner = innerDef.innerType;\n typeName = getSchemaTypeName(inner);\n }\n\n return inner;\n}\n\nfunction parseComplexQueryParams(\n queryParamSchema: z.ZodTypeAny,\n params: Record<string, QueryParamValue>,\n): Record<string, QueryParamValue | unknown> {\n if (!(queryParamSchema instanceof z.ZodObject)) {\n return params;\n }\n\n const parsedParams: Record<string, QueryParamValue | unknown> = { ...params };\n const shape = queryParamSchema.shape as Record<string, z.ZodTypeAny>;\n\n for (const [key, fieldSchema] of Object.entries(shape)) {\n const rawValue = parsedParams[key];\n if (typeof rawValue !== 'string') {\n continue;\n }\n\n const unwrappedField = unwrapOptionalNullable(fieldSchema);\n const typeName = getSchemaTypeName(unwrappedField);\n const isComplex =\n typeName === 'ZodObject' ||\n typeName === 'ZodArray' ||\n typeName === 'ZodRecord' ||\n typeName === 'object' ||\n typeName === 'array' ||\n typeName === 'record';\n\n if (!isComplex) {\n continue;\n }\n\n try {\n parsedParams[key] = JSON.parse(rawValue);\n } catch {\n // Keep original string; schema validation will surface a clear error.\n }\n }\n\n return parsedParams;\n}\n\n/**\n * Normalizes query parameters from various HTTP framework formats to a consistent structure.\n * Handles both single string values and arrays (for repeated query params like ?tag=a&tag=b).\n * Reconstructs bracket-notation keys (e.g., `orderBy[field]=createdAt`) into JSON strings\n * so that z.preprocess JSON.parse can handle them.\n * Filters out non-string values that some frameworks may include.\n *\n * @param rawQuery - Raw query parameters from the HTTP framework (may contain strings, arrays, or nested objects)\n * @returns Normalized query parameters as Record<string, string | string[]>\n */\nexport function normalizeQueryParams(rawQuery: Record<string, unknown>): Record<string, QueryParamValue> {\n const queryParams: Record<string, QueryParamValue> = {};\n // Collect bracket-notation keys: e.g., \"orderBy[field]\" → parent \"orderBy\", child \"field\"\n const bracketGroups: Record<string, Record<string, string>> = {};\n\n for (const [key, value] of Object.entries(rawQuery)) {\n const bracketMatch = key.match(/^([^[]+)\\[([^\\]]+)\\]$/);\n if (bracketMatch) {\n const parent = bracketMatch[1]!;\n const child = bracketMatch[2]!;\n const strValue = Array.isArray(value)\n ? value.filter((v): v is string => typeof v === 'string')[0]\n : typeof value === 'string'\n ? value\n : undefined;\n if (strValue !== undefined) {\n if (!bracketGroups[parent]) {\n bracketGroups[parent] = {};\n }\n bracketGroups[parent]![child] = strValue;\n }\n } else if (typeof value === 'string') {\n queryParams[key] = value;\n } else if (Array.isArray(value)) {\n // Filter to only string values (some frameworks include nested objects)\n const stringValues = value.filter((v): v is string => typeof v === 'string');\n // Convert single-value arrays back to strings for compatibility\n queryParams[key] = stringValues.length === 1 ? stringValues[0]! : stringValues;\n }\n }\n\n // Merge bracket groups as JSON strings (only if the parent key wasn't already set directly)\n for (const [parent, children] of Object.entries(bracketGroups)) {\n if (!(parent in queryParams)) {\n queryParams[parent] = JSON.stringify(children);\n }\n }\n\n return queryParams;\n}\n\n/**\n * Abstract base class for server adapters that handle HTTP requests.\n *\n * This class extends `MastraServerBase` to inherit app storage functionality\n * and provides the framework for registering routes, middleware, and handling requests.\n *\n * Framework-specific adapters in @mastra/hono and @mastra/express extend this class\n * (both named `MastraServer` in their respective packages) and implement the abstract\n * methods for their specific framework.\n *\n * @template TApp - The type of the server app (e.g., Hono, Express Application)\n * @template TRequest - The type of the request object\n * @template TResponse - The type of the response object\n */\nexport abstract class MastraServer<TApp, TRequest, TResponse> extends MastraServerBase<TApp> {\n protected mastra: Mastra;\n protected bodyLimitOptions?: BodyLimitOptions;\n protected tools?: ToolsInput;\n protected prefix?: string;\n protected openapiPath?: string;\n protected taskStore?: InMemoryTaskStore;\n protected customRouteAuthConfig?: Map<string, boolean>;\n protected streamOptions: StreamOptions;\n protected httpLoggingConfig?: HttpLoggingConfig;\n protected customApiRoutes?: ApiRoute[];\n protected mcpOptions?: MCPOptions;\n private customRouteHandler:\n | ((request: Request, env?: { requestContext?: RequestContext }) => Promise<Response>)\n | null = null;\n\n constructor({\n app,\n mastra,\n bodyLimitOptions,\n tools,\n prefix = '/api',\n openapiPath = '',\n taskStore,\n customRouteAuthConfig,\n streamOptions,\n customApiRoutes,\n mcpOptions,\n }: {\n app: TApp;\n mastra: Mastra;\n bodyLimitOptions?: BodyLimitOptions;\n tools?: ToolsInput;\n prefix?: string;\n openapiPath?: string;\n taskStore?: InMemoryTaskStore;\n customRouteAuthConfig?: Map<string, boolean>;\n streamOptions?: StreamOptions;\n customApiRoutes?: ApiRoute[];\n /**\n * MCP transport options applied to all MCP HTTP and SSE routes.\n * Individual routes can override these via MCPHttpTransportResult.mcpOptions.\n */\n mcpOptions?: MCPOptions;\n }) {\n super({ app, name: 'MastraServer' });\n this.mastra = mastra;\n this.bodyLimitOptions = bodyLimitOptions;\n this.tools = tools;\n this.prefix = normalizeRoutePath(prefix);\n this.openapiPath = openapiPath;\n this.taskStore = taskStore;\n this.customRouteAuthConfig = customRouteAuthConfig;\n this.streamOptions = { redact: true, ...streamOptions };\n this.customApiRoutes = customApiRoutes;\n this.mcpOptions = mcpOptions;\n\n // Parse HTTP logging configuration\n const serverConfig = mastra.getServer();\n this.httpLoggingConfig = this.parseLoggingConfig(serverConfig?.build?.apiReqLogs);\n\n // Automatically register this adapter with Mastra so getServerApp() works\n mastra.setMastraServer(this);\n }\n\n /**\n * Parses the apiReqLogs configuration into a normalized HttpLoggingConfig.\n * @param config - The raw config value from server.build.apiReqLogs\n * @returns Normalized HttpLoggingConfig or undefined if disabled\n */\n private parseLoggingConfig(config?: boolean | HttpLoggingConfig): HttpLoggingConfig | undefined {\n if (config === true) {\n // Default configuration when enabled with just `true`\n return {\n enabled: true,\n level: 'info',\n redactHeaders: ['authorization', 'cookie'],\n };\n }\n if (typeof config === 'object' && config.enabled) {\n // Merge user config with defaults\n return {\n enabled: true,\n level: config.level || 'info',\n excludePaths: config.excludePaths,\n includeHeaders: config.includeHeaders,\n includeQueryParams: config.includeQueryParams,\n redactHeaders: [...new Set([...['authorization', 'cookie'], ...(config.redactHeaders || [])])],\n };\n }\n return undefined;\n }\n\n /**\n * Determines if a request to the given path should be logged.\n * @param path - The request path to check\n * @returns true if the request should be logged, false otherwise\n */\n protected shouldLogRequest(path: string): boolean {\n if (!this.httpLoggingConfig?.enabled) {\n return false;\n }\n\n // Uses segment-aware matching so '/health' excludes '/health' and '/health/deep' but not '/healthcheck'\n const excludePaths = this.httpLoggingConfig.excludePaths || [];\n return !excludePaths.some((excluded: string) => path === excluded || path.startsWith(excluded + '/'));\n }\n\n protected mergeRequestContext({\n paramsRequestContext,\n bodyRequestContext,\n }: {\n paramsRequestContext?: Record<string, any>;\n bodyRequestContext?: Record<string, any>;\n }): RequestContext {\n const requestContext = new RequestContext();\n if (bodyRequestContext) {\n for (const [key, value] of Object.entries(bodyRequestContext)) {\n if (isReservedRequestContextKey(key)) continue;\n requestContext.set(key, value);\n }\n }\n if (paramsRequestContext) {\n for (const [key, value] of Object.entries(paramsRequestContext)) {\n if (isReservedRequestContextKey(key)) continue;\n requestContext.set(key, value);\n }\n }\n return requestContext;\n }\n\n protected applyRequestMetadataToContext({\n requestContext,\n getHeader,\n }: {\n requestContext: RequestContext;\n getHeader: (name: string) => string | undefined;\n }): void {\n if (isStudioClientTypeHeader(getHeader(MASTRA_CLIENT_TYPE_HEADER))) {\n requestContext.set(MASTRA_IS_STUDIO_KEY, true);\n }\n }\n\n /**\n * Determines which auth configuration to use for the current request.\n *\n * Request routing logic:\n * 1. If `x-mastra-client-type: studio` header is present AND `studio.auth` is configured:\n * → Use studio auth (for internal team members accessing Studio UI)\n * 2. If studio header is present but `studio.auth` is NOT configured:\n * → No auth required (Studio development mode)\n * 3. Otherwise:\n * → Use server auth (for external customers calling API)\n *\n * Security note: The header is only for routing - auth validation happens\n * via session cookies/tokens. If someone spoofs the studio header but doesn't\n * have a valid studio session, they'll get a 401 (not fall back to server auth).\n */\n protected getEffectiveAuthConfig(\n getHeader: (name: string) => string | undefined,\n ): { authConfig: unknown; authMode: MastraAuthMode } | null {\n const isStudioRequest = isStudioClientTypeHeader(getHeader(MASTRA_CLIENT_TYPE_HEADER));\n const studioAuth = this.mastra.getStudio()?.auth;\n const serverAuth = this.mastra.getServer()?.auth;\n\n // Dual auth is opt-in: if studio.auth is configured, Studio requests use it exclusively\n if (isStudioRequest && studioAuth) {\n return { authConfig: studioAuth, authMode: 'studio' };\n }\n\n // Otherwise (non-studio request, OR studio request without studio.auth configured),\n // fall back to server.auth for backward compatibility\n if (serverAuth) {\n return { authConfig: serverAuth, authMode: 'server' };\n }\n\n // No auth configured\n return null;\n }\n\n /**\n * Gets the effective RBAC provider for the current request based on auth mode.\n */\n protected getEffectiveRBACProvider(requestContext: RequestContext) {\n const authMode = requestContext.get(MASTRA_AUTH_MODE_KEY) as MastraAuthMode | undefined;\n\n if (authMode === 'studio') {\n return this.mastra.getStudio()?.rbac ?? this.mastra.getServer()?.rbac;\n }\n\n return this.mastra.getServer()?.rbac;\n }\n\n /**\n * Gets the effective FGA provider for the current request based on auth mode.\n */\n protected getEffectiveFGAProvider(requestContext: RequestContext) {\n const authMode = requestContext.get(MASTRA_AUTH_MODE_KEY) as MastraAuthMode | undefined;\n\n if (authMode === 'studio') {\n return this.mastra.getStudio()?.fga ?? this.mastra.getServer()?.fga;\n }\n\n return this.mastra.getServer()?.fga;\n }\n\n /**\n * Check if the current request should be authenticated/authorized.\n * Returns null if auth passes, or an error response if it fails.\n *\n * This is a thin wrapper around coreAuthMiddleware that:\n * 1. Routes to the correct auth provider (studio vs server) based on request headers\n * 2. Handles route-level requiresAuth opt-out (not available in global middleware)\n * 3. Delegates all other auth logic to coreAuthMiddleware\n * 4. Translates the AuthResult into the {status, error} format adapters expect\n *\n * Security: When `x-mastra-client-type: studio` header is present and studio auth\n * is configured, we ONLY use studio auth. If authentication fails, we return 401\n * and redirect to login - we do NOT fall back to server auth. This prevents\n * external users from spoofing the studio header to access Studio UI.\n */\n protected async checkRouteAuth(\n route: ServerRoute,\n context: {\n path: string;\n method: string;\n getHeader: (name: string) => string | undefined;\n getQuery: (name: string) => string | undefined;\n requestContext: RequestContext;\n /** Raw Request object for cookie-based auth providers */\n request?: Request;\n /** Build framework-specific context for authorize() callback */\n buildAuthorizeContext?: () => unknown;\n },\n ): Promise<{ status: number; error: string; headers?: Record<string, string> } | null> {\n // Determine which auth config to use based on request type\n const effectiveAuth = this.getEffectiveAuthConfig(context.getHeader);\n\n // No auth config means no auth required\n if (!effectiveAuth) {\n return null;\n }\n\n const { authConfig, authMode } = effectiveAuth;\n\n // Store auth mode in request context for downstream RBAC/FGA provider selection\n context.requestContext.set(MASTRA_AUTH_MODE_KEY, authMode);\n\n // Check route-level requiresAuth flag first (explicit per-route setting)\n // This opt-out is route-specific and not available in the global middleware\n if (route.requiresAuth === false) {\n return null;\n }\n\n // Extract token from headers/query\n const authHeader = context.getHeader('authorization');\n let token: string | null = authHeader ? authHeader.replace('Bearer ', '') : null;\n if (!token) {\n token = context.getQuery('apiKey') || null;\n }\n\n const fallbackHeaders = new Headers();\n for (const headerName of ['authorization', 'cookie']) {\n const headerValue = context.getHeader(headerName);\n if (headerValue) {\n fallbackHeaders.set(headerName, headerValue);\n }\n }\n\n // Delegate to coreAuthMiddleware for all auth logic\n const result = await coreAuthMiddleware({\n path: context.path,\n method: context.method,\n getHeader: context.getHeader,\n mastra: this.mastra,\n authConfig: authConfig as any,\n customRouteAuthConfig: this.customRouteAuthConfig,\n requestContext: context.requestContext,\n rawRequest:\n context.request ??\n new Request(`http://localhost${context.path}`, { method: context.method, headers: fallbackHeaders }),\n token,\n buildAuthorizeContext: context.buildAuthorizeContext ?? (() => null),\n requiresAuth: route.requiresAuth,\n });\n\n if (result.action === 'next') {\n // Pass through any refresh headers (e.g. Set-Cookie from transparent session refresh)\n if (result.headers) {\n return { status: 200, error: '', headers: result.headers };\n }\n return null;\n }\n\n // Translate AuthResult error to the {status, error} format adapters expect\n const errorBody = result.body as { error?: string } | undefined;\n return { status: result.status, error: errorBody?.error ?? 'Access denied', headers: result.headers };\n }\n\n /**\n * Check if the user has the required permission for a route.\n *\n * Uses convention-based permission derivation:\n * 1. If route has explicit `requiresPermission`, use that\n * 2. Otherwise, derive permission from path/method (e.g., GET /agents → agents:read)\n * 3. Routes with `requiresAuth: false` skip permission checks\n *\n * When the route specifies an array of permissions, the user needs ANY ONE\n * of them (logical OR).\n *\n * @param route - The route being accessed\n * @param userPermissions - The user's permissions from the request context\n * @returns Error response if permission denied, null if allowed\n */\n /**\n * Check if the user has the required permission for a route.\n *\n * Uses convention-based permission derivation:\n * 1. If route has explicit `requiresPermission`, use that\n * 2. Otherwise, derive permission from path/method (e.g., GET /agents → agents:read)\n * 3. Routes with `requiresAuth: false` skip permission checks\n *\n * Permission checks use the RBAC provider that corresponds to the auth mode\n * (studio vs server) that was used for authentication.\n *\n * @param route - The route being accessed\n * @param userPermissions - The user's permissions from the request context\n * @param hasPermissionFn - Function to check if user permissions match required permission\n * @param requestContext - Request context to determine which RBAC provider to use\n * @returns Error response if permission denied, null if allowed\n */\n protected checkRoutePermission(\n route: ServerRoute,\n userPermissions: string[] | undefined,\n hasPermissionFn: (userPerms: string[], required: string) => boolean,\n requestContext?: RequestContext,\n ): { status: number; error: string; message: string } | null {\n // If RBAC is not configured, skip permission checks entirely\n // Auth-only mode = authenticated users get full access\n const rbacProvider = requestContext ? this.getEffectiveRBACProvider(requestContext) : this.mastra.getServer()?.rbac;\n\n if (!rbacProvider) {\n return null;\n }\n\n // Get the effective permission (explicit or derived)\n const requiredPermission = getEffectivePermission(route);\n\n // No permission required (public route or couldn't derive)\n if (!requiredPermission) {\n return null;\n }\n\n // Check if user has the required permission(s)\n // When an array is provided, user needs ANY ONE of them (logical OR)\n const permissions = Array.isArray(requiredPermission) ? requiredPermission : [requiredPermission];\n const hasAny = userPermissions && permissions.some(perm => hasPermissionFn(userPermissions, perm));\n\n if (!hasAny) {\n return {\n status: 403,\n error: 'Forbidden',\n message: `Missing required permission: ${permissions.join(' or ')}`,\n };\n }\n\n return null;\n }\n\n abstract stream(route: ServerRoute, response: TResponse, result: unknown): Promise<unknown>;\n abstract getParams(route: ServerRoute, request: TRequest): Promise<ParsedRequestParams>;\n abstract sendResponse(route: ServerRoute, response: TResponse, result: unknown): Promise<unknown>;\n abstract registerRoute(app: TApp, route: ServerRoute, { prefix }: { prefix?: string }): Promise<void>;\n abstract registerContextMiddleware(): void;\n abstract registerAuthMiddleware(): void;\n abstract registerHttpLoggingMiddleware(): void;\n\n async init() {\n this.registerContextMiddleware();\n this.registerAuthMiddleware();\n this.registerHttpLoggingMiddleware();\n await this.validateEELicense();\n await this.validateAgentBuilderLicense();\n await this.validateFGAPolicyCoverage();\n await this.registerCustomApiRoutes();\n await this.registerRoutes();\n }\n\n /**\n * Validate that EE features have a valid license in production.\n * Throws if RBAC or FGA is configured without a valid license outside dev/test environments.\n */\n async validateEELicense(): Promise<void> {\n const serverConfig = this.mastra.getServer();\n const studioConfig = this.mastra.getStudio?.();\n // Check both server and studio configs for EE features\n const configuredFeatures = [\n serverConfig?.rbac || studioConfig?.rbac ? 'RBAC' : null,\n serverConfig?.fga || studioConfig?.fga ? 'FGA' : null,\n ].filter((feature): feature is string => feature !== null);\n\n if (configuredFeatures.length === 0) return;\n\n try {\n const { isEEEnabled } = await import('@mastra/core/auth/ee');\n if (!isEEEnabled()) {\n const featureList = configuredFeatures.join(' and ');\n throw new Error(\n `[mastra/auth-ee] ${featureList} ${configuredFeatures.length === 1 ? 'is' : 'are'} configured but no valid EE license was found.\\n` +\n `${featureList} ${configuredFeatures.length === 1 ? 'requires' : 'require'} a Mastra Enterprise License for production use.\\n` +\n 'Set the MASTRA_EE_LICENSE environment variable with your license key.\\n' +\n 'Learn more: https://github.com/mastra-ai/mastra/blob/main/ee/LICENSE',\n );\n }\n } catch (err) {\n if (err instanceof Error && err.message.startsWith('[mastra/auth-ee]')) {\n throw err;\n }\n // @mastra/core/auth/ee module not available; EE authorization cannot function.\n throw new Error(\n `[mastra/auth-ee] ${configuredFeatures.join(' and ')} ${configuredFeatures.length === 1 ? 'is' : 'are'} configured but the EE module (@mastra/core/auth/ee) could not be loaded.\\n` +\n 'Ensure @mastra/core is updated to a version that includes EE support.',\n );\n }\n }\n\n /**\n * Validate that an Agent Builder configuration has a valid EE license.\n * Throws if the editor is configured with builder support but no valid EE license is available.\n */\n async validateAgentBuilderLicense(): Promise<void> {\n const editor = this.mastra.getEditor();\n if (!editor?.hasEnabledBuilderConfig?.()) return;\n\n try {\n const { isEEEnabled } = await import('@mastra/core/auth/ee');\n if (!isEEEnabled()) {\n throw new Error(\n '[mastra/auth-ee] Agent Builder is configured but no valid EE license was found.\\n' +\n 'Agent Builder requires a Mastra Enterprise License for production use.\\n' +\n 'Set the MASTRA_EE_LICENSE environment variable with your license key.\\n' +\n 'Learn more: https://github.com/mastra-ai/mastra/blob/main/ee/LICENSE',\n );\n }\n } catch (err) {\n if (err instanceof Error && err.message.startsWith('[mastra/auth-ee]')) {\n throw err;\n }\n // @mastra/core/auth/ee module not available — Agent Builder cannot function\n throw new Error(\n '[mastra/auth-ee] Agent Builder is configured but the EE module (@mastra/core/auth/ee) could not be loaded.\\n' +\n 'Ensure @mastra/core is updated to a version that includes EE support.',\n );\n }\n }\n\n /**\n * Validate route-level FGA policy coverage when an FGA provider opts into\n * startup checks.\n */\n async validateFGAPolicyCoverage(): Promise<void> {\n const serverConfig = this.mastra.getServer();\n const studioConfig = this.mastra.getStudio?.();\n // Check both server and studio FGA providers\n const fgaProvider = serverConfig?.fga ?? studioConfig?.fga;\n if (!fgaProvider) return;\n\n const customRoutes = (this.customApiRoutes ?? serverConfig?.apiRoutes ?? []).filter(\n route => !route._mastraInternal,\n );\n const routes = [...SERVER_ROUTES, ...customRoutes] as ServerRoute[];\n\n if (fgaProvider.validatePermissions) {\n const permissions = [...new Set(routes.flatMap(route => getRoutePermissions(route)))];\n await fgaProvider.validatePermissions(permissions);\n }\n\n const auditMode = fgaProvider.auditProtectedRoutes ?? (fgaProvider.requireForProtectedRoutes ? 'warn' : false);\n if (!auditMode || fgaProvider.resolveRouteFGA) return;\n\n const missingRoutes = routes.filter(\n route => isProtectedFGARoute(route) && !route.fga && !getBuiltInRouteFGAConfig(route),\n );\n\n if (missingRoutes.length === 0) return;\n\n const routeList = missingRoutes.map(route => formatRoute(route as ServerRoute));\n const message =\n `[mastra/auth-ee] FGA is configured but ${missingRoutes.length} protected route` +\n `${missingRoutes.length === 1 ? ' is' : 's are'} missing FGA metadata: ${routeList.join(', ')}`;\n\n if (auditMode === 'error') {\n throw new Error(message);\n }\n\n this.mastra.getLogger()?.warn(message, {\n routes: routeList,\n count: missingRoutes.length,\n });\n }\n\n /**\n * Override in adapters to register custom API routes defined via registerApiRoute().\n * Called by init() between registerAuthMiddleware() and registerRoutes().\n */\n async registerCustomApiRoutes(): Promise<void> {\n // Default no-op. Adapters override this to register custom routes\n // using their framework-specific middleware.\n }\n\n /**\n * Validates that no custom route path collides with the built-in route prefix.\n * Throws if any route path starts with the server's `apiPrefix`.\n */\n protected validateCustomRoutePaths(routes: ApiRoute[]): void {\n const prefix = this.prefix ?? '';\n if (!prefix) return;\n for (const route of routes) {\n if (route._mastraInternal) continue;\n if (route.path.startsWith(`${prefix}/`) || route.path === prefix) {\n throw new Error(\n `Custom API route \"${route.path}\" must not start with \"${prefix}\" — ` +\n `that path is reserved for built-in Mastra routes. ` +\n `Choose a different path (e.g. \"${route.path.replace(prefix, '/custom')}\").`,\n );\n }\n }\n }\n\n /**\n * Creates an internal Hono sub-app with all custom API routes registered.\n * Stores the handler on this instance for use by handleCustomRouteRequest().\n * Returns true if custom routes were found and registered.\n */\n protected async buildCustomRouteHandler(): Promise<boolean> {\n const routes = this.customApiRoutes ?? this.mastra.getServer()?.apiRoutes;\n if (!routes || routes.length === 0) return false;\n\n const NOT_FOUND_HEADER = 'x-mastra-custom-route-not-found';\n const mastra = this.mastra;\n\n const app = new Hono<{\n Bindings: { requestContext?: RequestContext };\n Variables: { mastra: Mastra; requestContext: RequestContext };\n }>();\n\n // Internal context middleware — sets variables that custom route handlers expect\n app.use('*', async (c, next) => {\n c.set('mastra', mastra);\n c.set('requestContext', c.env?.requestContext ?? new RequestContext());\n await next();\n });\n\n // Propagate the server's onError handler so errors from custom route handlers\n // are caught here (not swallowed by Hono's default plain-text 500).\n const serverOnError = this.mastra.getServer()?.onError;\n app.onError((err, c) => {\n if (serverOnError) {\n return serverOnError(err, c as unknown as Parameters<typeof serverOnError>[1]);\n }\n return c.json({ error: 'Internal Server Error' }, 500);\n });\n\n this.validateCustomRoutePaths(routes);\n\n // Register each custom route\n for (const route of routes) {\n const handler =\n 'handler' in route && route.handler\n ? route.handler\n : 'createHandler' in route\n ? await route.createHandler({ mastra })\n : undefined;\n if (!handler) continue;\n\n const middlewares: any[] = [];\n if (route.middleware) {\n middlewares.push(...(Array.isArray(route.middleware) ? route.middleware : [route.middleware]));\n }\n\n const allHandlers = [...middlewares, handler];\n if (route.method === 'ALL') {\n app.all(route.path, allHandlers[0]!, ...allHandlers.slice(1));\n } else {\n app.on(route.method, route.path, allHandlers[0]!, ...allHandlers.slice(1));\n }\n }\n\n // Mark unmatched requests so the adapter bridge can fall through to next()\n app.notFound(() => new Response(null, { status: 404, headers: { [NOT_FOUND_HEADER]: 'true' } }));\n\n this.customRouteHandler = async (request, env) => app.fetch(request, env);\n return true;\n }\n\n /**\n * Forwards a request to the internal custom route handler.\n * Returns the Response if a custom route matched, or null to fall through.\n */\n protected async handleCustomRouteRequest(\n url: string,\n method: string,\n headers: Record<string, string | string[] | undefined>,\n body: unknown,\n requestContext?: RequestContext,\n signal?: AbortSignal,\n ): Promise<Response | null> {\n if (!this.customRouteHandler) return null;\n\n const fetchHeaders = new Headers();\n for (const [key, value] of Object.entries(headers)) {\n if (typeof value === 'string') fetchHeaders.set(key, value);\n else if (Array.isArray(value))\n value.forEach(v => {\n fetchHeaders.append(key, v);\n });\n }\n\n const init: RequestInit = { method, headers: fetchHeaders, signal };\n if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(method) && body !== undefined) {\n if (body instanceof ArrayBuffer || body instanceof Uint8Array || body instanceof ReadableStream) {\n init.body = body as any;\n if (body instanceof ReadableStream) {\n (init as any).duplex = 'half';\n }\n } else {\n const contentType = (typeof headers['content-type'] === 'string' ? headers['content-type'] : '') || '';\n if (contentType.includes('application/json')) {\n init.body = JSON.stringify(body);\n } else if (typeof body === 'string') {\n init.body = body;\n }\n }\n }\n\n const request = new globalThis.Request(url, init);\n const response = await this.customRouteHandler(request, { requestContext });\n\n if (response.headers.get('x-mastra-custom-route-not-found') === 'true') return null;\n return response;\n }\n\n /**\n * Pipes a custom route Response to a Node.js ServerResponse (http.ServerResponse).\n * Works with Koa (ctx.res), Express (res), and Fastify (reply.raw).\n */\n protected async writeCustomRouteResponse(\n response: Response,\n nodeRes: {\n writeHead(status: number, headers: Record<string, string | string[]>): void;\n write(chunk: unknown): void;\n end(data?: string): void;\n writableEnded?: boolean;\n destroyed?: boolean;\n } & NodeJS.WritableStream,\n signal?: AbortSignal,\n ): Promise<void> {\n const headers: Record<string, string | string[]> = {};\n response.headers.forEach((value, key) => {\n if (key.toLowerCase() !== 'set-cookie') {\n headers[key] = value;\n }\n });\n const setCookies = response.headers.getSetCookie?.();\n if (setCookies && setCookies.length > 0) {\n headers['set-cookie'] = setCookies;\n }\n if (isResponseClosed(nodeRes)) {\n await response.body?.cancel();\n return;\n }\n nodeRes.writeHead(response.status, headers);\n\n if (response.body) {\n let responseBodyError: unknown;\n let responseBodyErrorAfterResponseClosed = false;\n try {\n const responseStream = Readable.fromWeb(response.body as any);\n // This listener must run before pipeline's cleanup so source errors are\n // not mistaken for client disconnects after pipeline destroys nodeRes.\n responseStream.once('error', error => {\n responseBodyError = error;\n responseBodyErrorAfterResponseClosed = isResponseClosed(nodeRes);\n });\n if (signal) {\n await pipeline(responseStream, nodeRes, { signal });\n } else {\n await pipeline(responseStream, nodeRes);\n }\n } catch (error) {\n const expectedSignalAbort =\n signal?.aborted && isAbortSignalError(error) && (!responseBodyError || responseBodyErrorAfterResponseClosed);\n const expectedResponseClose =\n (!responseBodyError || responseBodyErrorAfterResponseClosed) &&\n isResponseClosed(nodeRes) &&\n isExpectedResponseCloseError(error);\n // Request cancellation is expected unless the response body already reported its own error.\n if (!expectedSignalAbort && !expectedResponseClose) {\n throw error;\n }\n }\n } else {\n const text = await response.text();\n if (!isResponseClosed(nodeRes)) {\n nodeRes.end(text);\n }\n }\n }\n\n /**\n * Builds the OpenAPI spec object with servers field and custom route paths.\n */\n private buildOpenAPISpec(config: { title: string; version: string; description: string }, prefix?: string): any {\n const openApiSpec = generateOpenAPIDocument(SERVER_ROUTES, config);\n\n if (prefix) {\n openApiSpec.servers = [{ url: prefix }];\n }\n\n // Custom routes are served at root (/), not under the API prefix — add per-path servers override.\n const allCustomRoutes = this.customApiRoutes ?? this.mastra.getServer()?.apiRoutes;\n if (allCustomRoutes && allCustomRoutes.length > 0) {\n const customPaths = convertCustomRoutesToOpenAPIPaths(allCustomRoutes);\n if (prefix) {\n for (const pathKey of Object.keys(customPaths)) {\n if (!customPaths[pathKey].servers) {\n customPaths[pathKey].servers = [{ url: '/' }];\n }\n }\n }\n openApiSpec.paths = { ...openApiSpec.paths, ...customPaths };\n }\n\n return openApiSpec;\n }\n\n async registerOpenAPIRoute(app: TApp, config: OpenAPIConfig = {}, { prefix }: { prefix?: string }): Promise<void> {\n const {\n title = 'Mastra API',\n version = '1.0.0',\n description = 'Mastra Server API',\n path = '/openapi.json',\n } = config;\n\n const openApiSpec = this.buildOpenAPISpec({ title, version, description }, prefix);\n\n const openApiRoute: ServerRoute = {\n method: 'GET',\n path,\n responseType: 'json',\n handler: async () => openApiSpec,\n };\n\n await this.registerRoute(app, openApiRoute, { prefix });\n }\n\n async registerRoutes(): Promise<void> {\n // Register routes sequentially to maintain order - important for routers where\n // more specific routes (e.g., /versions/compare) must be registered before\n // parameterized routes (e.g., /versions/:versionId)\n for (const route of SERVER_ROUTES) {\n await this.registerRoute(this.app, route, { prefix: this.prefix });\n }\n\n if (this.openapiPath) {\n const specConfig = {\n title: 'Mastra API',\n version: '1.0.0',\n description: 'Mastra Server API',\n };\n\n await this.registerOpenAPIRoute(this.app, { ...specConfig, path: this.openapiPath }, { prefix: this.prefix });\n }\n }\n\n async parsePathParams(route: ServerRoute, params: Record<string, string>): Promise<Record<string, any>> {\n const pathParamSchema = route.pathParamSchema;\n if (!pathParamSchema) {\n return params;\n }\n\n return pathParamSchema.parseAsync(params) as Promise<Record<string, any>>;\n }\n\n async parseQueryParams(route: ServerRoute, params: Record<string, QueryParamValue>): Promise<Record<string, any>> {\n const queryParamSchema = route.queryParamSchema;\n if (!queryParamSchema) {\n return params;\n }\n\n const normalizedParams = parseComplexQueryParams(queryParamSchema as z.ZodTypeAny, params);\n return queryParamSchema.parseAsync(normalizedParams) as Promise<Record<string, any>>;\n }\n\n async parseBody(route: ServerRoute, body: unknown): Promise<unknown> {\n const bodySchema = route.bodySchema;\n if (!bodySchema) {\n return body;\n }\n\n return bodySchema.parseAsync(body);\n }\n\n private static readonly CONTEXT_LABELS: Record<ValidationErrorContext, string> = {\n query: 'query parameters',\n body: 'request body',\n path: 'path parameters',\n };\n\n protected resolveValidationError(\n route: ServerRoute,\n error: ZodError,\n context: ValidationErrorContext,\n ): ValidationErrorResponse {\n const hook = route.onValidationError ?? this.mastra.getServer()?.onValidationError;\n\n if (hook) {\n try {\n const result = hook(error, context);\n if (result) {\n return result;\n }\n } catch (hookError) {\n this.mastra.getLogger()?.error('Error in custom onValidationError hook', {\n error: hookError instanceof Error ? { message: hookError.message, stack: hookError.stack } : hookError,\n });\n }\n }\n\n return {\n status: 400,\n body: formatZodError(error, MastraServer.CONTEXT_LABELS[context]),\n };\n }\n}\n\n/**\n * Check FGA authorization for an HTTP route.\n * Returns null if authorized or FGA not configured, or an error object if denied.\n */\nexport async function checkRouteFGA(\n mastra: any,\n route: ServerRoute,\n requestContext: RequestContext,\n params: Record<string, unknown>,\n): Promise<{ status: number; error: string; message: string } | null> {\n // Use request context to determine which FGA provider to use (studio vs server)\n const fgaProvider = getFGAProvider(mastra, requestContext);\n if (!fgaProvider) return null;\n\n const fgaConfig = await resolveRouteFGAConfig(fgaProvider, route, requestContext, params);\n if (!fgaConfig) {\n if (fgaProvider.requireForProtectedRoutes && isProtectedFGARoute(route)) {\n return {\n status: 403,\n error: 'Forbidden',\n message: 'FGA authorization denied: route FGA metadata is required',\n };\n }\n return null;\n }\n\n const user = requestContext?.get('user');\n if (!user) {\n return {\n status: 403,\n error: 'Forbidden',\n message: 'FGA authorization denied: authenticated user is required',\n };\n }\n\n const resourceId =\n typeof fgaConfig.resourceId === 'function'\n ? fgaConfig.resourceId(params, { requestContext })\n : fgaConfig.resourceId || (fgaConfig.resourceIdParam ? (params[fgaConfig.resourceIdParam] as string) : undefined);\n if (!fgaConfig.resourceType || !resourceId) {\n return {\n status: 403,\n error: 'Forbidden',\n message: 'FGA authorization denied: route FGA metadata is incomplete',\n };\n }\n const effectivePermission = route.path ? getEffectivePermission(route) : null;\n const permission =\n fgaConfig.permission ||\n effectivePermission ||\n `${getFGAResourcePermissionSlug(fgaConfig.resourceType)}:${deriveFGAAction(route.method)}`;\n\n const authorized = await fgaProvider.check(user, {\n resource: { type: fgaConfig.resourceType, id: resourceId },\n permission,\n context: { resourceId, requestContext },\n });\n\n if (!authorized) {\n return {\n status: 403,\n error: 'Forbidden',\n message: `FGA authorization denied: cannot ${permission} on ${fgaConfig.resourceType}:${resourceId}`,\n };\n }\n\n return null;\n}\n\nfunction deriveFGAAction(method: string): string {\n switch (method.toUpperCase()) {\n case 'GET':\n return 'read';\n case 'DELETE':\n return 'delete';\n case 'POST':\n case 'PUT':\n case 'PATCH':\n return 'write';\n default:\n return 'read';\n }\n}\n\nfunction getFGAResourcePermissionSlug(resourceType: string): string {\n const resourcePermissionSlugs: Record<string, string> = {\n agent: 'agents',\n workflow: 'workflows',\n tool: 'tools',\n thread: 'memory',\n };\n\n return resourcePermissionSlugs[resourceType] ?? resourceType;\n}\n"]}
@@ -1,15 +1,18 @@
1
1
  import type { ToolsInput } from '@mastra/core/agent';
2
+ import type { IFGAProvider } from '@mastra/core/auth/ee';
2
3
  import type { Mastra } from '@mastra/core/mastra';
3
4
  import { RequestContext } from '@mastra/core/request-context';
4
5
  import { MastraServerBase } from '@mastra/core/server';
5
6
  import type { ApiRoute, HttpLoggingConfig, ValidationErrorContext, ValidationErrorResponse } from '@mastra/core/server';
6
7
  import type { ZodError } from 'zod/v4';
7
8
  import type { InMemoryTaskStore } from '../a2a/store.js';
9
+ import type { MastraAuthMode } from '../constants.js';
8
10
  export { isZodError, type ZodErrorLike } from '../handlers/error.js';
9
11
  import type { ServerRoute } from './routes/index.js';
10
12
  export * from './routes/index.js';
11
13
  export { redactStreamChunk } from './redact.js';
12
- export { MASTRA_CLIENT_TYPE_HEADER, MASTRA_IS_STUDIO_KEY, MASTRA_STUDIO_CLIENT_TYPE, isReservedRequestContextKey, isStudioClientTypeHeader, } from '../constants.js';
14
+ export { MASTRA_AUTH_MODE_KEY, MASTRA_CLIENT_TYPE_HEADER, MASTRA_IS_STUDIO_KEY, MASTRA_STUDIO_CLIENT_TYPE, isReservedRequestContextKey, isStudioClientTypeHeader, } from '../constants.js';
15
+ export type { MastraAuthMode } from '../constants.js';
13
16
  export { WorkflowRegistry, normalizeRoutePath } from '../utils/index.js';
14
17
  export interface OpenAPIConfig {
15
18
  title?: string;
@@ -145,14 +148,47 @@ export declare abstract class MastraServer<TApp, TRequest, TResponse> extends Ma
145
148
  requestContext: RequestContext;
146
149
  getHeader: (name: string) => string | undefined;
147
150
  }): void;
151
+ /**
152
+ * Determines which auth configuration to use for the current request.
153
+ *
154
+ * Request routing logic:
155
+ * 1. If `x-mastra-client-type: studio` header is present AND `studio.auth` is configured:
156
+ * → Use studio auth (for internal team members accessing Studio UI)
157
+ * 2. If studio header is present but `studio.auth` is NOT configured:
158
+ * → No auth required (Studio development mode)
159
+ * 3. Otherwise:
160
+ * → Use server auth (for external customers calling API)
161
+ *
162
+ * Security note: The header is only for routing - auth validation happens
163
+ * via session cookies/tokens. If someone spoofs the studio header but doesn't
164
+ * have a valid studio session, they'll get a 401 (not fall back to server auth).
165
+ */
166
+ protected getEffectiveAuthConfig(getHeader: (name: string) => string | undefined): {
167
+ authConfig: unknown;
168
+ authMode: MastraAuthMode;
169
+ } | null;
170
+ /**
171
+ * Gets the effective RBAC provider for the current request based on auth mode.
172
+ */
173
+ protected getEffectiveRBACProvider(requestContext: RequestContext): import("@mastra/core/auth/ee").IRBACProvider<any> | undefined;
174
+ /**
175
+ * Gets the effective FGA provider for the current request based on auth mode.
176
+ */
177
+ protected getEffectiveFGAProvider(requestContext: RequestContext): IFGAProvider<any> | undefined;
148
178
  /**
149
179
  * Check if the current request should be authenticated/authorized.
150
180
  * Returns null if auth passes, or an error response if it fails.
151
181
  *
152
182
  * This is a thin wrapper around coreAuthMiddleware that:
153
- * 1. Handles route-level requiresAuth opt-out (not available in global middleware)
154
- * 2. Delegates all other auth logic to coreAuthMiddleware
155
- * 3. Translates the AuthResult into the {status, error} format adapters expect
183
+ * 1. Routes to the correct auth provider (studio vs server) based on request headers
184
+ * 2. Handles route-level requiresAuth opt-out (not available in global middleware)
185
+ * 3. Delegates all other auth logic to coreAuthMiddleware
186
+ * 4. Translates the AuthResult into the {status, error} format adapters expect
187
+ *
188
+ * Security: When `x-mastra-client-type: studio` header is present and studio auth
189
+ * is configured, we ONLY use studio auth. If authentication fails, we return 401
190
+ * and redirect to login - we do NOT fall back to server auth. This prevents
191
+ * external users from spoofing the studio header to access Studio UI.
156
192
  */
157
193
  protected checkRouteAuth(route: ServerRoute, context: {
158
194
  path: string;
@@ -184,7 +220,24 @@ export declare abstract class MastraServer<TApp, TRequest, TResponse> extends Ma
184
220
  * @param userPermissions - The user's permissions from the request context
185
221
  * @returns Error response if permission denied, null if allowed
186
222
  */
187
- protected checkRoutePermission(route: ServerRoute, userPermissions: string[] | undefined, hasPermissionFn: (userPerms: string[], required: string) => boolean): {
223
+ /**
224
+ * Check if the user has the required permission for a route.
225
+ *
226
+ * Uses convention-based permission derivation:
227
+ * 1. If route has explicit `requiresPermission`, use that
228
+ * 2. Otherwise, derive permission from path/method (e.g., GET /agents → agents:read)
229
+ * 3. Routes with `requiresAuth: false` skip permission checks
230
+ *
231
+ * Permission checks use the RBAC provider that corresponds to the auth mode
232
+ * (studio vs server) that was used for authentication.
233
+ *
234
+ * @param route - The route being accessed
235
+ * @param userPermissions - The user's permissions from the request context
236
+ * @param hasPermissionFn - Function to check if user permissions match required permission
237
+ * @param requestContext - Request context to determine which RBAC provider to use
238
+ * @returns Error response if permission denied, null if allowed
239
+ */
240
+ protected checkRoutePermission(route: ServerRoute, userPermissions: string[] | undefined, hasPermissionFn: (userPerms: string[], required: string) => boolean, requestContext?: RequestContext): {
188
241
  status: number;
189
242
  error: string;
190
243
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/server-adapter/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/server-adapter/index.ts"],"names":[],"mappings":"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"}