openai 7.15.0 → 7.17.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 (696) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +6 -0
  3. package/_vendor/zod-to-json-schema/Options.d.mts.map +1 -1
  4. package/_vendor/zod-to-json-schema/Options.d.ts.map +1 -1
  5. package/_vendor/zod-to-json-schema/Options.js +2 -0
  6. package/_vendor/zod-to-json-schema/Options.js.map +1 -1
  7. package/_vendor/zod-to-json-schema/Options.mjs +2 -0
  8. package/_vendor/zod-to-json-schema/Options.mjs.map +1 -1
  9. package/_vendor/zod-to-json-schema/parseDef.d.mts.map +1 -1
  10. package/_vendor/zod-to-json-schema/parseDef.d.ts.map +1 -1
  11. package/_vendor/zod-to-json-schema/parseDef.js +1 -0
  12. package/_vendor/zod-to-json-schema/parseDef.js.map +1 -1
  13. package/_vendor/zod-to-json-schema/parseDef.mjs +1 -0
  14. package/_vendor/zod-to-json-schema/parseDef.mjs.map +1 -1
  15. package/_vendor/zod-to-json-schema/parsers/bigint.d.mts.map +1 -1
  16. package/_vendor/zod-to-json-schema/parsers/bigint.d.ts.map +1 -1
  17. package/_vendor/zod-to-json-schema/parsers/bigint.js +2 -0
  18. package/_vendor/zod-to-json-schema/parsers/bigint.js.map +1 -1
  19. package/_vendor/zod-to-json-schema/parsers/bigint.mjs +2 -0
  20. package/_vendor/zod-to-json-schema/parsers/bigint.mjs.map +1 -1
  21. package/_vendor/zod-to-json-schema/parsers/literal.d.mts.map +1 -1
  22. package/_vendor/zod-to-json-schema/parsers/literal.d.ts.map +1 -1
  23. package/_vendor/zod-to-json-schema/parsers/literal.js +1 -0
  24. package/_vendor/zod-to-json-schema/parsers/literal.js.map +1 -1
  25. package/_vendor/zod-to-json-schema/parsers/literal.mjs +1 -0
  26. package/_vendor/zod-to-json-schema/parsers/literal.mjs.map +1 -1
  27. package/_vendor/zod-to-json-schema/parsers/null.d.mts.map +1 -1
  28. package/_vendor/zod-to-json-schema/parsers/null.d.ts.map +1 -1
  29. package/_vendor/zod-to-json-schema/parsers/null.js +1 -0
  30. package/_vendor/zod-to-json-schema/parsers/null.js.map +1 -1
  31. package/_vendor/zod-to-json-schema/parsers/null.mjs +1 -0
  32. package/_vendor/zod-to-json-schema/parsers/null.mjs.map +1 -1
  33. package/_vendor/zod-to-json-schema/parsers/nullable.d.mts.map +1 -1
  34. package/_vendor/zod-to-json-schema/parsers/nullable.d.ts.map +1 -1
  35. package/_vendor/zod-to-json-schema/parsers/nullable.js +4 -0
  36. package/_vendor/zod-to-json-schema/parsers/nullable.js.map +1 -1
  37. package/_vendor/zod-to-json-schema/parsers/nullable.mjs +4 -0
  38. package/_vendor/zod-to-json-schema/parsers/nullable.mjs.map +1 -1
  39. package/_vendor/zod-to-json-schema/parsers/number.d.mts.map +1 -1
  40. package/_vendor/zod-to-json-schema/parsers/number.d.ts.map +1 -1
  41. package/_vendor/zod-to-json-schema/parsers/number.js +2 -0
  42. package/_vendor/zod-to-json-schema/parsers/number.js.map +1 -1
  43. package/_vendor/zod-to-json-schema/parsers/number.mjs +2 -0
  44. package/_vendor/zod-to-json-schema/parsers/number.mjs.map +1 -1
  45. package/_vendor/zod-to-json-schema/parsers/optional.d.mts.map +1 -1
  46. package/_vendor/zod-to-json-schema/parsers/optional.d.ts.map +1 -1
  47. package/_vendor/zod-to-json-schema/parsers/optional.js +6 -7
  48. package/_vendor/zod-to-json-schema/parsers/optional.js.map +1 -1
  49. package/_vendor/zod-to-json-schema/parsers/optional.mjs +6 -7
  50. package/_vendor/zod-to-json-schema/parsers/optional.mjs.map +1 -1
  51. package/_vendor/zod-to-json-schema/parsers/record.d.mts.map +1 -1
  52. package/_vendor/zod-to-json-schema/parsers/record.d.ts.map +1 -1
  53. package/_vendor/zod-to-json-schema/parsers/record.js +2 -0
  54. package/_vendor/zod-to-json-schema/parsers/record.js.map +1 -1
  55. package/_vendor/zod-to-json-schema/parsers/record.mjs +2 -0
  56. package/_vendor/zod-to-json-schema/parsers/record.mjs.map +1 -1
  57. package/_vendor/zod-to-json-schema/parsers/string.d.mts.map +1 -1
  58. package/_vendor/zod-to-json-schema/parsers/string.d.ts.map +1 -1
  59. package/_vendor/zod-to-json-schema/parsers/string.js +1 -0
  60. package/_vendor/zod-to-json-schema/parsers/string.js.map +1 -1
  61. package/_vendor/zod-to-json-schema/parsers/string.mjs +1 -0
  62. package/_vendor/zod-to-json-schema/parsers/string.mjs.map +1 -1
  63. package/_vendor/zod-to-json-schema/parsers/union.d.mts.map +1 -1
  64. package/_vendor/zod-to-json-schema/parsers/union.d.ts.map +1 -1
  65. package/_vendor/zod-to-json-schema/parsers/union.js +3 -0
  66. package/_vendor/zod-to-json-schema/parsers/union.js.map +1 -1
  67. package/_vendor/zod-to-json-schema/parsers/union.mjs +3 -0
  68. package/_vendor/zod-to-json-schema/parsers/union.mjs.map +1 -1
  69. package/_vendor/zod-to-json-schema/util.d.mts.map +1 -1
  70. package/_vendor/zod-to-json-schema/util.d.ts.map +1 -1
  71. package/_vendor/zod-to-json-schema/util.js +1 -0
  72. package/_vendor/zod-to-json-schema/util.js.map +1 -1
  73. package/_vendor/zod-to-json-schema/util.mjs +1 -0
  74. package/_vendor/zod-to-json-schema/util.mjs.map +1 -1
  75. package/_vendor/zod-to-json-schema/zodToJsonSchema.d.mts.map +1 -1
  76. package/_vendor/zod-to-json-schema/zodToJsonSchema.d.ts.map +1 -1
  77. package/_vendor/zod-to-json-schema/zodToJsonSchema.js +2 -0
  78. package/_vendor/zod-to-json-schema/zodToJsonSchema.js.map +1 -1
  79. package/_vendor/zod-to-json-schema/zodToJsonSchema.mjs +2 -0
  80. package/_vendor/zod-to-json-schema/zodToJsonSchema.mjs.map +1 -1
  81. package/auth/subject-token-providers.d.mts.map +1 -1
  82. package/auth/subject-token-providers.d.ts.map +1 -1
  83. package/auth/subject-token-providers.js +6 -1
  84. package/auth/subject-token-providers.js.map +1 -1
  85. package/auth/subject-token-providers.mjs +6 -1
  86. package/auth/subject-token-providers.mjs.map +1 -1
  87. package/auth/workload-identity-auth.d.mts.map +1 -1
  88. package/auth/workload-identity-auth.d.ts.map +1 -1
  89. package/auth/workload-identity-auth.js +9 -0
  90. package/auth/workload-identity-auth.js.map +1 -1
  91. package/auth/workload-identity-auth.mjs +9 -0
  92. package/auth/workload-identity-auth.mjs.map +1 -1
  93. package/auth/x509-transport.d.mts.map +1 -1
  94. package/auth/x509-transport.d.ts.map +1 -1
  95. package/auth/x509-transport.js +11 -0
  96. package/auth/x509-transport.js.map +1 -1
  97. package/auth/x509-transport.mjs +11 -0
  98. package/auth/x509-transport.mjs.map +1 -1
  99. package/azure.d.mts.map +1 -1
  100. package/azure.d.ts.map +1 -1
  101. package/azure.js +3 -0
  102. package/azure.js.map +1 -1
  103. package/azure.mjs +3 -0
  104. package/azure.mjs.map +1 -1
  105. package/bedrock.d.mts.map +1 -1
  106. package/bedrock.d.ts.map +1 -1
  107. package/bedrock.js +14 -6
  108. package/bedrock.js.map +1 -1
  109. package/bedrock.mjs +14 -6
  110. package/bedrock.mjs.map +1 -1
  111. package/beta/realtime/internal-base.d.mts.map +1 -1
  112. package/beta/realtime/internal-base.d.ts.map +1 -1
  113. package/beta/realtime/internal-base.js +1 -0
  114. package/beta/realtime/internal-base.js.map +1 -1
  115. package/beta/realtime/internal-base.mjs +1 -0
  116. package/beta/realtime/internal-base.mjs.map +1 -1
  117. package/beta/realtime/websocket.d.mts.map +1 -1
  118. package/beta/realtime/websocket.d.ts.map +1 -1
  119. package/beta/realtime/websocket.js +9 -1
  120. package/beta/realtime/websocket.js.map +1 -1
  121. package/beta/realtime/websocket.mjs +9 -1
  122. package/beta/realtime/websocket.mjs.map +1 -1
  123. package/beta/realtime/ws.d.mts.map +1 -1
  124. package/beta/realtime/ws.d.ts.map +1 -1
  125. package/beta/realtime/ws.js +3 -0
  126. package/beta/realtime/ws.js.map +1 -1
  127. package/beta/realtime/ws.mjs +3 -0
  128. package/beta/realtime/ws.mjs.map +1 -1
  129. package/client.d.mts +14 -3
  130. package/client.d.mts.map +1 -1
  131. package/client.d.ts +14 -3
  132. package/client.d.ts.map +1 -1
  133. package/client.js +64 -26
  134. package/client.js.map +1 -1
  135. package/client.mjs +64 -26
  136. package/client.mjs.map +1 -1
  137. package/core/EventEmitter.d.mts.map +1 -1
  138. package/core/EventEmitter.d.ts.map +1 -1
  139. package/core/EventEmitter.js +15 -0
  140. package/core/EventEmitter.js.map +1 -1
  141. package/core/EventEmitter.mjs +15 -0
  142. package/core/EventEmitter.mjs.map +1 -1
  143. package/core/streaming.d.mts +1 -0
  144. package/core/streaming.d.mts.map +1 -1
  145. package/core/streaming.d.ts +1 -0
  146. package/core/streaming.d.ts.map +1 -1
  147. package/core/streaming.js +28 -1
  148. package/core/streaming.js.map +1 -1
  149. package/core/streaming.mjs +28 -1
  150. package/core/streaming.mjs.map +1 -1
  151. package/helpers/audio.d.mts.map +1 -1
  152. package/helpers/audio.d.ts.map +1 -1
  153. package/helpers/audio.js +2 -0
  154. package/helpers/audio.js.map +1 -1
  155. package/helpers/audio.mjs +2 -0
  156. package/helpers/audio.mjs.map +1 -1
  157. package/helpers/standard-schema.d.mts.map +1 -1
  158. package/helpers/standard-schema.d.ts.map +1 -1
  159. package/helpers/standard-schema.js +28 -18
  160. package/helpers/standard-schema.js.map +1 -1
  161. package/helpers/standard-schema.mjs +28 -18
  162. package/helpers/standard-schema.mjs.map +1 -1
  163. package/helpers/zod-v3-strict-schema.d.mts.map +1 -1
  164. package/helpers/zod-v3-strict-schema.d.ts.map +1 -1
  165. package/helpers/zod-v3-strict-schema.js +5 -0
  166. package/helpers/zod-v3-strict-schema.js.map +1 -1
  167. package/helpers/zod-v3-strict-schema.mjs +5 -0
  168. package/helpers/zod-v3-strict-schema.mjs.map +1 -1
  169. package/helpers/zod.d.mts.map +1 -1
  170. package/helpers/zod.d.ts.map +1 -1
  171. package/helpers/zod.js +16 -1
  172. package/helpers/zod.js.map +1 -1
  173. package/helpers/zod.mjs +17 -2
  174. package/helpers/zod.mjs.map +1 -1
  175. package/internal/assistant-stream-delta.d.mts.map +1 -1
  176. package/internal/assistant-stream-delta.d.ts.map +1 -1
  177. package/internal/assistant-stream-delta.js +8 -1
  178. package/internal/assistant-stream-delta.js.map +1 -1
  179. package/internal/assistant-stream-delta.mjs +8 -1
  180. package/internal/assistant-stream-delta.mjs.map +1 -1
  181. package/internal/auth/x509-credential-options.d.mts.map +1 -1
  182. package/internal/auth/x509-credential-options.d.ts.map +1 -1
  183. package/internal/auth/x509-credential-options.js +3 -0
  184. package/internal/auth/x509-credential-options.js.map +1 -1
  185. package/internal/auth/x509-credential-options.mjs +3 -0
  186. package/internal/auth/x509-credential-options.mjs.map +1 -1
  187. package/internal/auth/x509-token-exchange.d.mts.map +1 -1
  188. package/internal/auth/x509-token-exchange.d.ts.map +1 -1
  189. package/internal/auth/x509-token-exchange.js +2 -0
  190. package/internal/auth/x509-token-exchange.js.map +1 -1
  191. package/internal/auth/x509-token-exchange.mjs +2 -0
  192. package/internal/auth/x509-token-exchange.mjs.map +1 -1
  193. package/internal/auth/x509-transport-capability.d.mts.map +1 -1
  194. package/internal/auth/x509-transport-capability.d.ts.map +1 -1
  195. package/internal/auth/x509-transport-capability.js +1 -0
  196. package/internal/auth/x509-transport-capability.js.map +1 -1
  197. package/internal/auth/x509-transport-capability.mjs +1 -0
  198. package/internal/auth/x509-transport-capability.mjs.map +1 -1
  199. package/internal/auth/x509-transport-state.mjs +1 -0
  200. package/internal/auth/x509-workload-identity-auth.d.mts.map +1 -1
  201. package/internal/auth/x509-workload-identity-auth.d.ts.map +1 -1
  202. package/internal/auth/x509-workload-identity-auth.js +11 -0
  203. package/internal/auth/x509-workload-identity-auth.js.map +1 -1
  204. package/internal/auth/x509-workload-identity-auth.mjs +11 -0
  205. package/internal/auth/x509-workload-identity-auth.mjs.map +1 -1
  206. package/internal/bedrock.d.mts.map +1 -1
  207. package/internal/bedrock.d.ts.map +1 -1
  208. package/internal/bedrock.js +17 -1
  209. package/internal/bedrock.js.map +1 -1
  210. package/internal/bedrock.mjs +17 -1
  211. package/internal/bedrock.mjs.map +1 -1
  212. package/internal/decoders/line.d.mts.map +1 -1
  213. package/internal/decoders/line.d.ts.map +1 -1
  214. package/internal/decoders/line.js +1 -0
  215. package/internal/decoders/line.js.map +1 -1
  216. package/internal/decoders/line.mjs +1 -0
  217. package/internal/decoders/line.mjs.map +1 -1
  218. package/internal/parse.d.mts +1 -0
  219. package/internal/parse.d.mts.map +1 -1
  220. package/internal/parse.d.ts +1 -0
  221. package/internal/parse.d.ts.map +1 -1
  222. package/internal/parse.js.map +1 -1
  223. package/internal/parse.mjs.map +1 -1
  224. package/internal/provider.d.mts.map +1 -1
  225. package/internal/provider.d.ts.map +1 -1
  226. package/internal/provider.js +3 -0
  227. package/internal/provider.js.map +1 -1
  228. package/internal/provider.mjs +3 -0
  229. package/internal/provider.mjs.map +1 -1
  230. package/internal/qs/stringify.d.mts.map +1 -1
  231. package/internal/qs/stringify.d.ts.map +1 -1
  232. package/internal/qs/stringify.js +3 -0
  233. package/internal/qs/stringify.js.map +1 -1
  234. package/internal/qs/stringify.mjs +3 -0
  235. package/internal/qs/stringify.mjs.map +1 -1
  236. package/internal/qs/utils.d.mts.map +1 -1
  237. package/internal/qs/utils.d.ts.map +1 -1
  238. package/internal/qs/utils.js +15 -3
  239. package/internal/qs/utils.js.map +1 -1
  240. package/internal/qs/utils.mjs +15 -3
  241. package/internal/qs/utils.mjs.map +1 -1
  242. package/internal/realtime-credentials.d.mts +1 -1
  243. package/internal/realtime-credentials.d.ts +1 -1
  244. package/internal/realtime-credentials.js +1 -1
  245. package/internal/realtime-credentials.mjs +1 -1
  246. package/internal/responses/response-accumulator.d.mts.map +1 -1
  247. package/internal/responses/response-accumulator.d.ts.map +1 -1
  248. package/internal/responses/response-accumulator.js +20 -4
  249. package/internal/responses/response-accumulator.js.map +1 -1
  250. package/internal/responses/response-accumulator.mjs +20 -4
  251. package/internal/responses/response-accumulator.mjs.map +1 -1
  252. package/internal/to-file.js.map +1 -1
  253. package/internal/to-file.mjs.map +1 -1
  254. package/internal/uploads.d.mts.map +1 -1
  255. package/internal/uploads.d.ts.map +1 -1
  256. package/internal/uploads.js +10 -0
  257. package/internal/uploads.js.map +1 -1
  258. package/internal/uploads.mjs +10 -0
  259. package/internal/uploads.mjs.map +1 -1
  260. package/internal/utils/abort.d.mts +11 -0
  261. package/internal/utils/abort.d.mts.map +1 -0
  262. package/internal/utils/abort.d.ts +11 -0
  263. package/internal/utils/abort.d.ts.map +1 -0
  264. package/internal/utils/abort.js +94 -0
  265. package/internal/utils/abort.js.map +1 -0
  266. package/internal/utils/abort.mjs +90 -0
  267. package/internal/utils/abort.mjs.map +1 -0
  268. package/internal/utils/bytes.d.mts.map +1 -1
  269. package/internal/utils/bytes.d.ts.map +1 -1
  270. package/internal/utils/bytes.js +2 -0
  271. package/internal/utils/bytes.js.map +1 -1
  272. package/internal/utils/bytes.mjs +2 -0
  273. package/internal/utils/bytes.mjs.map +1 -1
  274. package/internal/utils/path.d.mts.map +1 -1
  275. package/internal/utils/path.d.ts.map +1 -1
  276. package/internal/utils/path.js +2 -0
  277. package/internal/utils/path.js.map +1 -1
  278. package/internal/utils/path.mjs +2 -0
  279. package/internal/utils/path.mjs.map +1 -1
  280. package/internal/utils/sleep.d.mts +1 -1
  281. package/internal/utils/sleep.d.mts.map +1 -1
  282. package/internal/utils/sleep.d.ts +1 -1
  283. package/internal/utils/sleep.d.ts.map +1 -1
  284. package/internal/utils/sleep.js +51 -1
  285. package/internal/utils/sleep.js.map +1 -1
  286. package/internal/utils/sleep.mjs +51 -1
  287. package/internal/utils/sleep.mjs.map +1 -1
  288. package/internal/ws-adapter-browser.d.mts.map +1 -1
  289. package/internal/ws-adapter-browser.d.ts.map +1 -1
  290. package/internal/ws-adapter-browser.js +2 -0
  291. package/internal/ws-adapter-browser.js.map +1 -1
  292. package/internal/ws-adapter-browser.mjs +2 -0
  293. package/internal/ws-adapter-browser.mjs.map +1 -1
  294. package/internal/ws.d.mts +22 -0
  295. package/internal/ws.d.mts.map +1 -1
  296. package/internal/ws.d.ts +22 -0
  297. package/internal/ws.d.ts.map +1 -1
  298. package/internal/ws.js +46 -4
  299. package/internal/ws.js.map +1 -1
  300. package/internal/ws.mjs +44 -4
  301. package/internal/ws.mjs.map +1 -1
  302. package/lib/AbstractChatCompletionRunner.d.mts.map +1 -1
  303. package/lib/AbstractChatCompletionRunner.d.ts.map +1 -1
  304. package/lib/AbstractChatCompletionRunner.js +41 -16
  305. package/lib/AbstractChatCompletionRunner.js.map +1 -1
  306. package/lib/AbstractChatCompletionRunner.mjs +42 -17
  307. package/lib/AbstractChatCompletionRunner.mjs.map +1 -1
  308. package/lib/AssistantStream.d.mts.map +1 -1
  309. package/lib/AssistantStream.d.ts.map +1 -1
  310. package/lib/AssistantStream.js +19 -5
  311. package/lib/AssistantStream.js.map +1 -1
  312. package/lib/AssistantStream.mjs +20 -6
  313. package/lib/AssistantStream.mjs.map +1 -1
  314. package/lib/ChatCompletionRunner.d.mts.map +1 -1
  315. package/lib/ChatCompletionRunner.d.ts.map +1 -1
  316. package/lib/ChatCompletionRunner.js +1 -0
  317. package/lib/ChatCompletionRunner.js.map +1 -1
  318. package/lib/ChatCompletionRunner.mjs +1 -0
  319. package/lib/ChatCompletionRunner.mjs.map +1 -1
  320. package/lib/ChatCompletionStream.d.mts +6 -1
  321. package/lib/ChatCompletionStream.d.mts.map +1 -1
  322. package/lib/ChatCompletionStream.d.ts +6 -1
  323. package/lib/ChatCompletionStream.d.ts.map +1 -1
  324. package/lib/ChatCompletionStream.js +63 -7
  325. package/lib/ChatCompletionStream.js.map +1 -1
  326. package/lib/ChatCompletionStream.mjs +64 -8
  327. package/lib/ChatCompletionStream.mjs.map +1 -1
  328. package/lib/EventEmitter.d.mts.map +1 -1
  329. package/lib/EventEmitter.d.ts.map +1 -1
  330. package/lib/EventEmitter.js +15 -0
  331. package/lib/EventEmitter.js.map +1 -1
  332. package/lib/EventEmitter.mjs +15 -0
  333. package/lib/EventEmitter.mjs.map +1 -1
  334. package/lib/EventStream.d.mts +2 -0
  335. package/lib/EventStream.d.mts.map +1 -1
  336. package/lib/EventStream.d.ts +2 -0
  337. package/lib/EventStream.d.ts.map +1 -1
  338. package/lib/EventStream.js +111 -14
  339. package/lib/EventStream.js.map +1 -1
  340. package/lib/EventStream.mjs +111 -14
  341. package/lib/EventStream.mjs.map +1 -1
  342. package/lib/ResponsesParser.d.mts.map +1 -1
  343. package/lib/ResponsesParser.d.ts.map +1 -1
  344. package/lib/ResponsesParser.js +4 -0
  345. package/lib/ResponsesParser.js.map +1 -1
  346. package/lib/ResponsesParser.mjs +4 -0
  347. package/lib/ResponsesParser.mjs.map +1 -1
  348. package/lib/RunnableFunction.d.mts.map +1 -1
  349. package/lib/RunnableFunction.d.ts.map +1 -1
  350. package/lib/RunnableFunction.js.map +1 -1
  351. package/lib/RunnableFunction.mjs.map +1 -1
  352. package/lib/agents/agent-session-stream.d.mts.map +1 -1
  353. package/lib/agents/agent-session-stream.d.ts.map +1 -1
  354. package/lib/agents/agent-session-stream.js +5 -2
  355. package/lib/agents/agent-session-stream.js.map +1 -1
  356. package/lib/agents/agent-session-stream.mjs +5 -2
  357. package/lib/agents/agent-session-stream.mjs.map +1 -1
  358. package/lib/embeddings.d.mts.map +1 -1
  359. package/lib/embeddings.d.ts.map +1 -1
  360. package/lib/embeddings.js +2 -0
  361. package/lib/embeddings.js.map +1 -1
  362. package/lib/embeddings.mjs +2 -0
  363. package/lib/embeddings.mjs.map +1 -1
  364. package/lib/live/transcript-grouper.d.mts.map +1 -1
  365. package/lib/live/transcript-grouper.d.ts.map +1 -1
  366. package/lib/live/transcript-grouper.js +8 -2
  367. package/lib/live/transcript-grouper.js.map +1 -1
  368. package/lib/live/transcript-grouper.mjs +8 -2
  369. package/lib/live/transcript-grouper.mjs.map +1 -1
  370. package/lib/live/transcript-grouping.d.mts +2 -2
  371. package/lib/live/transcript-grouping.d.mts.map +1 -1
  372. package/lib/live/transcript-grouping.d.ts +2 -2
  373. package/lib/live/transcript-grouping.d.ts.map +1 -1
  374. package/lib/live/transcript-grouping.js +44 -22
  375. package/lib/live/transcript-grouping.js.map +1 -1
  376. package/lib/live/transcript-grouping.mjs +44 -22
  377. package/lib/live/transcript-grouping.mjs.map +1 -1
  378. package/lib/parser.d.mts.map +1 -1
  379. package/lib/parser.d.ts.map +1 -1
  380. package/lib/parser.js +13 -0
  381. package/lib/parser.js.map +1 -1
  382. package/lib/parser.mjs +13 -0
  383. package/lib/parser.mjs.map +1 -1
  384. package/lib/responses/ResponseInputItems.d.mts.map +1 -1
  385. package/lib/responses/ResponseInputItems.d.ts.map +1 -1
  386. package/lib/responses/ResponseInputItems.js +11 -0
  387. package/lib/responses/ResponseInputItems.js.map +1 -1
  388. package/lib/responses/ResponseInputItems.mjs +11 -0
  389. package/lib/responses/ResponseInputItems.mjs.map +1 -1
  390. package/lib/responses/ResponseStream.d.mts.map +1 -1
  391. package/lib/responses/ResponseStream.d.ts.map +1 -1
  392. package/lib/responses/ResponseStream.js +7 -3
  393. package/lib/responses/ResponseStream.js.map +1 -1
  394. package/lib/responses/ResponseStream.mjs +8 -4
  395. package/lib/responses/ResponseStream.mjs.map +1 -1
  396. package/lib/transform.d.mts.map +1 -1
  397. package/lib/transform.d.ts.map +1 -1
  398. package/lib/transform.js +69 -33
  399. package/lib/transform.js.map +1 -1
  400. package/lib/transform.mjs +69 -33
  401. package/lib/transform.mjs.map +1 -1
  402. package/lib/webrtc/connection.d.mts.map +1 -1
  403. package/lib/webrtc/connection.d.ts.map +1 -1
  404. package/lib/webrtc/connection.js +6 -1
  405. package/lib/webrtc/connection.js.map +1 -1
  406. package/lib/webrtc/connection.mjs +6 -1
  407. package/lib/webrtc/connection.mjs.map +1 -1
  408. package/lib/webrtc/data-channel.d.mts.map +1 -1
  409. package/lib/webrtc/data-channel.d.ts.map +1 -1
  410. package/lib/webrtc/data-channel.js +9 -1
  411. package/lib/webrtc/data-channel.js.map +1 -1
  412. package/lib/webrtc/data-channel.mjs +9 -1
  413. package/lib/webrtc/data-channel.mjs.map +1 -1
  414. package/lib/webrtc/subscriptions.d.mts.map +1 -1
  415. package/lib/webrtc/subscriptions.d.ts.map +1 -1
  416. package/lib/webrtc/subscriptions.js +2 -0
  417. package/lib/webrtc/subscriptions.js.map +1 -1
  418. package/lib/webrtc/subscriptions.mjs +2 -0
  419. package/lib/webrtc/subscriptions.mjs.map +1 -1
  420. package/lib/webrtc/types.d.mts.map +1 -1
  421. package/lib/webrtc/types.d.ts.map +1 -1
  422. package/package.json +1 -1
  423. package/providers/bedrock/aws.d.mts.map +1 -1
  424. package/providers/bedrock/aws.d.ts.map +1 -1
  425. package/providers/bedrock/aws.js +4 -0
  426. package/providers/bedrock/aws.js.map +1 -1
  427. package/providers/bedrock/aws.mjs +4 -0
  428. package/providers/bedrock/aws.mjs.map +1 -1
  429. package/realtime/internal-base.d.mts.map +1 -1
  430. package/realtime/internal-base.d.ts.map +1 -1
  431. package/realtime/internal-base.js +1 -0
  432. package/realtime/internal-base.js.map +1 -1
  433. package/realtime/internal-base.mjs +1 -0
  434. package/realtime/internal-base.mjs.map +1 -1
  435. package/realtime/websocket.d.mts.map +1 -1
  436. package/realtime/websocket.d.ts.map +1 -1
  437. package/realtime/websocket.js +9 -1
  438. package/realtime/websocket.js.map +1 -1
  439. package/realtime/websocket.mjs +9 -1
  440. package/realtime/websocket.mjs.map +1 -1
  441. package/realtime/ws.d.mts.map +1 -1
  442. package/realtime/ws.d.ts.map +1 -1
  443. package/realtime/ws.js +3 -0
  444. package/realtime/ws.js.map +1 -1
  445. package/realtime/ws.mjs +3 -0
  446. package/realtime/ws.mjs.map +1 -1
  447. package/resources/beta/agents/agents.d.mts +2 -1
  448. package/resources/beta/agents/agents.d.mts.map +1 -1
  449. package/resources/beta/agents/agents.d.ts +2 -1
  450. package/resources/beta/agents/agents.d.ts.map +1 -1
  451. package/resources/beta/agents/agents.js.map +1 -1
  452. package/resources/beta/agents/agents.mjs.map +1 -1
  453. package/resources/beta/beta.d.mts +2 -2
  454. package/resources/beta/beta.d.mts.map +1 -1
  455. package/resources/beta/beta.d.ts +2 -2
  456. package/resources/beta/beta.d.ts.map +1 -1
  457. package/resources/beta/beta.js.map +1 -1
  458. package/resources/beta/beta.mjs.map +1 -1
  459. package/resources/beta/index.d.mts +1 -1
  460. package/resources/beta/index.d.mts.map +1 -1
  461. package/resources/beta/index.d.ts +1 -1
  462. package/resources/beta/index.d.ts.map +1 -1
  463. package/resources/beta/index.js.map +1 -1
  464. package/resources/beta/index.mjs.map +1 -1
  465. package/resources/beta/responses/index.d.mts +1 -1
  466. package/resources/beta/responses/index.d.mts.map +1 -1
  467. package/resources/beta/responses/index.d.ts +1 -1
  468. package/resources/beta/responses/index.d.ts.map +1 -1
  469. package/resources/beta/responses/index.js.map +1 -1
  470. package/resources/beta/responses/index.mjs.map +1 -1
  471. package/resources/beta/responses/internal-base.d.mts +3 -0
  472. package/resources/beta/responses/internal-base.d.mts.map +1 -1
  473. package/resources/beta/responses/internal-base.d.ts +3 -0
  474. package/resources/beta/responses/internal-base.d.ts.map +1 -1
  475. package/resources/beta/responses/internal-base.js +21 -6
  476. package/resources/beta/responses/internal-base.js.map +1 -1
  477. package/resources/beta/responses/internal-base.mjs +21 -6
  478. package/resources/beta/responses/internal-base.mjs.map +1 -1
  479. package/resources/beta/responses/responses.d.mts +51 -3
  480. package/resources/beta/responses/responses.d.mts.map +1 -1
  481. package/resources/beta/responses/responses.d.ts +51 -3
  482. package/resources/beta/responses/responses.d.ts.map +1 -1
  483. package/resources/beta/responses/responses.js.map +1 -1
  484. package/resources/beta/responses/responses.mjs.map +1 -1
  485. package/resources/beta/responses/ws-base.d.mts +18 -9
  486. package/resources/beta/responses/ws-base.d.mts.map +1 -1
  487. package/resources/beta/responses/ws-base.d.ts +18 -9
  488. package/resources/beta/responses/ws-base.d.ts.map +1 -1
  489. package/resources/beta/responses/ws-base.js +87 -18
  490. package/resources/beta/responses/ws-base.js.map +1 -1
  491. package/resources/beta/responses/ws-base.mjs +89 -20
  492. package/resources/beta/responses/ws-base.mjs.map +1 -1
  493. package/resources/beta/responses/ws.d.mts +3 -0
  494. package/resources/beta/responses/ws.d.mts.map +1 -1
  495. package/resources/beta/responses/ws.d.ts +3 -0
  496. package/resources/beta/responses/ws.d.ts.map +1 -1
  497. package/resources/beta/responses/ws.js +12 -3
  498. package/resources/beta/responses/ws.js.map +1 -1
  499. package/resources/beta/responses/ws.mjs +12 -3
  500. package/resources/beta/responses/ws.mjs.map +1 -1
  501. package/resources/live/forks/internal-base.d.mts +3 -0
  502. package/resources/live/forks/internal-base.d.mts.map +1 -1
  503. package/resources/live/forks/internal-base.d.ts +3 -0
  504. package/resources/live/forks/internal-base.d.ts.map +1 -1
  505. package/resources/live/forks/internal-base.js +21 -5
  506. package/resources/live/forks/internal-base.js.map +1 -1
  507. package/resources/live/forks/internal-base.mjs +21 -5
  508. package/resources/live/forks/internal-base.mjs.map +1 -1
  509. package/resources/live/forks/ws-base.d.mts +13 -8
  510. package/resources/live/forks/ws-base.d.mts.map +1 -1
  511. package/resources/live/forks/ws-base.d.ts +13 -8
  512. package/resources/live/forks/ws-base.d.ts.map +1 -1
  513. package/resources/live/forks/ws-base.js +85 -14
  514. package/resources/live/forks/ws-base.js.map +1 -1
  515. package/resources/live/forks/ws-base.mjs +87 -16
  516. package/resources/live/forks/ws-base.mjs.map +1 -1
  517. package/resources/live/forks/ws.d.mts +1 -0
  518. package/resources/live/forks/ws.d.mts.map +1 -1
  519. package/resources/live/forks/ws.d.ts +1 -0
  520. package/resources/live/forks/ws.d.ts.map +1 -1
  521. package/resources/live/forks/ws.js.map +1 -1
  522. package/resources/live/forks/ws.mjs.map +1 -1
  523. package/resources/live/internal-base.d.mts +3 -0
  524. package/resources/live/internal-base.d.mts.map +1 -1
  525. package/resources/live/internal-base.d.ts +3 -0
  526. package/resources/live/internal-base.d.ts.map +1 -1
  527. package/resources/live/internal-base.js +21 -5
  528. package/resources/live/internal-base.js.map +1 -1
  529. package/resources/live/internal-base.mjs +21 -5
  530. package/resources/live/internal-base.mjs.map +1 -1
  531. package/resources/live/sideband/internal-base.d.mts +3 -0
  532. package/resources/live/sideband/internal-base.d.mts.map +1 -1
  533. package/resources/live/sideband/internal-base.d.ts +3 -0
  534. package/resources/live/sideband/internal-base.d.ts.map +1 -1
  535. package/resources/live/sideband/internal-base.js +21 -5
  536. package/resources/live/sideband/internal-base.js.map +1 -1
  537. package/resources/live/sideband/internal-base.mjs +21 -5
  538. package/resources/live/sideband/internal-base.mjs.map +1 -1
  539. package/resources/live/sideband/ws-base.d.mts +13 -8
  540. package/resources/live/sideband/ws-base.d.mts.map +1 -1
  541. package/resources/live/sideband/ws-base.d.ts +13 -8
  542. package/resources/live/sideband/ws-base.d.ts.map +1 -1
  543. package/resources/live/sideband/ws-base.js +85 -14
  544. package/resources/live/sideband/ws-base.js.map +1 -1
  545. package/resources/live/sideband/ws-base.mjs +87 -16
  546. package/resources/live/sideband/ws-base.mjs.map +1 -1
  547. package/resources/live/sideband/ws.d.mts +1 -0
  548. package/resources/live/sideband/ws.d.mts.map +1 -1
  549. package/resources/live/sideband/ws.d.ts +1 -0
  550. package/resources/live/sideband/ws.d.ts.map +1 -1
  551. package/resources/live/sideband/ws.js.map +1 -1
  552. package/resources/live/sideband/ws.mjs.map +1 -1
  553. package/resources/live/ws-base.d.mts +13 -8
  554. package/resources/live/ws-base.d.mts.map +1 -1
  555. package/resources/live/ws-base.d.ts +13 -8
  556. package/resources/live/ws-base.d.ts.map +1 -1
  557. package/resources/live/ws-base.js +85 -14
  558. package/resources/live/ws-base.js.map +1 -1
  559. package/resources/live/ws-base.mjs +87 -16
  560. package/resources/live/ws-base.mjs.map +1 -1
  561. package/resources/live/ws.d.mts +1 -0
  562. package/resources/live/ws.d.mts.map +1 -1
  563. package/resources/live/ws.d.ts +1 -0
  564. package/resources/live/ws.d.ts.map +1 -1
  565. package/resources/live/ws.js.map +1 -1
  566. package/resources/live/ws.mjs.map +1 -1
  567. package/resources/responses/internal-base.d.mts +3 -0
  568. package/resources/responses/internal-base.d.mts.map +1 -1
  569. package/resources/responses/internal-base.d.ts +3 -0
  570. package/resources/responses/internal-base.d.ts.map +1 -1
  571. package/resources/responses/internal-base.js +21 -6
  572. package/resources/responses/internal-base.js.map +1 -1
  573. package/resources/responses/internal-base.mjs +21 -6
  574. package/resources/responses/internal-base.mjs.map +1 -1
  575. package/resources/responses/responses.d.mts +36 -3
  576. package/resources/responses/responses.d.mts.map +1 -1
  577. package/resources/responses/responses.d.ts +36 -3
  578. package/resources/responses/responses.d.ts.map +1 -1
  579. package/resources/responses/responses.js.map +1 -1
  580. package/resources/responses/responses.mjs.map +1 -1
  581. package/resources/responses/ws-base.d.mts +18 -9
  582. package/resources/responses/ws-base.d.mts.map +1 -1
  583. package/resources/responses/ws-base.d.ts +18 -9
  584. package/resources/responses/ws-base.d.ts.map +1 -1
  585. package/resources/responses/ws-base.js +87 -18
  586. package/resources/responses/ws-base.js.map +1 -1
  587. package/resources/responses/ws-base.mjs +89 -20
  588. package/resources/responses/ws-base.mjs.map +1 -1
  589. package/resources/responses/ws.d.mts +3 -0
  590. package/resources/responses/ws.d.mts.map +1 -1
  591. package/resources/responses/ws.d.ts +3 -0
  592. package/resources/responses/ws.d.ts.map +1 -1
  593. package/resources/responses/ws.js +12 -3
  594. package/resources/responses/ws.js.map +1 -1
  595. package/resources/responses/ws.mjs +12 -3
  596. package/resources/responses/ws.mjs.map +1 -1
  597. package/src/_vendor/zod-to-json-schema/Options.ts +2 -0
  598. package/src/_vendor/zod-to-json-schema/parseDef.ts +1 -0
  599. package/src/_vendor/zod-to-json-schema/parsers/bigint.ts +2 -0
  600. package/src/_vendor/zod-to-json-schema/parsers/literal.ts +1 -0
  601. package/src/_vendor/zod-to-json-schema/parsers/null.ts +1 -0
  602. package/src/_vendor/zod-to-json-schema/parsers/nullable.ts +4 -0
  603. package/src/_vendor/zod-to-json-schema/parsers/number.ts +2 -0
  604. package/src/_vendor/zod-to-json-schema/parsers/optional.ts +6 -7
  605. package/src/_vendor/zod-to-json-schema/parsers/record.ts +2 -0
  606. package/src/_vendor/zod-to-json-schema/parsers/string.ts +1 -0
  607. package/src/_vendor/zod-to-json-schema/parsers/union.ts +3 -0
  608. package/src/_vendor/zod-to-json-schema/util.ts +1 -0
  609. package/src/_vendor/zod-to-json-schema/zodToJsonSchema.ts +3 -1
  610. package/src/auth/subject-token-providers.ts +6 -1
  611. package/src/auth/workload-identity-auth.ts +10 -1
  612. package/src/auth/x509-transport.ts +13 -2
  613. package/src/azure.ts +3 -0
  614. package/src/bedrock.ts +23 -7
  615. package/src/beta/realtime/internal-base.ts +2 -0
  616. package/src/beta/realtime/websocket.ts +11 -1
  617. package/src/beta/realtime/ws.ts +3 -0
  618. package/src/client.ts +78 -22
  619. package/src/core/EventEmitter.ts +15 -0
  620. package/src/core/streaming.ts +30 -2
  621. package/src/helpers/audio.ts +2 -0
  622. package/src/helpers/standard-schema.ts +31 -19
  623. package/src/helpers/zod-v3-strict-schema.ts +8 -2
  624. package/src/helpers/zod.ts +32 -13
  625. package/src/internal/assistant-stream-delta.ts +7 -1
  626. package/src/internal/auth/x509-credential-options.ts +3 -0
  627. package/src/internal/auth/x509-token-exchange.ts +10 -1
  628. package/src/internal/auth/x509-transport-capability.ts +2 -1
  629. package/src/internal/auth/x509-workload-identity-auth.ts +13 -8
  630. package/src/internal/bedrock.ts +15 -0
  631. package/src/internal/decoders/line.ts +1 -0
  632. package/src/internal/parse.ts +1 -0
  633. package/src/internal/provider.ts +3 -0
  634. package/src/internal/qs/stringify.ts +3 -0
  635. package/src/internal/qs/utils.ts +14 -3
  636. package/src/internal/realtime-credentials.ts +1 -1
  637. package/src/internal/responses/response-accumulator.ts +34 -4
  638. package/src/internal/to-file.ts +1 -1
  639. package/src/internal/uploads.ts +11 -1
  640. package/src/internal/utils/abort.ts +116 -0
  641. package/src/internal/utils/bytes.ts +2 -0
  642. package/src/internal/utils/path.ts +2 -0
  643. package/src/internal/utils/sleep.ts +52 -1
  644. package/src/internal/ws-adapter-browser.ts +2 -0
  645. package/src/internal/ws.ts +66 -4
  646. package/src/lib/AbstractChatCompletionRunner.ts +40 -17
  647. package/src/lib/AssistantStream.ts +31 -20
  648. package/src/lib/ChatCompletionRunner.ts +1 -0
  649. package/src/lib/ChatCompletionStream.ts +81 -14
  650. package/src/lib/EventEmitter.ts +15 -0
  651. package/src/lib/EventStream.ts +93 -3
  652. package/src/lib/ResponsesParser.ts +5 -0
  653. package/src/lib/RunnableFunction.ts +4 -1
  654. package/src/lib/agents/agent-session-stream.ts +5 -3
  655. package/src/lib/embeddings.ts +3 -1
  656. package/src/lib/live/transcript-grouper.ts +4 -0
  657. package/src/lib/live/transcript-grouping.ts +59 -27
  658. package/src/lib/parser.ts +16 -2
  659. package/src/lib/responses/ResponseInputItems.ts +11 -0
  660. package/src/lib/responses/ResponseStream.ts +6 -3
  661. package/src/lib/transform.ts +70 -35
  662. package/src/lib/webrtc/connection.ts +5 -1
  663. package/src/lib/webrtc/data-channel.ts +7 -0
  664. package/src/lib/webrtc/subscriptions.ts +3 -0
  665. package/src/lib/webrtc/types.ts +1 -0
  666. package/src/providers/bedrock/aws.ts +5 -1
  667. package/src/realtime/internal-base.ts +2 -0
  668. package/src/realtime/websocket.ts +11 -1
  669. package/src/realtime/ws.ts +3 -0
  670. package/src/resources/beta/agents/agents.ts +2 -0
  671. package/src/resources/beta/beta.ts +2 -0
  672. package/src/resources/beta/index.ts +1 -0
  673. package/src/resources/beta/responses/index.ts +1 -0
  674. package/src/resources/beta/responses/internal-base.ts +24 -6
  675. package/src/resources/beta/responses/responses.ts +58 -0
  676. package/src/resources/beta/responses/ws-base.ts +117 -26
  677. package/src/resources/beta/responses/ws.ts +23 -6
  678. package/src/resources/live/forks/internal-base.ts +24 -5
  679. package/src/resources/live/forks/ws-base.ts +110 -21
  680. package/src/resources/live/forks/ws.ts +2 -0
  681. package/src/resources/live/internal-base.ts +24 -5
  682. package/src/resources/live/sideband/internal-base.ts +24 -5
  683. package/src/resources/live/sideband/ws-base.ts +110 -21
  684. package/src/resources/live/sideband/ws.ts +2 -0
  685. package/src/resources/live/ws-base.ts +110 -21
  686. package/src/resources/live/ws.ts +2 -0
  687. package/src/resources/responses/api.md +1 -0
  688. package/src/resources/responses/internal-base.ts +24 -6
  689. package/src/resources/responses/responses.ts +41 -0
  690. package/src/resources/responses/ws-base.ts +117 -26
  691. package/src/resources/responses/ws.ts +23 -6
  692. package/src/version.ts +1 -1
  693. package/version.d.mts +1 -1
  694. package/version.d.ts +1 -1
  695. package/version.js +1 -1
  696. package/version.mjs +1 -1
