openai 7.5.0 → 7.6.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 (597) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/README.md +46 -2
  3. package/auth/index.d.mts +1 -1
  4. package/auth/index.d.mts.map +1 -1
  5. package/auth/index.d.ts +1 -1
  6. package/auth/index.d.ts.map +1 -1
  7. package/auth/index.js.map +1 -1
  8. package/auth/index.mjs.map +1 -1
  9. package/auth/subject-token-providers.d.mts.map +1 -1
  10. package/auth/subject-token-providers.d.ts.map +1 -1
  11. package/auth/subject-token-providers.js +176 -4
  12. package/auth/subject-token-providers.js.map +1 -1
  13. package/auth/subject-token-providers.mjs +176 -4
  14. package/auth/subject-token-providers.mjs.map +1 -1
  15. package/auth/types.d.mts +17 -0
  16. package/auth/types.d.mts.map +1 -1
  17. package/auth/types.d.ts +17 -0
  18. package/auth/types.d.ts.map +1 -1
  19. package/auth/workload-identity-auth.d.mts.map +1 -1
  20. package/auth/workload-identity-auth.d.ts.map +1 -1
  21. package/auth/workload-identity-auth.js +80 -7
  22. package/auth/workload-identity-auth.js.map +1 -1
  23. package/auth/workload-identity-auth.mjs +80 -7
  24. package/auth/workload-identity-auth.mjs.map +1 -1
  25. package/auth/x509-transport.d.mts +5 -0
  26. package/auth/x509-transport.d.mts.map +1 -0
  27. package/auth/x509-transport.d.ts +5 -0
  28. package/auth/x509-transport.d.ts.map +1 -0
  29. package/auth/x509-transport.js +39 -0
  30. package/auth/x509-transport.js.map +1 -0
  31. package/auth/x509-transport.mjs +36 -0
  32. package/auth/x509-transport.mjs.map +1 -0
  33. package/azure.d.mts +11 -2
  34. package/azure.d.mts.map +1 -1
  35. package/azure.d.ts +11 -2
  36. package/azure.d.ts.map +1 -1
  37. package/azure.js +7 -1
  38. package/azure.js.map +1 -1
  39. package/azure.mjs +7 -1
  40. package/azure.mjs.map +1 -1
  41. package/bedrock.d.mts +6 -2
  42. package/bedrock.d.mts.map +1 -1
  43. package/bedrock.d.ts +6 -2
  44. package/bedrock.d.ts.map +1 -1
  45. package/bedrock.js +34 -4
  46. package/bedrock.js.map +1 -1
  47. package/bedrock.mjs +35 -5
  48. package/bedrock.mjs.map +1 -1
  49. package/beta/realtime/internal-base.d.mts +2 -0
  50. package/beta/realtime/internal-base.d.mts.map +1 -1
  51. package/beta/realtime/internal-base.d.ts +2 -0
  52. package/beta/realtime/internal-base.d.ts.map +1 -1
  53. package/beta/realtime/internal-base.js +15 -0
  54. package/beta/realtime/internal-base.js.map +1 -1
  55. package/beta/realtime/internal-base.mjs +14 -0
  56. package/beta/realtime/internal-base.mjs.map +1 -1
  57. package/beta/realtime/websocket.d.mts +11 -5
  58. package/beta/realtime/websocket.d.mts.map +1 -1
  59. package/beta/realtime/websocket.d.ts +11 -5
  60. package/beta/realtime/websocket.d.ts.map +1 -1
  61. package/beta/realtime/websocket.js +106 -31
  62. package/beta/realtime/websocket.js.map +1 -1
  63. package/beta/realtime/websocket.mjs +107 -32
  64. package/beta/realtime/websocket.mjs.map +1 -1
  65. package/beta/realtime/ws.d.mts +0 -2
  66. package/beta/realtime/ws.d.mts.map +1 -1
  67. package/beta/realtime/ws.d.ts +0 -2
  68. package/beta/realtime/ws.d.ts.map +1 -1
  69. package/beta/realtime/ws.js +24 -5
  70. package/beta/realtime/ws.js.map +1 -1
  71. package/beta/realtime/ws.mjs +25 -6
  72. package/beta/realtime/ws.mjs.map +1 -1
  73. package/client.d.mts +17 -2
  74. package/client.d.mts.map +1 -1
  75. package/client.d.ts +17 -2
  76. package/client.d.ts.map +1 -1
  77. package/client.js +422 -70
  78. package/client.js.map +1 -1
  79. package/client.mjs +423 -71
  80. package/client.mjs.map +1 -1
  81. package/core/EventEmitter.d.mts.map +1 -1
  82. package/core/EventEmitter.d.ts.map +1 -1
  83. package/core/EventEmitter.js +67 -9
  84. package/core/EventEmitter.js.map +1 -1
  85. package/core/EventEmitter.mjs +68 -10
  86. package/core/EventEmitter.mjs.map +1 -1
  87. package/core/streaming.d.mts +1 -0
  88. package/core/streaming.d.mts.map +1 -1
  89. package/core/streaming.d.ts +1 -0
  90. package/core/streaming.d.ts.map +1 -1
  91. package/core/streaming.js +58 -19
  92. package/core/streaming.js.map +1 -1
  93. package/core/streaming.mjs +58 -19
  94. package/core/streaming.mjs.map +1 -1
  95. package/helpers/audio.d.mts +5 -5
  96. package/helpers/audio.d.mts.map +1 -1
  97. package/helpers/audio.d.ts +5 -5
  98. package/helpers/audio.d.ts.map +1 -1
  99. package/helpers/audio.js +93 -22
  100. package/helpers/audio.js.map +1 -1
  101. package/helpers/audio.mjs +93 -22
  102. package/helpers/audio.mjs.map +1 -1
  103. package/helpers/standard-schema.d.mts.map +1 -1
  104. package/helpers/standard-schema.d.ts.map +1 -1
  105. package/helpers/standard-schema.js +34 -14
  106. package/helpers/standard-schema.js.map +1 -1
  107. package/helpers/standard-schema.mjs +35 -15
  108. package/helpers/standard-schema.mjs.map +1 -1
  109. package/helpers/zod-v3-strict-schema.d.mts +7 -0
  110. package/helpers/zod-v3-strict-schema.d.mts.map +1 -0
  111. package/helpers/zod-v3-strict-schema.d.ts +7 -0
  112. package/helpers/zod-v3-strict-schema.d.ts.map +1 -0
  113. package/helpers/zod-v3-strict-schema.js +403 -0
  114. package/helpers/zod-v3-strict-schema.js.map +1 -0
  115. package/helpers/zod-v3-strict-schema.mjs +399 -0
  116. package/helpers/zod-v3-strict-schema.mjs.map +1 -0
  117. package/helpers/zod.d.mts.map +1 -1
  118. package/helpers/zod.d.ts.map +1 -1
  119. package/helpers/zod.js +11 -3
  120. package/helpers/zod.js.map +1 -1
  121. package/helpers/zod.mjs +12 -4
  122. package/helpers/zod.mjs.map +1 -1
  123. package/index.d.mts +1 -1
  124. package/index.d.mts.map +1 -1
  125. package/index.d.ts +1 -1
  126. package/index.d.ts.map +1 -1
  127. package/index.js.map +1 -1
  128. package/index.mjs.map +1 -1
  129. package/internal/assistant-stream-delta.d.mts.map +1 -1
  130. package/internal/assistant-stream-delta.d.ts.map +1 -1
  131. package/internal/assistant-stream-delta.js +28 -8
  132. package/internal/assistant-stream-delta.js.map +1 -1
  133. package/internal/assistant-stream-delta.mjs +28 -8
  134. package/internal/assistant-stream-delta.mjs.map +1 -1
  135. package/internal/auth/x509-token-exchange.d.mts +16 -0
  136. package/internal/auth/x509-token-exchange.d.mts.map +1 -0
  137. package/internal/auth/x509-token-exchange.d.ts +16 -0
  138. package/internal/auth/x509-token-exchange.d.ts.map +1 -0
  139. package/internal/auth/x509-token-exchange.js +246 -0
  140. package/internal/auth/x509-token-exchange.js.map +1 -0
  141. package/internal/auth/x509-token-exchange.mjs +243 -0
  142. package/internal/auth/x509-token-exchange.mjs.map +1 -0
  143. package/internal/auth/x509-transport-capability.d.mts +37 -0
  144. package/internal/auth/x509-transport-capability.d.mts.map +1 -0
  145. package/internal/auth/x509-transport-capability.d.ts +37 -0
  146. package/internal/auth/x509-transport-capability.d.ts.map +1 -0
  147. package/internal/auth/x509-transport-capability.js +169 -0
  148. package/internal/auth/x509-transport-capability.js.map +1 -0
  149. package/internal/auth/x509-transport-capability.mjs +164 -0
  150. package/internal/auth/x509-transport-capability.mjs.map +1 -0
  151. package/internal/auth/x509-transport-registry.d.mts +63 -0
  152. package/internal/auth/x509-transport-registry.d.mts.map +1 -0
  153. package/internal/auth/x509-transport-registry.d.ts +63 -0
  154. package/internal/auth/x509-transport-registry.d.ts.map +1 -0
  155. package/internal/auth/x509-transport-registry.js +53 -0
  156. package/internal/auth/x509-transport-registry.js.map +1 -0
  157. package/internal/auth/x509-transport-registry.mjs +48 -0
  158. package/internal/auth/x509-transport-registry.mjs.map +1 -0
  159. package/internal/auth/x509-transport-state-browser.d.mts +21 -0
  160. package/internal/auth/x509-transport-state-browser.d.mts.map +1 -0
  161. package/internal/auth/x509-transport-state-browser.d.ts +21 -0
  162. package/internal/auth/x509-transport-state-browser.d.ts.map +1 -0
  163. package/internal/auth/x509-transport-state-browser.js +30 -0
  164. package/internal/auth/x509-transport-state-browser.js.map +1 -0
  165. package/internal/auth/x509-transport-state-browser.mjs +27 -0
  166. package/internal/auth/x509-transport-state-browser.mjs.map +1 -0
  167. package/internal/auth/x509-transport-state.cjs +30 -0
  168. package/internal/auth/x509-transport-state.cjs.map +1 -0
  169. package/internal/auth/x509-transport-state.d.cts +21 -0
  170. package/internal/auth/x509-transport-state.d.cts.map +1 -0
  171. package/internal/auth/x509-workload-identity-auth.d.mts +128 -0
  172. package/internal/auth/x509-workload-identity-auth.d.mts.map +1 -0
  173. package/internal/auth/x509-workload-identity-auth.d.ts +128 -0
  174. package/internal/auth/x509-workload-identity-auth.d.ts.map +1 -0
  175. package/internal/auth/x509-workload-identity-auth.js +767 -0
  176. package/internal/auth/x509-workload-identity-auth.js.map +1 -0
  177. package/internal/auth/x509-workload-identity-auth.mjs +757 -0
  178. package/internal/auth/x509-workload-identity-auth.mjs.map +1 -0
  179. package/internal/bedrock.d.mts +2 -0
  180. package/internal/bedrock.d.mts.map +1 -1
  181. package/internal/bedrock.d.ts +2 -0
  182. package/internal/bedrock.d.ts.map +1 -1
  183. package/internal/bedrock.js +169 -5
  184. package/internal/bedrock.js.map +1 -1
  185. package/internal/bedrock.mjs +168 -5
  186. package/internal/bedrock.mjs.map +1 -1
  187. package/internal/data-residency.d.mts +12 -0
  188. package/internal/data-residency.d.mts.map +1 -0
  189. package/internal/data-residency.d.ts +12 -0
  190. package/internal/data-residency.d.ts.map +1 -0
  191. package/internal/data-residency.js +34 -0
  192. package/internal/data-residency.js.map +1 -0
  193. package/internal/data-residency.mjs +30 -0
  194. package/internal/data-residency.mjs.map +1 -0
  195. package/internal/multipart-encoding.d.mts +8 -0
  196. package/internal/multipart-encoding.d.mts.map +1 -0
  197. package/internal/multipart-encoding.d.ts +8 -0
  198. package/internal/multipart-encoding.d.ts.map +1 -0
  199. package/internal/multipart-encoding.js +51 -0
  200. package/internal/multipart-encoding.js.map +1 -0
  201. package/internal/multipart-encoding.mjs +48 -0
  202. package/internal/multipart-encoding.mjs.map +1 -0
  203. package/internal/qs/utils.d.mts.map +1 -1
  204. package/internal/qs/utils.d.ts.map +1 -1
  205. package/internal/qs/utils.js +307 -10
  206. package/internal/qs/utils.js.map +1 -1
  207. package/internal/qs/utils.mjs +307 -10
  208. package/internal/qs/utils.mjs.map +1 -1
  209. package/internal/request-options.d.mts +7 -0
  210. package/internal/request-options.d.mts.map +1 -1
  211. package/internal/request-options.d.ts +7 -0
  212. package/internal/request-options.d.ts.map +1 -1
  213. package/internal/request-options.js +43 -1
  214. package/internal/request-options.js.map +1 -1
  215. package/internal/request-options.mjs +42 -1
  216. package/internal/request-options.mjs.map +1 -1
  217. package/internal/responses/canonical-output-text.js +3 -3
  218. package/internal/responses/canonical-output-text.js.map +1 -1
  219. package/internal/responses/canonical-output-text.mjs +3 -3
  220. package/internal/responses/canonical-output-text.mjs.map +1 -1
  221. package/internal/responses/response-accumulator.d.mts +1 -1
  222. package/internal/responses/response-accumulator.d.mts.map +1 -1
  223. package/internal/responses/response-accumulator.d.ts +1 -1
  224. package/internal/responses/response-accumulator.d.ts.map +1 -1
  225. package/internal/responses/response-accumulator.js +331 -25
  226. package/internal/responses/response-accumulator.js.map +1 -1
  227. package/internal/responses/response-accumulator.mjs +331 -25
  228. package/internal/responses/response-accumulator.mjs.map +1 -1
  229. package/internal/tslib.js +6 -0
  230. package/internal/tslib.mjs +6 -1
  231. package/internal/uploads.d.mts +10 -6
  232. package/internal/uploads.d.mts.map +1 -1
  233. package/internal/uploads.d.ts +10 -6
  234. package/internal/uploads.d.ts.map +1 -1
  235. package/internal/uploads.js +65 -24
  236. package/internal/uploads.js.map +1 -1
  237. package/internal/uploads.mjs +65 -24
  238. package/internal/uploads.mjs.map +1 -1
  239. package/internal/utils/env.d.mts.map +1 -1
  240. package/internal/utils/env.d.ts.map +1 -1
  241. package/internal/utils/env.js +9 -4
  242. package/internal/utils/env.js.map +1 -1
  243. package/internal/utils/env.mjs +9 -4
  244. package/internal/utils/env.mjs.map +1 -1
  245. package/internal/ws.d.mts.map +1 -1
  246. package/internal/ws.d.ts.map +1 -1
  247. package/internal/ws.js +23 -1
  248. package/internal/ws.js.map +1 -1
  249. package/internal/ws.mjs +23 -1
  250. package/internal/ws.mjs.map +1 -1
  251. package/lib/AbstractChatCompletionRunner.d.mts.map +1 -1
  252. package/lib/AbstractChatCompletionRunner.d.ts.map +1 -1
  253. package/lib/AbstractChatCompletionRunner.js +32 -7
  254. package/lib/AbstractChatCompletionRunner.js.map +1 -1
  255. package/lib/AbstractChatCompletionRunner.mjs +34 -9
  256. package/lib/AbstractChatCompletionRunner.mjs.map +1 -1
  257. package/lib/AssistantStream.d.mts.map +1 -1
  258. package/lib/AssistantStream.d.ts.map +1 -1
  259. package/lib/AssistantStream.js +211 -23
  260. package/lib/AssistantStream.js.map +1 -1
  261. package/lib/AssistantStream.mjs +211 -23
  262. package/lib/AssistantStream.mjs.map +1 -1
  263. package/lib/ChatCompletionStream.d.mts +1 -1
  264. package/lib/ChatCompletionStream.d.mts.map +1 -1
  265. package/lib/ChatCompletionStream.d.ts +1 -1
  266. package/lib/ChatCompletionStream.d.ts.map +1 -1
  267. package/lib/ChatCompletionStream.js +1118 -67
  268. package/lib/ChatCompletionStream.js.map +1 -1
  269. package/lib/ChatCompletionStream.mjs +1119 -68
  270. package/lib/ChatCompletionStream.mjs.map +1 -1
  271. package/lib/EventEmitter.d.mts.map +1 -1
  272. package/lib/EventEmitter.d.ts.map +1 -1
  273. package/lib/EventEmitter.js +67 -9
  274. package/lib/EventEmitter.js.map +1 -1
  275. package/lib/EventEmitter.mjs +68 -10
  276. package/lib/EventEmitter.mjs.map +1 -1
  277. package/lib/EventStream.d.mts +4 -0
  278. package/lib/EventStream.d.mts.map +1 -1
  279. package/lib/EventStream.d.ts +4 -0
  280. package/lib/EventStream.d.ts.map +1 -1
  281. package/lib/EventStream.js +1096 -11
  282. package/lib/EventStream.js.map +1 -1
  283. package/lib/EventStream.mjs +1097 -12
  284. package/lib/EventStream.mjs.map +1 -1
  285. package/lib/ResponsesParser.d.mts.map +1 -1
  286. package/lib/ResponsesParser.d.ts.map +1 -1
  287. package/lib/ResponsesParser.js +1 -1
  288. package/lib/ResponsesParser.js.map +1 -1
  289. package/lib/ResponsesParser.mjs +1 -1
  290. package/lib/ResponsesParser.mjs.map +1 -1
  291. package/lib/Util.d.mts +2 -0
  292. package/lib/Util.d.mts.map +1 -1
  293. package/lib/Util.d.ts +2 -0
  294. package/lib/Util.d.ts.map +1 -1
  295. package/lib/Util.js +7 -4
  296. package/lib/Util.js.map +1 -1
  297. package/lib/Util.mjs +7 -4
  298. package/lib/Util.mjs.map +1 -1
  299. package/lib/assistant-run-polling.d.mts +12 -0
  300. package/lib/assistant-run-polling.d.mts.map +1 -0
  301. package/lib/assistant-run-polling.d.ts +12 -0
  302. package/lib/assistant-run-polling.d.ts.map +1 -0
  303. package/lib/assistant-run-polling.js +17 -0
  304. package/lib/assistant-run-polling.js.map +1 -0
  305. package/lib/assistant-run-polling.mjs +14 -0
  306. package/lib/assistant-run-polling.mjs.map +1 -0
  307. package/lib/embeddings.d.mts +18 -0
  308. package/lib/embeddings.d.mts.map +1 -0
  309. package/lib/embeddings.d.ts +18 -0
  310. package/lib/embeddings.d.ts.map +1 -0
  311. package/lib/embeddings.js +50 -0
  312. package/lib/embeddings.js.map +1 -0
  313. package/lib/embeddings.mjs +47 -0
  314. package/lib/embeddings.mjs.map +1 -0
  315. package/lib/file-processing.d.mts +10 -0
  316. package/lib/file-processing.d.mts.map +1 -0
  317. package/lib/file-processing.d.ts +10 -0
  318. package/lib/file-processing.d.ts.map +1 -0
  319. package/lib/file-processing.js +30 -0
  320. package/lib/file-processing.js.map +1 -0
  321. package/lib/file-processing.mjs +27 -0
  322. package/lib/file-processing.mjs.map +1 -0
  323. package/lib/parser.d.mts.map +1 -1
  324. package/lib/parser.d.ts.map +1 -1
  325. package/lib/parser.js +16 -4
  326. package/lib/parser.js.map +1 -1
  327. package/lib/parser.mjs +16 -4
  328. package/lib/parser.mjs.map +1 -1
  329. package/lib/polling.d.mts +20 -0
  330. package/lib/polling.d.mts.map +1 -0
  331. package/lib/polling.d.ts +20 -0
  332. package/lib/polling.d.ts.map +1 -0
  333. package/lib/polling.js +130 -0
  334. package/lib/polling.js.map +1 -0
  335. package/lib/polling.mjs +127 -0
  336. package/lib/polling.mjs.map +1 -0
  337. package/lib/responses/ResponseStream.d.mts.map +1 -1
  338. package/lib/responses/ResponseStream.d.ts.map +1 -1
  339. package/lib/responses/ResponseStream.js +21 -11
  340. package/lib/responses/ResponseStream.js.map +1 -1
  341. package/lib/responses/ResponseStream.mjs +21 -11
  342. package/lib/responses/ResponseStream.mjs.map +1 -1
  343. package/lib/vector-store-polling.d.mts +22 -0
  344. package/lib/vector-store-polling.d.mts.map +1 -0
  345. package/lib/vector-store-polling.d.ts +22 -0
  346. package/lib/vector-store-polling.d.ts.map +1 -0
  347. package/lib/vector-store-polling.js +24 -0
  348. package/lib/vector-store-polling.js.map +1 -0
  349. package/lib/vector-store-polling.mjs +20 -0
  350. package/lib/vector-store-polling.mjs.map +1 -0
  351. package/lib/vector-store-upload.d.mts +17 -0
  352. package/lib/vector-store-upload.d.mts.map +1 -0
  353. package/lib/vector-store-upload.d.ts +17 -0
  354. package/lib/vector-store-upload.d.ts.map +1 -0
  355. package/lib/vector-store-upload.js +37 -0
  356. package/lib/vector-store-upload.js.map +1 -0
  357. package/lib/vector-store-upload.mjs +34 -0
  358. package/lib/vector-store-upload.mjs.map +1 -0
  359. package/lib/webhook-signature.d.mts +15 -0
  360. package/lib/webhook-signature.d.mts.map +1 -0
  361. package/lib/webhook-signature.d.ts +15 -0
  362. package/lib/webhook-signature.d.ts.map +1 -0
  363. package/lib/webhook-signature.js +125 -0
  364. package/lib/webhook-signature.js.map +1 -0
  365. package/lib/webhook-signature.mjs +121 -0
  366. package/lib/webhook-signature.mjs.map +1 -0
  367. package/package.json +14 -1
  368. package/realtime/internal-base.d.mts +2 -0
  369. package/realtime/internal-base.d.mts.map +1 -1
  370. package/realtime/internal-base.d.ts +2 -0
  371. package/realtime/internal-base.d.ts.map +1 -1
  372. package/realtime/internal-base.js +15 -0
  373. package/realtime/internal-base.js.map +1 -1
  374. package/realtime/internal-base.mjs +14 -0
  375. package/realtime/internal-base.mjs.map +1 -1
  376. package/realtime/websocket.d.mts +3 -2
  377. package/realtime/websocket.d.mts.map +1 -1
  378. package/realtime/websocket.d.ts +3 -2
  379. package/realtime/websocket.d.ts.map +1 -1
  380. package/realtime/websocket.js +90 -26
  381. package/realtime/websocket.js.map +1 -1
  382. package/realtime/websocket.mjs +91 -27
  383. package/realtime/websocket.mjs.map +1 -1
  384. package/realtime/ws.d.mts.map +1 -1
  385. package/realtime/ws.d.ts.map +1 -1
  386. package/realtime/ws.js +9 -1
  387. package/realtime/ws.js.map +1 -1
  388. package/realtime/ws.mjs +10 -2
  389. package/realtime/ws.mjs.map +1 -1
  390. package/resources/admin/organization/index.d.mts +2 -2
  391. package/resources/admin/organization/index.d.mts.map +1 -1
  392. package/resources/admin/organization/index.d.ts +2 -2
  393. package/resources/admin/organization/index.d.ts.map +1 -1
  394. package/resources/admin/organization/index.js.map +1 -1
  395. package/resources/admin/organization/index.mjs.map +1 -1
  396. package/resources/admin/organization/organization.d.mts +4 -4
  397. package/resources/admin/organization/organization.d.mts.map +1 -1
  398. package/resources/admin/organization/organization.d.ts +4 -4
  399. package/resources/admin/organization/organization.d.ts.map +1 -1
  400. package/resources/admin/organization/organization.js.map +1 -1
  401. package/resources/admin/organization/organization.mjs.map +1 -1
  402. package/resources/admin/organization/projects/index.d.mts +1 -1
  403. package/resources/admin/organization/projects/index.d.mts.map +1 -1
  404. package/resources/admin/organization/projects/index.d.ts +1 -1
  405. package/resources/admin/organization/projects/index.d.ts.map +1 -1
  406. package/resources/admin/organization/projects/index.js.map +1 -1
  407. package/resources/admin/organization/projects/index.mjs.map +1 -1
  408. package/resources/admin/organization/projects/projects.d.mts +22 -5
  409. package/resources/admin/organization/projects/projects.d.mts.map +1 -1
  410. package/resources/admin/organization/projects/projects.d.ts +22 -5
  411. package/resources/admin/organization/projects/projects.d.ts.map +1 -1
  412. package/resources/admin/organization/projects/projects.js.map +1 -1
  413. package/resources/admin/organization/projects/projects.mjs.map +1 -1
  414. package/resources/admin/organization/usage.d.mts +62 -1
  415. package/resources/admin/organization/usage.d.mts.map +1 -1
  416. package/resources/admin/organization/usage.d.ts +62 -1
  417. package/resources/admin/organization/usage.d.ts.map +1 -1
  418. package/resources/admin/organization/usage.js.map +1 -1
  419. package/resources/admin/organization/usage.mjs.map +1 -1
  420. package/resources/beta/responses/internal-base.d.mts.map +1 -1
  421. package/resources/beta/responses/internal-base.d.ts.map +1 -1
  422. package/resources/beta/responses/internal-base.js +2 -0
  423. package/resources/beta/responses/internal-base.js.map +1 -1
  424. package/resources/beta/responses/internal-base.mjs +2 -0
  425. package/resources/beta/responses/internal-base.mjs.map +1 -1
  426. package/resources/beta/responses/responses.d.mts +9 -12
  427. package/resources/beta/responses/responses.d.mts.map +1 -1
  428. package/resources/beta/responses/responses.d.ts +9 -12
  429. package/resources/beta/responses/responses.d.ts.map +1 -1
  430. package/resources/beta/responses/responses.js.map +1 -1
  431. package/resources/beta/responses/responses.mjs.map +1 -1
  432. package/resources/beta/threads/runs/index.d.mts +1 -1
  433. package/resources/beta/threads/runs/index.d.mts.map +1 -1
  434. package/resources/beta/threads/runs/index.d.ts +1 -1
  435. package/resources/beta/threads/runs/index.d.ts.map +1 -1
  436. package/resources/beta/threads/runs/runs.d.mts.map +1 -1
  437. package/resources/beta/threads/runs/runs.d.ts.map +1 -1
  438. package/resources/beta/threads/runs/runs.js +2 -43
  439. package/resources/beta/threads/runs/runs.js.map +1 -1
  440. package/resources/beta/threads/runs/runs.mjs +2 -43
  441. package/resources/beta/threads/runs/runs.mjs.map +1 -1
  442. package/resources/chat/completions/completions.d.mts +6 -0
  443. package/resources/chat/completions/completions.d.mts.map +1 -1
  444. package/resources/chat/completions/completions.d.ts +6 -0
  445. package/resources/chat/completions/completions.d.ts.map +1 -1
  446. package/resources/chat/completions/completions.js.map +1 -1
  447. package/resources/chat/completions/completions.mjs.map +1 -1
  448. package/resources/embeddings.d.mts.map +1 -1
  449. package/resources/embeddings.d.ts.map +1 -1
  450. package/resources/embeddings.js +2 -36
  451. package/resources/embeddings.js.map +1 -1
  452. package/resources/embeddings.mjs +2 -36
  453. package/resources/embeddings.mjs.map +1 -1
  454. package/resources/files.d.mts.map +1 -1
  455. package/resources/files.d.ts.map +1 -1
  456. package/resources/files.js +2 -15
  457. package/resources/files.js.map +1 -1
  458. package/resources/files.mjs +2 -15
  459. package/resources/files.mjs.map +1 -1
  460. package/resources/images.d.mts +12 -22
  461. package/resources/images.d.mts.map +1 -1
  462. package/resources/images.d.ts +12 -22
  463. package/resources/images.d.ts.map +1 -1
  464. package/resources/realtime/calls.d.mts +23 -1
  465. package/resources/realtime/calls.d.mts.map +1 -1
  466. package/resources/realtime/calls.d.ts +23 -1
  467. package/resources/realtime/calls.d.ts.map +1 -1
  468. package/resources/realtime/calls.js +24 -0
  469. package/resources/realtime/calls.js.map +1 -1
  470. package/resources/realtime/calls.mjs +24 -0
  471. package/resources/realtime/calls.mjs.map +1 -1
  472. package/resources/realtime/index.d.mts +1 -1
  473. package/resources/realtime/index.d.mts.map +1 -1
  474. package/resources/realtime/index.d.ts +1 -1
  475. package/resources/realtime/index.d.ts.map +1 -1
  476. package/resources/realtime/index.js.map +1 -1
  477. package/resources/realtime/index.mjs +1 -1
  478. package/resources/realtime/index.mjs.map +1 -1
  479. package/resources/realtime/realtime.d.mts +5 -4
  480. package/resources/realtime/realtime.d.mts.map +1 -1
  481. package/resources/realtime/realtime.d.ts +5 -4
  482. package/resources/realtime/realtime.d.ts.map +1 -1
  483. package/resources/realtime/realtime.js.map +1 -1
  484. package/resources/realtime/realtime.mjs.map +1 -1
  485. package/resources/responses/internal-base.d.mts.map +1 -1
  486. package/resources/responses/internal-base.d.ts.map +1 -1
  487. package/resources/responses/internal-base.js +2 -0
  488. package/resources/responses/internal-base.js.map +1 -1
  489. package/resources/responses/internal-base.mjs +2 -0
  490. package/resources/responses/internal-base.mjs.map +1 -1
  491. package/resources/responses/responses.d.mts +9 -12
  492. package/resources/responses/responses.d.mts.map +1 -1
  493. package/resources/responses/responses.d.ts +9 -12
  494. package/resources/responses/responses.d.ts.map +1 -1
  495. package/resources/responses/responses.js.map +1 -1
  496. package/resources/responses/responses.mjs.map +1 -1
  497. package/resources/vector-stores/file-batches.d.mts.map +1 -1
  498. package/resources/vector-stores/file-batches.d.ts.map +1 -1
  499. package/resources/vector-stores/file-batches.js +4 -61
  500. package/resources/vector-stores/file-batches.js.map +1 -1
  501. package/resources/vector-stores/file-batches.mjs +4 -61
  502. package/resources/vector-stores/file-batches.mjs.map +1 -1
  503. package/resources/vector-stores/files.d.mts +1 -1
  504. package/resources/vector-stores/files.d.mts.map +1 -1
  505. package/resources/vector-stores/files.d.ts +1 -1
  506. package/resources/vector-stores/files.d.ts.map +1 -1
  507. package/resources/vector-stores/files.js +2 -35
  508. package/resources/vector-stores/files.js.map +1 -1
  509. package/resources/vector-stores/files.mjs +2 -35
  510. package/resources/vector-stores/files.mjs.map +1 -1
  511. package/resources/webhooks/webhooks.d.mts.map +1 -1
  512. package/resources/webhooks/webhooks.d.ts.map +1 -1
  513. package/resources/webhooks/webhooks.js +5 -43
  514. package/resources/webhooks/webhooks.js.map +1 -1
  515. package/resources/webhooks/webhooks.mjs +5 -43
  516. package/resources/webhooks/webhooks.mjs.map +1 -1
  517. package/src/auth/index.ts +6 -1
  518. package/src/auth/subject-token-providers.ts +196 -4
  519. package/src/auth/types.ts +24 -0
  520. package/src/auth/workload-identity-auth.ts +104 -7
  521. package/src/auth/x509-transport.ts +49 -0
  522. package/src/azure.ts +22 -1
  523. package/src/bedrock.ts +49 -5
  524. package/src/beta/realtime/internal-base.ts +15 -0
  525. package/src/beta/realtime/websocket.ts +148 -40
  526. package/src/beta/realtime/ws.ts +31 -13
  527. package/src/client.ts +536 -92
  528. package/src/core/EventEmitter.ts +91 -7
  529. package/src/core/streaming.ts +71 -20
  530. package/src/helpers/audio.ts +93 -22
  531. package/src/helpers/standard-schema.ts +50 -16
  532. package/src/helpers/zod-v3-strict-schema.ts +514 -0
  533. package/src/helpers/zod.ts +17 -4
  534. package/src/index.ts +1 -1
  535. package/src/internal/assistant-stream-delta.ts +33 -10
  536. package/src/internal/auth/x509-token-exchange.ts +310 -0
  537. package/src/internal/auth/x509-transport-capability.ts +219 -0
  538. package/src/internal/auth/x509-transport-registry.ts +118 -0
  539. package/src/internal/auth/x509-transport-state-browser.ts +36 -0
  540. package/src/internal/auth/x509-transport-state.cts +36 -0
  541. package/src/internal/auth/x509-workload-identity-auth.ts +958 -0
  542. package/src/internal/bedrock.ts +182 -5
  543. package/src/internal/data-residency.ts +44 -0
  544. package/src/internal/multipart-encoding.ts +53 -0
  545. package/src/internal/qs/utils.ts +375 -13
  546. package/src/internal/request-options.ts +52 -1
  547. package/src/internal/responses/canonical-output-text.ts +3 -3
  548. package/src/internal/responses/response-accumulator.ts +411 -24
  549. package/src/internal/uploads.ts +81 -26
  550. package/src/internal/utils/env.ts +9 -5
  551. package/src/internal/ws.ts +24 -3
  552. package/src/lib/AbstractChatCompletionRunner.ts +33 -6
  553. package/src/lib/AssistantStream.ts +262 -22
  554. package/src/lib/ChatCompletionStream.ts +1467 -103
  555. package/src/lib/EventEmitter.ts +91 -7
  556. package/src/lib/EventStream.ts +1483 -10
  557. package/src/lib/ResponsesParser.ts +4 -1
  558. package/src/lib/Util.ts +7 -5
  559. package/src/lib/assistant-run-polling.ts +27 -0
  560. package/src/lib/embeddings.ts +65 -0
  561. package/src/lib/file-processing.ts +36 -0
  562. package/src/lib/parser.ts +19 -4
  563. package/src/lib/polling.ts +144 -0
  564. package/src/lib/responses/ResponseStream.ts +22 -10
  565. package/src/lib/vector-store-polling.ts +46 -0
  566. package/src/lib/vector-store-upload.ts +53 -0
  567. package/src/lib/webhook-signature.ts +164 -0
  568. package/src/realtime/internal-base.ts +15 -0
  569. package/src/realtime/websocket.ts +130 -27
  570. package/src/realtime/ws.ts +15 -2
  571. package/src/resources/admin/organization/index.ts +2 -0
  572. package/src/resources/admin/organization/organization.ts +4 -0
  573. package/src/resources/admin/organization/projects/index.ts +1 -0
  574. package/src/resources/admin/organization/projects/projects.ts +37 -4
  575. package/src/resources/admin/organization/usage.ts +83 -0
  576. package/src/resources/beta/responses/internal-base.ts +2 -0
  577. package/src/resources/beta/responses/responses.ts +9 -12
  578. package/src/resources/beta/threads/runs/index.ts +1 -1
  579. package/src/resources/beta/threads/runs/runs.ts +2 -45
  580. package/src/resources/chat/completions/completions.ts +7 -0
  581. package/src/resources/embeddings.ts +2 -42
  582. package/src/resources/files.ts +2 -19
  583. package/src/resources/images.ts +12 -22
  584. package/src/resources/realtime/api.md +1 -0
  585. package/src/resources/realtime/calls.ts +46 -0
  586. package/src/resources/realtime/index.ts +7 -1
  587. package/src/resources/realtime/realtime.ts +5 -3
  588. package/src/resources/responses/internal-base.ts +2 -0
  589. package/src/resources/responses/responses.ts +9 -12
  590. package/src/resources/vector-stores/file-batches.ts +8 -77
  591. package/src/resources/vector-stores/files.ts +3 -43
  592. package/src/resources/webhooks/webhooks.ts +5 -61
  593. package/src/version.ts +1 -1
  594. package/version.d.mts +1 -1
  595. package/version.d.ts +1 -1
  596. package/version.js +1 -1
  597. package/version.mjs +1 -1
