@mastra/server 0.0.0-netlify-no-bundle-20251127120354 → 0.0.0-partial-response-backport-20251204204441

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 (296) hide show
  1. package/CHANGELOG.md +137 -656
  2. package/README.md +1 -1
  3. package/dist/{chunk-RCCWKKI3.js → chunk-2FBQWGK2.js} +31 -218
  4. package/dist/chunk-2FBQWGK2.js.map +1 -0
  5. package/dist/chunk-2S4IMB6E.cjs +130 -0
  6. package/dist/chunk-2S4IMB6E.cjs.map +1 -0
  7. package/dist/chunk-3SNGNFUJ.cjs +128 -0
  8. package/dist/chunk-3SNGNFUJ.cjs.map +1 -0
  9. package/dist/chunk-4QCXUEAT.js +25 -0
  10. package/dist/chunk-4QCXUEAT.js.map +1 -0
  11. package/dist/chunk-67GYDFSB.js +160 -0
  12. package/dist/chunk-67GYDFSB.js.map +1 -0
  13. package/dist/chunk-6ZR275MD.cjs +165 -0
  14. package/dist/chunk-6ZR275MD.cjs.map +1 -0
  15. package/dist/{chunk-64ITUOXI.cjs → chunk-7NADHFD2.cjs} +2 -2
  16. package/dist/{chunk-6QWQZI4Q.js.map → chunk-7NADHFD2.cjs.map} +1 -1
  17. package/dist/chunk-ABRFV4XP.js +83 -0
  18. package/dist/chunk-ABRFV4XP.js.map +1 -0
  19. package/dist/chunk-AHB4JCIQ.js +160 -0
  20. package/dist/chunk-AHB4JCIQ.js.map +1 -0
  21. package/dist/chunk-AW5BU3RQ.js +192 -0
  22. package/dist/chunk-AW5BU3RQ.js.map +1 -0
  23. package/dist/chunk-BATEJLED.js +124 -0
  24. package/dist/chunk-BATEJLED.js.map +1 -0
  25. package/dist/{chunk-UXGQZUYZ.js → chunk-CY4TP3FK.js} +3 -3
  26. package/dist/{chunk-UXGQZUYZ.js.map → chunk-CY4TP3FK.js.map} +1 -1
  27. package/dist/chunk-EP3JQDPD.cjs +131 -0
  28. package/dist/chunk-EP3JQDPD.cjs.map +1 -0
  29. package/dist/chunk-G4PUALCE.cjs +28 -0
  30. package/dist/chunk-G4PUALCE.cjs.map +1 -0
  31. package/dist/chunk-I3C4ODGV.cjs +335 -0
  32. package/dist/chunk-I3C4ODGV.cjs.map +1 -0
  33. package/dist/{chunk-UZ6CYAOG.cjs → chunk-JOBDMCQL.cjs} +21 -7
  34. package/dist/chunk-JOBDMCQL.cjs.map +1 -0
  35. package/dist/chunk-KPDPKARA.cjs +733 -0
  36. package/dist/chunk-KPDPKARA.cjs.map +1 -0
  37. package/dist/chunk-LLUOPR3J.js +323 -0
  38. package/dist/chunk-LLUOPR3J.js.map +1 -0
  39. package/dist/{chunk-6QWQZI4Q.js → chunk-MMROOK5J.js} +2 -2
  40. package/dist/chunk-MMROOK5J.js.map +1 -0
  41. package/dist/chunk-MYR4PVGN.js +123 -0
  42. package/dist/chunk-MYR4PVGN.js.map +1 -0
  43. package/dist/chunk-NT5XW5PI.cjs +596 -0
  44. package/dist/chunk-NT5XW5PI.cjs.map +1 -0
  45. package/dist/chunk-O5Q5JZMC.cjs +19565 -0
  46. package/dist/chunk-O5Q5JZMC.cjs.map +1 -0
  47. package/dist/chunk-PBXWFGEH.js +579 -0
  48. package/dist/chunk-PBXWFGEH.js.map +1 -0
  49. package/dist/{chunk-PDVJ2TTM.cjs → chunk-Q4WS5AH4.cjs} +31 -224
  50. package/dist/chunk-Q4WS5AH4.cjs.map +1 -0
  51. package/dist/chunk-QQXMIP6C.js +122 -0
  52. package/dist/chunk-QQXMIP6C.js.map +1 -0
  53. package/dist/{chunk-V272B7RM.cjs → chunk-QU6N55W6.cjs} +12 -11
  54. package/dist/chunk-QU6N55W6.cjs.map +1 -0
  55. package/dist/{chunk-V5WWQN7P.cjs → chunk-RE4RPXT2.cjs} +4 -4
  56. package/dist/{chunk-V5WWQN7P.cjs.map → chunk-RE4RPXT2.cjs.map} +1 -1
  57. package/dist/{chunk-YP34EWWK.js → chunk-SHWNNZBL.js} +10 -9
  58. package/dist/chunk-SHWNNZBL.js.map +1 -0
  59. package/dist/chunk-SPRRK3P7.cjs +200 -0
  60. package/dist/chunk-SPRRK3P7.cjs.map +1 -0
  61. package/dist/chunk-TM6RSSEG.js +711 -0
  62. package/dist/chunk-TM6RSSEG.js.map +1 -0
  63. package/dist/{chunk-ER3QM7DD.js → chunk-TOCYBDP2.js} +4 -4
  64. package/dist/{chunk-ER3QM7DD.js.map → chunk-TOCYBDP2.js.map} +1 -1
  65. package/dist/chunk-TRGAMKHX.cjs +167 -0
  66. package/dist/chunk-TRGAMKHX.cjs.map +1 -0
  67. package/dist/{chunk-G7BPNX2V.js → chunk-VN33BALN.js} +21 -7
  68. package/dist/chunk-VN33BALN.js.map +1 -0
  69. package/dist/chunk-VYX6MBSJ.js +909 -0
  70. package/dist/chunk-VYX6MBSJ.js.map +1 -0
  71. package/dist/chunk-VZX6AWAA.cjs +938 -0
  72. package/dist/chunk-VZX6AWAA.cjs.map +1 -0
  73. package/dist/{chunk-XQPJ63ZD.cjs → chunk-X6C7BUWN.cjs} +4 -4
  74. package/dist/{chunk-XQPJ63ZD.cjs.map → chunk-X6C7BUWN.cjs.map} +1 -1
  75. package/dist/chunk-XN74I6VW.cjs +88 -0
  76. package/dist/chunk-XN74I6VW.cjs.map +1 -0
  77. package/dist/chunk-XPQZ5C3T.js +19529 -0
  78. package/dist/chunk-XPQZ5C3T.js.map +1 -0
  79. package/dist/server/handlers/a2a.cjs +7 -15
  80. package/dist/server/handlers/a2a.d.ts +10 -492
  81. package/dist/server/handlers/a2a.d.ts.map +1 -1
  82. package/dist/server/handlers/a2a.js +1 -1
  83. package/dist/server/handlers/agent-builder.cjs +31 -43
  84. package/dist/server/handlers/agent-builder.d.ts +84 -598
  85. package/dist/server/handlers/agent-builder.d.ts.map +1 -1
  86. package/dist/server/handlers/agent-builder.js +1 -1
  87. package/dist/server/handlers/agents.cjs +41 -49
  88. package/dist/server/handlers/agents.d.ts +149 -3275
  89. package/dist/server/handlers/agents.d.ts.map +1 -1
  90. package/dist/server/handlers/agents.js +1 -1
  91. package/dist/server/handlers/error.cjs +2 -2
  92. package/dist/server/handlers/error.js +1 -1
  93. package/dist/server/handlers/legacyWorkflows.cjs +48 -0
  94. package/dist/server/handlers/legacyWorkflows.cjs.map +1 -0
  95. package/dist/server/handlers/legacyWorkflows.d.ts +59 -0
  96. package/dist/server/handlers/legacyWorkflows.d.ts.map +1 -0
  97. package/dist/server/handlers/legacyWorkflows.js +3 -0
  98. package/dist/server/handlers/legacyWorkflows.js.map +1 -0
  99. package/dist/server/handlers/logs.cjs +7 -7
  100. package/dist/server/handlers/logs.d.ts +27 -135
  101. package/dist/server/handlers/logs.d.ts.map +1 -1
  102. package/dist/server/handlers/logs.js +1 -1
  103. package/dist/server/handlers/memory.cjs +31 -63
  104. package/dist/server/handlers/memory.d.ts +103 -934
  105. package/dist/server/handlers/memory.d.ts.map +1 -1
  106. package/dist/server/handlers/memory.js +1 -1
  107. package/dist/server/handlers/observability.cjs +8 -24
  108. package/dist/server/handlers/observability.d.ts +21 -128
  109. package/dist/server/handlers/observability.d.ts.map +1 -1
  110. package/dist/server/handlers/observability.js +1 -1
  111. package/dist/server/handlers/scores.cjs +13 -13
  112. package/dist/server/handlers/scores.d.ts +141 -110
  113. package/dist/server/handlers/scores.d.ts.map +1 -1
  114. package/dist/server/handlers/scores.js +1 -1
  115. package/dist/server/handlers/telemetry.cjs +20 -0
  116. package/dist/server/handlers/telemetry.cjs.map +1 -0
  117. package/dist/server/handlers/telemetry.d.ts +33 -0
  118. package/dist/server/handlers/telemetry.d.ts.map +1 -0
  119. package/dist/server/handlers/telemetry.js +3 -0
  120. package/dist/server/handlers/telemetry.js.map +1 -0
  121. package/dist/server/handlers/tools.cjs +11 -11
  122. package/dist/server/handlers/tools.d.ts +23 -69
  123. package/dist/server/handlers/tools.d.ts.map +1 -1
  124. package/dist/server/handlers/tools.js +1 -1
  125. package/dist/server/handlers/utils.cjs +3 -11
  126. package/dist/server/handlers/utils.d.ts +0 -5
  127. package/dist/server/handlers/utils.d.ts.map +1 -1
  128. package/dist/server/handlers/utils.js +1 -1
  129. package/dist/server/handlers/vector.cjs +7 -31
  130. package/dist/server/handlers/vector.d.ts +9 -93
  131. package/dist/server/handlers/vector.d.ts.map +1 -1
  132. package/dist/server/handlers/vector.js +1 -1
  133. package/dist/server/handlers/voice.cjs +9 -21
  134. package/dist/server/handlers/voice.d.ts +40 -81
  135. package/dist/server/handlers/voice.d.ts.map +1 -1
  136. package/dist/server/handlers/voice.js +1 -1
  137. package/dist/server/handlers/workflows.cjs +59 -51
  138. package/dist/server/handlers/workflows.d.ts +140 -915
  139. package/dist/server/handlers/workflows.d.ts.map +1 -1
  140. package/dist/server/handlers/workflows.js +1 -1
  141. package/dist/server/handlers.cjs +36 -26
  142. package/dist/server/handlers.d.ts +2 -0
  143. package/dist/server/handlers.d.ts.map +1 -1
  144. package/dist/server/handlers.js +13 -11
  145. package/dist/server/http-exception.d.ts +5 -0
  146. package/dist/server/http-exception.d.ts.map +1 -1
  147. package/dist/server/utils.d.ts +3 -4
  148. package/dist/server/utils.d.ts.map +1 -1
  149. package/dist/{token-ZOD6YIQ3.cjs → token-375W3LEI.cjs} +8 -7
  150. package/dist/{token-VFONFWVS.cjs.map → token-375W3LEI.cjs.map} +1 -1
  151. package/dist/{token-JGA3ZWAN.js → token-C3IMNCC4.js} +6 -5
  152. package/dist/{token-GVZ7HRD7.js.map → token-C3IMNCC4.js.map} +1 -1
  153. package/dist/token-util-CV3RRG6K.cjs +9 -0
  154. package/dist/{token-util-BLJZJDBZ.cjs.map → token-util-CV3RRG6K.cjs.map} +1 -1
  155. package/dist/token-util-E5QO2RCL.js +7 -0
  156. package/dist/{token-util-7R2ZFIXO.js.map → token-util-E5QO2RCL.js.map} +1 -1
  157. package/package.json +15 -26
  158. package/dist/chunk-2NW6POYK.cjs +0 -89
  159. package/dist/chunk-2NW6POYK.cjs.map +0 -1
  160. package/dist/chunk-4JMHKKV3.cjs +0 -201
  161. package/dist/chunk-4JMHKKV3.cjs.map +0 -1
  162. package/dist/chunk-4O2QGUW3.js +0 -354
  163. package/dist/chunk-4O2QGUW3.js.map +0 -1
  164. package/dist/chunk-4W2SM6CG.js +0 -294
  165. package/dist/chunk-4W2SM6CG.js.map +0 -1
  166. package/dist/chunk-5W4RPVTK.cjs +0 -49
  167. package/dist/chunk-5W4RPVTK.cjs.map +0 -1
  168. package/dist/chunk-64ITUOXI.cjs.map +0 -1
  169. package/dist/chunk-6GHJDY7R.js +0 -23157
  170. package/dist/chunk-6GHJDY7R.js.map +0 -1
  171. package/dist/chunk-6KNI7VIX.js +0 -1021
  172. package/dist/chunk-6KNI7VIX.js.map +0 -1
  173. package/dist/chunk-A6MQQTHN.js +0 -310
  174. package/dist/chunk-A6MQQTHN.js.map +0 -1
  175. package/dist/chunk-AUQBEMDP.cjs +0 -322
  176. package/dist/chunk-AUQBEMDP.cjs.map +0 -1
  177. package/dist/chunk-CBDUTSTI.js +0 -192
  178. package/dist/chunk-CBDUTSTI.js.map +0 -1
  179. package/dist/chunk-FPCGLPLJ.cjs +0 -297
  180. package/dist/chunk-FPCGLPLJ.cjs.map +0 -1
  181. package/dist/chunk-G7BPNX2V.js.map +0 -1
  182. package/dist/chunk-IMK7366C.cjs +0 -346
  183. package/dist/chunk-IMK7366C.cjs.map +0 -1
  184. package/dist/chunk-LGG3N3AV.js +0 -116
  185. package/dist/chunk-LGG3N3AV.js.map +0 -1
  186. package/dist/chunk-LIDPFFPK.cjs +0 -23199
  187. package/dist/chunk-LIDPFFPK.cjs.map +0 -1
  188. package/dist/chunk-LZDCXQMX.js +0 -164
  189. package/dist/chunk-LZDCXQMX.js.map +0 -1
  190. package/dist/chunk-MH3A7RDQ.cjs +0 -1064
  191. package/dist/chunk-MH3A7RDQ.cjs.map +0 -1
  192. package/dist/chunk-MWQQRVQC.cjs +0 -259
  193. package/dist/chunk-MWQQRVQC.cjs.map +0 -1
  194. package/dist/chunk-PDVJ2TTM.cjs.map +0 -1
  195. package/dist/chunk-PKRHEXX7.js +0 -74
  196. package/dist/chunk-PKRHEXX7.js.map +0 -1
  197. package/dist/chunk-QDOIM3G5.cjs +0 -916
  198. package/dist/chunk-QDOIM3G5.cjs.map +0 -1
  199. package/dist/chunk-QVHQZUGJ.cjs +0 -368
  200. package/dist/chunk-QVHQZUGJ.cjs.map +0 -1
  201. package/dist/chunk-R4M3BSUG.js +0 -226
  202. package/dist/chunk-R4M3BSUG.js.map +0 -1
  203. package/dist/chunk-R6ZTXNN2.cjs +0 -797
  204. package/dist/chunk-R6ZTXNN2.cjs.map +0 -1
  205. package/dist/chunk-RCCWKKI3.js.map +0 -1
  206. package/dist/chunk-RIYA7ZCE.js +0 -887
  207. package/dist/chunk-RIYA7ZCE.js.map +0 -1
  208. package/dist/chunk-S6DFGBDD.cjs +0 -211
  209. package/dist/chunk-S6DFGBDD.cjs.map +0 -1
  210. package/dist/chunk-SAQSK4AG.cjs +0 -167
  211. package/dist/chunk-SAQSK4AG.cjs.map +0 -1
  212. package/dist/chunk-UCRV7PD3.js +0 -773
  213. package/dist/chunk-UCRV7PD3.js.map +0 -1
  214. package/dist/chunk-UZ6CYAOG.cjs.map +0 -1
  215. package/dist/chunk-V272B7RM.cjs.map +0 -1
  216. package/dist/chunk-XWGAT2DA.js +0 -44
  217. package/dist/chunk-XWGAT2DA.js.map +0 -1
  218. package/dist/chunk-YLQHE2S5.js +0 -204
  219. package/dist/chunk-YLQHE2S5.js.map +0 -1
  220. package/dist/chunk-YP34EWWK.js.map +0 -1
  221. package/dist/chunk-Z7R7CFVF.cjs +0 -125
  222. package/dist/chunk-Z7R7CFVF.cjs.map +0 -1
  223. package/dist/chunk-ZPZSAJAR.js +0 -328
  224. package/dist/chunk-ZPZSAJAR.js.map +0 -1
  225. package/dist/server/handlers/test-utils.cjs +0 -15
  226. package/dist/server/handlers/test-utils.cjs.map +0 -1
  227. package/dist/server/handlers/test-utils.d.ts +0 -6
  228. package/dist/server/handlers/test-utils.d.ts.map +0 -1
  229. package/dist/server/handlers/test-utils.js +0 -13
  230. package/dist/server/handlers/test-utils.js.map +0 -1
  231. package/dist/server/schemas/a2a.d.ts +0 -786
  232. package/dist/server/schemas/a2a.d.ts.map +0 -1
  233. package/dist/server/schemas/agent-builder.d.ts +0 -195
  234. package/dist/server/schemas/agent-builder.d.ts.map +0 -1
  235. package/dist/server/schemas/agents.d.ts +0 -1375
  236. package/dist/server/schemas/agents.d.ts.map +0 -1
  237. package/dist/server/schemas/common.d.ts +0 -165
  238. package/dist/server/schemas/common.d.ts.map +0 -1
  239. package/dist/server/schemas/logs.d.ts +0 -124
  240. package/dist/server/schemas/logs.d.ts.map +0 -1
  241. package/dist/server/schemas/memory.d.ts +0 -998
  242. package/dist/server/schemas/memory.d.ts.map +0 -1
  243. package/dist/server/schemas/observability.d.ts +0 -402
  244. package/dist/server/schemas/observability.d.ts.map +0 -1
  245. package/dist/server/schemas/scores.d.ts +0 -259
  246. package/dist/server/schemas/scores.d.ts.map +0 -1
  247. package/dist/server/schemas/vectors.d.ts +0 -107
  248. package/dist/server/schemas/vectors.d.ts.map +0 -1
  249. package/dist/server/schemas/workflows.d.ts +0 -608
  250. package/dist/server/schemas/workflows.d.ts.map +0 -1
  251. package/dist/server/server-adapter/index.cjs +0 -330
  252. package/dist/server/server-adapter/index.cjs.map +0 -1
  253. package/dist/server/server-adapter/index.d.ts +0 -52
  254. package/dist/server/server-adapter/index.d.ts.map +0 -1
  255. package/dist/server/server-adapter/index.js +0 -316
  256. package/dist/server/server-adapter/index.js.map +0 -1
  257. package/dist/server/server-adapter/openapi-utils.d.ts +0 -59
  258. package/dist/server/server-adapter/openapi-utils.d.ts.map +0 -1
  259. package/dist/server/server-adapter/routes/a2a.d.ts +0 -3
  260. package/dist/server/server-adapter/routes/a2a.d.ts.map +0 -1
  261. package/dist/server/server-adapter/routes/agent-builder.d.ts +0 -3
  262. package/dist/server/server-adapter/routes/agent-builder.d.ts.map +0 -1
  263. package/dist/server/server-adapter/routes/agents.d.ts +0 -3
  264. package/dist/server/server-adapter/routes/agents.d.ts.map +0 -1
  265. package/dist/server/server-adapter/routes/index.d.ts +0 -41
  266. package/dist/server/server-adapter/routes/index.d.ts.map +0 -1
  267. package/dist/server/server-adapter/routes/legacy.d.ts +0 -7
  268. package/dist/server/server-adapter/routes/legacy.d.ts.map +0 -1
  269. package/dist/server/server-adapter/routes/logs.d.ts +0 -3
  270. package/dist/server/server-adapter/routes/logs.d.ts.map +0 -1
  271. package/dist/server/server-adapter/routes/memory.d.ts +0 -3
  272. package/dist/server/server-adapter/routes/memory.d.ts.map +0 -1
  273. package/dist/server/server-adapter/routes/observability.d.ts +0 -3
  274. package/dist/server/server-adapter/routes/observability.d.ts.map +0 -1
  275. package/dist/server/server-adapter/routes/route-builder.d.ts +0 -52
  276. package/dist/server/server-adapter/routes/route-builder.d.ts.map +0 -1
  277. package/dist/server/server-adapter/routes/scorers.d.ts +0 -3
  278. package/dist/server/server-adapter/routes/scorers.d.ts.map +0 -1
  279. package/dist/server/server-adapter/routes/stream-types.d.ts +0 -10
  280. package/dist/server/server-adapter/routes/stream-types.d.ts.map +0 -1
  281. package/dist/server/server-adapter/routes/tools.d.ts +0 -3
  282. package/dist/server/server-adapter/routes/tools.d.ts.map +0 -1
  283. package/dist/server/server-adapter/routes/vectors.d.ts +0 -3
  284. package/dist/server/server-adapter/routes/vectors.d.ts.map +0 -1
  285. package/dist/server/server-adapter/routes/workflows.d.ts +0 -3
  286. package/dist/server/server-adapter/routes/workflows.d.ts.map +0 -1
  287. package/dist/token-GVZ7HRD7.js +0 -62
  288. package/dist/token-JGA3ZWAN.js.map +0 -1
  289. package/dist/token-VFONFWVS.cjs +0 -64
  290. package/dist/token-ZOD6YIQ3.cjs.map +0 -1
  291. package/dist/token-util-7R2ZFIXO.js +0 -7
  292. package/dist/token-util-BLJZJDBZ.cjs +0 -9
  293. package/dist/token-util-VGZUWSNR.cjs +0 -9
  294. package/dist/token-util-VGZUWSNR.cjs.map +0 -1
  295. package/dist/token-util-VKTPZLSE.js +0 -7
  296. package/dist/token-util-VKTPZLSE.js.map +0 -1