@@ -37,6 +37,7 @@ function isRunningInBrowserOrBrowserWorker(): boolean {
37
37
  return true;
38
38
  }
39
39
 
40
+ // SAFETY: RuntimeScope describes optional host capabilities; the following predicates verify their presence and value before use.
40
41
  const scope = globalThis as RuntimeScope;
41
42
  return (
42
43
  typeof scope.WorkerGlobalScope === 'function' &&
@@ -55,6 +56,7 @@ function isRunningInBrowserOrBrowserWorker(): boolean {
55
56
 
56
57
  /** Reports whether the runtime supports request headers in native WebSocket options. */
57
58
  function supportsWebSocketRequestHeaders(): boolean {
59
+ // SAFETY: RuntimeScope describes optional host capabilities; the following predicates verify their presence and value before use.
58
60
  const scope = globalThis as RuntimeScope;
59
61
  if (
60
62
  isRunningInBrowserOrBrowserWorker() ||
@@ -189,7 +191,9 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
189
191
  ) {
190
192
  super();
191
193
  let apiKey = getRealtimeAPIKey(client, props.__apiKey);
194
+ // SAFETY: The supplied OpenAI client owns _options; these compatibility reads preserve its provider and browser-consent settings.
192
195
  const hasProvider = typeof (client as any)?._options?.apiKey === 'function';
196
+ // SAFETY: The supplied OpenAI client owns _options; these compatibility reads preserve its provider and browser-consent settings.
193
197
  const dangerouslyAllowBrowser =
194
198
  props.dangerouslyAllowBrowser ??
195
199
  (client as any)?._options?.dangerouslyAllowBrowser ??
@@ -265,7 +269,12 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
265
269
  });
266
270
 
267
271
  this.socket.addEventListener('error', (event: any) => {
268
- this._onError(null, event.message, null);
272
+ // Native ErrorEvents can carry an empty message while `error` still holds the failure.
273
+ const cause = event.error ?? null;
274
+ const message = [event.message, cause?.message].find(
275
+ (value) => typeof value === 'string' && value !== '',
276
+ );
277
+ this._onError(null, message ?? 'unknown error', cause);
269
278
  });
270
279
  }
271
280
 
@@ -329,6 +338,7 @@ export class OpenAIRealtimeWebSocket extends OpenAIRealtimeEmitter {
329
338
  return new OpenAIRealtimeWebSocket(
330
339
  {
331
340
  model: deploymentName,
341
+ // Preserve explicit browser consent as an own data property without invoking an inherited setter.
332
342
  ...(dangerouslyAllowBrowser === undefined ? {} : { dangerouslyAllowBrowser }),
333
343
  __resolvedApiKey: isApiKeyProvider,
334
344
  __apiKey: apiKey,
@@ -60,6 +60,7 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter {
60
60
  super();
61
61
  client ??= new OpenAI();
62
62
  const apiKey = props.__apiKey === undefined ? client.apiKey : props.__apiKey;
63
+ // SAFETY: The supplied OpenAI client owns _options; this read detects its existing API-key provider without changing its public surface.
63
64
  const hasProvider = typeof (client as any)?._options?.apiKey === 'function';
64
65
  if (hasProvider && !props.__resolvedApiKey) {
65
66
  throw new Error(
@@ -75,6 +76,7 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter {
75
76
  const headers = {
76
77
  'User-Agent': `${client.constructor.name}/JS ${VERSION}`,
77
78
  ...props.options?.headers,
79
+ // A credential must be an own data property without invoking an inherited setter.
78
80
  ...(isAzure(client) && !props.__resolvedApiKey ? {} : { Authorization: `Bearer ${apiKey}` }),
79
81
  'OpenAI-Beta': 'realtime=v1',
80
82
  };
@@ -186,6 +188,7 @@ export class OpenAIRealtimeWS extends OpenAIRealtimeEmitter {
186
188
  ...props.options,
187
189
  headers: {
188
190
  ...props.options?.headers,
191
+ // A credential must be an own data property without invoking an inherited setter.
189
192
  ...(isApiKeyProvider ? {} : { 'api-key': apiKey }),
190
193
  },
191
194
  },
package/src/client.ts CHANGED
@@ -5,6 +5,7 @@ import type { HTTPMethod, PromiseOrValue, MergedRequestInit, FinalizedRequestIni
5
5
  import { uuid4 } from './internal/utils/uuid';
6
6
  import { validatePositiveInteger, isAbsoluteURL, safeJSON, hasOwn } from './internal/utils/values';
7
7
  import { sleep } from './internal/utils/sleep';
8
+ import { addRequestAbortListener, retainRequestAbortCallback } from './internal/utils/abort';
8
9
  export type { Logger, LogLevel } from './internal/utils/log';
9
10
  import { castToError, isAbortError } from './internal/errors';
10
11
  import { addRequestID, defaultParseResponse, type APIResponseProps } from './internal/parse';
@@ -47,6 +48,7 @@ import {
47
48
  import * as Uploads from './core/uploads';
48
49
  import * as API from './resources/index';
49
50
  import { APIPromise } from './core/api-promise';
51
+ import { resolveRealtimeAPIKey } from './internal/realtime-credentials';
50
52
  import {
51
53
  Batch,
52
54
  BatchCreateParams,
@@ -300,8 +302,9 @@ export interface ClientOptions {
300
302
  *
301
303
  * - Accepts either a static string or an async function that resolves to a string.
302
304
  * - Defaults to process.env['OPENAI_API_KEY'].
303
- * - When a function is provided, it is invoked before each request so you can rotate
304
- * or refresh credentials at runtime.
305
+ * - When a function is provided, it is invoked when building bearer authentication
306
+ * headers for each attempt, including retries and direct `buildRequest()` calls.
307
+ * Each invocation's result is used for its own request.
305
308
  * - The function must return a non-empty string; otherwise an OpenAIError is thrown.
306
309
  * - If the function throws, the error is wrapped in an OpenAIError with the original
307
310
  * error available as `cause`.
@@ -816,10 +819,11 @@ export class OpenAI {
816
819
  : await authentication.getToken();
817
820
  return buildHeaders([{ Authorization: `Bearer ${token}` }]);
818
821
  }
819
- if (this.apiKey == null) {
822
+ const { apiKey } = await resolveRealtimeAPIKey(this);
823
+ if (apiKey == null) {
820
824
  return undefined;
821
825
  }
822
- return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);
826
+ return buildHeaders([{ Authorization: `Bearer ${apiKey}` }]);
823
827
  }
824
828
 
825
829
  protected async adminAPIKeyAuth(opts: FinalRequestOptions): Promise<NullableHeaders | undefined> {
@@ -852,12 +856,16 @@ export class OpenAI {
852
856
  return Errors.APIError.generate(status, normalizedError, message, headers);
853
857
  }
854
858
 
859
+ _hasApiKeyProvider(): boolean {
860
+ return typeof this._options.apiKey === 'function';
861
+ }
862
+
855
863
  /**
856
864
  * Resolves a function-based API key and retains the resolved value on this client.
857
865
  * Returns whether a provider was invoked. Internal callers can capture this
858
866
  * invocation's key before another request updates the shared `apiKey` property.
859
867
  * Overrides should forward `capture` or invoke it with their own resolved key
860
- * to preserve connection-local credentials in concurrent Realtime factories.
868
+ * to preserve invocation-local credentials in concurrent requests and Realtime factories.
861
869
  * @internal
862
870
  */
863
871
  async _callApiKey(capture?: (apiKey: string | null) => void): Promise<boolean> {
@@ -919,15 +927,11 @@ export class OpenAI {
919
927
 
920
928
  /**
921
929
  * Used as a callback for mutating the given `FinalRequestOptions` object.
930
+ * Function-based credentials are resolved later, when building authentication
931
+ * headers, including for direct `buildRequest()` calls. Overriding this hook
932
+ * does not bypass that resolution.
922
933
  */
923
- protected async prepareOptions(options: FinalRequestOptions): Promise<void> {
924
- if (this._provider) return;
925
-
926
- const security = options.__security ?? { bearerAuth: true };
927
- if (security.bearerAuth) {
928
- await this._callApiKey();
929
- }
930
- }
934
+ protected async prepareOptions(options: FinalRequestOptions): Promise<void> {}
931
935
 
932
936
  /**
933
937
  * Used as a callback for mutating the given `RequestInit` object.
@@ -1108,6 +1112,8 @@ export class OpenAI {
1108
1112
  props.options,
1109
1113
  retriesRemaining,
1110
1114
  props.retryOfRequestLogID ?? props.requestLogID,
1115
+ undefined,
1116
+ props.requestSignal,
1111
1117
  );
1112
1118
  Object.assign(props, next);
1113
1119
  } finally {
@@ -1318,7 +1324,13 @@ export class OpenAI {
1318
1324
  message: x509Authentication ? 'X.509 workload identity API connection failed.' : response.message,
1319
1325
  }),
1320
1326
  );
1321
- return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);
1327
+ return this.retryRequest(
1328
+ options,
1329
+ retriesRemaining,
1330
+ retryOfRequestLogID ?? requestLogID,
1331
+ undefined,
1332
+ req.signal,
1333
+ );
1322
1334
  }
1323
1335
  const terminalMessage = hasStreamingBody
1324
1336
  ? 'error; streaming body cannot be retried'
@@ -1442,6 +1454,7 @@ export class OpenAI {
1442
1454
  retriesRemaining,
1443
1455
  retryOfRequestLogID ?? requestLogID,
1444
1456
  response.headers,
1457
+ req.signal,
1445
1458
  );
1446
1459
  }
1447
1460
 
@@ -1497,7 +1510,15 @@ export class OpenAI {
1497
1510
  helperMethod: options.__metadata?.['helperMethod'],
1498
1511
  ...(continueRequest ? { continueRequest } : {}),
1499
1512
  });
1500
- return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };
1513
+ return {
1514
+ response,
1515
+ options,
1516
+ controller,
1517
+ requestSignal: req.signal,
1518
+ requestLogID,
1519
+ retryOfRequestLogID,
1520
+ startTime,
1521
+ };
1501
1522
  }
1502
1523
 
1503
1524
  getAPIList<Item, PageClass extends Pagination.AbstractPage<Item> = Pagination.AbstractPage<Item>>(
@@ -1574,7 +1595,8 @@ export class OpenAI {
1574
1595
  const { signal, method, ...options } = init || {};
1575
1596
  const abort = this._makeAbort(controller);
1576
1597
  const composed = !!signal && composedCallerSignals.get(controller) === signal;
1577
- if (signal && !composed) signal.addEventListener('abort', abort, { once: true });
1598
+ const cleanup =
1599
+ signal && !composed ? addRequestAbortListener(signal, abort, controller.signal) : undefined;
1578
1600
 
1579
1601
  const timeout = setTimeout(abort, ms);
1580
1602
 
@@ -1596,9 +1618,13 @@ export class OpenAI {
1596
1618
 
1597
1619
  try {
1598
1620
  // use undefined this binding; fetch errors if bound to something else in browser/cloudflare
1599
- return await (this.#x509Fetch ?? this.fetch).call(undefined, url, fetchOptions);
1621
+ const response = await (this.#x509Fetch ?? this.fetch).call(undefined, url, fetchOptions);
1622
+ if (cleanup) {
1623
+ retainRequestAbortCallback(response.body ?? response, abort, controller.signal);
1624
+ }
1625
+ return response;
1600
1626
  } catch (err) {
1601
- if (signal && !composed) signal.removeEventListener('abort', abort);
1627
+ cleanup?.();
1602
1628
  throw err;
1603
1629
  } finally {
1604
1630
  clearTimeout(timeout);
@@ -1633,6 +1659,7 @@ export class OpenAI {
1633
1659
  retriesRemaining: number,
1634
1660
  requestLogID: string,
1635
1661
  responseHeaders?: Headers | undefined,
1662
+ requestSignal: AbortSignal | null | undefined = options.signal,
1636
1663
  ): Promise<APIResponseProps> {
1637
1664
  let timeoutMillis: number | undefined;
1638
1665
 
@@ -1680,7 +1707,17 @@ export class OpenAI {
1680
1707
  if (x509Authentication) {
1681
1708
  await x509Authentication.waitForRetry(timeoutMillis, x509Authentication.effectiveSignal());
1682
1709
  } else {
1683
- await sleep(timeoutMillis);
1710
+ const retrySignals =
1711
+ requestSignal === options.signal ? [requestSignal] : [requestSignal, options.signal];
1712
+ try {
1713
+ await sleep(timeoutMillis, ...retrySignals);
1714
+ } catch (error) {
1715
+ const abortedSignal = retrySignals.find((signal) => signal?.aborted);
1716
+ if (abortedSignal) {
1717
+ throw this._makeUserAbortError(abortedSignal);
1718
+ }
1719
+ throw error;
1720
+ }
1684
1721
  }
1685
1722
 
1686
1723
  return this.makeRequest(options, retriesRemaining - 1, requestLogID);
@@ -1701,6 +1738,12 @@ export class OpenAI {
1701
1738
  return sleepSeconds * jitter * 1000;
1702
1739
  }
1703
1740
 
1741
+ /**
1742
+ * Builds a request, resolving callback credentials when constructing authentication
1743
+ * headers, after any subclass request-option rewrites. Calling this method directly
1744
+ * also resolves credentials. Complete replacement builders own authentication and
1745
+ * can call `this.authHeaders()` to resolve headers with request-local credentials.
1746
+ */
1704
1747
  async buildRequest(
1705
1748
  inputOptions: FinalRequestOptions,
1706
1749
  { retryCount = 0 }: { retryCount?: number } = {},
@@ -1745,6 +1788,10 @@ export class OpenAI {
1745
1788
  options.signal = snapshot.signal;
1746
1789
  }
1747
1790
  }
1791
+ const authenticationHeaders =
1792
+ this._provider || x509Authentication
1793
+ ? undefined
1794
+ : await this.authHeaders(inputOptions, inputOptions.__security ?? { bearerAuth: true });
1748
1795
  const { bodyHeaders, body, isStreamingBody } = this.buildBody({ options });
1749
1796
 
1750
1797
  if (isStreamingBody) {
@@ -1759,6 +1806,7 @@ export class OpenAI {
1759
1806
  options: inputOptions,
1760
1807
  method,
1761
1808
  bodyHeaders,
1809
+ authenticationHeaders,
1762
1810
  retryCount,
1763
1811
  x509Headers,
1764
1812
  x509Timeout: explicitTimeout ? options.timeout : undefined,
@@ -1783,6 +1831,7 @@ export class OpenAI {
1783
1831
  options,
1784
1832
  method,
1785
1833
  bodyHeaders,
1834
+ authenticationHeaders,
1786
1835
  retryCount,
1787
1836
  x509Headers,
1788
1837
  x509Timeout,
@@ -1791,6 +1840,7 @@ export class OpenAI {
1791
1840
  options: FinalRequestOptions;
1792
1841
  method: HTTPMethod;
1793
1842
  bodyHeaders: HeadersLike;
1843
+ authenticationHeaders: NullableHeaders | undefined;
1794
1844
  retryCount: number;
1795
1845
  x509Headers?: { defaultHeaders: NullableHeaders; requestHeaders: NullableHeaders } | undefined;
1796
1846
  x509Timeout: number | undefined;
@@ -1816,9 +1866,10 @@ export class OpenAI {
1816
1866
  'OpenAI-Organization': x509Tenant ? x509Tenant.organization : this.organization,
1817
1867
  'OpenAI-Project': x509Tenant ? x509Tenant.project : this.project,
1818
1868
  },
1819
- this._provider || this.#x509Authentication?.isPlanningRequest()
1820
- ? undefined
1821
- : await this.authHeaders(options, options.__security ?? { bearerAuth: true }),
1869
+ // X.509 owns streaming uploads before authentication so it can retire them on failure.
1870
+ this.#x509Authentication && !this.#x509Authentication.isPlanningRequest()
1871
+ ? await this.authHeaders(options, options.__security ?? { bearerAuth: true })
1872
+ : authenticationHeaders,
1822
1873
  x509Headers?.defaultHeaders ?? this._options.defaultHeaders,
1823
1874
  bodyHeaders,
1824
1875
  x509Headers?.requestHeaders ?? options.headers,
@@ -2024,6 +2075,11 @@ OpenAI.Evals = Evals;
2024
2075
  OpenAI.Containers = Containers;
2025
2076
  OpenAI.Skills = Skills;
2026
2077
  OpenAI.Videos = Videos;
2078
+ OpenAI.ConversationCursorPage = Pagination.ConversationCursorPage;
2079
+ OpenAI.CursorPage = Pagination.CursorPage;
2080
+ OpenAI.NextCursorPage = Pagination.NextCursorPage;
2081
+ OpenAI.Page = Pagination.Page;
2082
+ OpenAI.TokenPage = Pagination.TokenPage;
2027
2083
 
2028
2084
  const composedCallerSignals = new WeakMap<AbortController, AbortSignal>();
2029
2085
 
@@ -54,12 +54,14 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
54
54
  return this;
55
55
  }
56
56
 
57
+ // SAFETY: Listener functions are object identities used as WeakMap keys; registration and removal use the same function instance.
57
58
  const emittedRegistration = this.#emittedListenerRegistrations.get(listener as object);
58
59
  if (
59
60
  emittedRegistration?.event === event &&
60
61
  !emittedRegistration.registration.removed &&
61
62
  !emittedRegistration.registration.detached
62
63
  ) {
64
+ // SAFETY: The stored registration event was compared with this event above, preserving the event/listener type correlation.
63
65
  this.#removeEmittedListener(
64
66
  event,
65
67
  emittedRegistration.registration as EventListeners<EventTypes, Event>[number],
@@ -101,6 +103,7 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
101
103
  registration?.listener === listener &&
102
104
  registration.once
103
105
  ) {
106
+ // SAFETY: Listener functions are object identities used as WeakMap keys; registration and removal use the same function instance.
104
107
  this.#emittedListenerRegistrations.set(listener as object, { event, registration });
105
108
  }
106
109
  }
@@ -114,6 +117,7 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
114
117
  }
115
118
 
116
119
  registration.removed = true;
120
+ // SAFETY: Listener functions are object identities used as WeakMap keys; registration and removal use the same function instance.
117
121
  this.#emittedListenerRegistrations.delete(registration.listener as object);
118
122
  this.#pendingListenerCleanup.add(event);
119
123
  if (this.#listenerDispatchDepth === 0) {
@@ -123,9 +127,11 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
123
127
 
124
128
  #cleanupEmittedListeners(): void {
125
129
  for (const event of this.#pendingListenerCleanup) {
130
+ // SAFETY: Pending cleanup keys are added only from registered EventTypes events; the key retains its event-map membership.
126
131
  const eventType = event as keyof EventTypes;
127
132
  const listeners = this.#listeners[eventType];
128
133
  if (listeners) {
134
+ // SAFETY: Filtering only removes registrations from the same event bucket and preserves the listener signatures for that event.
129
135
  this.#listeners[eventType] = listeners.filter((listener) => !listener.removed) as any;
130
136
  }
131
137
  }
@@ -150,21 +156,27 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
150
156
  ): Promise<EmittedEventResult<EventParameters<EventTypes, Event>>> {
151
157
  return new Promise((resolve, reject) => {
152
158
  const listeners = {
159
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters -- Failures and rejection reasons can be arbitrary JavaScript values; preserve them until inspection or forwarding.
153
160
  onError: (error: unknown) => {
161
+ // SAFETY: This callback is paired with the same event when registered and removed; its variadic body forwards the event tuple or captured error.
154
162
  this.off(event, listeners.onEvent as any);
155
163
  reject(error);
156
164
  },
157
165
  onEvent: (...values: unknown[]) => {
158
166
  if (event !== 'error') {
167
+ // SAFETY: This callback is paired with the same event when registered and removed; its variadic body forwards the event tuple or captured error.
159
168
  this.off('error', listeners.onError as any);
160
169
  }
170
+ // SAFETY: The emitted API returns the sole argument or the full tuple according to its existing EventTypes-dependent result contract.
161
171
  resolve((values.length > 1 ? values : values[0]) as any);
162
172
  },
163
173
  };
164
174
 
165
175
  if (event !== 'error') {
176
+ // SAFETY: This callback is paired with the same event when registered and removed; its variadic body forwards the event tuple or captured error.
166
177
  this.#onceForEmitted('error', listeners.onError as any);
167
178
  }
179
+ // SAFETY: This callback is paired with the same event when registered and removed; its variadic body forwards the event tuple or captured error.
168
180
  this.#onceForEmitted(event, listeners.onEvent as any);
169
181
  });
170
182
  }
@@ -176,6 +188,7 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
176
188
  ) {
177
189
  const listeners: EventListeners<EventTypes, Event> | undefined = this.#listeners[event];
178
190
  if (listeners) {
191
+ // SAFETY: Filtering only removes registrations from the same event bucket and preserves the listener signatures for that event.
179
192
  this.#listeners[event] = listeners.filter((listener) => {
180
193
  if (listener.once) {
181
194
  listener.detached = true;
@@ -186,10 +199,12 @@ export class EventEmitter<EventTypes extends Record<string, (...args: any) => an
186
199
  let firstListenerError: unknown;
187
200
  this.#listenerDispatchDepth += 1;
188
201
  try {
202
+ // SAFETY: The listener bucket and argument tuple come from the same EventTypes key; this bridges TypeScript generic indexed-access correlation.
189
203
  for (const registration of listeners as any) {
190
204
  if (!registration.removed) {
191
205
  try {
192
206
  const { listener } = registration;
207
+ // SAFETY: The listener bucket and argument tuple come from the same EventTypes key; this bridges TypeScript generic indexed-access correlation.
193
208
  listener(...(args as any));
194
209
  } catch (error) {
195
210
  if (!listenerThrew) {
@@ -139,7 +139,7 @@ export class Stream<Item> implements AsyncIterable<Item> {
139
139
  let data;
140
140
 
141
141
  try {
142
- data = JSON.parse(sse.data) as any;
142
+ data = JSON.parse(sse.data);
143
143
  } catch {
144
144
  logger.error(`Could not parse message into JSON:`);
145
145
  logger.error(`From chunk:`);
@@ -164,6 +164,7 @@ export class Stream<Item> implements AsyncIterable<Item> {
164
164
  logger.error(`From chunk:`);
165
165
  throw new SyntaxError('Error reading response: malformed server-sent event JSON.');
166
166
  }
167
+ // SAFETY: Named SSE events use the public stream's event/data envelope; Item is the caller-selected API event contract.
167
168
  yield { event: sse.event, data } as any;
168
169
  }
169
170
  }
@@ -264,6 +265,7 @@ export class Stream<Item> implements AsyncIterable<Item> {
264
265
  if (line) {
265
266
  let data: Item;
266
267
  try {
268
+ // SAFETY: Item is the caller's NDJSON response contract; JSON syntax is parsed here without a per-resource runtime schema.
267
269
  data = JSON.parse(line) as Item;
268
270
  } catch (error) {
269
271
  if (error instanceof SyntaxError) {
@@ -352,10 +354,13 @@ export class Stream<Item> implements AsyncIterable<Item> {
352
354
  * which can be turned back into a Stream with `Stream.fromReadableStream()`.
353
355
  * Canceling a response-backed readable aborts its request. Canceling a tee
354
356
  * branch discards its buffered events and leaves sibling consumers running.
357
+ * Read or serialization failures also release the iterator without replacing the original error.
355
358
  */
356
359
  toReadableStream(): ReadableStream {
357
360
  const { controller } = this;
358
361
  let iter: AsyncIterator<Item>;
362
+ let cancellation: Promise<void> | undefined;
363
+ const cancel = () => (cancellation ??= this.#cancelIterator(iter, controller));
359
364
 
360
365
  return makeReadableStream({
361
366
  start: async () => {
@@ -373,9 +378,12 @@ export class Stream<Item> implements AsyncIterable<Item> {
373
378
  ctrl.enqueue(bytes);
374
379
  } catch (err) {
375
380
  ctrl.error(err);
381
+ // An errored readable never invokes its cancel hook. Release the source ourselves,
382
+ // without letting failed or stalled cleanup replace the read/serialization error.
383
+ void cancel().catch(() => undefined);
376
384
  }
377
385
  },
378
- cancel: () => this.#cancelIterator(iter, controller),
386
+ cancel,
379
387
  });
380
388
  }
381
389
 
@@ -385,6 +393,7 @@ export class Stream<Item> implements AsyncIterable<Item> {
385
393
  if (!this.#isTeeBranch) {
386
394
  controller.abort();
387
395
  }
396
+ // oxlint-disable-next-line anti-slop/no-reflect-apply -- Invoke the captured iterator method with its receiver even if a caller-supplied function shadows call.
388
397
  await Reflect.apply(returnMethod, iterator, []);
389
398
  }
390
399
  }
@@ -524,6 +533,7 @@ export async function* _iterSSEMessages(
524
533
  ): AsyncGenerator<ServerSentEvent, void, unknown> {
525
534
  if (!response.body) {
526
535
  controller.abort();
536
+ // SAFETY: navigator is optional across SDK runtimes; this compatibility branch checks its presence before identifying React Native.
527
537
  if (
528
538
  (globalThis as any).navigator !== undefined &&
529
539
  (globalThis as any).navigator.product === 'ReactNative'
@@ -569,6 +579,15 @@ export async function* _iterSSEMessages(
569
579
  yield sse;
570
580
  }
571
581
  }
582
+ // Servers sometimes omit the trailing blank line that normally
583
+ // terminates the last event. Flush any in-progress event exactly once.
584
+ if (signal.aborted) {
585
+ return;
586
+ }
587
+ const pending = sseDecoder.flush();
588
+ if (pending) {
589
+ yield pending;
590
+ }
572
591
  } catch (error) {
573
592
  failed = true;
574
593
  if (!signal.aborted || (!isAbortError(error) && error !== signal.reason)) {
@@ -699,6 +718,15 @@ class SSEDecoder {
699
718
 
700
719
  return null;
701
720
  }
721
+
722
+ /**
723
+ * Emits a pending event at EOF when the stream omitted the trailing blank
724
+ * line. Returns `null` when no event is in progress so a record that already
725
+ * ended with a blank line is not delivered twice.
726
+ */
727
+ flush(): ServerSentEvent | null {
728
+ return this.decode('');
729
+ }
702
730
  }
703
731
 
704
732
  function partition(str: string, delimiter: string): [string, string, string] {
@@ -47,11 +47,13 @@ async function nodejsPlayAudio(stream: NodeJS.ReadableStream | Response | File):
47
47
  try {
48
48
  let source: NodeJS.ReadableStream;
49
49
  if (isResponse(stream)) {
50
+ // SAFETY: Fetch implementations may expose a web or Node response body; the following pipe check selects the matching stream adapter.
50
51
  const body = stream.body as NodeReadableStream | NodeJS.ReadableStream | null;
51
52
  if (!body) {
52
53
  throw new Error('Cannot play audio from a response without a body');
53
54
  }
54
55
 
56
+ // SAFETY: The preceding branch handled Node pipe streams; the remaining response body follows the web ReadableStream contract consumed by fromWeb.
55
57
  source =
56
58
  'pipe' in body && typeof body.pipe === 'function'
57
59
  ? body