@azure/ai-projects 2.7.1 → 2.9.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 (589) hide show
  1. package/README.md +101 -5
  2. package/dist/browser/aiProjectClient.d.ts +4 -0
  3. package/dist/browser/aiProjectClient.d.ts.map +1 -1
  4. package/dist/browser/aiProjectClient.js +6 -1
  5. package/dist/browser/aiProjectClient.js.map +1 -1
  6. package/dist/browser/api/agents/index.d.ts +2 -2
  7. package/dist/browser/api/agents/index.d.ts.map +1 -1
  8. package/dist/browser/api/agents/index.js +1 -1
  9. package/dist/browser/api/agents/index.js.map +1 -1
  10. package/dist/browser/api/agents/operations.d.ts +41 -4
  11. package/dist/browser/api/agents/operations.d.ts.map +1 -1
  12. package/dist/browser/api/agents/operations.js +322 -21
  13. package/dist/browser/api/agents/operations.js.map +1 -1
  14. package/dist/browser/api/agents/options.d.ts +163 -93
  15. package/dist/browser/api/agents/options.d.ts.map +1 -1
  16. package/dist/browser/api/agents/options.js.map +1 -1
  17. package/dist/browser/api/beta/agents/index.d.ts +2 -2
  18. package/dist/browser/api/beta/agents/index.d.ts.map +1 -1
  19. package/dist/browser/api/beta/agents/index.js +1 -1
  20. package/dist/browser/api/beta/agents/index.js.map +1 -1
  21. package/dist/browser/api/beta/agents/operations.d.ts +2 -24
  22. package/dist/browser/api/beta/agents/operations.d.ts.map +1 -1
  23. package/dist/browser/api/beta/agents/operations.js +3 -185
  24. package/dist/browser/api/beta/agents/operations.js.map +1 -1
  25. package/dist/browser/api/beta/agents/options.d.ts +0 -56
  26. package/dist/browser/api/beta/agents/options.d.ts.map +1 -1
  27. package/dist/browser/api/beta/agents/options.js.map +1 -1
  28. package/dist/browser/api/beta/evaluators/index.d.ts +2 -2
  29. package/dist/browser/api/beta/evaluators/index.d.ts.map +1 -1
  30. package/dist/browser/api/beta/evaluators/index.js +1 -1
  31. package/dist/browser/api/beta/evaluators/index.js.map +1 -1
  32. package/dist/browser/api/beta/evaluators/operations.d.ts +2 -59
  33. package/dist/browser/api/beta/evaluators/operations.d.ts.map +1 -1
  34. package/dist/browser/api/beta/evaluators/operations.js +1 -388
  35. package/dist/browser/api/beta/evaluators/operations.js.map +1 -1
  36. package/dist/browser/api/beta/evaluators/options.d.ts +0 -84
  37. package/dist/browser/api/beta/evaluators/options.d.ts.map +1 -1
  38. package/dist/browser/api/beta/evaluators/options.js.map +1 -1
  39. package/dist/browser/api/datasets/index.d.ts +2 -2
  40. package/dist/browser/api/datasets/index.d.ts.map +1 -1
  41. package/dist/browser/api/datasets/index.js +1 -1
  42. package/dist/browser/api/datasets/index.js.map +1 -1
  43. package/dist/browser/api/datasets/operations.d.ts +23 -2
  44. package/dist/browser/api/datasets/operations.d.ts.map +1 -1
  45. package/dist/browser/api/datasets/operations.js +193 -1
  46. package/dist/browser/api/datasets/operations.js.map +1 -1
  47. package/dist/browser/api/datasets/options.d.ts +52 -0
  48. package/dist/browser/api/datasets/options.d.ts.map +1 -1
  49. package/dist/browser/api/datasets/options.js.map +1 -1
  50. package/dist/browser/api/evaluators/index.d.ts +3 -0
  51. package/dist/browser/api/evaluators/index.d.ts.map +1 -0
  52. package/dist/browser/api/evaluators/index.js +4 -0
  53. package/dist/browser/api/evaluators/index.js.map +1 -0
  54. package/dist/browser/api/evaluators/operations.d.ts +62 -0
  55. package/dist/browser/api/evaluators/operations.d.ts.map +1 -0
  56. package/dist/browser/api/evaluators/operations.js +373 -0
  57. package/dist/browser/api/evaluators/operations.js.map +1 -0
  58. package/dist/browser/api/evaluators/options.d.ts +70 -0
  59. package/dist/browser/api/evaluators/options.d.ts.map +1 -0
  60. package/dist/browser/api/evaluators/options.js.map +1 -0
  61. package/dist/browser/classic/agents/index.d.ts +21 -2
  62. package/dist/browser/classic/agents/index.d.ts.map +1 -1
  63. package/dist/browser/classic/agents/index.js +10 -1
  64. package/dist/browser/classic/agents/index.js.map +1 -1
  65. package/dist/browser/classic/beta/agents/index.d.ts +4 -15
  66. package/dist/browser/classic/beta/agents/index.d.ts.map +1 -1
  67. package/dist/browser/classic/beta/agents/index.js +4 -11
  68. package/dist/browser/classic/beta/agents/index.js.map +1 -1
  69. package/dist/browser/classic/beta/evaluators/index.d.ts +3 -38
  70. package/dist/browser/classic/beta/evaluators/index.d.ts.map +1 -1
  71. package/dist/browser/classic/beta/evaluators/index.js +2 -18
  72. package/dist/browser/classic/beta/evaluators/index.js.map +1 -1
  73. package/dist/browser/classic/beta/index.d.ts +2 -4
  74. package/dist/browser/classic/beta/index.d.ts.map +1 -1
  75. package/dist/browser/classic/beta/index.js +3 -6
  76. package/dist/browser/classic/beta/index.js.map +1 -1
  77. package/dist/browser/classic/beta/voiceAgents/conversations/index.d.ts +2 -1
  78. package/dist/browser/classic/beta/voiceAgents/conversations/index.d.ts.map +1 -1
  79. package/dist/browser/classic/beta/voiceAgents/conversations/index.js +5 -4
  80. package/dist/browser/classic/beta/voiceAgents/conversations/index.js.map +1 -1
  81. package/dist/browser/classic/beta/voiceAgents/index.d.ts +3 -2
  82. package/dist/browser/classic/beta/voiceAgents/index.d.ts.map +1 -1
  83. package/dist/browser/classic/beta/voiceAgents/index.js +5 -5
  84. package/dist/browser/classic/beta/voiceAgents/index.js.map +1 -1
  85. package/dist/browser/classic/beta/voiceAgents/telephony/index.d.ts +2 -1
  86. package/dist/browser/classic/beta/voiceAgents/telephony/index.d.ts.map +1 -1
  87. package/dist/browser/classic/beta/voiceAgents/telephony/index.js +16 -11
  88. package/dist/browser/classic/beta/voiceAgents/telephony/index.js.map +1 -1
  89. package/dist/browser/classic/datasets/index.d.ts +13 -2
  90. package/dist/browser/classic/datasets/index.d.ts.map +1 -1
  91. package/dist/browser/classic/datasets/index.js +6 -1
  92. package/dist/browser/classic/datasets/index.js.map +1 -1
  93. package/dist/browser/classic/evaluators/index.d.ts +43 -0
  94. package/dist/browser/classic/evaluators/index.d.ts.map +1 -0
  95. package/dist/browser/classic/evaluators/index.js +19 -0
  96. package/dist/browser/classic/evaluators/index.js.map +1 -0
  97. package/dist/browser/classic/index.d.ts +1 -1
  98. package/dist/browser/classic/index.d.ts.map +1 -1
  99. package/dist/browser/classic/index.js.map +1 -1
  100. package/dist/browser/constants.d.ts +1 -1
  101. package/dist/browser/constants.js +1 -1
  102. package/dist/browser/constants.js.map +1 -1
  103. package/dist/browser/index.d.ts +10 -17
  104. package/dist/browser/index.d.ts.map +1 -1
  105. package/dist/browser/index.js +1 -2
  106. package/dist/browser/index.js.map +1 -1
  107. package/dist/browser/models/index.d.ts +1 -3
  108. package/dist/browser/models/index.d.ts.map +1 -1
  109. package/dist/browser/models/index.js.map +1 -1
  110. package/dist/browser/models/models.d.ts +1081 -536
  111. package/dist/browser/models/models.d.ts.map +1 -1
  112. package/dist/browser/models/models.js +1554 -655
  113. package/dist/browser/models/models.js.map +1 -1
  114. package/dist/browser/package.json +1 -1
  115. package/dist/browser/realtime/voiceAgentRealtimeClient.d.ts +27 -2
  116. package/dist/browser/realtime/voiceAgentRealtimeClient.d.ts.map +1 -1
  117. package/dist/browser/realtime/voiceAgentRealtimeClient.js +97 -17
  118. package/dist/browser/realtime/voiceAgentRealtimeClient.js.map +1 -1
  119. package/dist/browser/tracing/configuration.d.ts +3 -5
  120. package/dist/browser/tracing/configuration.d.ts.map +1 -1
  121. package/dist/browser/tracing/configuration.js +8 -6
  122. package/dist/browser/tracing/configuration.js.map +1 -1
  123. package/dist/browser/tracing/tracingClient.d.ts +1 -1
  124. package/dist/browser/tracing/tracingClient.d.ts.map +1 -1
  125. package/dist/browser/tracing/tracingClient.js +2 -2
  126. package/dist/browser/tracing/tracingClient.js.map +1 -1
  127. package/dist/browser/tracing/voiceAgentTracing.d.ts +63 -0
  128. package/dist/browser/tracing/voiceAgentTracing.d.ts.map +1 -0
  129. package/dist/browser/tracing/voiceAgentTracing.js +740 -0
  130. package/dist/browser/tracing/voiceAgentTracing.js.map +1 -0
  131. package/dist/browser/webSocketTransport.d.ts +1 -0
  132. package/dist/browser/webSocketTransport.d.ts.map +1 -1
  133. package/dist/browser/webSocketTransport.js +5 -13
  134. package/dist/browser/webSocketTransport.js.map +1 -1
  135. package/dist/commonjs/aiProjectClient.d.ts +4 -0
  136. package/dist/commonjs/aiProjectClient.d.ts.map +1 -1
  137. package/dist/commonjs/aiProjectClient.js +6 -1
  138. package/dist/commonjs/aiProjectClient.js.map +2 -2
  139. package/dist/commonjs/api/agents/index.d.ts +2 -2
  140. package/dist/commonjs/api/agents/index.d.ts.map +1 -1
  141. package/dist/commonjs/api/agents/index.js +18 -0
  142. package/dist/commonjs/api/agents/index.js.map +2 -2
  143. package/dist/commonjs/api/agents/operations.d.ts +41 -4
  144. package/dist/commonjs/api/agents/operations.d.ts.map +1 -1
  145. package/dist/commonjs/api/agents/operations.js +415 -19
  146. package/dist/commonjs/api/agents/operations.js.map +2 -2
  147. package/dist/commonjs/api/agents/options.d.ts +163 -93
  148. package/dist/commonjs/api/agents/options.d.ts.map +1 -1
  149. package/dist/commonjs/api/agents/options.js.map +1 -1
  150. package/dist/commonjs/api/beta/agents/index.d.ts +2 -2
  151. package/dist/commonjs/api/beta/agents/index.d.ts.map +1 -1
  152. package/dist/commonjs/api/beta/agents/index.js +2 -12
  153. package/dist/commonjs/api/beta/agents/index.js.map +2 -2
  154. package/dist/commonjs/api/beta/agents/operations.d.ts +2 -24
  155. package/dist/commonjs/api/beta/agents/operations.d.ts.map +1 -1
  156. package/dist/commonjs/api/beta/agents/operations.js +4 -239
  157. package/dist/commonjs/api/beta/agents/operations.js.map +2 -2
  158. package/dist/commonjs/api/beta/agents/options.d.ts +0 -56
  159. package/dist/commonjs/api/beta/agents/options.d.ts.map +1 -1
  160. package/dist/commonjs/api/beta/agents/options.js.map +1 -1
  161. package/dist/commonjs/api/beta/evaluators/index.d.ts +2 -2
  162. package/dist/commonjs/api/beta/evaluators/index.d.ts.map +1 -1
  163. package/dist/commonjs/api/beta/evaluators/index.js +2 -24
  164. package/dist/commonjs/api/beta/evaluators/index.js.map +2 -2
  165. package/dist/commonjs/api/beta/evaluators/operations.d.ts +2 -59
  166. package/dist/commonjs/api/beta/evaluators/operations.d.ts.map +1 -1
  167. package/dist/commonjs/api/beta/evaluators/operations.js +2 -497
  168. package/dist/commonjs/api/beta/evaluators/operations.js.map +2 -2
  169. package/dist/commonjs/api/beta/evaluators/options.d.ts +0 -84
  170. package/dist/commonjs/api/beta/evaluators/options.d.ts.map +1 -1
  171. package/dist/commonjs/api/beta/evaluators/options.js.map +1 -1
  172. package/dist/commonjs/api/datasets/index.d.ts +2 -2
  173. package/dist/commonjs/api/datasets/index.d.ts.map +1 -1
  174. package/dist/commonjs/api/datasets/index.js +10 -0
  175. package/dist/commonjs/api/datasets/index.js.map +2 -2
  176. package/dist/commonjs/api/datasets/operations.d.ts +23 -2
  177. package/dist/commonjs/api/datasets/operations.d.ts.map +1 -1
  178. package/dist/commonjs/api/datasets/operations.js +245 -0
  179. package/dist/commonjs/api/datasets/operations.js.map +2 -2
  180. package/dist/commonjs/api/datasets/options.d.ts +52 -0
  181. package/dist/commonjs/api/datasets/options.d.ts.map +1 -1
  182. package/dist/commonjs/api/datasets/options.js.map +1 -1
  183. package/dist/commonjs/api/evaluators/index.d.ts +3 -0
  184. package/dist/commonjs/api/evaluators/index.d.ts.map +1 -0
  185. package/dist/commonjs/api/{beta/datasets → evaluators}/index.js +17 -5
  186. package/dist/commonjs/api/evaluators/index.js.map +7 -0
  187. package/dist/commonjs/api/evaluators/operations.d.ts +62 -0
  188. package/dist/commonjs/api/evaluators/operations.d.ts.map +1 -0
  189. package/dist/commonjs/api/evaluators/operations.js +505 -0
  190. package/dist/commonjs/api/evaluators/operations.js.map +7 -0
  191. package/dist/commonjs/api/evaluators/options.d.ts +70 -0
  192. package/dist/commonjs/api/evaluators/options.d.ts.map +1 -0
  193. package/dist/commonjs/api/evaluators/options.js.map +7 -0
  194. package/dist/commonjs/classic/agents/index.d.ts +21 -2
  195. package/dist/commonjs/classic/agents/index.d.ts.map +1 -1
  196. package/dist/commonjs/classic/agents/index.js +9 -0
  197. package/dist/commonjs/classic/agents/index.js.map +2 -2
  198. package/dist/commonjs/classic/beta/agents/index.d.ts +4 -15
  199. package/dist/commonjs/classic/beta/agents/index.d.ts.map +1 -1
  200. package/dist/commonjs/classic/beta/agents/index.js +9 -10
  201. package/dist/commonjs/classic/beta/agents/index.js.map +2 -2
  202. package/dist/commonjs/classic/beta/evaluators/index.d.ts +3 -38
  203. package/dist/commonjs/classic/beta/evaluators/index.d.ts.map +1 -1
  204. package/dist/commonjs/classic/beta/evaluators/index.js +2 -18
  205. package/dist/commonjs/classic/beta/evaluators/index.js.map +2 -2
  206. package/dist/commonjs/classic/beta/index.d.ts +2 -4
  207. package/dist/commonjs/classic/beta/index.d.ts.map +1 -1
  208. package/dist/commonjs/classic/beta/index.js +9 -6
  209. package/dist/commonjs/classic/beta/index.js.map +2 -2
  210. package/dist/commonjs/classic/beta/voiceAgents/conversations/index.d.ts +2 -1
  211. package/dist/commonjs/classic/beta/voiceAgents/conversations/index.d.ts.map +1 -1
  212. package/dist/commonjs/classic/beta/voiceAgents/conversations/index.js +10 -4
  213. package/dist/commonjs/classic/beta/voiceAgents/conversations/index.js.map +2 -2
  214. package/dist/commonjs/classic/beta/voiceAgents/index.d.ts +3 -2
  215. package/dist/commonjs/classic/beta/voiceAgents/index.d.ts.map +1 -1
  216. package/dist/commonjs/classic/beta/voiceAgents/index.js +4 -4
  217. package/dist/commonjs/classic/beta/voiceAgents/index.js.map +2 -2
  218. package/dist/commonjs/classic/beta/voiceAgents/telephony/index.d.ts +2 -1
  219. package/dist/commonjs/classic/beta/voiceAgents/telephony/index.d.ts.map +1 -1
  220. package/dist/commonjs/classic/beta/voiceAgents/telephony/index.js +33 -11
  221. package/dist/commonjs/classic/beta/voiceAgents/telephony/index.js.map +2 -2
  222. package/dist/commonjs/classic/datasets/index.d.ts +13 -2
  223. package/dist/commonjs/classic/datasets/index.d.ts.map +1 -1
  224. package/dist/commonjs/classic/datasets/index.js +5 -0
  225. package/dist/commonjs/classic/datasets/index.js.map +2 -2
  226. package/dist/commonjs/classic/evaluators/index.d.ts +43 -0
  227. package/dist/commonjs/classic/evaluators/index.d.ts.map +1 -0
  228. package/dist/commonjs/classic/{beta/datasets → evaluators}/index.js +15 -14
  229. package/dist/commonjs/classic/evaluators/index.js.map +7 -0
  230. package/dist/commonjs/classic/index.d.ts +1 -1
  231. package/dist/commonjs/classic/index.d.ts.map +1 -1
  232. package/dist/commonjs/classic/index.js.map +1 -1
  233. package/dist/commonjs/constants.d.ts +1 -1
  234. package/dist/commonjs/constants.js +1 -1
  235. package/dist/commonjs/constants.js.map +1 -1
  236. package/dist/commonjs/index.d.ts +10 -17
  237. package/dist/commonjs/index.d.ts.map +1 -1
  238. package/dist/commonjs/index.js +1 -2
  239. package/dist/commonjs/index.js.map +3 -3
  240. package/dist/commonjs/models/index.d.ts +1 -3
  241. package/dist/commonjs/models/index.d.ts.map +1 -1
  242. package/dist/commonjs/models/index.js.map +1 -1
  243. package/dist/commonjs/models/models.d.ts +1081 -536
  244. package/dist/commonjs/models/models.d.ts.map +1 -1
  245. package/dist/commonjs/models/models.js +1803 -722
  246. package/dist/commonjs/models/models.js.map +2 -2
  247. package/dist/commonjs/package.json +1 -1
  248. package/dist/commonjs/realtime/voiceAgentRealtimeClient.d.ts +27 -2
  249. package/dist/commonjs/realtime/voiceAgentRealtimeClient.d.ts.map +1 -1
  250. package/dist/commonjs/realtime/voiceAgentRealtimeClient.js +98 -27
  251. package/dist/commonjs/realtime/voiceAgentRealtimeClient.js.map +2 -2
  252. package/dist/commonjs/tracing/configuration.d.ts +3 -5
  253. package/dist/commonjs/tracing/configuration.d.ts.map +1 -1
  254. package/dist/commonjs/tracing/configuration.js +5 -1
  255. package/dist/commonjs/tracing/configuration.js.map +2 -2
  256. package/dist/commonjs/tracing/tracingClient.d.ts +1 -1
  257. package/dist/commonjs/tracing/tracingClient.d.ts.map +1 -1
  258. package/dist/commonjs/tracing/tracingClient.js +2 -2
  259. package/dist/commonjs/tracing/tracingClient.js.map +2 -2
  260. package/dist/commonjs/tracing/voiceAgentTracing.d.ts +63 -0
  261. package/dist/commonjs/tracing/voiceAgentTracing.d.ts.map +1 -0
  262. package/dist/commonjs/tracing/voiceAgentTracing.js +705 -0
  263. package/dist/commonjs/tracing/voiceAgentTracing.js.map +7 -0
  264. package/dist/commonjs/tsdoc-metadata.json +1 -1
  265. package/dist/esm/aiProjectClient.d.ts +4 -0
  266. package/dist/esm/aiProjectClient.d.ts.map +1 -1
  267. package/dist/esm/aiProjectClient.js +6 -1
  268. package/dist/esm/aiProjectClient.js.map +1 -1
  269. package/dist/esm/api/agents/index.d.ts +2 -2
  270. package/dist/esm/api/agents/index.d.ts.map +1 -1
  271. package/dist/esm/api/agents/index.js +1 -1
  272. package/dist/esm/api/agents/index.js.map +1 -1
  273. package/dist/esm/api/agents/operations.d.ts +41 -4
  274. package/dist/esm/api/agents/operations.d.ts.map +1 -1
  275. package/dist/esm/api/agents/operations.js +322 -21
  276. package/dist/esm/api/agents/operations.js.map +1 -1
  277. package/dist/esm/api/agents/options.d.ts +163 -93
  278. package/dist/esm/api/agents/options.d.ts.map +1 -1
  279. package/dist/esm/api/agents/options.js.map +1 -1
  280. package/dist/esm/api/beta/agents/index.d.ts +2 -2
  281. package/dist/esm/api/beta/agents/index.d.ts.map +1 -1
  282. package/dist/esm/api/beta/agents/index.js +1 -1
  283. package/dist/esm/api/beta/agents/index.js.map +1 -1
  284. package/dist/esm/api/beta/agents/operations.d.ts +2 -24
  285. package/dist/esm/api/beta/agents/operations.d.ts.map +1 -1
  286. package/dist/esm/api/beta/agents/operations.js +3 -185
  287. package/dist/esm/api/beta/agents/operations.js.map +1 -1
  288. package/dist/esm/api/beta/agents/options.d.ts +0 -56
  289. package/dist/esm/api/beta/agents/options.d.ts.map +1 -1
  290. package/dist/esm/api/beta/agents/options.js.map +1 -1
  291. package/dist/esm/api/beta/evaluators/index.d.ts +2 -2
  292. package/dist/esm/api/beta/evaluators/index.d.ts.map +1 -1
  293. package/dist/esm/api/beta/evaluators/index.js +1 -1
  294. package/dist/esm/api/beta/evaluators/index.js.map +1 -1
  295. package/dist/esm/api/beta/evaluators/operations.d.ts +2 -59
  296. package/dist/esm/api/beta/evaluators/operations.d.ts.map +1 -1
  297. package/dist/esm/api/beta/evaluators/operations.js +1 -388
  298. package/dist/esm/api/beta/evaluators/operations.js.map +1 -1
  299. package/dist/esm/api/beta/evaluators/options.d.ts +0 -84
  300. package/dist/esm/api/beta/evaluators/options.d.ts.map +1 -1
  301. package/dist/esm/api/beta/evaluators/options.js.map +1 -1
  302. package/dist/esm/api/datasets/index.d.ts +2 -2
  303. package/dist/esm/api/datasets/index.d.ts.map +1 -1
  304. package/dist/esm/api/datasets/index.js +1 -1
  305. package/dist/esm/api/datasets/index.js.map +1 -1
  306. package/dist/esm/api/datasets/operations.d.ts +23 -2
  307. package/dist/esm/api/datasets/operations.d.ts.map +1 -1
  308. package/dist/esm/api/datasets/operations.js +193 -1
  309. package/dist/esm/api/datasets/operations.js.map +1 -1
  310. package/dist/esm/api/datasets/options.d.ts +52 -0
  311. package/dist/esm/api/datasets/options.d.ts.map +1 -1
  312. package/dist/esm/api/datasets/options.js.map +1 -1
  313. package/dist/esm/api/evaluators/index.d.ts +3 -0
  314. package/dist/esm/api/evaluators/index.d.ts.map +1 -0
  315. package/dist/esm/api/evaluators/index.js +4 -0
  316. package/dist/esm/api/evaluators/index.js.map +1 -0
  317. package/dist/esm/api/evaluators/operations.d.ts +62 -0
  318. package/dist/esm/api/evaluators/operations.d.ts.map +1 -0
  319. package/dist/esm/api/evaluators/operations.js +373 -0
  320. package/dist/esm/api/evaluators/operations.js.map +1 -0
  321. package/dist/esm/api/evaluators/options.d.ts +70 -0
  322. package/dist/esm/api/evaluators/options.d.ts.map +1 -0
  323. package/dist/esm/api/evaluators/options.js.map +1 -0
  324. package/dist/esm/classic/agents/index.d.ts +21 -2
  325. package/dist/esm/classic/agents/index.d.ts.map +1 -1
  326. package/dist/esm/classic/agents/index.js +10 -1
  327. package/dist/esm/classic/agents/index.js.map +1 -1
  328. package/dist/esm/classic/beta/agents/index.d.ts +4 -15
  329. package/dist/esm/classic/beta/agents/index.d.ts.map +1 -1
  330. package/dist/esm/classic/beta/agents/index.js +4 -11
  331. package/dist/esm/classic/beta/agents/index.js.map +1 -1
  332. package/dist/esm/classic/beta/evaluators/index.d.ts +3 -38
  333. package/dist/esm/classic/beta/evaluators/index.d.ts.map +1 -1
  334. package/dist/esm/classic/beta/evaluators/index.js +2 -18
  335. package/dist/esm/classic/beta/evaluators/index.js.map +1 -1
  336. package/dist/esm/classic/beta/index.d.ts +2 -4
  337. package/dist/esm/classic/beta/index.d.ts.map +1 -1
  338. package/dist/esm/classic/beta/index.js +3 -6
  339. package/dist/esm/classic/beta/index.js.map +1 -1
  340. package/dist/esm/classic/beta/voiceAgents/conversations/index.d.ts +2 -1
  341. package/dist/esm/classic/beta/voiceAgents/conversations/index.d.ts.map +1 -1
  342. package/dist/esm/classic/beta/voiceAgents/conversations/index.js +5 -4
  343. package/dist/esm/classic/beta/voiceAgents/conversations/index.js.map +1 -1
  344. package/dist/esm/classic/beta/voiceAgents/index.d.ts +3 -2
  345. package/dist/esm/classic/beta/voiceAgents/index.d.ts.map +1 -1
  346. package/dist/esm/classic/beta/voiceAgents/index.js +5 -5
  347. package/dist/esm/classic/beta/voiceAgents/index.js.map +1 -1
  348. package/dist/esm/classic/beta/voiceAgents/telephony/index.d.ts +2 -1
  349. package/dist/esm/classic/beta/voiceAgents/telephony/index.d.ts.map +1 -1
  350. package/dist/esm/classic/beta/voiceAgents/telephony/index.js +16 -11
  351. package/dist/esm/classic/beta/voiceAgents/telephony/index.js.map +1 -1
  352. package/dist/esm/classic/datasets/index.d.ts +13 -2
  353. package/dist/esm/classic/datasets/index.d.ts.map +1 -1
  354. package/dist/esm/classic/datasets/index.js +6 -1
  355. package/dist/esm/classic/datasets/index.js.map +1 -1
  356. package/dist/esm/classic/evaluators/index.d.ts +43 -0
  357. package/dist/esm/classic/evaluators/index.d.ts.map +1 -0
  358. package/dist/esm/classic/evaluators/index.js +19 -0
  359. package/dist/esm/classic/evaluators/index.js.map +1 -0
  360. package/dist/esm/classic/index.d.ts +1 -1
  361. package/dist/esm/classic/index.d.ts.map +1 -1
  362. package/dist/esm/classic/index.js.map +1 -1
  363. package/dist/esm/constants.d.ts +1 -1
  364. package/dist/esm/constants.js +1 -1
  365. package/dist/esm/constants.js.map +1 -1
  366. package/dist/esm/index.d.ts +10 -17
  367. package/dist/esm/index.d.ts.map +1 -1
  368. package/dist/esm/index.js +1 -2
  369. package/dist/esm/index.js.map +1 -1
  370. package/dist/esm/models/index.d.ts +1 -3
  371. package/dist/esm/models/index.d.ts.map +1 -1
  372. package/dist/esm/models/index.js.map +1 -1
  373. package/dist/esm/models/models.d.ts +1081 -536
  374. package/dist/esm/models/models.d.ts.map +1 -1
  375. package/dist/esm/models/models.js +1554 -655
  376. package/dist/esm/models/models.js.map +1 -1
  377. package/dist/esm/package.json +1 -1
  378. package/dist/esm/realtime/voiceAgentRealtimeClient.d.ts +27 -2
  379. package/dist/esm/realtime/voiceAgentRealtimeClient.d.ts.map +1 -1
  380. package/dist/esm/realtime/voiceAgentRealtimeClient.js +97 -17
  381. package/dist/esm/realtime/voiceAgentRealtimeClient.js.map +1 -1
  382. package/dist/esm/tracing/configuration.d.ts +3 -5
  383. package/dist/esm/tracing/configuration.d.ts.map +1 -1
  384. package/dist/esm/tracing/configuration.js +8 -6
  385. package/dist/esm/tracing/configuration.js.map +1 -1
  386. package/dist/esm/tracing/tracingClient.d.ts +1 -1
  387. package/dist/esm/tracing/tracingClient.d.ts.map +1 -1
  388. package/dist/esm/tracing/tracingClient.js +2 -2
  389. package/dist/esm/tracing/tracingClient.js.map +1 -1
  390. package/dist/esm/tracing/voiceAgentTracing.d.ts +63 -0
  391. package/dist/esm/tracing/voiceAgentTracing.d.ts.map +1 -0
  392. package/dist/esm/tracing/voiceAgentTracing.js +740 -0
  393. package/dist/esm/tracing/voiceAgentTracing.js.map +1 -0
  394. package/dist/react-native/aiProjectClient.d.ts +4 -0
  395. package/dist/react-native/aiProjectClient.d.ts.map +1 -1
  396. package/dist/react-native/aiProjectClient.js +6 -1
  397. package/dist/react-native/aiProjectClient.js.map +1 -1
  398. package/dist/react-native/api/agents/index.d.ts +2 -2
  399. package/dist/react-native/api/agents/index.d.ts.map +1 -1
  400. package/dist/react-native/api/agents/index.js +1 -1
  401. package/dist/react-native/api/agents/index.js.map +1 -1
  402. package/dist/react-native/api/agents/operations.d.ts +41 -4
  403. package/dist/react-native/api/agents/operations.d.ts.map +1 -1
  404. package/dist/react-native/api/agents/operations.js +322 -21
  405. package/dist/react-native/api/agents/operations.js.map +1 -1
  406. package/dist/react-native/api/agents/options.d.ts +163 -93
  407. package/dist/react-native/api/agents/options.d.ts.map +1 -1
  408. package/dist/react-native/api/agents/options.js.map +1 -1
  409. package/dist/react-native/api/beta/agents/index.d.ts +2 -2
  410. package/dist/react-native/api/beta/agents/index.d.ts.map +1 -1
  411. package/dist/react-native/api/beta/agents/index.js +1 -1
  412. package/dist/react-native/api/beta/agents/index.js.map +1 -1
  413. package/dist/react-native/api/beta/agents/operations.d.ts +2 -24
  414. package/dist/react-native/api/beta/agents/operations.d.ts.map +1 -1
  415. package/dist/react-native/api/beta/agents/operations.js +3 -185
  416. package/dist/react-native/api/beta/agents/operations.js.map +1 -1
  417. package/dist/react-native/api/beta/agents/options.d.ts +0 -56
  418. package/dist/react-native/api/beta/agents/options.d.ts.map +1 -1
  419. package/dist/react-native/api/beta/agents/options.js.map +1 -1
  420. package/dist/react-native/api/beta/evaluators/index.d.ts +2 -2
  421. package/dist/react-native/api/beta/evaluators/index.d.ts.map +1 -1
  422. package/dist/react-native/api/beta/evaluators/index.js +1 -1
  423. package/dist/react-native/api/beta/evaluators/index.js.map +1 -1
  424. package/dist/react-native/api/beta/evaluators/operations.d.ts +2 -59
  425. package/dist/react-native/api/beta/evaluators/operations.d.ts.map +1 -1
  426. package/dist/react-native/api/beta/evaluators/operations.js +1 -388
  427. package/dist/react-native/api/beta/evaluators/operations.js.map +1 -1
  428. package/dist/react-native/api/beta/evaluators/options.d.ts +0 -84
  429. package/dist/react-native/api/beta/evaluators/options.d.ts.map +1 -1
  430. package/dist/react-native/api/beta/evaluators/options.js.map +1 -1
  431. package/dist/react-native/api/datasets/index.d.ts +2 -2
  432. package/dist/react-native/api/datasets/index.d.ts.map +1 -1
  433. package/dist/react-native/api/datasets/index.js +1 -1
  434. package/dist/react-native/api/datasets/index.js.map +1 -1
  435. package/dist/react-native/api/datasets/operations.d.ts +23 -2
  436. package/dist/react-native/api/datasets/operations.d.ts.map +1 -1
  437. package/dist/react-native/api/datasets/operations.js +193 -1
  438. package/dist/react-native/api/datasets/operations.js.map +1 -1
  439. package/dist/react-native/api/datasets/options.d.ts +52 -0
  440. package/dist/react-native/api/datasets/options.d.ts.map +1 -1
  441. package/dist/react-native/api/datasets/options.js.map +1 -1
  442. package/dist/react-native/api/evaluators/index.d.ts +3 -0
  443. package/dist/react-native/api/evaluators/index.d.ts.map +1 -0
  444. package/dist/react-native/api/evaluators/index.js +4 -0
  445. package/dist/react-native/api/evaluators/index.js.map +1 -0
  446. package/dist/react-native/api/evaluators/operations.d.ts +62 -0
  447. package/dist/react-native/api/evaluators/operations.d.ts.map +1 -0
  448. package/dist/react-native/api/evaluators/operations.js +373 -0
  449. package/dist/react-native/api/evaluators/operations.js.map +1 -0
  450. package/dist/react-native/api/evaluators/options.d.ts +70 -0
  451. package/dist/react-native/api/evaluators/options.d.ts.map +1 -0
  452. package/dist/react-native/api/evaluators/options.js.map +1 -0
  453. package/dist/react-native/classic/agents/index.d.ts +21 -2
  454. package/dist/react-native/classic/agents/index.d.ts.map +1 -1
  455. package/dist/react-native/classic/agents/index.js +10 -1
  456. package/dist/react-native/classic/agents/index.js.map +1 -1
  457. package/dist/react-native/classic/beta/agents/index.d.ts +4 -15
  458. package/dist/react-native/classic/beta/agents/index.d.ts.map +1 -1
  459. package/dist/react-native/classic/beta/agents/index.js +4 -11
  460. package/dist/react-native/classic/beta/agents/index.js.map +1 -1
  461. package/dist/react-native/classic/beta/evaluators/index.d.ts +3 -38
  462. package/dist/react-native/classic/beta/evaluators/index.d.ts.map +1 -1
  463. package/dist/react-native/classic/beta/evaluators/index.js +2 -18
  464. package/dist/react-native/classic/beta/evaluators/index.js.map +1 -1
  465. package/dist/react-native/classic/beta/index.d.ts +2 -4
  466. package/dist/react-native/classic/beta/index.d.ts.map +1 -1
  467. package/dist/react-native/classic/beta/index.js +3 -6
  468. package/dist/react-native/classic/beta/index.js.map +1 -1
  469. package/dist/react-native/classic/beta/voiceAgents/conversations/index.d.ts +2 -1
  470. package/dist/react-native/classic/beta/voiceAgents/conversations/index.d.ts.map +1 -1
  471. package/dist/react-native/classic/beta/voiceAgents/conversations/index.js +5 -4
  472. package/dist/react-native/classic/beta/voiceAgents/conversations/index.js.map +1 -1
  473. package/dist/react-native/classic/beta/voiceAgents/index.d.ts +3 -2
  474. package/dist/react-native/classic/beta/voiceAgents/index.d.ts.map +1 -1
  475. package/dist/react-native/classic/beta/voiceAgents/index.js +5 -5
  476. package/dist/react-native/classic/beta/voiceAgents/index.js.map +1 -1
  477. package/dist/react-native/classic/beta/voiceAgents/telephony/index.d.ts +2 -1
  478. package/dist/react-native/classic/beta/voiceAgents/telephony/index.d.ts.map +1 -1
  479. package/dist/react-native/classic/beta/voiceAgents/telephony/index.js +16 -11
  480. package/dist/react-native/classic/beta/voiceAgents/telephony/index.js.map +1 -1
  481. package/dist/react-native/classic/datasets/index.d.ts +13 -2
  482. package/dist/react-native/classic/datasets/index.d.ts.map +1 -1
  483. package/dist/react-native/classic/datasets/index.js +6 -1
  484. package/dist/react-native/classic/datasets/index.js.map +1 -1
  485. package/dist/react-native/classic/evaluators/index.d.ts +43 -0
  486. package/dist/react-native/classic/evaluators/index.d.ts.map +1 -0
  487. package/dist/react-native/classic/evaluators/index.js +19 -0
  488. package/dist/react-native/classic/evaluators/index.js.map +1 -0
  489. package/dist/react-native/classic/index.d.ts +1 -1
  490. package/dist/react-native/classic/index.d.ts.map +1 -1
  491. package/dist/react-native/classic/index.js.map +1 -1
  492. package/dist/react-native/constants.d.ts +1 -1
  493. package/dist/react-native/constants.js +1 -1
  494. package/dist/react-native/constants.js.map +1 -1
  495. package/dist/react-native/index.d.ts +10 -17
  496. package/dist/react-native/index.d.ts.map +1 -1
  497. package/dist/react-native/index.js +1 -2
  498. package/dist/react-native/index.js.map +1 -1
  499. package/dist/react-native/models/index.d.ts +1 -3
  500. package/dist/react-native/models/index.d.ts.map +1 -1
  501. package/dist/react-native/models/index.js.map +1 -1
  502. package/dist/react-native/models/models.d.ts +1081 -536
  503. package/dist/react-native/models/models.d.ts.map +1 -1
  504. package/dist/react-native/models/models.js +1554 -655
  505. package/dist/react-native/models/models.js.map +1 -1
  506. package/dist/react-native/package.json +1 -1
  507. package/dist/react-native/realtime/voiceAgentRealtimeClient.d.ts +27 -2
  508. package/dist/react-native/realtime/voiceAgentRealtimeClient.d.ts.map +1 -1
  509. package/dist/react-native/realtime/voiceAgentRealtimeClient.js +97 -17
  510. package/dist/react-native/realtime/voiceAgentRealtimeClient.js.map +1 -1
  511. package/dist/react-native/tracing/configuration.d.ts +3 -5
  512. package/dist/react-native/tracing/configuration.d.ts.map +1 -1
  513. package/dist/react-native/tracing/configuration.js +8 -6
  514. package/dist/react-native/tracing/configuration.js.map +1 -1
  515. package/dist/react-native/tracing/tracingClient.d.ts +1 -1
  516. package/dist/react-native/tracing/tracingClient.d.ts.map +1 -1
  517. package/dist/react-native/tracing/tracingClient.js +2 -2
  518. package/dist/react-native/tracing/tracingClient.js.map +1 -1
  519. package/dist/react-native/tracing/voiceAgentTracing.d.ts +63 -0
  520. package/dist/react-native/tracing/voiceAgentTracing.d.ts.map +1 -0
  521. package/dist/react-native/tracing/voiceAgentTracing.js +740 -0
  522. package/dist/react-native/tracing/voiceAgentTracing.js.map +1 -0
  523. package/dist/react-native/webSocketTransport-browser.d.mts +1 -0
  524. package/dist/react-native/webSocketTransport-browser.d.mts.map +1 -1
  525. package/dist/react-native/webSocketTransport-browser.mjs +5 -13
  526. package/dist/react-native/webSocketTransport-browser.mjs.map +1 -1
  527. package/package.json +9 -9
  528. package/dist/browser/api/beta/datasets/index.d.ts +0 -3
  529. package/dist/browser/api/beta/datasets/index.d.ts.map +0 -1
  530. package/dist/browser/api/beta/datasets/index.js +0 -4
  531. package/dist/browser/api/beta/datasets/index.js.map +0 -1
  532. package/dist/browser/api/beta/datasets/operations.d.ts +0 -27
  533. package/dist/browser/api/beta/datasets/operations.d.ts.map +0 -1
  534. package/dist/browser/api/beta/datasets/operations.js +0 -184
  535. package/dist/browser/api/beta/datasets/operations.js.map +0 -1
  536. package/dist/browser/api/beta/datasets/options.d.ts +0 -58
  537. package/dist/browser/api/beta/datasets/options.d.ts.map +0 -1
  538. package/dist/browser/api/beta/datasets/options.js.map +0 -1
  539. package/dist/browser/classic/beta/datasets/index.d.ts +0 -20
  540. package/dist/browser/classic/beta/datasets/index.d.ts.map +0 -1
  541. package/dist/browser/classic/beta/datasets/index.js +0 -18
  542. package/dist/browser/classic/beta/datasets/index.js.map +0 -1
  543. package/dist/commonjs/api/beta/datasets/index.d.ts +0 -3
  544. package/dist/commonjs/api/beta/datasets/index.d.ts.map +0 -1
  545. package/dist/commonjs/api/beta/datasets/index.js.map +0 -7
  546. package/dist/commonjs/api/beta/datasets/operations.d.ts +0 -27
  547. package/dist/commonjs/api/beta/datasets/operations.d.ts.map +0 -1
  548. package/dist/commonjs/api/beta/datasets/operations.js +0 -259
  549. package/dist/commonjs/api/beta/datasets/operations.js.map +0 -7
  550. package/dist/commonjs/api/beta/datasets/options.d.ts +0 -58
  551. package/dist/commonjs/api/beta/datasets/options.d.ts.map +0 -1
  552. package/dist/commonjs/api/beta/datasets/options.js.map +0 -7
  553. package/dist/commonjs/classic/beta/datasets/index.d.ts +0 -20
  554. package/dist/commonjs/classic/beta/datasets/index.d.ts.map +0 -1
  555. package/dist/commonjs/classic/beta/datasets/index.js.map +0 -7
  556. package/dist/esm/api/beta/datasets/index.d.ts +0 -3
  557. package/dist/esm/api/beta/datasets/index.d.ts.map +0 -1
  558. package/dist/esm/api/beta/datasets/index.js +0 -4
  559. package/dist/esm/api/beta/datasets/index.js.map +0 -1
  560. package/dist/esm/api/beta/datasets/operations.d.ts +0 -27
  561. package/dist/esm/api/beta/datasets/operations.d.ts.map +0 -1
  562. package/dist/esm/api/beta/datasets/operations.js +0 -184
  563. package/dist/esm/api/beta/datasets/operations.js.map +0 -1
  564. package/dist/esm/api/beta/datasets/options.d.ts +0 -58
  565. package/dist/esm/api/beta/datasets/options.d.ts.map +0 -1
  566. package/dist/esm/api/beta/datasets/options.js.map +0 -1
  567. package/dist/esm/classic/beta/datasets/index.d.ts +0 -20
  568. package/dist/esm/classic/beta/datasets/index.d.ts.map +0 -1
  569. package/dist/esm/classic/beta/datasets/index.js +0 -18
  570. package/dist/esm/classic/beta/datasets/index.js.map +0 -1
  571. package/dist/react-native/api/beta/datasets/index.d.ts +0 -3
  572. package/dist/react-native/api/beta/datasets/index.d.ts.map +0 -1
  573. package/dist/react-native/api/beta/datasets/index.js +0 -4
  574. package/dist/react-native/api/beta/datasets/index.js.map +0 -1
  575. package/dist/react-native/api/beta/datasets/operations.d.ts +0 -27
  576. package/dist/react-native/api/beta/datasets/operations.d.ts.map +0 -1
  577. package/dist/react-native/api/beta/datasets/operations.js +0 -184
  578. package/dist/react-native/api/beta/datasets/operations.js.map +0 -1
  579. package/dist/react-native/api/beta/datasets/options.d.ts +0 -58
  580. package/dist/react-native/api/beta/datasets/options.d.ts.map +0 -1
  581. package/dist/react-native/api/beta/datasets/options.js.map +0 -1
  582. package/dist/react-native/classic/beta/datasets/index.d.ts +0 -20
  583. package/dist/react-native/classic/beta/datasets/index.d.ts.map +0 -1
  584. package/dist/react-native/classic/beta/datasets/index.js +0 -18
  585. package/dist/react-native/classic/beta/datasets/index.js.map +0 -1
  586. /package/dist/browser/api/{beta/datasets → evaluators}/options.js +0 -0
  587. /package/dist/commonjs/api/{beta/datasets → evaluators}/options.js +0 -0
  588. /package/dist/esm/api/{beta/datasets → evaluators}/options.js +0 -0
  589. /package/dist/react-native/api/{beta/datasets → evaluators}/options.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voiceAgentTracing.js","sourceRoot":"","sources":["../../../src/tracing/voiceAgentTracing.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Attributes, Context, Span } from \"@opentelemetry/api\";\nimport { SpanStatusCode } from \"@opentelemetry/api\";\nimport { isRestError } from \"@azure/core-rest-pipeline\";\nimport type { ResolvedTracingConfig } from \"./configuration.js\";\nimport type {\n VoiceAgentClientEvent,\n VoiceAgentRealtimeResponse,\n VoiceAgentTransport,\n} from \"../models/models.js\";\nimport type { VoiceAgentRealtimeEvent } from \"../realtime/events.js\";\nimport { logger } from \"../logger.js\";\nimport { setServerAttributes, parseEndpoint } from \"./attributes.js\";\nimport { startSpan, runInSpanContext } from \"./tracingClient.js\";\nimport { recordOperationDuration, recordTokenUsage } from \"./metrics.js\";\nimport {\n AGENTS_PROVIDER,\n AZ_NAMESPACE,\n AZ_NAMESPACE_VALUE,\n GEN_AI_PROVIDER_NAME,\n GEN_AI_OPERATION_NAME,\n GEN_AI_INPUT_MESSAGES,\n GEN_AI_OUTPUT_MESSAGES,\n GEN_AI_REQUEST_MODEL,\n GEN_AI_RESPONSE_ID,\n GEN_AI_CONVERSATION_ID,\n GEN_AI_USAGE_INPUT_TOKENS,\n GEN_AI_USAGE_OUTPUT_TOKENS,\n GEN_AI_TOOL_CALL_ID,\n ERROR_TYPE,\n} from \"./constants.js\";\n\nconst prefix = \"az.ai.voice_agents.\";\nconst maxResponses = 64;\nconst maxInputItems = 64;\nconst maxParts = 32;\nconst maxContentLength = 4096;\nconst safeErrorTypes = new Set([\n \"Error\",\n \"TypeError\",\n \"AbortError\",\n \"RestError\",\n \"VoiceAgentAuthenticationError\",\n \"VoiceAgentConnectionError\",\n \"VoiceAgentProtocolError\",\n \"invalid_request_error\",\n \"server_error\",\n \"authentication_error\",\n \"rate_limit_error\",\n]);\nconst safeErrorCodes = new Set([\n \"agent_disabled\",\n \"invalid_request\",\n \"invalid_request_error\",\n \"invalid_event\",\n \"invalid_state\",\n \"rate_limit_exceeded\",\n \"insufficient_quota\",\n \"session_expired\",\n \"authentication_error\",\n \"permission_denied\",\n \"server_error\",\n]);\n\nfunction serverErrorAttributes(type: unknown, code?: unknown): Attributes {\n const attributes: Attributes = {\n [ERROR_TYPE]: typeof type === \"string\" && safeErrorTypes.has(type) ? type : \"Error\",\n };\n if (typeof code === \"string\" && safeErrorCodes.has(code)) {\n attributes[`${prefix}error.code`] = code;\n }\n return attributes;\n}\n\n// Exporter/provider failures must not change a service operation's result.\nfunction recordTelemetry(action: () => void): void {\n try {\n action();\n } catch {\n logger.warning(\"Unable to record Voice Agents telemetry.\");\n }\n}\n\nfunction commonAttributes(span: Span, endpoint: string): void {\n span.setAttribute(GEN_AI_PROVIDER_NAME, AGENTS_PROVIDER);\n span.setAttribute(AZ_NAMESPACE, AZ_NAMESPACE_VALUE);\n setServerAttributes(span, endpoint);\n}\n\nfunction fail(span: Span, error: unknown): void {\n const type = isRestError(error)\n ? \"RestError\"\n : error instanceof Error && safeErrorTypes.has(error.name)\n ? error.name\n : \"Error\";\n span.setAttribute(ERROR_TYPE, type);\n if (isRestError(error) && error.statusCode !== undefined) {\n span.setAttribute(\"http.response.status_code\", error.statusCode);\n }\n span.setStatus({ code: SpanStatusCode.ERROR });\n}\n\n/** @internal */\nexport async function traceVoiceAgentOperation<T>(\n operationName: string,\n endpoint: string,\n config: ResolvedTracingConfig | undefined,\n operation: () => Promise<T>,\n resultAttributes?: (result: T) => Attributes,\n): Promise<T> {\n if (!config?.enabled) {\n return operation();\n }\n let recording: { span: Span; ctx: Context } | undefined;\n recordTelemetry(() => {\n recording = startSpan(operationName);\n commonAttributes(recording.span, endpoint);\n recording.span.setAttribute(\n operationName === \"create_agent\" ? GEN_AI_OPERATION_NAME : `${prefix}operation`,\n operationName.slice(operationName.lastIndexOf(\".\") + 1),\n );\n });\n if (!recording) return operation();\n const { span, ctx } = recording;\n try {\n const result = await runInSpanContext(ctx, operation);\n recordTelemetry(() => {\n if (resultAttributes) span.setAttributes(resultAttributes(result));\n });\n return result;\n } catch (error) {\n recordTelemetry(() => {\n if (!(error instanceof Error && error.name === \"AbortError\")) fail(span, error);\n else span.setAttribute(`${prefix}cancelled`, true);\n });\n throw error;\n } finally {\n recordTelemetry(() => span.end());\n }\n}\n\ninterface TrackedResponse {\n span: Span;\n started: number;\n firstAudioInSeconds?: number;\n audioBytes: number;\n model?: string;\n outputMessages: Map<string, MessageSummary>;\n outputParts: Map<string, { itemId: string; contentIndex: number; part: Record<string, unknown> }>;\n}\n\ninterface TrackedInputAudio {\n sequence: number;\n itemId?: string;\n pendingQueue?: PendingInputAudio;\n pendingSkipped?: boolean;\n pendingSend?: boolean;\n pendingTranscript?: string;\n}\n\ninterface PendingInputAudio {\n items: TrackedInputAudio[];\n skipped: number;\n}\n\ninterface ReservedInput {\n sequence: number;\n audio?: TrackedInputAudio;\n}\n\ninterface MessageSummary {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\";\n parts: Record<string, unknown>[];\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction limitedContent(value: unknown): string | undefined {\n return typeof value === \"string\" ? value.slice(0, maxContentLength) : undefined;\n}\n\nfunction messagePart(\n value: unknown,\n contentRecording: boolean,\n): Record<string, unknown> | undefined {\n const part = asRecord(value);\n const type = part?.type;\n if (\n !part ||\n typeof type !== \"string\" ||\n ![\"input_text\", \"output_text\", \"text\", \"input_audio\", \"output_audio\", \"audio\"].includes(type)\n ) {\n return undefined;\n }\n const audio = type.includes(\"audio\");\n const summary: Record<string, unknown> = { type: audio ? \"audio\" : \"text\" };\n if (contentRecording) {\n const content = limitedContent(audio ? part.transcript : part.text);\n if (content !== undefined) summary.content = content;\n }\n return summary;\n}\n\nfunction messages(item: unknown, contentRecording: boolean): MessageSummary | undefined {\n const record = asRecord(item);\n if (!record) return undefined;\n if (\n record.type === \"function_call\" ||\n record.type === \"function_call_output\" ||\n record.type === \"mcp_call\"\n ) {\n const part: Record<string, unknown> = {\n type: record.type === \"function_call_output\" ? \"tool_call_response\" : \"tool_call\",\n };\n if (typeof record.call_id === \"string\") part.id = record.call_id;\n if (contentRecording) {\n if (typeof record.name === \"string\") part.name = limitedContent(record.name);\n if (typeof record.arguments === \"string\") part.arguments = limitedContent(record.arguments);\n if (typeof record.output === \"string\") part.result = limitedContent(record.output);\n }\n return { role: record.type === \"function_call_output\" ? \"tool\" : \"assistant\", parts: [part] };\n }\n if (record.type !== \"message\") return undefined;\n const parts: Record<string, unknown>[] = [];\n if (Array.isArray(record.content)) {\n for (const value of record.content.slice(0, maxParts)) {\n const summary = messagePart(value, contentRecording);\n if (summary) parts.push(summary);\n }\n }\n const role = record.role === \"system\" || record.role === \"user\" ? record.role : \"assistant\";\n return parts.length ? { role, parts } : undefined;\n}\n\n/** Tracks SDK-observed realtime work, independently of the user's event iterator. @internal */\nexport class VoiceAgentRealtimeTracing {\n private readonly responses = new Map<string, TrackedResponse>();\n private session?: { span: Span; ctx: Context };\n private connectSpan?: Span;\n private ended = false;\n private connected = false;\n private model?: string;\n private inputAudioBytes = 0;\n private inputSequence = 0;\n private nextInputSequence = 0;\n private inputAudioBuffer?: TrackedInputAudio;\n private readonly inputAudioItems = new Map<string, TrackedInputAudio>();\n private readonly pendingAudioCommits: PendingInputAudio = { items: [], skipped: 0 };\n private readonly pendingAudioMessages: PendingInputAudio = { items: [], skipped: 0 };\n private pendingAudioClears = 0;\n private untrackedInputItems = 0;\n private finishedResponses = 0;\n private untrackedResponses = 0;\n\n public constructor(\n private readonly endpoint: string,\n private readonly config: ResolvedTracingConfig,\n transport: VoiceAgentTransport = \"websocket\",\n ) {\n recordTelemetry(() => {\n this.session = startSpan(\"voice_agents.realtime.session\");\n commonAttributes(this.session.span, endpoint);\n this.session.span.setAttribute(`${prefix}connection.transport`, transport);\n this.connectSpan = startSpan(\"voice_agents.realtime.connect\", this.session.ctx).span;\n commonAttributes(this.connectSpan, endpoint);\n this.connectSpan.setAttribute(`${prefix}connection.transport`, transport);\n });\n }\n\n public opened(): void {\n recordTelemetry(() => {\n if (this.ended) return;\n this.connected = true;\n this.connectSpan?.end();\n this.connectSpan = undefined;\n });\n }\n\n public reserveSend(event: VoiceAgentClientEvent): ReservedInput | undefined {\n let reservation: ReservedInput | undefined;\n recordTelemetry(() => {\n if (this.ended || !this.session || event.type !== \"conversation.item.create\") return;\n const summary = messages(event.item, this.config.contentRecording);\n const item = asRecord(event.item);\n if (!summary) return;\n reservation = { sequence: ++this.nextInputSequence };\n if (\n summary.role !== \"user\" ||\n !summary.parts.some((part) => part.type === \"audio\") ||\n typeof item?.id === \"string\" ||\n this.pendingAudioMessages.items.length >= maxInputItems ||\n this.pendingAudioMessages.skipped > 0\n ) {\n return;\n }\n reservation.audio = { sequence: reservation.sequence, pendingSend: true };\n this.enqueueInputAudio(this.pendingAudioMessages, reservation.audio);\n });\n return reservation;\n }\n\n public sent(event: VoiceAgentClientEvent, reservation?: ReservedInput): void {\n recordTelemetry(() => {\n if (this.ended || !this.session) return;\n if (event.type === \"input_audio_buffer.append\") {\n // Count decoded bytes without retaining or decoding the media.\n this.inputAudioBytes += Math.max(\n 0,\n Math.floor((event.audio.length * 3) / 4) -\n (event.audio.endsWith(\"==\") ? 2 : event.audio.endsWith(\"=\") ? 1 : 0),\n );\n if (!this.inputAudioBuffer) {\n this.inputAudioBuffer = this.startInputAudio();\n } else if (this.inputAudioBuffer.sequence !== this.inputSequence) {\n this.inputSequence = ++this.nextInputSequence;\n this.inputAudioBuffer.sequence = this.inputSequence;\n this.setInputAudioSummary();\n }\n } else if (event.type === \"input_audio_buffer.commit\") {\n if (this.inputAudioBuffer) {\n this.enqueueInputAudio(this.pendingAudioCommits, this.inputAudioBuffer);\n this.inputAudioBuffer = undefined;\n }\n } else if (event.type === \"input_audio_buffer.clear\") {\n this.inputAudioBuffer = undefined;\n this.pendingAudioClears++;\n } else if (event.type === \"conversation.item.create\") {\n const summary = messages(event.item, this.config.contentRecording);\n const item = asRecord(event.item);\n if (summary) {\n const sequence = reservation?.sequence ?? ++this.nextInputSequence;\n if (summary.role === \"user\" && summary.parts.some((part) => part.type === \"audio\")) {\n const input = reservation?.audio ?? { sequence };\n input.pendingSend = undefined;\n if (!reservation?.audio) {\n if (typeof item?.id === \"string\") {\n this.rememberInputAudio(item.id, input);\n } else {\n this.enqueueInputAudio(this.pendingAudioMessages, input);\n }\n }\n }\n if (sequence >= this.inputSequence) {\n this.inputSequence = sequence;\n this.session.span.setAttribute(GEN_AI_INPUT_MESSAGES, JSON.stringify([summary]));\n if (reservation?.audio?.pendingTranscript !== undefined) {\n this.setInputAudioSummary(reservation.audio.pendingTranscript);\n }\n }\n }\n if (item?.type === \"function_call_output\" && typeof item.call_id === \"string\") {\n this.session.span.addEvent(\"voice_agents.tool.output_sent\", {\n [GEN_AI_TOOL_CALL_ID]: item.call_id,\n });\n }\n } else if (event.type === \"response.cancel\") {\n this.session.span.addEvent(\"voice_agents.response.cancel_requested\");\n }\n });\n }\n\n public sendFailed(error: unknown, reservation?: ReservedInput): void {\n recordTelemetry(() => {\n if (reservation?.audio) this.rollbackPendingAudioMessage(reservation.audio);\n if (!this.ended) {\n this.session?.span.addEvent(\"voice_agents.send.failed\", {\n [ERROR_TYPE]:\n error instanceof Error && safeErrorTypes.has(error.name) ? error.name : \"Error\",\n });\n }\n });\n }\n\n public received(event: VoiceAgentRealtimeEvent): void {\n recordTelemetry(() => {\n if (this.ended || !this.session || event.type === \"unknown\") return;\n switch (event.type) {\n case \"session.created\":\n case \"session.updated\":\n this.model = event.session.model;\n this.session.span.setAttribute(`${prefix}session.id`, event.session.id);\n if (event.type === \"session.created\" && event.conversation_id) {\n this.session.span.setAttribute(GEN_AI_CONVERSATION_ID, event.conversation_id);\n }\n if (this.model) this.session.span.setAttribute(GEN_AI_REQUEST_MODEL, this.model);\n break;\n case \"input_audio_buffer.speech_started\":\n if (!this.inputAudioItems.has(event.item_id)) {\n const buffer = this.inputAudioBuffer;\n const input = buffer && buffer.itemId === undefined ? buffer : this.startInputAudio();\n this.rememberInputAudio(event.item_id, input);\n this.inputAudioBuffer = input;\n }\n break;\n case \"input_audio_buffer.committed\": {\n const pending =\n this.pendingAudioCommits.items.length > 0 || this.pendingAudioCommits.skipped > 0;\n let input = this.matchInputAudio(this.pendingAudioCommits, event.item_id);\n if (!input) {\n if (pending) break;\n input = this.inputAudioBuffer ?? this.startInputAudio();\n this.rememberInputAudio(event.item_id, input);\n }\n if (this.inputAudioBuffer === input) this.inputAudioBuffer = undefined;\n break;\n }\n case \"input_audio_buffer.cleared\":\n if (this.pendingAudioClears > 0) this.pendingAudioClears--;\n else this.inputAudioBuffer = undefined;\n break;\n case \"conversation.item.added\":\n case \"conversation.item.created\": {\n const item = asRecord(event.item);\n const summary = messages(event.item, false);\n if (\n typeof item?.id === \"string\" &&\n summary?.role === \"user\" &&\n summary.parts.some((part) => part.type === \"audio\")\n ) {\n this.matchInputAudio(this.pendingAudioMessages, item.id);\n }\n break;\n }\n case \"response.created\":\n this.beginResponse(event.response);\n break;\n case \"response.output_audio.delta\": {\n const tracked = this.responses.get(event.response_id);\n if (tracked) {\n tracked.audioBytes += event.delta.byteLength;\n if (event.delta.byteLength > 0) {\n tracked.firstAudioInSeconds ??= (performance.now() - tracked.started) / 1000;\n }\n }\n break;\n }\n case \"response.done\":\n this.endResponse(event.response);\n break;\n case \"response.output_text.done\":\n case \"response.output_audio_transcript.done\": {\n const tracked = this.responses.get(event.response_id);\n if (tracked) {\n const part: Record<string, unknown> = {\n type: event.type === \"response.output_text.done\" ? \"text\" : \"audio\",\n };\n if (this.config.contentRecording) {\n part.content = limitedContent(\n event.type === \"response.output_text.done\" ? event.text : event.transcript,\n );\n }\n this.recordOutputPart(tracked, event.item_id, event.content_index, part);\n }\n break;\n }\n case \"response.output_audio.done\": {\n const tracked = this.responses.get(event.response_id);\n if (tracked) {\n this.recordOutputPart(tracked, event.item_id, event.content_index, { type: \"audio\" });\n }\n break;\n }\n case \"response.function_call_arguments.done\": {\n const span = this.responses.get(event.response_id)?.span ?? this.session.span;\n const attributes: Attributes = {\n [GEN_AI_TOOL_CALL_ID]: event.call_id,\n [`${prefix}tool.kind`]: \"function\",\n };\n if (this.config.contentRecording) {\n attributes[\"gen_ai.tool.name\"] = limitedContent(event.name);\n attributes[`${prefix}tool.arguments`] = limitedContent(event.arguments);\n }\n span.addEvent(\"voice_agents.tool.requested\", attributes);\n const tracked = this.responses.get(event.response_id);\n const summary = messages(\n {\n type: \"function_call\",\n call_id: event.call_id,\n name: event.name,\n arguments: event.arguments,\n },\n this.config.contentRecording,\n );\n if (tracked && summary && tracked.outputMessages.size < maxParts) {\n tracked.outputMessages.set(`tool:${event.call_id}`, summary);\n }\n break;\n }\n case \"response.mcp_call.completed\":\n case \"response.mcp_call.failed\":\n this.session.span.addEvent(event.type, { [`${prefix}item.id`]: event.item_id });\n break;\n case \"session.subagent.started\":\n case \"session.subagent.completed\":\n case \"session.subagent.aborted\": {\n const attributes: Attributes = {\n [`${prefix}subagent.consultation.id`]: event.consultation_id,\n };\n if (\n event.type === \"session.subagent.aborted\" &&\n [\n \"unknown_target\",\n \"timeout\",\n \"cancelled\",\n \"stopped_by_user\",\n \"superseded\",\n \"failed\",\n ].includes(event.reason)\n ) {\n attributes[`${prefix}subagent.abort_reason`] = event.reason;\n }\n this.session.span.addEvent(event.type, attributes);\n break;\n }\n case \"error\":\n this.session.span.addEvent(\n \"voice_agents.server_error\",\n serverErrorAttributes(event.error.type, event.error.code),\n );\n break;\n case \"warning\":\n this.session.span.addEvent(\"voice_agents.warning\");\n break;\n case \"rtc.call.error\":\n this.session.span.addEvent(\n \"rtc.call.error\",\n serverErrorAttributes(event.error.type, event.error.code),\n );\n break;\n case \"conversation.item.input_audio_transcription.completed\": {\n const input = this.inputAudioItems.get(event.item_id);\n if (input?.pendingSend) {\n input.pendingTranscript = event.transcript;\n } else if (input?.sequence === this.inputSequence) {\n this.setInputAudioSummary(event.transcript);\n }\n this.session.span.addEvent(\"voice_agents.transcription.completed\");\n break;\n }\n case \"conversation.item.input_audio_transcription.failed\": {\n const input = this.inputAudioItems.get(event.item_id);\n if (input?.sequence === this.inputSequence) {\n this.setInputAudioSummary();\n }\n this.session.span.addEvent(\"voice_agents.transcription.failed\");\n break;\n }\n }\n });\n }\n\n private startInputAudio(): TrackedInputAudio {\n const input = { sequence: ++this.nextInputSequence };\n this.inputSequence = input.sequence;\n this.setInputAudioSummary();\n return input;\n }\n\n private enqueueInputAudio(queue: PendingInputAudio, input: TrackedInputAudio): void {\n input.pendingQueue = queue;\n if (queue.items.length >= maxInputItems || queue.skipped > 0) {\n input.pendingSkipped = true;\n queue.skipped++;\n this.untrackedInputItems++;\n } else {\n queue.items.push(input);\n }\n }\n\n private rollbackPendingAudioMessage(input: TrackedInputAudio): void {\n if (input.pendingQueue) {\n const index = input.pendingQueue.items.indexOf(input);\n if (index !== -1) {\n input.pendingQueue.items.splice(index, 1);\n } else if (input.pendingSkipped && input.pendingQueue.skipped > 0) {\n input.pendingQueue.skipped--;\n this.untrackedInputItems--;\n }\n input.pendingQueue = undefined;\n input.pendingSkipped = undefined;\n }\n if (input.itemId && this.inputAudioItems.get(input.itemId) === input) {\n this.inputAudioItems.delete(input.itemId);\n }\n input.pendingSend = undefined;\n input.pendingTranscript = undefined;\n }\n\n private matchInputAudio(queue: PendingInputAudio, itemId: string): TrackedInputAudio | undefined {\n const known = this.inputAudioItems.get(itemId);\n if (known) {\n if (known.pendingQueue === queue) {\n const index = queue.items.indexOf(known);\n if (index !== -1) queue.items.splice(index, 1);\n else if (known.pendingSkipped && queue.skipped > 0) queue.skipped--;\n known.pendingQueue = undefined;\n known.pendingSkipped = undefined;\n }\n return known;\n }\n // Match ordered commit/create acknowledgements, never asynchronous ASR completion order.\n const input = queue.items.shift();\n if (input) {\n input.pendingQueue = undefined;\n this.rememberInputAudio(itemId, input);\n return input;\n }\n if (queue.skipped > 0) queue.skipped--;\n return undefined;\n }\n\n private rememberInputAudio(itemId: string, input: TrackedInputAudio): void {\n input.itemId = itemId;\n this.inputAudioItems.set(itemId, input);\n if (this.inputAudioItems.size > maxInputItems) {\n for (const [id, tracked] of this.inputAudioItems) {\n if (tracked.sequence !== this.inputSequence || id !== tracked.itemId) {\n this.inputAudioItems.delete(id);\n break;\n }\n }\n }\n }\n\n private setInputAudioSummary(transcript?: string): void {\n const parts: Record<string, unknown>[] = [{ type: \"audio\" }];\n if (this.config.contentRecording && transcript !== undefined) {\n parts[0].content = limitedContent(transcript);\n }\n this.session?.span.setAttribute(\n GEN_AI_INPUT_MESSAGES,\n JSON.stringify([{ role: \"user\", parts }]),\n );\n }\n\n private recordOutputPart(\n tracked: TrackedResponse,\n itemId: string,\n contentIndex: number,\n part: Record<string, unknown>,\n ): void {\n const key = `${itemId}:${contentIndex}:${part.type}`;\n const existing = tracked.outputParts.get(key);\n if (existing) {\n if (part.content !== undefined) existing.part.content = part.content;\n } else if (tracked.outputParts.size < maxParts) {\n tracked.outputParts.set(key, { itemId, contentIndex, part });\n }\n }\n\n private beginResponse(response: VoiceAgentRealtimeResponse): void {\n const id = response.id;\n if (!id || !this.session || this.responses.has(id)) return;\n if (this.responses.size >= maxResponses) {\n this.untrackedResponses++;\n return;\n }\n const { span } = startSpan(\"invoke_agent\", this.session.ctx);\n commonAttributes(span, this.endpoint);\n span.setAttribute(GEN_AI_OPERATION_NAME, \"invoke_agent\");\n span.setAttribute(GEN_AI_RESPONSE_ID, id);\n if (this.model) span.setAttribute(GEN_AI_REQUEST_MODEL, this.model);\n if (response.conversation_id) {\n span.setAttribute(GEN_AI_CONVERSATION_ID, response.conversation_id);\n }\n this.responses.set(id, {\n span,\n started: performance.now(),\n audioBytes: 0,\n model: this.model,\n outputMessages: new Map(),\n outputParts: new Map(),\n });\n }\n\n private endResponse(response: VoiceAgentRealtimeResponse): void {\n const id = response.id;\n const tracked = id ? this.responses.get(id) : undefined;\n if (!tracked || !id) return;\n this.responses.delete(id);\n const durationInSeconds = (performance.now() - tracked.started) / 1000;\n const { span } = tracked;\n if (response.status) span.setAttribute(`${prefix}response.status`, response.status);\n if (response.output_modalities) {\n span.setAttribute(`${prefix}response.output_modalities`, response.output_modalities);\n }\n if (response.usage?.input_tokens !== undefined) {\n span.setAttribute(GEN_AI_USAGE_INPUT_TOKENS, response.usage.input_tokens);\n }\n if (response.usage?.output_tokens !== undefined) {\n span.setAttribute(GEN_AI_USAGE_OUTPUT_TOKENS, response.usage.output_tokens);\n }\n this.flushObservedResponse(tracked, response);\n if (response.status === \"failed\") {\n span.setAttribute(ERROR_TYPE, \"response_failed\");\n span.setStatus({ code: SpanStatusCode.ERROR });\n } else if (response.status === \"completed\") {\n span.setStatus({ code: SpanStatusCode.OK });\n }\n const dimensions = {\n operationName: \"invoke_agent\",\n ...parseEndpoint(this.endpoint),\n responseModel: tracked.model,\n ...(response.status === \"failed\" ? { errorType: \"response_failed\" } : {}),\n };\n span.end();\n this.finishedResponses++;\n recordOperationDuration(durationInSeconds, dimensions);\n recordTokenUsage(response.usage?.input_tokens, response.usage?.output_tokens, dimensions);\n }\n\n private flushObservedResponse(\n tracked: TrackedResponse,\n response?: VoiceAgentRealtimeResponse,\n ): void {\n const { span } = tracked;\n span.setAttribute(`${prefix}output.audio.bytes`, tracked.audioBytes);\n if (tracked.firstAudioInSeconds !== undefined) {\n span.setAttribute(\n `${prefix}response.time_to_first_audio_seconds`,\n tracked.firstAudioInSeconds,\n );\n }\n const fallback = new Map(tracked.outputMessages);\n for (const observed of [...tracked.outputParts.values()].sort(\n (a, b) => a.contentIndex - b.contentIndex,\n )) {\n const message: MessageSummary = fallback.get(observed.itemId) ?? {\n role: \"assistant\",\n parts: [],\n };\n message.parts.push(observed.part);\n fallback.set(observed.itemId, message);\n }\n const output: MessageSummary[] = [];\n let unkeyedFinalItem = false;\n for (const item of response?.output?.slice(0, maxParts) ?? []) {\n const summary = messages(item, this.config.contentRecording);\n if (!summary) continue;\n const record = asRecord(item);\n const itemId =\n record?.type === \"function_call\" && typeof record.call_id === \"string\"\n ? `tool:${record.call_id}`\n : typeof record?.id === \"string\"\n ? record.id\n : typeof record?.call_id === \"string\"\n ? record.call_id\n : undefined;\n if (itemId) {\n fallback.delete(itemId);\n if (record?.type === \"message\" && Array.isArray(record.content)) {\n summary.parts = record.content.slice(0, maxParts).flatMap((value, index) => {\n const part = messagePart(value, this.config.contentRecording);\n if (!part) return [];\n const observed = tracked.outputParts.get(`${itemId}:${index}:${part.type}`);\n if (part.content === undefined && observed?.part.content !== undefined) {\n part.content = observed.part.content;\n }\n return [part];\n });\n }\n } else {\n // Final output is authoritative; don't guess identities for items without an ID.\n unkeyedFinalItem = true;\n }\n output.push(summary);\n }\n if (!unkeyedFinalItem) output.push(...fallback.values());\n if (output.length) {\n span.setAttribute(GEN_AI_OUTPUT_MESSAGES, JSON.stringify(output.slice(0, maxParts)));\n }\n }\n\n public close(code: number | undefined, wasClean: boolean, error?: unknown): void {\n if (this.ended) return;\n this.ended = true;\n recordTelemetry(() => {\n const cancelled = asRecord(error)?.code === \"operationCancelled\";\n if (this.connectSpan) {\n if (error && !cancelled) fail(this.connectSpan, error);\n this.connectSpan.end();\n this.connectSpan = undefined;\n }\n for (const tracked of this.responses.values()) {\n this.flushObservedResponse(tracked);\n tracked.span.setAttribute(`${prefix}response.status`, \"interrupted\");\n if (error && !cancelled) fail(tracked.span, error);\n tracked.span.end();\n recordOperationDuration((performance.now() - tracked.started) / 1000, {\n operationName: \"invoke_agent\",\n ...parseEndpoint(this.endpoint),\n responseModel: tracked.model,\n ...(error && !cancelled ? { errorType: \"response_interrupted\" } : {}),\n });\n }\n this.responses.clear();\n this.inputAudioItems.clear();\n this.pendingAudioCommits.items.length = 0;\n this.pendingAudioMessages.items.length = 0;\n this.inputAudioBuffer = undefined;\n if (!this.session) return;\n if (error && !cancelled) fail(this.session.span, error);\n if (cancelled) this.session.span.setAttribute(`${prefix}cancelled`, true);\n if (code !== undefined) this.session.span.setAttribute(`${prefix}close.code`, code);\n this.session.span.setAttribute(`${prefix}close.was_clean`, wasClean);\n this.session.span.setAttribute(`${prefix}input.audio.bytes`, this.inputAudioBytes);\n if (this.untrackedInputItems) {\n this.session.span.setAttribute(`${prefix}input.items.untracked`, this.untrackedInputItems);\n }\n this.session.span.setAttribute(`${prefix}responses.finished`, this.finishedResponses);\n if (this.untrackedResponses) {\n this.session.span.setAttribute(`${prefix}responses.untracked`, this.untrackedResponses);\n }\n this.session.span.setAttribute(`${prefix}connected`, this.connected);\n this.session.span.end();\n });\n }\n}\n"]}