@@ -2,8 +2,8 @@ import type { AzureOpenAI } from '../../index';
2
2
  import { assertBedrockWebSocketOrigin } from '../../internal/bedrock';
3
3
  import { OpenAI } from '../../index';
4
4
  import { OpenAIError } from '../../error';
5
- import type { RealtimeClientEvent, RealtimeServerEvent } from '../../resources/beta/realtime/realtime';
6
- import { OpenAIRealtimeEmitter, buildRealtimeURL, isAzure } from './internal-base';
5
+ import type { RealtimeClientEvent } from '../../resources/beta/realtime/realtime';
6
+ import { OpenAIRealtimeEmitter, buildRealtimeURL, isAzure, parseRealtimeEvent } from './internal-base';
7
7
  import type { RealtimeConnectionConfig } from './internal-base';
8
8
  import { isRunningInBrowser } from '../../internal/detect-platform';
9
9
 
@@ -20,10 +20,82 @@ type _WebSocket = typeof globalThis extends {
20
20
  InstanceType<ws>
21
21
  : any;
22
22
 
23
- /** Removes Azure credential query values from the publicly exposed connection URL. */
24
- function redactAzureCredentials(url: URL): void {
25
- const hasAuthorization = url.searchParams.has('Authorization');
26
- if (url.searchParams.has('api-key') || !hasAuthorization) {
23
+ type RuntimeScope = typeof globalThis & {
24
+ process?: { versions?: { node?: string } };
25
+ WorkerGlobalScope?: typeof Object;
26
+ WorkerNavigator?: typeof Object;
27
+ Deno?: { version?: { deno?: string } };
28
+ Bun?: { version?: string };
29
+ EdgeRuntime?: unknown;
30
+ WebSocketPair?: unknown;
31
+ };
32
+
33
+ /** Identifies browser pages and workers without blocking trusted server runtimes. */
34
+ function isRunningInBrowserOrBrowserWorker(): boolean {
35
+ if (isRunningInBrowser()) {
36
+ return true;
37
+ }
38
+
39
+ const scope = globalThis as RuntimeScope;
40
+ return (
41
+ typeof scope.WorkerGlobalScope === 'function' &&
42
+ scope instanceof scope.WorkerGlobalScope &&
43
+ typeof scope.WorkerNavigator === 'function' &&
44
+ scope.navigator instanceof scope.WorkerNavigator &&
45
+ typeof scope.navigator?.userAgent === 'string' &&
46
+ scope.navigator.userAgent !== 'Cloudflare-Workers' &&
47
+ scope.process?.versions?.node === undefined &&
48
+ scope.Deno === undefined &&
49
+ scope.Bun === undefined &&
50
+ scope.EdgeRuntime === undefined &&
51
+ scope.WebSocketPair === undefined
52
+ );
53
+ }
54
+
55
+ /** Reports whether the runtime supports request headers in native WebSocket options. */
56
+ function supportsWebSocketRequestHeaders(): boolean {
57
+ const scope = globalThis as RuntimeScope;
58
+ if (
59
+ isRunningInBrowserOrBrowserWorker() ||
60
+ scope.EdgeRuntime !== undefined ||
61
+ scope.WebSocketPair !== undefined ||
62
+ scope.navigator?.userAgent === 'Cloudflare-Workers'
63
+ ) {
64
+ return false;
65
+ }
66
+
67
+ if (scope.Deno !== undefined) {
68
+ const [major, minor] = (scope.Deno.version?.deno ?? '').split('.').map(Number);
69
+ return major !== undefined && minor !== undefined && (major > 2 || (major === 2 && minor >= 5));
70
+ }
71
+
72
+ if (typeof scope.Bun?.version === 'string') {
73
+ return true;
74
+ }
75
+
76
+ return (
77
+ Object.prototype.toString.call(scope.process) === '[object process]' &&
78
+ typeof scope.process?.versions?.node === 'string'
79
+ );
80
+ }
81
+
82
+ /** Removes Azure credentials while preserving the existing public URL redaction contract. */
83
+ function redactAzureCredentials(url: URL, isBearerToken: boolean): void {
84
+ let hasApiKey = !isBearerToken;
85
+ let hasAuthorization = isBearerToken;
86
+ const parameterNames = [...url.searchParams.keys()];
87
+
88
+ for (const name of parameterNames) {
89
+ if (name.toLowerCase() === 'api-key') {
90
+ hasApiKey = true;
91
+ url.searchParams.delete(name);
92
+ } else if (name.toLowerCase() === 'authorization') {
93
+ hasAuthorization = true;
94
+ url.searchParams.delete(name);
95
+ }
96
+ }
97
+
98
+ if (hasApiKey) {
27
99
  url.searchParams.set('api-key', '<REDACTED>');
28
100
  }
29
101
  if (hasAuthorization) {
@@ -31,6 +103,45 @@ function redactAzureCredentials(url: URL): void {
31
103
  }
32
104
  }
33
105
 
106
+ /** Opens an Azure native socket with header authentication and a credential-free URL. */
107
+ function createAzureWebSocket(
108
+ url: URL,
109
+ apiKey: string | null,
110
+ isBearerToken: boolean,
111
+ protocols: string[],
112
+ ): _WebSocket {
113
+ if (!supportsWebSocketRequestHeaders()) {
114
+ throw new OpenAIError(
115
+ 'Azure OpenAI Realtime credentials require a WebSocket transport that supports request headers; use openai/realtime/ws or a server-side authentication proxy.',
116
+ );
117
+ }
118
+ if (!apiKey) {
119
+ throw new Error('Azure OpenAI Realtime requires an API key');
120
+ }
121
+
122
+ redactAzureCredentials(url, isBearerToken);
123
+ const socketURL = new URL(url);
124
+ socketURL.searchParams.delete('api-key');
125
+ socketURL.searchParams.delete('Authorization');
126
+ const headers = isBearerToken ? { Authorization: `Bearer ${apiKey}` } : { 'api-key': apiKey };
127
+
128
+ // @ts-ignore
129
+ return new WebSocket(socketURL.toString(), { protocols, headers });
130
+ }
131
+
132
+ /** Prevents credentials from being attached outside the configured secure origin. */
133
+ function assertTrustedRealtimeURL(client: Pick<OpenAI, 'apiKey' | 'baseURL'>, url: URL): void {
134
+ if (url.protocol !== 'wss:') {
135
+ throw new OpenAIError('Realtime WebSocket URLs must use the wss: protocol.');
136
+ }
137
+
138
+ const configuredURL = new URL(client.baseURL);
139
+ configuredURL.protocol = 'wss:';
140
+ if (url.origin !== configuredURL.origin) {
141
+ throw new OpenAIError('Realtime WebSocket URL origin must match the configured client origin.');
142
+ }
143
+ }
144
+
34
145
  /**
35
146
  * Connects to the beta Realtime API using the runtime's native `WebSocket` implementation.
36
147
  *
@@ -39,13 +150,6 @@ function redactAzureCredentials(url: URL): void {
39
150
  * listener before using the connection. Use the stable Realtime helper for
40
151
  * Azure sideband calls.
41
152
  */
42
- function resolveRealtimeURL(
43
- client: Pick<OpenAI, 'apiKey' | 'baseURL'>,
44
- props: RealtimeConnectionConfig & { __url?: URL | undefined },
45
- ): URL {
46
- return props.__url ?? buildRealtimeURL(client, props);
47
- }
48
-
49
153
  export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
50
154
  /** Secure beta Realtime WebSocket URL; Azure authentication query parameters are redacted. */
51
155
  url: URL;
@@ -77,9 +181,6 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
77
181
  onURL?: (url: URL) => void;
78
182
  /** Indicates the token was resolved by the factory just before connecting. @internal */
79
183
  __resolvedApiKey?: boolean;
80
-
81
- /** Final URL validated before an asynchronous credential provider ran. @internal */
82
- __url?: URL;
83
184
  },
84
185
  client?: Pick<OpenAI, 'apiKey' | 'baseURL'>,
85
186
  ) {
@@ -89,7 +190,7 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
89
190
  props.dangerouslyAllowBrowser ??
90
191
  (client as any)?._options?.dangerouslyAllowBrowser ??
91
192
  (client?.apiKey?.startsWith('ek_') ? true : null);
92
- if (!dangerouslyAllowBrowser && isRunningInBrowser()) {
193
+ if (!dangerouslyAllowBrowser && isRunningInBrowserOrBrowserWorker()) {
93
194
  throw new OpenAIError(
94
195
  "It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\n\nYou can avoid this error by creating an ephemeral session token:\nhttps://platform.openai.com/docs/api-reference/realtime-sessions\n",
95
196
  );
@@ -106,21 +207,38 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
106
207
  );
107
208
  }
108
209
 
109
- this.url = resolveRealtimeURL(client, props);
210
+ this.url = buildRealtimeURL(client, props);
110
211
  props.onURL?.(this.url);
212
+ assertTrustedRealtimeURL(client, this.url);
111
213
  assertBedrockWebSocketOrigin(client, this.url);
112
214
 
113
- // @ts-ignore
114
- this.socket = new WebSocket(this.url.toString(), [
215
+ const azure = isAzure(client);
216
+ const protocols = [
115
217
  'realtime',
116
- ...(isAzure(client) ? [] : [`openai-insecure-api-key.${client.apiKey}`]),
218
+ ...(azure ? [] : [`openai-insecure-api-key.${client.apiKey}`]),
117
219
  'openai-beta.realtime-v1',
118
- ]);
220
+ ];
221
+
222
+ this.socket = azure
223
+ ? createAzureWebSocket(this.url, client.apiKey, props.__resolvedApiKey === true, protocols)
224
+ : new WebSocket(this.url.toString(), protocols);
119
225
 
120
226
  this.socket.addEventListener('message', (websocketEvent: MessageEvent) => {
121
227
  const event = (() => {
122
228
  try {
123
- return JSON.parse(websocketEvent.data.toString()) as RealtimeServerEvent;
229
+ const parsedEvent = parseRealtimeEvent(websocketEvent.data.toString());
230
+
231
+ if (
232
+ typeof parsedEvent !== 'object' ||
233
+ parsedEvent === null ||
234
+ Array.isArray(parsedEvent) ||
235
+ !Object.getOwnPropertyDescriptor(parsedEvent, 'type') ||
236
+ typeof parsedEvent.type !== 'string'
237
+ ) {
238
+ throw new TypeError('Realtime WebSocket event must be an object with a string type.');
239
+ }
240
+
241
+ return parsedEvent;
124
242
  } catch (err) {
125
243
  this._onError(null, 'could not parse websocket event', err);
126
244
  return null;
@@ -142,10 +260,6 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
142
260
  this.socket.addEventListener('error', (event: any) => {
143
261
  this._onError(null, event.message, null);
144
262
  });
145
-
146
- if (isAzure(client)) {
147
- redactAzureCredentials(this.url);
148
- }
149
263
  }
150
264
 
151
265
  /**
@@ -164,17 +278,20 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
164
278
  },
165
279
  ): Promise<OpenAIRealtimeWebSocket> {
166
280
  const url = buildRealtimeURL(client, props);
281
+ assertTrustedRealtimeURL(client, url);
167
282
  assertBedrockWebSocketOrigin(client, url);
168
283
  const resolvedApiKey = await client._callApiKey();
169
- return new OpenAIRealtimeWebSocket({ ...props, __resolvedApiKey: resolvedApiKey, __url: url }, client);
284
+ assertTrustedRealtimeURL(client, url);
285
+ assertBedrockWebSocketOrigin(client, url);
286
+ return new OpenAIRealtimeWebSocket({ ...props, __resolvedApiKey: resolvedApiKey }, client);
170
287
  }
171
288
 
172
289
  /**
173
290
  * Opens a native beta Azure OpenAI Realtime session for a model deployment.
174
291
  *
175
- * Azure credentials are redacted from the exposed `url` property immediately
176
- * after connection setup. Use the stable Realtime helper to attach to an
177
- * existing Azure call.
292
+ * Azure credentials are sent in WebSocket handshake headers and never appear
293
+ * in the native socket URL. Browser WebSockets cannot set these headers;
294
+ * use a server-side authentication proxy or the Node.js `ws` transport.
178
295
  *
179
296
  * @param client Azure OpenAI client that supplies the endpoint and credential.
180
297
  * @param options Optional deployment override and browser-safety settings.
@@ -195,14 +312,6 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
195
312
  if (!apiKey) {
196
313
  throw new Error('Azure OpenAI Realtime requires an API key');
197
314
  }
198
- const azureApiKey = apiKey;
199
- function onURL(url: URL) {
200
- if (isApiKeyProvider) {
201
- url.searchParams.set('Authorization', `Bearer ${azureApiKey}`);
202
- } else {
203
- url.searchParams.set('api-key', azureApiKey);
204
- }
205
- }
206
315
  const deploymentName = options.deploymentName ?? client.deploymentName;
207
316
  if (!deploymentName) {
208
317
  throw new Error('No deployment name provided');
@@ -211,7 +320,6 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
211
320
  return new OpenAIRealtimeWebSocket(
212
321
  {
213
322
  model: deploymentName,
214
- onURL,
215
323
  ...(dangerouslyAllowBrowser === undefined ? {} : { dangerouslyAllowBrowser }),
216
324
  __resolvedApiKey: isApiKeyProvider,
217
325
  },
@@ -3,8 +3,8 @@ import { assertBedrockWebSocketOrigin } from '../../internal/bedrock';
3
3
  import { protectWebSocketOptionsFromCredentialRedirects } from '../../internal/ws';
4
4
  import type { AzureOpenAI } from '../../index';
5
5
  import { OpenAI } from '../../index';
6
- import type { RealtimeClientEvent, RealtimeServerEvent } from '../../resources/beta/realtime/realtime';
7
- import { OpenAIRealtimeEmitter, buildRealtimeURL, isAzure } from './internal-base';
6
+ import type { RealtimeClientEvent } from '../../resources/beta/realtime/realtime';
7
+ import { OpenAIRealtimeEmitter, buildRealtimeURL, isAzure, parseRealtimeEvent } from './internal-base';
8
8
  import type { RealtimeConnectionConfig } from './internal-base';
9
9
 
10
10
  /**
@@ -14,11 +14,16 @@ import type { RealtimeConnectionConfig } from './internal-base';
14
14
  * Register an SDK `error` listener and wait for `socket`'s `open` event before
15
15
  * sending client events. Use the stable Realtime helper for Azure sideband calls.
16
16
  */
17
- function resolveRealtimeURL(
18
- client: Pick<OpenAI, 'apiKey' | 'baseURL'>,
19
- props: RealtimeConnectionConfig & { __url?: URL | undefined },
20
- ): URL {
21
- return props.__url ?? buildRealtimeURL(client, props);
17
+ function assertTrustedRealtimeURL(client: Pick<OpenAI, 'apiKey' | 'baseURL'>, url: URL): void {
18
+ if (url.protocol !== 'wss:') {
19
+ throw new Error('Realtime WebSocket URLs must use the wss: protocol.');
20
+ }
21
+
22
+ const configuredURL = new URL(client.baseURL);
23
+ configuredURL.protocol = 'wss:';
24
+ if (url.origin !== configuredURL.origin) {
25
+ throw new Error('Realtime WebSocket URL origin must match the configured client origin.');
26
+ }
22
27
  }
23
28
 
24
29
  export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter {
@@ -45,9 +50,6 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter {
45
50
 
46
51
  /** Indicates that a function-based credential was resolved by an async factory. @internal */
47
52
  __resolvedApiKey?: boolean;
48
-
49
- /** Final URL validated before an asynchronous credential provider ran. @internal */
50
- __url?: URL;
51
53
  },
52
54
  client?: Pick<OpenAI, 'apiKey' | 'baseURL'>,
53
55
  ) {
@@ -62,7 +64,8 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter {
62
64
  ].join('\n'),
63
65
  );
64
66
  }
65
- this.url = resolveRealtimeURL(client, props);
67
+ this.url = buildRealtimeURL(client, props);
68
+ assertTrustedRealtimeURL(client, this.url);
66
69
  assertBedrockWebSocketOrigin(client, this.url);
67
70
  const headers = {
68
71
  ...props.options?.headers,
@@ -81,7 +84,19 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter {
81
84
  this.socket.on('message', (wsEvent) => {
82
85
  const event = (() => {
83
86
  try {
84
- return JSON.parse(wsEvent.toString()) as RealtimeServerEvent;
87
+ const parsedEvent = parseRealtimeEvent(wsEvent.toString());
88
+
89
+ if (
90
+ typeof parsedEvent !== 'object' ||
91
+ parsedEvent === null ||
92
+ Array.isArray(parsedEvent) ||
93
+ !Object.getOwnPropertyDescriptor(parsedEvent, 'type') ||
94
+ typeof parsedEvent.type !== 'string'
95
+ ) {
96
+ throw new TypeError('Realtime WebSocket event must be an object with a string type.');
97
+ }
98
+
99
+ return parsedEvent;
85
100
  } catch (err) {
86
101
  this._onError(null, 'could not parse websocket event', err);
87
102
  return null;
@@ -121,9 +136,12 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter {
121
136
  },
122
137
  ): Promise<OpenAIRealtimeWS> {
123
138
  const url = buildRealtimeURL(client, props);
139
+ assertTrustedRealtimeURL(client, url);
124
140
  assertBedrockWebSocketOrigin(client, url);
125
141
  const resolvedApiKey = await client._callApiKey();
126
- return new OpenAIRealtimeWS({ ...props, __resolvedApiKey: resolvedApiKey, __url: url }, client);
142
+ assertTrustedRealtimeURL(client, url);
143
+ assertBedrockWebSocketOrigin(client, url);
144
+ return new OpenAIRealtimeWS({ ...props, __resolvedApiKey: resolvedApiKey }, client);
127
145
  }
128
146
 
129
147
  /**