@@ -0,0 +1,128 @@
1
+ 'use strict';
2
+
3
+ var chunkG4PUALCE_cjs = require('./chunk-G4PUALCE.cjs');
4
+ var chunkRE4RPXT2_cjs = require('./chunk-RE4RPXT2.cjs');
5
+ var chunk7NADHFD2_cjs = require('./chunk-7NADHFD2.cjs');
6
+ var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
7
+ var stream = require('stream');
8
+ var error = require('@mastra/core/error');
9
+
10
+ // src/server/handlers/voice.ts
11
+ var voice_exports = {};
12
+ chunkO7I5CWRX_cjs.__export(voice_exports, {
13
+ generateSpeechHandler: () => generateSpeechHandler,
14
+ getListenerHandler: () => getListenerHandler,
15
+ getSpeakersHandler: () => getSpeakersHandler,
16
+ transcribeSpeechHandler: () => transcribeSpeechHandler
17
+ });
18
+ async function getSpeakersHandler({ mastra, agentId, runtimeContext }) {
19
+ try {
20
+ if (!agentId) {
21
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent ID is required" });
22
+ }
23
+ const agent = mastra.getAgent(agentId);
24
+ if (!agent) {
25
+ throw new chunk7NADHFD2_cjs.HTTPException(404, { message: "Agent not found" });
26
+ }
27
+ const voice = await agent.getVoice({ runtimeContext });
28
+ if (!voice) {
29
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent does not have voice capabilities" });
30
+ }
31
+ const speakers = await voice.getSpeakers();
32
+ return speakers;
33
+ } catch (error) {
34
+ return chunkRE4RPXT2_cjs.handleError(error, "Error getting speakers");
35
+ }
36
+ }
37
+ async function generateSpeechHandler({
38
+ mastra,
39
+ agentId,
40
+ body,
41
+ runtimeContext
42
+ }) {
43
+ try {
44
+ if (!agentId) {
45
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent ID is required" });
46
+ }
47
+ chunkG4PUALCE_cjs.validateBody({
48
+ text: body?.text
49
+ });
50
+ const agent = mastra.getAgent(agentId);
51
+ if (!agent) {
52
+ throw new chunk7NADHFD2_cjs.HTTPException(404, { message: "Agent not found" });
53
+ }
54
+ const voice = await agent.getVoice({ runtimeContext });
55
+ if (!voice) {
56
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent does not have voice capabilities" });
57
+ }
58
+ const audioStream = await Promise.resolve().then(() => voice.speak(body.text, { speaker: body.speakerId })).catch((err) => {
59
+ if (err instanceof error.MastraError) {
60
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: err.message });
61
+ }
62
+ throw err;
63
+ });
64
+ if (!audioStream) {
65
+ throw new chunk7NADHFD2_cjs.HTTPException(500, { message: "Failed to generate speech" });
66
+ }
67
+ return audioStream;
68
+ } catch (error) {
69
+ return chunkRE4RPXT2_cjs.handleError(error, "Error generating speech");
70
+ }
71
+ }
72
+ async function transcribeSpeechHandler({
73
+ mastra,
74
+ agentId,
75
+ body,
76
+ runtimeContext
77
+ }) {
78
+ try {
79
+ if (!agentId) {
80
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent ID is required" });
81
+ }
82
+ if (!body?.audioData) {
83
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Audio data is required" });
84
+ }
85
+ const agent = mastra.getAgent(agentId);
86
+ if (!agent) {
87
+ throw new chunk7NADHFD2_cjs.HTTPException(404, { message: "Agent not found" });
88
+ }
89
+ const voice = await agent.getVoice({ runtimeContext });
90
+ if (!voice) {
91
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent does not have voice capabilities" });
92
+ }
93
+ const audioStream = new stream.Readable();
94
+ audioStream.push(body.audioData);
95
+ audioStream.push(null);
96
+ const text = await voice.listen(audioStream, body.options);
97
+ return { text };
98
+ } catch (error) {
99
+ return chunkRE4RPXT2_cjs.handleError(error, "Error transcribing speech");
100
+ }
101
+ }
102
+ async function getListenerHandler({ mastra, agentId, runtimeContext }) {
103
+ try {
104
+ if (!agentId) {
105
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent ID is required" });
106
+ }
107
+ const agent = mastra.getAgent(agentId);
108
+ if (!agent) {
109
+ throw new chunk7NADHFD2_cjs.HTTPException(404, { message: "Agent not found" });
110
+ }
111
+ const voice = await agent.getVoice({ runtimeContext });
112
+ if (!voice) {
113
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Agent does not have voice capabilities" });
114
+ }
115
+ const listeners = await voice.getListener();
116
+ return listeners;
117
+ } catch (error) {
118
+ return chunkRE4RPXT2_cjs.handleError(error, "Error getting listeners");
119
+ }
120
+ }
121
+
122
+ exports.generateSpeechHandler = generateSpeechHandler;
123
+ exports.getListenerHandler = getListenerHandler;
124
+ exports.getSpeakersHandler = getSpeakersHandler;
125
+ exports.transcribeSpeechHandler = transcribeSpeechHandler;
126
+ exports.voice_exports = voice_exports;
127
+ //# sourceMappingURL=chunk-3SNGNFUJ.cjs.map
128
+ //# sourceMappingURL=chunk-3SNGNFUJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/voice.ts"],"names":["__export","HTTPException","handleError","validateBody","MastraError","Readable"],"mappings":"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","file":"chunk-3SNGNFUJ.cjs","sourcesContent":["import { Readable } from 'stream';\nimport type { Agent } from '@mastra/core/agent';\nimport { MastraError } from '@mastra/core/error';\nimport type { RuntimeContext } from '@mastra/core/runtime-context';\nimport { HTTPException } from '../http-exception';\nimport type { Context } from '../types';\n\nimport { handleError } from './error';\nimport { validateBody } from './utils';\n\ninterface VoiceContext extends Context {\n agentId?: string;\n runtimeContext?: RuntimeContext;\n}\n\n/**\n * Get available speakers for an agent\n */\nexport async function getSpeakersHandler({ mastra, agentId, runtimeContext }: VoiceContext) {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n\n const agent = mastra.getAgent(agentId);\n\n if (!agent) {\n throw new HTTPException(404, { message: 'Agent not found' });\n }\n\n const voice = await agent.getVoice({ runtimeContext });\n\n if (!voice) {\n throw new HTTPException(400, { message: 'Agent does not have voice capabilities' });\n }\n\n const speakers = await voice.getSpeakers();\n return speakers;\n } catch (error) {\n return handleError(error, 'Error getting speakers');\n }\n}\n\n/**\n * Generate speech from text\n */\nexport async function generateSpeechHandler({\n mastra,\n agentId,\n body,\n runtimeContext,\n}: VoiceContext & {\n body?: {\n text?: string;\n speakerId?: string;\n };\n}) {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n\n validateBody({\n text: body?.text,\n });\n\n const agent = mastra.getAgent(agentId);\n\n if (!agent) {\n throw new HTTPException(404, { message: 'Agent not found' });\n }\n\n const voice = await agent.getVoice({ runtimeContext });\n\n if (!voice) {\n throw new HTTPException(400, { message: 'Agent does not have voice capabilities' });\n }\n\n const audioStream = await Promise.resolve()\n .then(() => voice.speak(body!.text!, { speaker: body!.speakerId! }))\n .catch(err => {\n if (err instanceof MastraError) {\n throw new HTTPException(400, { message: err.message });\n }\n\n throw err;\n });\n\n if (!audioStream) {\n throw new HTTPException(500, { message: 'Failed to generate speech' });\n }\n\n return audioStream;\n } catch (error) {\n return handleError(error, 'Error generating speech');\n }\n}\n\n/**\n * Transcribe speech to text\n */\nexport async function transcribeSpeechHandler({\n mastra,\n agentId,\n body,\n runtimeContext,\n}: VoiceContext & {\n body?: {\n audioData?: Buffer;\n options?: Parameters<NonNullable<Agent['voice']>['listen']>[1];\n };\n}) {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n\n if (!body?.audioData) {\n throw new HTTPException(400, { message: 'Audio data is required' });\n }\n\n const agent = mastra.getAgent(agentId);\n\n if (!agent) {\n throw new HTTPException(404, { message: 'Agent not found' });\n }\n\n const voice = await agent.getVoice({ runtimeContext });\n\n if (!voice) {\n throw new HTTPException(400, { message: 'Agent does not have voice capabilities' });\n }\n\n const audioStream = new Readable();\n audioStream.push(body.audioData);\n audioStream.push(null);\n\n const text = await voice.listen(audioStream, body.options);\n return { text };\n } catch (error) {\n return handleError(error, 'Error transcribing speech');\n }\n}\n\n/**\n * Get available listeners for an agent\n */\nexport async function getListenerHandler({ mastra, agentId, runtimeContext }: VoiceContext) {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n\n const agent = mastra.getAgent(agentId);\n\n if (!agent) {\n throw new HTTPException(404, { message: 'Agent not found' });\n }\n\n const voice = await agent.getVoice({ runtimeContext });\n\n if (!voice) {\n throw new HTTPException(400, { message: 'Agent does not have voice capabilities' });\n }\n\n const listeners = await voice.getListener();\n return listeners;\n } catch (error) {\n return handleError(error, 'Error getting listeners');\n }\n}\n"]}
@@ -0,0 +1,25 @@
1
+ import { HTTPException } from './chunk-MMROOK5J.js';
2
+
3
+ // src/server/handlers/utils.ts
4
+ function validateBody(body) {
5
+ const errorResponse = Object.entries(body).reduce((acc, [key, value]) => {
6
+ if (!value) {
7
+ acc[key] = `Argument "${key}" is required`;
8
+ }
9
+ return acc;
10
+ }, {});
11
+ if (Object.keys(errorResponse).length > 0) {
12
+ throw new HTTPException(400, { message: Object.values(errorResponse)[0] });
13
+ }
14
+ }
15
+ function sanitizeBody(body, disallowedKeys) {
16
+ for (const key of disallowedKeys) {
17
+ if (key in body) {
18
+ delete body[key];
19
+ }
20
+ }
21
+ }
22
+
23
+ export { sanitizeBody, validateBody };
24
+ //# sourceMappingURL=chunk-4QCXUEAT.js.map
25
+ //# sourceMappingURL=chunk-4QCXUEAT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/utils.ts"],"names":[],"mappings":";;;AAGO,SAAS,aAAa,IAAA,EAA+B;AAC1D,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,MAAA,CAA+B,CAAC,GAAA,EAAK,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC/F,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,CAAA,UAAA,EAAa,GAAG,CAAA,aAAA,CAAA;AAAA,IAC7B;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,CAAE,SAAS,CAAA,EAAG;AACzC,IAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,CAAE,CAAC,CAAA,EAAG,CAAA;AAAA,EAC3E;AACF;AAOO,SAAS,YAAA,CAAa,MAA+B,cAAA,EAA0B;AACpF,EAAA,KAAA,MAAW,OAAO,cAAA,EAAgB;AAChC,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,OAAO,KAAK,GAAG,CAAA;AAAA,IACjB;AAAA,EACF;AACF","file":"chunk-4QCXUEAT.js","sourcesContent":["import { HTTPException } from '../http-exception';\n\n// Validation helper\nexport function validateBody(body: Record<string, unknown>) {\n const errorResponse = Object.entries(body).reduce<Record<string, string>>((acc, [key, value]) => {\n if (!value) {\n acc[key] = `Argument \"${key}\" is required`;\n }\n return acc;\n }, {});\n\n if (Object.keys(errorResponse).length > 0) {\n throw new HTTPException(400, { message: Object.values(errorResponse)[0] });\n }\n}\n\n/**\n * sanitizes the body by removing disallowed keys.\n * @param body body to sanitize\n * @param disallowedKeys keys to remove from the body\n */\nexport function sanitizeBody(body: Record<string, unknown>, disallowedKeys: string[]) {\n for (const key of disallowedKeys) {\n if (key in body) {\n delete body[key];\n }\n }\n}\n"]}
@@ -0,0 +1,160 @@
1
+ import { handleError } from './chunk-CY4TP3FK.js';
2
+ import { HTTPException } from './chunk-MMROOK5J.js';
3
+ import { __export } from './chunk-PR4QN5HX.js';
4
+
5
+ // src/server/handlers/telemetry.ts
6
+ var telemetry_exports = {};
7
+ __export(telemetry_exports, {
8
+ collectParentSpanIds: () => collectParentSpanIds,
9
+ getTelemetryHandler: () => getTelemetryHandler,
10
+ storeTelemetryHandler: () => storeTelemetryHandler
11
+ });
12
+ async function getTelemetryHandler({ mastra, body }) {
13
+ try {
14
+ const telemetry = mastra.getTelemetry();
15
+ const storage = mastra.getStorage();
16
+ if (!telemetry) {
17
+ throw new HTTPException(400, { message: "Telemetry is not initialized" });
18
+ }
19
+ if (!storage) {
20
+ return [];
21
+ }
22
+ if (!body) {
23
+ throw new HTTPException(400, { message: "Body is required" });
24
+ }
25
+ const { name, scope, page, perPage, attribute, fromDate, toDate } = body;
26
+ const attributes = attribute ? Object.fromEntries(
27
+ (Array.isArray(attribute) ? attribute : [attribute]).map((attr) => {
28
+ const [key, value] = attr.split(":");
29
+ return [key, value];
30
+ })
31
+ ) : void 0;
32
+ const traces = await storage.getTraces({
33
+ name,
34
+ scope,
35
+ page: Number(page ?? 0),
36
+ perPage: Number(perPage ?? 100),
37
+ attributes,
38
+ fromDate: fromDate ? new Date(fromDate) : void 0,
39
+ toDate: toDate ? new Date(toDate) : void 0
40
+ });
41
+ return traces;
42
+ } catch (error2) {
43
+ return handleError(error2, "Error getting telemetry");
44
+ }
45
+ }
46
+ async function storeTelemetryHandler({ mastra, body }) {
47
+ try {
48
+ const storage = mastra.getStorage();
49
+ const logger = mastra.getLogger();
50
+ if (!storage) {
51
+ return {
52
+ status: "error",
53
+ message: "Storage is not initialized"
54
+ };
55
+ }
56
+ const now = /* @__PURE__ */ new Date();
57
+ const items = body?.resourceSpans?.[0]?.scopeSpans;
58
+ logger.debug("[Telemetry Handler] Received spans:", {
59
+ totalSpans: items?.reduce((acc, scope) => acc + scope.spans.length, 0) || 0,
60
+ timestamp: now.toISOString()
61
+ });
62
+ if (!items?.length) {
63
+ return {
64
+ status: "success",
65
+ message: "No spans to process",
66
+ traceCount: 0
67
+ };
68
+ }
69
+ const parentSpanIds = collectParentSpanIds(items);
70
+ const allSpans = items.reduce((acc, scopedSpans) => {
71
+ const { scope, spans } = scopedSpans;
72
+ if (scope.name === "@opentelemetry/instrumentation-http") {
73
+ return acc;
74
+ }
75
+ for (const span of spans) {
76
+ const {
77
+ spanId,
78
+ parentSpanId,
79
+ traceId,
80
+ name,
81
+ kind,
82
+ attributes,
83
+ status,
84
+ events,
85
+ links,
86
+ startTimeUnixNano,
87
+ endTimeUnixNano,
88
+ ...rest
89
+ } = span;
90
+ const startTime = Number(BigInt(startTimeUnixNano) / 1000n);
91
+ const endTime = Number(BigInt(endTimeUnixNano) / 1000n);
92
+ acc.push({
93
+ id: spanId,
94
+ parentSpanId: parentSpanIds.has(parentSpanId) ? null : parentSpanId,
95
+ traceId,
96
+ name,
97
+ scope: scope.name,
98
+ kind,
99
+ status: JSON.stringify(status),
100
+ events: JSON.stringify(events),
101
+ links: JSON.stringify(links),
102
+ attributes: JSON.stringify(
103
+ attributes.reduce((acc2, attr) => {
104
+ const valueKey = Object.keys(attr.value)[0];
105
+ if (valueKey) {
106
+ acc2[attr.key] = attr.value[valueKey];
107
+ }
108
+ return acc2;
109
+ }, {})
110
+ ),
111
+ startTime,
112
+ endTime,
113
+ other: JSON.stringify(rest),
114
+ createdAt: now
115
+ });
116
+ }
117
+ return acc;
118
+ }, []);
119
+ return storage.batchTraceInsert({
120
+ records: allSpans
121
+ }).then(() => {
122
+ return {
123
+ status: "success",
124
+ message: "Traces received and processed successfully",
125
+ traceCount: body.resourceSpans?.length || 0
126
+ };
127
+ }).catch(() => {
128
+ return {
129
+ status: "error",
130
+ message: "Failed to process traces",
131
+ // @ts-ignore
132
+ error: error.message
133
+ };
134
+ });
135
+ } catch (error2) {
136
+ console.error("Error processing traces:", error2);
137
+ return {
138
+ status: "error",
139
+ message: "Failed to process traces",
140
+ // @ts-ignore
141
+ error: error2.message
142
+ };
143
+ }
144
+ }
145
+ var collectParentSpanIds = (items) => {
146
+ const result = /* @__PURE__ */ new Set();
147
+ for (const { scope, spans } of items) {
148
+ if (scope.name !== "@opentelemetry/instrumentation-http") {
149
+ continue;
150
+ }
151
+ for (const span of spans) {
152
+ result.add(span.spanId);
153
+ }
154
+ }
155
+ return result;
156
+ };
157
+
158
+ export { collectParentSpanIds, getTelemetryHandler, storeTelemetryHandler, telemetry_exports };
159
+ //# sourceMappingURL=chunk-67GYDFSB.js.map
160
+ //# sourceMappingURL=chunk-67GYDFSB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/telemetry.ts"],"names":["error","acc"],"mappings":"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","file":"chunk-67GYDFSB.js","sourcesContent":["import { HTTPException } from '../http-exception';\nimport type { Context } from '../types';\n\nimport { handleError } from './error';\n\ninterface TelemetryContext extends Context {\n body?: {\n name?: string;\n scope?: string;\n page?: number;\n perPage?: number;\n attribute?: string | string[];\n fromDate?: Date;\n toDate?: Date;\n };\n}\n\nexport async function getTelemetryHandler({ mastra, body }: TelemetryContext) {\n try {\n const telemetry = mastra.getTelemetry();\n const storage = mastra.getStorage();\n\n if (!telemetry) {\n throw new HTTPException(400, { message: 'Telemetry is not initialized' });\n }\n\n if (!storage) {\n return [];\n }\n\n if (!body) {\n throw new HTTPException(400, { message: 'Body is required' });\n }\n\n const { name, scope, page, perPage, attribute, fromDate, toDate } = body;\n\n // Parse attribute query parameter if present\n const attributes = attribute\n ? Object.fromEntries(\n (Array.isArray(attribute) ? attribute : [attribute]).map(attr => {\n const [key, value] = attr.split(':');\n return [key, value];\n }),\n )\n : undefined;\n\n const traces = await storage.getTraces({\n name,\n scope,\n page: Number(page ?? 0),\n perPage: Number(perPage ?? 100),\n attributes,\n fromDate: fromDate ? new Date(fromDate) : undefined,\n toDate: toDate ? new Date(toDate) : undefined,\n });\n\n return traces;\n } catch (error) {\n return handleError(error, 'Error getting telemetry');\n }\n}\n\nexport async function storeTelemetryHandler({ mastra, body }: Context & { body: { resourceSpans: any[] } }) {\n try {\n const storage = mastra.getStorage();\n const logger = mastra.getLogger();\n\n if (!storage) {\n return {\n status: 'error',\n message: 'Storage is not initialized',\n };\n }\n\n const now = new Date();\n\n const items = body?.resourceSpans?.[0]?.scopeSpans;\n logger.debug('[Telemetry Handler] Received spans:', {\n totalSpans: items?.reduce((acc: number, scope: { spans: any[] }) => acc + scope.spans.length, 0) || 0,\n timestamp: now.toISOString(),\n });\n if (!items?.length) {\n return {\n status: 'success',\n message: 'No spans to process',\n traceCount: 0,\n };\n }\n\n const parentSpanIds = collectParentSpanIds(items);\n const allSpans: any[] = items.reduce((acc: any, scopedSpans: any) => {\n const { scope, spans } = scopedSpans;\n\n // HTTP instrumentation spans are root spans but are not useful.\n // Remove them entirely and promote their direct children to root spans.\n if (scope.name === '@opentelemetry/instrumentation-http') {\n return acc;\n }\n\n for (const span of spans) {\n const {\n spanId,\n parentSpanId,\n traceId,\n name,\n kind,\n attributes,\n status,\n events,\n links,\n startTimeUnixNano,\n endTimeUnixNano,\n ...rest\n } = span;\n\n const startTime = Number(BigInt(startTimeUnixNano) / 1000n);\n const endTime = Number(BigInt(endTimeUnixNano) / 1000n);\n\n acc.push({\n id: spanId,\n parentSpanId: parentSpanIds.has(parentSpanId) ? null : parentSpanId,\n traceId,\n name,\n scope: scope.name,\n kind,\n status: JSON.stringify(status),\n events: JSON.stringify(events),\n links: JSON.stringify(links),\n attributes: JSON.stringify(\n attributes.reduce((acc: Record<string, any>, attr: any) => {\n const valueKey = Object.keys(attr.value)[0];\n if (valueKey) {\n acc[attr.key] = attr.value[valueKey];\n }\n return acc;\n }, {}),\n ),\n startTime,\n endTime,\n other: JSON.stringify(rest),\n createdAt: now,\n });\n }\n return acc;\n }, []);\n\n return storage\n .batchTraceInsert({\n records: allSpans,\n })\n .then(() => {\n return {\n status: 'success',\n message: 'Traces received and processed successfully',\n traceCount: body.resourceSpans?.length || 0,\n };\n })\n .catch(() => {\n return {\n status: 'error',\n message: 'Failed to process traces',\n // @ts-ignore\n error: error.message,\n };\n });\n\n // Return a simple response\n } catch (error) {\n console.error('Error processing traces:', error);\n return {\n status: 'error',\n message: 'Failed to process traces',\n // @ts-ignore\n error: error.message,\n };\n }\n}\n\nexport const collectParentSpanIds = (items: any[]) => {\n const result = new Set<string>();\n for (const { scope, spans } of items) {\n if (scope.name !== '@opentelemetry/instrumentation-http') {\n continue;\n }\n\n for (const span of spans) {\n result.add(span.spanId);\n }\n }\n\n return result;\n};\n"]}
@@ -0,0 +1,165 @@
1
+ 'use strict';
2
+
3
+ var chunkRE4RPXT2_cjs = require('./chunk-RE4RPXT2.cjs');
4
+ var chunk7NADHFD2_cjs = require('./chunk-7NADHFD2.cjs');
5
+ var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
6
+
7
+ // src/server/handlers/telemetry.ts
8
+ var telemetry_exports = {};
9
+ chunkO7I5CWRX_cjs.__export(telemetry_exports, {
10
+ collectParentSpanIds: () => collectParentSpanIds,
11
+ getTelemetryHandler: () => getTelemetryHandler,
12
+ storeTelemetryHandler: () => storeTelemetryHandler
13
+ });
14
+ async function getTelemetryHandler({ mastra, body }) {
15
+ try {
16
+ const telemetry = mastra.getTelemetry();
17
+ const storage = mastra.getStorage();
18
+ if (!telemetry) {
19
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Telemetry is not initialized" });
20
+ }
21
+ if (!storage) {
22
+ return [];
23
+ }
24
+ if (!body) {
25
+ throw new chunk7NADHFD2_cjs.HTTPException(400, { message: "Body is required" });
26
+ }
27
+ const { name, scope, page, perPage, attribute, fromDate, toDate } = body;
28
+ const attributes = attribute ? Object.fromEntries(
29
+ (Array.isArray(attribute) ? attribute : [attribute]).map((attr) => {
30
+ const [key, value] = attr.split(":");
31
+ return [key, value];
32
+ })
33
+ ) : void 0;
34
+ const traces = await storage.getTraces({
35
+ name,
36
+ scope,
37
+ page: Number(page ?? 0),
38
+ perPage: Number(perPage ?? 100),
39
+ attributes,
40
+ fromDate: fromDate ? new Date(fromDate) : void 0,
41
+ toDate: toDate ? new Date(toDate) : void 0
42
+ });
43
+ return traces;
44
+ } catch (error2) {
45
+ return chunkRE4RPXT2_cjs.handleError(error2, "Error getting telemetry");
46
+ }
47
+ }
48
+ async function storeTelemetryHandler({ mastra, body }) {
49
+ try {
50
+ const storage = mastra.getStorage();
51
+ const logger = mastra.getLogger();
52
+ if (!storage) {
53
+ return {
54
+ status: "error",
55
+ message: "Storage is not initialized"
56
+ };
57
+ }
58
+ const now = /* @__PURE__ */ new Date();
59
+ const items = body?.resourceSpans?.[0]?.scopeSpans;
60
+ logger.debug("[Telemetry Handler] Received spans:", {
61
+ totalSpans: items?.reduce((acc, scope) => acc + scope.spans.length, 0) || 0,
62
+ timestamp: now.toISOString()
63
+ });
64
+ if (!items?.length) {
65
+ return {
66
+ status: "success",
67
+ message: "No spans to process",
68
+ traceCount: 0
69
+ };
70
+ }
71
+ const parentSpanIds = collectParentSpanIds(items);
72
+ const allSpans = items.reduce((acc, scopedSpans) => {
73
+ const { scope, spans } = scopedSpans;
74
+ if (scope.name === "@opentelemetry/instrumentation-http") {
75
+ return acc;
76
+ }
77
+ for (const span of spans) {
78
+ const {
79
+ spanId,
80
+ parentSpanId,
81
+ traceId,
82
+ name,
83
+ kind,
84
+ attributes,
85
+ status,
86
+ events,
87
+ links,
88
+ startTimeUnixNano,
89
+ endTimeUnixNano,
90
+ ...rest
91
+ } = span;
92
+ const startTime = Number(BigInt(startTimeUnixNano) / 1000n);
93
+ const endTime = Number(BigInt(endTimeUnixNano) / 1000n);
94
+ acc.push({
95
+ id: spanId,
96
+ parentSpanId: parentSpanIds.has(parentSpanId) ? null : parentSpanId,
97
+ traceId,
98
+ name,
99
+ scope: scope.name,
100
+ kind,
101
+ status: JSON.stringify(status),
102
+ events: JSON.stringify(events),
103
+ links: JSON.stringify(links),
104
+ attributes: JSON.stringify(
105
+ attributes.reduce((acc2, attr) => {
106
+ const valueKey = Object.keys(attr.value)[0];
107
+ if (valueKey) {
108
+ acc2[attr.key] = attr.value[valueKey];
109
+ }
110
+ return acc2;
111
+ }, {})
112
+ ),
113
+ startTime,
114
+ endTime,
115
+ other: JSON.stringify(rest),
116
+ createdAt: now
117
+ });
118
+ }
119
+ return acc;
120
+ }, []);
121
+ return storage.batchTraceInsert({
122
+ records: allSpans
123
+ }).then(() => {
124
+ return {
125
+ status: "success",
126
+ message: "Traces received and processed successfully",
127
+ traceCount: body.resourceSpans?.length || 0
128
+ };
129
+ }).catch(() => {
130
+ return {
131
+ status: "error",
132
+ message: "Failed to process traces",
133
+ // @ts-ignore
134
+ error: error.message
135
+ };
136
+ });
137
+ } catch (error2) {
138
+ console.error("Error processing traces:", error2);
139
+ return {
140
+ status: "error",
141
+ message: "Failed to process traces",
142
+ // @ts-ignore
143
+ error: error2.message
144
+ };
145
+ }
146
+ }
147
+ var collectParentSpanIds = (items) => {
148
+ const result = /* @__PURE__ */ new Set();
149
+ for (const { scope, spans } of items) {
150
+ if (scope.name !== "@opentelemetry/instrumentation-http") {
151
+ continue;
152
+ }
153
+ for (const span of spans) {
154
+ result.add(span.spanId);
155
+ }
156
+ }
157
+ return result;
158
+ };
159
+
160
+ exports.collectParentSpanIds = collectParentSpanIds;
161
+ exports.getTelemetryHandler = getTelemetryHandler;
162
+ exports.storeTelemetryHandler = storeTelemetryHandler;
163
+ exports.telemetry_exports = telemetry_exports;
164
+ //# sourceMappingURL=chunk-6ZR275MD.cjs.map
165
+ //# sourceMappingURL=chunk-6ZR275MD.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/handlers/telemetry.ts"],"names":["__export","HTTPException","error","handleError","acc"],"mappings":"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","file":"chunk-6ZR275MD.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport type { Context } from '../types';\n\nimport { handleError } from './error';\n\ninterface TelemetryContext extends Context {\n body?: {\n name?: string;\n scope?: string;\n page?: number;\n perPage?: number;\n attribute?: string | string[];\n fromDate?: Date;\n toDate?: Date;\n };\n}\n\nexport async function getTelemetryHandler({ mastra, body }: TelemetryContext) {\n try {\n const telemetry = mastra.getTelemetry();\n const storage = mastra.getStorage();\n\n if (!telemetry) {\n throw new HTTPException(400, { message: 'Telemetry is not initialized' });\n }\n\n if (!storage) {\n return [];\n }\n\n if (!body) {\n throw new HTTPException(400, { message: 'Body is required' });\n }\n\n const { name, scope, page, perPage, attribute, fromDate, toDate } = body;\n\n // Parse attribute query parameter if present\n const attributes = attribute\n ? Object.fromEntries(\n (Array.isArray(attribute) ? attribute : [attribute]).map(attr => {\n const [key, value] = attr.split(':');\n return [key, value];\n }),\n )\n : undefined;\n\n const traces = await storage.getTraces({\n name,\n scope,\n page: Number(page ?? 0),\n perPage: Number(perPage ?? 100),\n attributes,\n fromDate: fromDate ? new Date(fromDate) : undefined,\n toDate: toDate ? new Date(toDate) : undefined,\n });\n\n return traces;\n } catch (error) {\n return handleError(error, 'Error getting telemetry');\n }\n}\n\nexport async function storeTelemetryHandler({ mastra, body }: Context & { body: { resourceSpans: any[] } }) {\n try {\n const storage = mastra.getStorage();\n const logger = mastra.getLogger();\n\n if (!storage) {\n return {\n status: 'error',\n message: 'Storage is not initialized',\n };\n }\n\n const now = new Date();\n\n const items = body?.resourceSpans?.[0]?.scopeSpans;\n logger.debug('[Telemetry Handler] Received spans:', {\n totalSpans: items?.reduce((acc: number, scope: { spans: any[] }) => acc + scope.spans.length, 0) || 0,\n timestamp: now.toISOString(),\n });\n if (!items?.length) {\n return {\n status: 'success',\n message: 'No spans to process',\n traceCount: 0,\n };\n }\n\n const parentSpanIds = collectParentSpanIds(items);\n const allSpans: any[] = items.reduce((acc: any, scopedSpans: any) => {\n const { scope, spans } = scopedSpans;\n\n // HTTP instrumentation spans are root spans but are not useful.\n // Remove them entirely and promote their direct children to root spans.\n if (scope.name === '@opentelemetry/instrumentation-http') {\n return acc;\n }\n\n for (const span of spans) {\n const {\n spanId,\n parentSpanId,\n traceId,\n name,\n kind,\n attributes,\n status,\n events,\n links,\n startTimeUnixNano,\n endTimeUnixNano,\n ...rest\n } = span;\n\n const startTime = Number(BigInt(startTimeUnixNano) / 1000n);\n const endTime = Number(BigInt(endTimeUnixNano) / 1000n);\n\n acc.push({\n id: spanId,\n parentSpanId: parentSpanIds.has(parentSpanId) ? null : parentSpanId,\n traceId,\n name,\n scope: scope.name,\n kind,\n status: JSON.stringify(status),\n events: JSON.stringify(events),\n links: JSON.stringify(links),\n attributes: JSON.stringify(\n attributes.reduce((acc: Record<string, any>, attr: any) => {\n const valueKey = Object.keys(attr.value)[0];\n if (valueKey) {\n acc[attr.key] = attr.value[valueKey];\n }\n return acc;\n }, {}),\n ),\n startTime,\n endTime,\n other: JSON.stringify(rest),\n createdAt: now,\n });\n }\n return acc;\n }, []);\n\n return storage\n .batchTraceInsert({\n records: allSpans,\n })\n .then(() => {\n return {\n status: 'success',\n message: 'Traces received and processed successfully',\n traceCount: body.resourceSpans?.length || 0,\n };\n })\n .catch(() => {\n return {\n status: 'error',\n message: 'Failed to process traces',\n // @ts-ignore\n error: error.message,\n };\n });\n\n // Return a simple response\n } catch (error) {\n console.error('Error processing traces:', error);\n return {\n status: 'error',\n message: 'Failed to process traces',\n // @ts-ignore\n error: error.message,\n };\n }\n}\n\nexport const collectParentSpanIds = (items: any[]) => {\n const result = new Set<string>();\n for (const { scope, spans } of items) {\n if (scope.name !== '@opentelemetry/instrumentation-http') {\n continue;\n }\n\n for (const span of spans) {\n result.add(span.spanId);\n }\n }\n\n return result;\n};\n"]}
@@ -35,5 +35,5 @@ var HTTPException = class extends Error {
35
35
  };