@@ -6,6 +6,7 @@ import type { VoiceAgentWebSocketConnectOptions, VoiceAgentWebSocketFactory, Voi
6
6
  * Browsers cannot set an `Authorization` header on a WebSocket upgrade request. This transport sends
7
7
  * the Microsoft Entra bearer token as the `authorization.bearer.<token>` WebSocket subprotocol,
8
8
  * which the service converts back into an `Authorization` header before forwarding the request.
9
+ * Only preview features, client request IDs, and structured inputs are mapped to query parameters.
9
10
  */
10
11
  export declare class BrowserWebSocketTransport implements VoiceAgentWebSocketTransport {
11
12
  private webSocket?;
@@ -1 +1 @@
1
- {"version":3,"file":"webSocketTransport-browser.d.mts","sourceRoot":"","sources":["../../src/webSocketTransport-browser.mts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EACV,iCAAiC,EACjC,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC7B,MAAM,sCAAsC,CAAC;AAS9C;;;;;;GAMG;AACH,qBAAa,yBAA0B,YAAW,4BAA4B;IAC5E,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,QAAQ,CAAC,CAA8B;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,YAAY,CAAoC;IAIxD,OAAO,CAAC,aAAa,CAAoC;gBAEtC,gBAAgB,SAAQ;IAIpC,WAAW,CAAC,QAAQ,EAAE,2BAA2B,GAAG,IAAI;IAIlD,OAAO,CAAC,OAAO,EAAE,iCAAiC,GAAG,OAAO,CAAC,IAAI,CAAC;IAoClE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7E,2FAA2F;YAC7E,cAAc;IAQ5B,iFAAiF;YACnE,YAAY;YAWZ,qBAAqB;IActB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAyBhE;AA6DD,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAyBpF;AAsBD,gBAAgB;AAChB,wBAAgB,uCAAuC,IAAI,0BAA0B,CAEpF"}
1
+ {"version":3,"file":"webSocketTransport-browser.d.mts","sourceRoot":"","sources":["../../src/webSocketTransport-browser.mts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EACV,iCAAiC,EACjC,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC7B,MAAM,sCAAsC,CAAC;AAS9C;;;;;;;GAOG;AACH,qBAAa,yBAA0B,YAAW,4BAA4B;IAC5E,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,QAAQ,CAAC,CAA8B;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,YAAY,CAAoC;IAIxD,OAAO,CAAC,aAAa,CAAoC;gBAEtC,gBAAgB,SAAQ;IAIpC,WAAW,CAAC,QAAQ,EAAE,2BAA2B,GAAG,IAAI;IAIlD,OAAO,CAAC,OAAO,EAAE,iCAAiC,GAAG,OAAO,CAAC,IAAI,CAAC;IAoClE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7E,2FAA2F;YAC7E,cAAc;IAQ5B,iFAAiF;YACnE,YAAY;YAWZ,qBAAqB;IActB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAyBhE;AA6DD,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAgBpF;AAsBD,gBAAgB;AAChB,wBAAgB,uCAAuC,IAAI,0BAA0B,CAEpF"}
@@ -7,6 +7,7 @@ import { logger } from "./logger.js";
7
7
  * Browsers cannot set an `Authorization` header on a WebSocket upgrade request. This transport sends
8
8
  * the Microsoft Entra bearer token as the `authorization.bearer.<token>` WebSocket subprotocol,
9
9
  * which the service converts back into an `Authorization` header before forwarding the request.
10
+ * Only preview features, client request IDs, and structured inputs are mapped to query parameters.
10
11
  */
11
12
  export class BrowserWebSocketTransport {
12
13
  webSocket;
@@ -171,29 +172,20 @@ async function waitForClose(webSocket, closeNotified, timeoutInMs) {
171
172
  /** @internal */
172
173
  export function addHeadersToUrl(url, headers) {
173
174
  const target = new URL(url);
174
- let foundryFeatures;
175
175
  for (const [name, value] of Object.entries(headers)) {
176
176
  switch (name.toLowerCase()) {
177
- case "authorization":
178
- break;
179
177
  case "foundry-features":
180
- foundryFeatures = value;
178
+ target.searchParams.set("foundry_features", value);
181
179
  break;
182
180
  case "x-ms-client-request-id":
183
181
  target.searchParams.set("client-request-id", value);
184
182
  break;
185
- default:
186
- target.searchParams.set(`h-${name.toLowerCase()}`, value);
183
+ case "x-ms-voice-structured-inputs":
184
+ target.searchParams.set("structured_input", value);
187
185
  break;
188
186
  }
189
187
  }
190
- const targetUrl = target.toString();
191
- if (foundryFeatures === undefined) {
192
- return targetUrl;
193
- }
194
- const separator = target.search ? "&" : "?";
195
- const encodedFeatures = encodeURIComponent(foundryFeatures).replace(/%3D/gi, "=");
196
- return `${targetUrl}${separator}foundry_features=${encodedFeatures}`;
188
+ return target.toString();
197
189
  }
198
190
  function addCredentialSubprotocol(protocols, headers) {
199
191
  const authorization = Object.entries(headers).find(([name]) => name.toLowerCase() === "authorization")?.[1];
@@ -1 +1 @@
1
- {"version":3,"file":"webSocketTransport-browser.mjs","sourceRoot":"","sources":["../../src/webSocketTransport-browser.mts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { logger } from \"./logger.js\";\nimport type {\n VoiceAgentWebSocketConnectOptions,\n VoiceAgentWebSocketFactory,\n VoiceAgentWebSocketHandlers,\n VoiceAgentWebSocketTransport,\n} from \"./realtime/webSocketTransportLike.js\";\n\n/** The `CloseEvent` fields this transport forwards; the DOM lib is not in scope here. */\ninterface NativeCloseEvent {\n code: number;\n reason: string;\n wasClean: boolean;\n}\n\n/**\n * Default browser transport for the Voice Agents realtime client.\n *\n * Browsers cannot set an `Authorization` header on a WebSocket upgrade request. This transport sends\n * the Microsoft Entra bearer token as the `authorization.bearer.<token>` WebSocket subprotocol,\n * which the service converts back into an `Authorization` header before forwarding the request.\n */\nexport class BrowserWebSocketTransport implements VoiceAgentWebSocketTransport {\n private webSocket?: WebSocket;\n private handlers?: VoiceAgentWebSocketHandlers;\n private readonly closeTimeoutInMs: number;\n private messageChain: Promise<void> = Promise.resolve();\n // Resolves once `onClose` has actually been invoked for the current connection (after\n // `messageChain` drains). `close()` awaits this - not just the raw native \"close\" event -\n // so it never resolves before the caller observes the authoritative close code/reason/wasClean.\n private closeNotified: Promise<void> = Promise.resolve();\n\n public constructor(closeTimeoutInMs = 5_000) {\n this.closeTimeoutInMs = closeTimeoutInMs;\n }\n\n public setHandlers(handlers: VoiceAgentWebSocketHandlers): void {\n this.handlers = handlers;\n }\n\n public async connect(options: VoiceAgentWebSocketConnectOptions): Promise<void> {\n if (options.abortSignal?.aborted) {\n throw new Error(\"WebSocket connection was cancelled.\");\n }\n const protocols = addCredentialSubprotocol(options.protocols, options.headers);\n const url = addHeadersToUrl(options.url, options.headers);\n\n let notifyClosed: () => void = () => {};\n this.closeNotified = new Promise<void>((resolve) => {\n notifyClosed = resolve;\n });\n\n const webSocket = new WebSocket(url, protocols);\n webSocket.binaryType = \"arraybuffer\";\n this.webSocket = webSocket;\n\n // These forward events for the lifetime of the connection, independent of whether connect()\n // itself is still pending.\n webSocket.addEventListener(\"message\", (event: MessageEvent) => {\n // Chain handling so an async Blob conversion can never let a later message be delivered to\n // the protocol parser out of arrival order.\n this.messageChain = this.deliverMessage(this.messageChain, event.data);\n });\n webSocket.addEventListener(\"close\", (event) => void this.deliverClose(event, notifyClosed));\n webSocket.addEventListener(\"error\", () => {\n this.handlers?.onError(new Error(\"WebSocket connection failed.\"));\n });\n\n try {\n await waitForOpen(webSocket, options.connectionTimeoutInMs, options.abortSignal);\n } catch (error) {\n webSocket.close();\n throw error;\n }\n }\n\n public async send(data: string, abortSignal?: AbortSignalLike): Promise<void> {\n if (!this.webSocket || this.webSocket.readyState !== WebSocket.OPEN) {\n throw new Error(\"WebSocket is not connected.\");\n }\n if (abortSignal?.aborted) {\n throw new Error(\"WebSocket send was cancelled.\");\n }\n this.webSocket.send(data);\n }\n\n /** Chains `data` behind `previous` so an async `Blob` conversion cannot reorder events. */\n private async deliverMessage(\n previous: Promise<void>,\n data: string | ArrayBuffer | Blob,\n ): Promise<void> {\n await previous;\n await this.handleIncomingMessage(data);\n }\n\n /** Reports the close only after every earlier message has reached the parser. */\n private async deliverClose(event: Event, notifyClosed: () => void): Promise<void> {\n const { code, reason, wasClean } = event as unknown as NativeCloseEvent;\n try {\n await this.messageChain;\n } catch {\n // handleIncomingMessage already reported the failure through onError.\n }\n this.handlers?.onClose(code, reason, wasClean);\n notifyClosed();\n }\n\n private async handleIncomingMessage(data: string | ArrayBuffer | Blob): Promise<void> {\n if (typeof data === \"string\" || data instanceof ArrayBuffer) {\n this.handlers?.onMessage(data);\n return;\n }\n if (data instanceof Blob) {\n try {\n this.handlers?.onMessage(await data.arrayBuffer());\n } catch (error) {\n this.handlers?.onError(error instanceof Error ? error : new Error(String(error)));\n }\n }\n }\n\n public async close(code: number, reason: string): Promise<void> {\n if (!this.webSocket) {\n return;\n }\n const webSocket = this.webSocket;\n try {\n if (webSocket.readyState !== WebSocket.CLOSING && webSocket.readyState !== WebSocket.CLOSED) {\n if (code === 1000 || (code >= 3000 && code <= 4999)) {\n webSocket.close(code, reason);\n } else {\n webSocket.close();\n }\n }\n await waitForClose(webSocket, this.closeNotified, this.closeTimeoutInMs);\n } catch (error) {\n // close() is a best-effort cleanup operation and must never throw (callers, including our\n // own VoiceAgentConnection.close()/dispose(), rely on it always resolving), so a transport\n // error here is logged for diagnosability rather than rejecting.\n logger.warning(\"Error while closing the voice-agent WebSocket transport\", { error });\n } finally {\n if (this.webSocket === webSocket) {\n this.webSocket = undefined;\n }\n }\n }\n}\n\n/** Waits for `webSocket` to open, or rejects early on an error, timeout, or abort. */\nfunction waitForOpen(\n webSocket: WebSocket,\n connectionTimeoutInMs: number,\n abortSignal?: AbortSignalLike,\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n finish(() =>\n reject(new Error(`WebSocket connection timed out after ${connectionTimeoutInMs}ms.`)),\n );\n }, connectionTimeoutInMs);\n const onOpen = (): void => finish(resolve);\n const onError = (): void => finish(() => reject(new Error(\"WebSocket connection failed.\")));\n const onAbort = (): void =>\n finish(() => reject(new Error(\"WebSocket connection was cancelled.\")));\n\n function finish(settle: () => void): void {\n clearTimeout(timeout);\n webSocket.removeEventListener(\"open\", onOpen);\n webSocket.removeEventListener(\"error\", onError);\n abortSignal?.removeEventListener(\"abort\", onAbort);\n settle();\n }\n\n webSocket.addEventListener(\"open\", onOpen, { once: true });\n webSocket.addEventListener(\"error\", onError, { once: true });\n abortSignal?.addEventListener(\"abort\", onAbort);\n });\n}\n\n/**\n * Waits until `onClose` has been delivered to the handlers, so `close()` never returns before the\n * caller observes the true close outcome. Resolves on timeout if the socket never closes; rejects\n * if it errors instead.\n */\nasync function waitForClose(\n webSocket: WebSocket,\n closeNotified: Promise<void>,\n timeoutInMs: number,\n): Promise<void> {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n let onError: (() => void) | undefined;\n const errorOrTimeout = new Promise<void>((resolve, reject) => {\n timeout = setTimeout(resolve, timeoutInMs);\n onError = (): void => reject(new Error(\"WebSocket connection failed while closing.\"));\n webSocket.addEventListener(\"error\", onError, { once: true });\n });\n\n try {\n await Promise.race([closeNotified, errorOrTimeout]);\n } finally {\n clearTimeout(timeout);\n if (onError) {\n webSocket.removeEventListener(\"error\", onError);\n }\n }\n}\n\n/** @internal */\nexport function addHeadersToUrl(url: string, headers: Record<string, string>): string {\n const target = new URL(url);\n let foundryFeatures: string | undefined;\n for (const [name, value] of Object.entries(headers)) {\n switch (name.toLowerCase()) {\n case \"authorization\":\n break;\n case \"foundry-features\":\n foundryFeatures = value;\n break;\n case \"x-ms-client-request-id\":\n target.searchParams.set(\"client-request-id\", value);\n break;\n default:\n target.searchParams.set(`h-${name.toLowerCase()}`, value);\n break;\n }\n }\n const targetUrl = target.toString();\n if (foundryFeatures === undefined) {\n return targetUrl;\n }\n const separator = target.search ? \"&\" : \"?\";\n const encodedFeatures = encodeURIComponent(foundryFeatures).replace(/%3D/gi, \"=\");\n return `${targetUrl}${separator}foundry_features=${encodedFeatures}`;\n}\n\nfunction addCredentialSubprotocol(protocols: string[], headers: Record<string, string>): string[] {\n const authorization = Object.entries(headers).find(\n ([name]) => name.toLowerCase() === \"authorization\",\n )?.[1];\n if (authorization === undefined) {\n return protocols;\n }\n const bearerPrefix = \"Bearer \";\n if (!authorization.startsWith(bearerPrefix) || authorization.length === bearerPrefix.length) {\n throw new Error(\"Browser WebSocket authentication requires a Microsoft Entra bearer token.\");\n }\n return [...protocols, `authorization.bearer.${authorization.slice(bearerPrefix.length)}`];\n}\n\nclass BrowserWebSocketFactory implements VoiceAgentWebSocketFactory {\n public create(): VoiceAgentWebSocketTransport {\n return new BrowserWebSocketTransport();\n }\n}\n\n/** @internal */\nexport function createDefaultVoiceAgentWebSocketFactory(): VoiceAgentWebSocketFactory {\n return new BrowserWebSocketFactory();\n}\n"]}
1
+ {"version":3,"file":"webSocketTransport-browser.mjs","sourceRoot":"","sources":["../../src/webSocketTransport-browser.mts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { logger } from \"./logger.js\";\nimport type {\n VoiceAgentWebSocketConnectOptions,\n VoiceAgentWebSocketFactory,\n VoiceAgentWebSocketHandlers,\n VoiceAgentWebSocketTransport,\n} from \"./realtime/webSocketTransportLike.js\";\n\n/** The `CloseEvent` fields this transport forwards; the DOM lib is not in scope here. */\ninterface NativeCloseEvent {\n code: number;\n reason: string;\n wasClean: boolean;\n}\n\n/**\n * Default browser transport for the Voice Agents realtime client.\n *\n * Browsers cannot set an `Authorization` header on a WebSocket upgrade request. This transport sends\n * the Microsoft Entra bearer token as the `authorization.bearer.<token>` WebSocket subprotocol,\n * which the service converts back into an `Authorization` header before forwarding the request.\n * Only preview features, client request IDs, and structured inputs are mapped to query parameters.\n */\nexport class BrowserWebSocketTransport implements VoiceAgentWebSocketTransport {\n private webSocket?: WebSocket;\n private handlers?: VoiceAgentWebSocketHandlers;\n private readonly closeTimeoutInMs: number;\n private messageChain: Promise<void> = Promise.resolve();\n // Resolves once `onClose` has actually been invoked for the current connection (after\n // `messageChain` drains). `close()` awaits this - not just the raw native \"close\" event -\n // so it never resolves before the caller observes the authoritative close code/reason/wasClean.\n private closeNotified: Promise<void> = Promise.resolve();\n\n public constructor(closeTimeoutInMs = 5_000) {\n this.closeTimeoutInMs = closeTimeoutInMs;\n }\n\n public setHandlers(handlers: VoiceAgentWebSocketHandlers): void {\n this.handlers = handlers;\n }\n\n public async connect(options: VoiceAgentWebSocketConnectOptions): Promise<void> {\n if (options.abortSignal?.aborted) {\n throw new Error(\"WebSocket connection was cancelled.\");\n }\n const protocols = addCredentialSubprotocol(options.protocols, options.headers);\n const url = addHeadersToUrl(options.url, options.headers);\n\n let notifyClosed: () => void = () => {};\n this.closeNotified = new Promise<void>((resolve) => {\n notifyClosed = resolve;\n });\n\n const webSocket = new WebSocket(url, protocols);\n webSocket.binaryType = \"arraybuffer\";\n this.webSocket = webSocket;\n\n // These forward events for the lifetime of the connection, independent of whether connect()\n // itself is still pending.\n webSocket.addEventListener(\"message\", (event: MessageEvent) => {\n // Chain handling so an async Blob conversion can never let a later message be delivered to\n // the protocol parser out of arrival order.\n this.messageChain = this.deliverMessage(this.messageChain, event.data);\n });\n webSocket.addEventListener(\"close\", (event) => void this.deliverClose(event, notifyClosed));\n webSocket.addEventListener(\"error\", () => {\n this.handlers?.onError(new Error(\"WebSocket connection failed.\"));\n });\n\n try {\n await waitForOpen(webSocket, options.connectionTimeoutInMs, options.abortSignal);\n } catch (error) {\n webSocket.close();\n throw error;\n }\n }\n\n public async send(data: string, abortSignal?: AbortSignalLike): Promise<void> {\n if (!this.webSocket || this.webSocket.readyState !== WebSocket.OPEN) {\n throw new Error(\"WebSocket is not connected.\");\n }\n if (abortSignal?.aborted) {\n throw new Error(\"WebSocket send was cancelled.\");\n }\n this.webSocket.send(data);\n }\n\n /** Chains `data` behind `previous` so an async `Blob` conversion cannot reorder events. */\n private async deliverMessage(\n previous: Promise<void>,\n data: string | ArrayBuffer | Blob,\n ): Promise<void> {\n await previous;\n await this.handleIncomingMessage(data);\n }\n\n /** Reports the close only after every earlier message has reached the parser. */\n private async deliverClose(event: Event, notifyClosed: () => void): Promise<void> {\n const { code, reason, wasClean } = event as unknown as NativeCloseEvent;\n try {\n await this.messageChain;\n } catch {\n // handleIncomingMessage already reported the failure through onError.\n }\n this.handlers?.onClose(code, reason, wasClean);\n notifyClosed();\n }\n\n private async handleIncomingMessage(data: string | ArrayBuffer | Blob): Promise<void> {\n if (typeof data === \"string\" || data instanceof ArrayBuffer) {\n this.handlers?.onMessage(data);\n return;\n }\n if (data instanceof Blob) {\n try {\n this.handlers?.onMessage(await data.arrayBuffer());\n } catch (error) {\n this.handlers?.onError(error instanceof Error ? error : new Error(String(error)));\n }\n }\n }\n\n public async close(code: number, reason: string): Promise<void> {\n if (!this.webSocket) {\n return;\n }\n const webSocket = this.webSocket;\n try {\n if (webSocket.readyState !== WebSocket.CLOSING && webSocket.readyState !== WebSocket.CLOSED) {\n if (code === 1000 || (code >= 3000 && code <= 4999)) {\n webSocket.close(code, reason);\n } else {\n webSocket.close();\n }\n }\n await waitForClose(webSocket, this.closeNotified, this.closeTimeoutInMs);\n } catch (error) {\n // close() is a best-effort cleanup operation and must never throw (callers, including our\n // own VoiceAgentConnection.close()/dispose(), rely on it always resolving), so a transport\n // error here is logged for diagnosability rather than rejecting.\n logger.warning(\"Error while closing the voice-agent WebSocket transport\", { error });\n } finally {\n if (this.webSocket === webSocket) {\n this.webSocket = undefined;\n }\n }\n }\n}\n\n/** Waits for `webSocket` to open, or rejects early on an error, timeout, or abort. */\nfunction waitForOpen(\n webSocket: WebSocket,\n connectionTimeoutInMs: number,\n abortSignal?: AbortSignalLike,\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n finish(() =>\n reject(new Error(`WebSocket connection timed out after ${connectionTimeoutInMs}ms.`)),\n );\n }, connectionTimeoutInMs);\n const onOpen = (): void => finish(resolve);\n const onError = (): void => finish(() => reject(new Error(\"WebSocket connection failed.\")));\n const onAbort = (): void =>\n finish(() => reject(new Error(\"WebSocket connection was cancelled.\")));\n\n function finish(settle: () => void): void {\n clearTimeout(timeout);\n webSocket.removeEventListener(\"open\", onOpen);\n webSocket.removeEventListener(\"error\", onError);\n abortSignal?.removeEventListener(\"abort\", onAbort);\n settle();\n }\n\n webSocket.addEventListener(\"open\", onOpen, { once: true });\n webSocket.addEventListener(\"error\", onError, { once: true });\n abortSignal?.addEventListener(\"abort\", onAbort);\n });\n}\n\n/**\n * Waits until `onClose` has been delivered to the handlers, so `close()` never returns before the\n * caller observes the true close outcome. Resolves on timeout if the socket never closes; rejects\n * if it errors instead.\n */\nasync function waitForClose(\n webSocket: WebSocket,\n closeNotified: Promise<void>,\n timeoutInMs: number,\n): Promise<void> {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n let onError: (() => void) | undefined;\n const errorOrTimeout = new Promise<void>((resolve, reject) => {\n timeout = setTimeout(resolve, timeoutInMs);\n onError = (): void => reject(new Error(\"WebSocket connection failed while closing.\"));\n webSocket.addEventListener(\"error\", onError, { once: true });\n });\n\n try {\n await Promise.race([closeNotified, errorOrTimeout]);\n } finally {\n clearTimeout(timeout);\n if (onError) {\n webSocket.removeEventListener(\"error\", onError);\n }\n }\n}\n\n/** @internal */\nexport function addHeadersToUrl(url: string, headers: Record<string, string>): string {\n const target = new URL(url);\n for (const [name, value] of Object.entries(headers)) {\n switch (name.toLowerCase()) {\n case \"foundry-features\":\n target.searchParams.set(\"foundry_features\", value);\n break;\n case \"x-ms-client-request-id\":\n target.searchParams.set(\"client-request-id\", value);\n break;\n case \"x-ms-voice-structured-inputs\":\n target.searchParams.set(\"structured_input\", value);\n break;\n }\n }\n return target.toString();\n}\n\nfunction addCredentialSubprotocol(protocols: string[], headers: Record<string, string>): string[] {\n const authorization = Object.entries(headers).find(\n ([name]) => name.toLowerCase() === \"authorization\",\n )?.[1];\n if (authorization === undefined) {\n return protocols;\n }\n const bearerPrefix = \"Bearer \";\n if (!authorization.startsWith(bearerPrefix) || authorization.length === bearerPrefix.length) {\n throw new Error(\"Browser WebSocket authentication requires a Microsoft Entra bearer token.\");\n }\n return [...protocols, `authorization.bearer.${authorization.slice(bearerPrefix.length)}`];\n}\n\nclass BrowserWebSocketFactory implements VoiceAgentWebSocketFactory {\n public create(): VoiceAgentWebSocketTransport {\n return new BrowserWebSocketTransport();\n }\n}\n\n/** @internal */\nexport function createDefaultVoiceAgentWebSocketFactory(): VoiceAgentWebSocketFactory {\n return new BrowserWebSocketFactory();\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure/ai-projects",
3
- "version": "2.7.1",
3
+ "version": "2.9.0",
4
4
  "description": "Azure AI Projects client library.",
5
5
  "engines": {
6
6
  "node": ">=22.0.0"
@@ -54,10 +54,10 @@
54
54
  "@azure/logger": "^1.1.4",
55
55
  "@azure/storage-blob": "^12.26.0",
56
56
  "@opentelemetry/api": "^1.9.1",
57
- "https-proxy-agent": "^7.0.1",
58
- "openai": "^6.16.0",
57
+ "https-proxy-agent": "^9.1.0",
58
+ "openai": "^7.28.0",
59
59
  "tslib": "^2.6.2",
60
- "ws": "^8.18.3"
60
+ "ws": "^8.21.0"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@azure-rest/ai-inference": "^1.0.0-beta.6",
@@ -75,19 +75,19 @@
75
75
  "@opentelemetry/sdk-trace-node": "^2.9.0",
76
76
  "@types/node": "^22.0.0",
77
77
  "@types/ws": "^8.18.1",
78
- "@vitest/browser-playwright": "^4.1.2",
79
- "@vitest/coverage-istanbul": "^4.1.2",
78
+ "@vitest/browser-playwright": "^5.0.0",
79
+ "@vitest/coverage-istanbul": "^5.0.0",
80
80
  "cross-env": "^10.1.0",
81
- "dotenv": "^16.6.1",
81
+ "dotenv": "^18.0.5",
82
82
  "eslint": "^10.8.0",
83
83
  "mkdirp": "^3.0.1",
84
84
  "playwright": "^1.60.0",
85
85
  "prettier": "^3.9.1",
86
- "react-native": "^0.84.1",
86
+ "react-native": "^0.87.1",
87
87
  "rimraf": "^6.1.0",
88
88
  "typescript": "~6.0.2",
89
89
  "vite": "^8.0.0",
90
- "vitest": "^4.1.2",
90
+ "vitest": "^5.0.0",
91
91
  "zod": "^4.2.1"
92
92
  },
93
93
  "exports": {
@@ -1,3 +0,0 @@
1
- export { deleteGenerationJob, cancelGenerationJob, createGenerationJob, listGenerationJobs, getGenerationJob, } from "./operations.js";
2
- export type { BetaDatasetsDeleteGenerationJobOptionalParams, BetaDatasetsCancelGenerationJobOptionalParams, BetaDatasetsCreateGenerationJobOptionalParams, BetaDatasetsListGenerationJobsOptionalParams, BetaDatasetsGetGenerationJobOptionalParams, } from "./options.js";
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/api/beta/datasets/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,6CAA6C,EAC7C,6CAA6C,EAC7C,6CAA6C,EAC7C,4CAA4C,EAC5C,0CAA0C,GAC3C,MAAM,cAAc,CAAC"}
@@ -1,4 +0,0 @@
1
- // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT License.
3
- export { deleteGenerationJob, cancelGenerationJob, createGenerationJob, listGenerationJobs, getGenerationJob, } from "./operations.js";
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/api/beta/datasets/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport {\n deleteGenerationJob,\n cancelGenerationJob,\n createGenerationJob,\n listGenerationJobs,\n getGenerationJob,\n} from \"./operations.js\";\nexport type {\n BetaDatasetsDeleteGenerationJobOptionalParams,\n BetaDatasetsCancelGenerationJobOptionalParams,\n BetaDatasetsCreateGenerationJobOptionalParams,\n BetaDatasetsListGenerationJobsOptionalParams,\n BetaDatasetsGetGenerationJobOptionalParams,\n} from \"./options.js\";\n"]}
@@ -1,27 +0,0 @@
1
- import type { AIProjectContext as Client } from "../../index.js";
2
- import type { DataGenerationJob, DataGenerationJobResult, _AgentsPagedResultDataGenerationJob } from "../../../models/models.js";
3
- import type { PagedAsyncIterableIterator } from "@azure/core-paging";
4
- import type { JobPoller } from "../../../static-helpers/pollingHelpers.js";
5
- import type { BetaDatasetsDeleteGenerationJobOptionalParams, BetaDatasetsCancelGenerationJobOptionalParams, BetaDatasetsCreateGenerationJobOptionalParams, BetaDatasetsListGenerationJobsOptionalParams, BetaDatasetsGetGenerationJobOptionalParams } from "./options.js";
6
- import type { StreamableMethod, PathUncheckedResponse } from "@azure-rest/core-client";
7
- export declare function _deleteGenerationJobSend(context: Client, jobId: string, options?: BetaDatasetsDeleteGenerationJobOptionalParams): StreamableMethod;
8
- export declare function _deleteGenerationJobDeserialize(result: PathUncheckedResponse): Promise<void>;
9
- /** Removes the specified data generation job and its associated output. */
10
- export declare function deleteGenerationJob(context: Client, jobId: string, options?: BetaDatasetsDeleteGenerationJobOptionalParams): Promise<void>;
11
- export declare function _cancelGenerationJobSend(context: Client, jobId: string, options?: BetaDatasetsCancelGenerationJobOptionalParams): StreamableMethod;
12
- export declare function _cancelGenerationJobDeserialize(result: PathUncheckedResponse): Promise<DataGenerationJob>;
13
- /** Cancels the specified data generation job if it is still in progress. */
14
- export declare function cancelGenerationJob(context: Client, jobId: string, options?: BetaDatasetsCancelGenerationJobOptionalParams): Promise<DataGenerationJob>;
15
- export declare function _createGenerationJobSend(context: Client, job: DataGenerationJob, options?: BetaDatasetsCreateGenerationJobOptionalParams): StreamableMethod;
16
- export declare function _createGenerationJobDeserialize(result: PathUncheckedResponse): Promise<DataGenerationJobResult>;
17
- /** Submits a new data generation job for asynchronous execution. */
18
- export declare function createGenerationJob(context: Client, job: DataGenerationJob, options?: BetaDatasetsCreateGenerationJobOptionalParams): JobPoller<DataGenerationJobResult>;
19
- export declare function _listGenerationJobsSend(context: Client, options?: BetaDatasetsListGenerationJobsOptionalParams): StreamableMethod;
20
- export declare function _listGenerationJobsDeserialize(result: PathUncheckedResponse): Promise<_AgentsPagedResultDataGenerationJob>;
21
- /** Returns a list of data generation jobs. */
22
- export declare function listGenerationJobs(context: Client, options?: BetaDatasetsListGenerationJobsOptionalParams): PagedAsyncIterableIterator<DataGenerationJob>;
23
- export declare function _getGenerationJobSend(context: Client, jobId: string, options?: BetaDatasetsGetGenerationJobOptionalParams): StreamableMethod;
24
- export declare function _getGenerationJobDeserialize(result: PathUncheckedResponse): Promise<DataGenerationJob>;
25
- /** Retrieves the specified data generation job and its current status. */
26
- export declare function getGenerationJob(context: Client, jobId: string, options?: BetaDatasetsGetGenerationJobOptionalParams): Promise<DataGenerationJob>;
27
- //# sourceMappingURL=operations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../../../../src/api/beta/datasets/operations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,IAAI,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACvB,mCAAmC,EACpC,MAAM,2BAA2B,CAAC;AAQnC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAG3E,OAAO,KAAK,EACV,6CAA6C,EAC7C,6CAA6C,EAC7C,6CAA6C,EAC7C,4CAA4C,EAC5C,0CAA0C,EAC3C,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGvF,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,6CAAsE,GAC9E,gBAAgB,CAkBlB;AAED,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,2EAA2E;AAC3E,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,6CAAsE,GAC9E,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,6CAAsE,GAC9E,gBAAgB,CAmBlB;AAED,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,iBAAiB,CAAC,CAY5B;AAED,4EAA4E;AAC5E,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,6CAAsE,GAC9E,OAAO,CAAC,iBAAiB,CAAC,CAG5B;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,iBAAiB,EACtB,OAAO,GAAE,6CAAsE,GAC9E,gBAAgB,CAqBlB;AAED,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAmBlC;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,iBAAiB,EACtB,OAAO,GAAE,6CAAsE,GAC9E,SAAS,CAAC,uBAAuB,CAAC,CAapC;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,4CAAqE,GAC7E,gBAAgB,CAsBlB;AAED,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,mCAAmC,CAAC,CAY9C;AAED,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,4CAAqE,GAC7E,0BAA0B,CAAC,iBAAiB,CAAC,CAQ/C;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,0CAAmE,GAC3E,gBAAgB,CAmBlB;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,iBAAiB,CAAC,CAY5B;AAED,0EAA0E;AAC1E,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,0CAAmE,GAC3E,OAAO,CAAC,iBAAiB,CAAC,CAG5B"}
@@ -1,184 +0,0 @@
1
- // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT License.
3
- import { apiErrorResponseDeserializer, dataGenerationJobSerializer, dataGenerationJobDeserializer, dataGenerationJobResultDeserializer, _agentsPagedResultDataGenerationJobDeserializer, } from "../../../models/models.js";
4
- import { buildPagedAsyncIterator } from "../../../static-helpers/pagingHelpers.js";
5
- import { getJobPoller } from "../../../static-helpers/pollingHelpers.js";
6
- import { expandUrlTemplate } from "../../../static-helpers/urlTemplate.js";
7
- import { createRestError, operationOptionsToRequestParameters } from "@azure-rest/core-client";
8
- export function _deleteGenerationJobSend(context, jobId, options = { requestOptions: {} }) {
9
- const path = expandUrlTemplate("/data_generation_jobs/{jobId}{?api-version}", {
10
- jobId: jobId,
11
- "api-version": context.apiVersion ?? "v1",
12
- }, {
13
- allowReserved: options?.requestOptions?.skipUrlEncoding,
14
- });
15
- return context.path(path).delete({
16
- ...operationOptionsToRequestParameters(options),
17
- headers: {
18
- "foundry-features": "DataGenerationJobs=V1Preview",
19
- ...options.requestOptions?.headers,
20
- },
21
- });
22
- }
23
- export async function _deleteGenerationJobDeserialize(result) {
24
- const expectedStatuses = ["204"];
25
- if (!expectedStatuses.includes(result.status)) {
26
- const error = createRestError(result);
27
- if (result.body) {
28
- error.details = apiErrorResponseDeserializer(result.body);
29
- }
30
- throw error;
31
- }
32
- return;
33
- }
34
- /** Removes the specified data generation job and its associated output. */
35
- export async function deleteGenerationJob(context, jobId, options = { requestOptions: {} }) {
36
- const result = await _deleteGenerationJobSend(context, jobId, options);
37
- return _deleteGenerationJobDeserialize(result);
38
- }
39
- export function _cancelGenerationJobSend(context, jobId, options = { requestOptions: {} }) {
40
- const path = expandUrlTemplate("/data_generation_jobs/{jobId}:cancel{?api-version}", {
41
- jobId: jobId,
42
- "api-version": context.apiVersion ?? "v1",
43
- }, {
44
- allowReserved: options?.requestOptions?.skipUrlEncoding,
45
- });
46
- return context.path(path).post({
47
- ...operationOptionsToRequestParameters(options),
48
- headers: {
49
- "foundry-features": "DataGenerationJobs=V1Preview",
50
- accept: "application/json",
51
- ...options.requestOptions?.headers,
52
- },
53
- });
54
- }
55
- export async function _cancelGenerationJobDeserialize(result) {
56
- const expectedStatuses = ["200"];
57
- if (!expectedStatuses.includes(result.status)) {
58
- const error = createRestError(result);
59
- if (result.body) {
60
- error.details = apiErrorResponseDeserializer(result.body);
61
- }
62
- throw error;
63
- }
64
- return dataGenerationJobDeserializer(result.body);
65
- }
66
- /** Cancels the specified data generation job if it is still in progress. */
67
- export async function cancelGenerationJob(context, jobId, options = { requestOptions: {} }) {
68
- const result = await _cancelGenerationJobSend(context, jobId, options);
69
- return _cancelGenerationJobDeserialize(result);
70
- }
71
- export function _createGenerationJobSend(context, job, options = { requestOptions: {} }) {
72
- const path = expandUrlTemplate("/data_generation_jobs{?api-version}", {
73
- "api-version": context.apiVersion ?? "v1",
74
- }, {
75
- allowReserved: options?.requestOptions?.skipUrlEncoding,
76
- });
77
- return context.path(path).post({
78
- ...operationOptionsToRequestParameters(options),
79
- contentType: "application/json",
80
- headers: {
81
- "foundry-features": "DataGenerationJobs=V1Preview",
82
- ...(options?.operationId !== undefined ? { "operation-id": options?.operationId } : {}),
83
- accept: "application/json",
84
- ...options.requestOptions?.headers,
85
- },
86
- body: dataGenerationJobSerializer(job),
87
- });
88
- }
89
- export async function _createGenerationJobDeserialize(result) {
90
- const expectedStatuses = ["201", "200", "202"];
91
- if (!expectedStatuses.includes(result.status)) {
92
- const error = createRestError(result);
93
- if (result.body) {
94
- error.details = apiErrorResponseDeserializer(result.body);
95
- }
96
- throw error;
97
- }
98
- if (result?.body?.result === undefined) {
99
- throw createRestError(`Expected a result in the response at position "result.body.result"`, result);
100
- }
101
- return dataGenerationJobResultDeserializer(result.body.result);
102
- }
103
- /** Submits a new data generation job for asynchronous execution. */
104
- export function createGenerationJob(context, job, options = { requestOptions: {} }) {
105
- // CUSTOMIZATION: SDK-IMPROVEMENT: `getJobPoller` exposes the queued job id on the poller state.
106
- return getJobPoller(context, _createGenerationJobDeserialize, ["201", "200", "202"], {
107
- updateIntervalInMs: options?.updateIntervalInMs,
108
- abortSignal: options?.abortSignal,
109
- getInitialResponse: () => _createGenerationJobSend(context, job, options),
110
- resourceLocationConfig: "operation-location",
111
- apiVersion: context.apiVersion ?? "v1",
112
- pollHeaders: {
113
- ...options?.requestOptions?.headers,
114
- "foundry-features": "DataGenerationJobs=V1Preview",
115
- },
116
- });
117
- }
118
- export function _listGenerationJobsSend(context, options = { requestOptions: {} }) {
119
- const path = expandUrlTemplate("/data_generation_jobs{?limit,order,after,before,api-version}", {
120
- limit: options?.limit,
121
- order: options?.order,
122
- after: options?.after,
123
- before: options?.before,
124
- "api-version": context.apiVersion ?? "v1",
125
- }, {
126
- allowReserved: options?.requestOptions?.skipUrlEncoding,
127
- });
128
- return context.path(path).get({
129
- ...operationOptionsToRequestParameters(options),
130
- headers: {
131
- "foundry-features": "DataGenerationJobs=V1Preview",
132
- accept: "application/json",
133
- ...options.requestOptions?.headers,
134
- },
135
- });
136
- }
137
- export async function _listGenerationJobsDeserialize(result) {
138
- const expectedStatuses = ["200"];
139
- if (!expectedStatuses.includes(result.status)) {
140
- const error = createRestError(result);
141
- if (result.body) {
142
- error.details = apiErrorResponseDeserializer(result.body);
143
- }
144
- throw error;
145
- }
146
- return _agentsPagedResultDataGenerationJobDeserializer(result.body);
147
- }
148
- /** Returns a list of data generation jobs. */
149
- export function listGenerationJobs(context, options = { requestOptions: {} }) {
150
- return buildPagedAsyncIterator(context, () => _listGenerationJobsSend(context, options), _listGenerationJobsDeserialize, ["200"], { itemName: "data", apiVersion: context.apiVersion ?? "v1" });
151
- }
152
- export function _getGenerationJobSend(context, jobId, options = { requestOptions: {} }) {
153
- const path = expandUrlTemplate("/data_generation_jobs/{jobId}{?api-version}", {
154
- jobId: jobId,
155
- "api-version": context.apiVersion ?? "v1",
156
- }, {
157
- allowReserved: options?.requestOptions?.skipUrlEncoding,
158
- });
159
- return context.path(path).get({
160
- ...operationOptionsToRequestParameters(options),
161
- headers: {
162
- "foundry-features": "DataGenerationJobs=V1Preview",
163
- accept: "application/json",
164
- ...options.requestOptions?.headers,
165
- },
166
- });
167
- }
168
- export async function _getGenerationJobDeserialize(result) {
169
- const expectedStatuses = ["200"];
170
- if (!expectedStatuses.includes(result.status)) {
171
- const error = createRestError(result);
172
- if (result.body) {
173
- error.details = apiErrorResponseDeserializer(result.body);
174
- }
175
- throw error;
176
- }
177
- return dataGenerationJobDeserializer(result.body);
178
- }
179
- /** Retrieves the specified data generation job and its current status. */
180
- export async function getGenerationJob(context, jobId, options = { requestOptions: {} }) {
181
- const result = await _getGenerationJobSend(context, jobId, options);
182
- return _getGenerationJobDeserialize(result);
183
- }
184
- //# sourceMappingURL=operations.js.map