36
36
 
37
37
  exports.HTTPException = HTTPException;
38
- //# sourceMappingURL=chunk-64ITUOXI.cjs.map
39
- //# sourceMappingURL=chunk-64ITUOXI.cjs.map
38
+ //# sourceMappingURL=chunk-7NADHFD2.cjs.map
39
+ //# sourceMappingURL=chunk-7NADHFD2.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server/http-exception.ts"],"names":[],"mappings":";AA0GO,IAAM,aAAA,GAAN,cAA4B,KAAA,CAAM;AAAA,EAC9B,GAAA;AAAA,EACA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,WAAA,CAAY,MAAA,GAAqB,GAAA,EAAK,OAAA,EAAgC;AACpE,IAAA,KAAA,CAAM,SAAS,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,EAAS,OAAO,CAAA;AACjD,IAAA,IAAA,CAAK,MAAM,OAAA,EAAS,GAAA;AACpB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAA,EAAS,KAAA,IAAS,IAAA,CAAK,KAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAA,GAAwB;AACtB,IAAA,IAAI,KAAK,GAAA,EAAK;AACZ,MAAA,MAAM,WAAA,GAAc,IAAI,QAAA,CAAS,IAAA,CAAK,IAAI,IAAA,EAAM;AAAA,QAC9C,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,OAAA,EAAS,KAAK,GAAA,CAAI;AAAA,OACnB,CAAA;AACD,MAAA,OAAO,WAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,OAAA,EAAS;AAAA,MAChC,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AACF","file":"chunk-6QWQZI4Q.js","sourcesContent":["// Copied from https://github.com/honojs/hono/blob/main/packages/hono/src/http-exception.ts\n\n/**\n * @module\n * This module provides the `HTTPException` class.\n */\n\ntype InfoStatusCode = 100 | 101 | 102 | 103;\ntype SuccessStatusCode = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226;\ntype DeprecatedStatusCode = 305 | 306;\ntype RedirectStatusCode = 300 | 301 | 302 | 303 | 304 | DeprecatedStatusCode | 307 | 308;\ntype ClientErrorStatusCode =\n | 400\n | 401\n | 402\n | 403\n | 404\n | 405\n | 406\n | 407\n | 408\n | 409\n | 410\n | 411\n | 412\n | 413\n | 414\n | 415\n | 416\n | 417\n | 418\n | 421\n | 422\n | 423\n | 424\n | 425\n | 426\n | 428\n | 429\n | 431\n | 451;\ntype ServerErrorStatusCode = 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511;\n\n/**\n * `UnofficialStatusCode` can be used to specify an unofficial status code.\n * @example\n *\n * ```ts\n * app.get('/unknown', (c) => {\n * return c.text(\"Unknown Error\", 520 as UnofficialStatusCode)\n * })\n * ```\n */\nexport type UnofficialStatusCode = -1;\n\n/**\n * If you want to use an unofficial status, use `UnofficialStatusCode`.\n */\nexport type StatusCode =\n | InfoStatusCode\n | SuccessStatusCode\n | RedirectStatusCode\n | ClientErrorStatusCode\n | ServerErrorStatusCode\n | UnofficialStatusCode;\n\n/**\n * Options for creating an `HTTPException`.\n * @property res - Optional response object to use.\n * @property message - Optional custom error message.\n * @property cause - Optional cause of the error.\n * @property stack - Optional stack trace for the error.\n */\ntype HTTPExceptionOptions = {\n res?: Response;\n message?: string;\n cause?: unknown;\n stack?: string;\n};\n\n/**\n * `HTTPException` must be used when a fatal error such as authentication failure occurs.\n *\n * @see {@link https://hono.dev/docs/api/exception}\n *\n * @param {StatusCode} status - status code of HTTPException\n * @param {HTTPExceptionOptions} options - options of HTTPException\n * @param {HTTPExceptionOptions[\"res\"]} options.res - response of options of HTTPException\n * @param {HTTPExceptionOptions[\"message\"]} options.message - message of options of HTTPException\n * @param {HTTPExceptionOptions[\"cause\"]} options.cause - cause of options of HTTPException\n *\n * @example\n * ```ts\n * import { HTTPException } from 'hono/http-exception'\n *\n * // ...\n *\n * app.post('/auth', async (c, next) => {\n * // authentication\n * if (authorized === false) {\n * throw new HTTPException(401, { message: 'Custom error message' })\n * }\n * await next()\n * })\n * ```\n */\nexport class HTTPException extends Error {\n readonly res?: Response;\n readonly status: StatusCode;\n\n /**\n * Creates an instance of `HTTPException`.\n * @param status - HTTP status code for the exception. Defaults to 500.\n * @param options - Additional options for the exception.\n */\n constructor(status: StatusCode = 500, options?: HTTPExceptionOptions) {\n super(options?.message, { cause: options?.cause });\n this.res = options?.res;\n this.status = status;\n this.stack = options?.stack || this.stack;\n }\n\n /**\n * Returns the response object associated with the exception.\n * If a response object is not provided, a new response is created with the error message and status code.\n * @returns The response object.\n */\n getResponse(): Response {\n if (this.res) {\n const newResponse = new Response(this.res.body, {\n status: this.status,\n headers: this.res.headers,\n });\n return newResponse;\n }\n return new Response(this.message, {\n status: this.status,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/server/http-exception.ts"],"names":[],"mappings":";;;AAgHO,IAAM,aAAA,GAAN,cAA4B,KAAA,CAAM;AAAA,EAC9B,GAAA;AAAA,EACA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,WAAA,CAAY,MAAA,GAAqB,GAAA,EAAK,OAAA,EAAgC;AACpE,IAAA,KAAA,CAAM,SAAS,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,EAAS,OAAO,CAAA;AACjD,IAAA,IAAA,CAAK,MAAM,OAAA,EAAS,GAAA;AACpB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAA,EAAS,KAAA,IAAS,IAAA,CAAK,KAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAA,GAAwB;AACtB,IAAA,IAAI,KAAK,GAAA,EAAK;AACZ,MAAA,MAAM,WAAA,GAAc,IAAI,QAAA,CAAS,IAAA,CAAK,IAAI,IAAA,EAAM;AAAA,QAC9C,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,OAAA,EAAS,KAAK,GAAA,CAAI;AAAA,OACnB,CAAA;AACD,MAAA,OAAO,WAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,OAAA,EAAS;AAAA,MAChC,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AACF","file":"chunk-7NADHFD2.cjs","sourcesContent":["// Copied from https://github.com/honojs/hono/blob/main/packages/hono/src/http-exception.ts\n\n/**\n * @module\n * This module provides the `HTTPException` class.\n */\n\ntype InfoStatusCode = 100 | 101 | 102 | 103;\ntype SuccessStatusCode = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226;\ntype DeprecatedStatusCode = 305 | 306;\ntype RedirectStatusCode = 300 | 301 | 302 | 303 | 304 | DeprecatedStatusCode | 307 | 308;\ntype ClientErrorStatusCode =\n | 400\n | 401\n | 402\n | 403\n | 404\n | 405\n | 406\n | 407\n | 408\n | 409\n | 410\n | 411\n | 412\n | 413\n | 414\n | 415\n | 416\n | 417\n | 418\n | 421\n | 422\n | 423\n | 424\n | 425\n | 426\n | 428\n | 429\n | 431\n | 451;\ntype ServerErrorStatusCode = 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511;\n\n/**\n * `UnofficialStatusCode` can be used to specify an unofficial status code.\n * @example\n *\n * ```ts\n * app.get('/unknown', (c) => {\n * return c.text(\"Unknown Error\", 520 as UnofficialStatusCode)\n * })\n * ```\n */\nexport type UnofficialStatusCode = -1;\n\n/**\n * @deprecated\n * Use `UnofficialStatusCode` instead.\n */\nexport type UnOfficalStatusCode = UnofficialStatusCode;\n\n/**\n * If you want to use an unofficial status, use `UnofficialStatusCode`.\n */\nexport type StatusCode =\n | InfoStatusCode\n | SuccessStatusCode\n | RedirectStatusCode\n | ClientErrorStatusCode\n | ServerErrorStatusCode\n | UnofficialStatusCode;\n\n/**\n * Options for creating an `HTTPException`.\n * @property res - Optional response object to use.\n * @property message - Optional custom error message.\n * @property cause - Optional cause of the error.\n * @property stack - Optional stack trace for the error.\n */\ntype HTTPExceptionOptions = {\n res?: Response;\n message?: string;\n cause?: unknown;\n stack?: string;\n};\n\n/**\n * `HTTPException` must be used when a fatal error such as authentication failure occurs.\n *\n * @see {@link https://hono.dev/docs/api/exception}\n *\n * @param {StatusCode} status - status code of HTTPException\n * @param {HTTPExceptionOptions} options - options of HTTPException\n * @param {HTTPExceptionOptions[\"res\"]} options.res - response of options of HTTPException\n * @param {HTTPExceptionOptions[\"message\"]} options.message - message of options of HTTPException\n * @param {HTTPExceptionOptions[\"cause\"]} options.cause - cause of options of HTTPException\n *\n * @example\n * ```ts\n * import { HTTPException } from 'hono/http-exception'\n *\n * // ...\n *\n * app.post('/auth', async (c, next) => {\n * // authentication\n * if (authorized === false) {\n * throw new HTTPException(401, { message: 'Custom error message' })\n * }\n * await next()\n * })\n * ```\n */\nexport class HTTPException extends Error {\n readonly res?: Response;\n readonly status: StatusCode;\n\n /**\n * Creates an instance of `HTTPException`.\n * @param status - HTTP status code for the exception. Defaults to 500.\n * @param options - Additional options for the exception.\n */\n constructor(status: StatusCode = 500, options?: HTTPExceptionOptions) {\n super(options?.message, { cause: options?.cause });\n this.res = options?.res;\n this.status = status;\n this.stack = options?.stack || this.stack;\n }\n\n /**\n * Returns the response object associated with the exception.\n * If a response object is not provided, a new response is created with the error message and status code.\n * @returns The response object.\n */\n getResponse(): Response {\n if (this.res) {\n const newResponse = new Response(this.res.body, {\n status: this.status,\n headers: this.res.headers,\n });\n return newResponse;\n }\n return new Response(this.message, {\n status: this.status,\n });\n }\n}\n"]}
@@ -0,0 +1,83 @@
1
+ import { validateBody } from './chunk-4QCXUEAT.js';
2
+ import { handleError } from './chunk-CY4TP3FK.js';
3
+ import { __export } from './chunk-PR4QN5HX.js';
4
+
5
+ // src/server/handlers/logs.ts
6
+ var logs_exports = {};
7
+ __export(logs_exports, {
8
+ getLogTransports: () => getLogTransports,
9
+ getLogsByRunIdHandler: () => getLogsByRunIdHandler,
10
+ getLogsHandler: () => getLogsHandler
11
+ });
12
+ async function getLogsHandler({
13
+ mastra,
14
+ transportId,
15
+ params
16
+ }) {
17
+ try {
18
+ validateBody({ transportId });
19
+ const { fromDate, toDate, logLevel, filters: _filters, page, perPage } = params || {};
20
+ const filters = _filters ? Object.fromEntries(
21
+ (Array.isArray(_filters) ? _filters : [_filters]).map((attr) => {
22
+ const [key, value] = attr.split(":");
23
+ return [key, value];
24
+ })
25
+ ) : void 0;
26
+ const logs = await mastra.getLogs(transportId, {
27
+ fromDate,
28
+ toDate,
29
+ logLevel,
30
+ filters,
31
+ page: page ? Number(page) : void 0,
32
+ perPage: perPage ? Number(perPage) : void 0
33
+ });
34
+ return logs;
35
+ } catch (error) {
36
+ return handleError(error, "Error getting logs");
37
+ }
38
+ }
39
+ async function getLogsByRunIdHandler({
40
+ mastra,
41
+ runId,
42
+ transportId,
43
+ params
44
+ }) {
45
+ try {
46
+ validateBody({ runId, transportId });
47
+ const { fromDate, toDate, logLevel, filters: _filters, page, perPage } = params || {};
48
+ const filters = _filters ? Object.fromEntries(
49
+ (Array.isArray(_filters) ? _filters : [_filters]).map((attr) => {
50
+ const [key, value] = attr.split(":");
51
+ return [key, value];
52
+ })
53
+ ) : void 0;
54
+ const logs = await mastra.getLogsByRunId({
55
+ runId,
56
+ transportId,
57
+ fromDate,
58
+ toDate,
59
+ logLevel,
60
+ filters,
61
+ page: page ? Number(page) : void 0,
62
+ perPage: perPage ? Number(perPage) : void 0
63
+ });
64
+ return logs;
65
+ } catch (error) {
66
+ return handleError(error, "Error getting logs by run ID");
67
+ }
68
+ }
69
+ async function getLogTransports({ mastra }) {
70
+ try {
71
+ const logger = mastra.getLogger();
72
+ const transports = logger.getTransports();
73
+ return {
74
+ transports: transports ? [...transports.keys()] : []
75
+ };
76
+ } catch (error) {
77
+ return handleError(error, "Error getting log Transports");
78
+ }
79
+ }
80
+
81
+ export { getLogTransports, getLogsByRunIdHandler, getLogsHandler, logs_exports };
82
+ //# sourceMappingURL=chunk-ABRFV4XP.js.map
83
+ //# sourceMappingURL=chunk-ABRFV4XP.js.map