openai 7.16.0 → 7.18.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 (689) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/_vendor/zod-to-json-schema/Options.d.mts.map +1 -1
  3. package/_vendor/zod-to-json-schema/Options.d.ts.map +1 -1
  4. package/_vendor/zod-to-json-schema/Options.js +2 -0
  5. package/_vendor/zod-to-json-schema/Options.js.map +1 -1
  6. package/_vendor/zod-to-json-schema/Options.mjs +2 -0
  7. package/_vendor/zod-to-json-schema/Options.mjs.map +1 -1
  8. package/_vendor/zod-to-json-schema/parseDef.d.mts.map +1 -1
  9. package/_vendor/zod-to-json-schema/parseDef.d.ts.map +1 -1
  10. package/_vendor/zod-to-json-schema/parseDef.js +1 -0
  11. package/_vendor/zod-to-json-schema/parseDef.js.map +1 -1
  12. package/_vendor/zod-to-json-schema/parseDef.mjs +1 -0
  13. package/_vendor/zod-to-json-schema/parseDef.mjs.map +1 -1
  14. package/_vendor/zod-to-json-schema/parsers/bigint.d.mts.map +1 -1
  15. package/_vendor/zod-to-json-schema/parsers/bigint.d.ts.map +1 -1
  16. package/_vendor/zod-to-json-schema/parsers/bigint.js +2 -0
  17. package/_vendor/zod-to-json-schema/parsers/bigint.js.map +1 -1
  18. package/_vendor/zod-to-json-schema/parsers/bigint.mjs +2 -0
  19. package/_vendor/zod-to-json-schema/parsers/bigint.mjs.map +1 -1
  20. package/_vendor/zod-to-json-schema/parsers/literal.d.mts.map +1 -1
  21. package/_vendor/zod-to-json-schema/parsers/literal.d.ts.map +1 -1
  22. package/_vendor/zod-to-json-schema/parsers/literal.js +1 -0
  23. package/_vendor/zod-to-json-schema/parsers/literal.js.map +1 -1
  24. package/_vendor/zod-to-json-schema/parsers/literal.mjs +1 -0
  25. package/_vendor/zod-to-json-schema/parsers/literal.mjs.map +1 -1
  26. package/_vendor/zod-to-json-schema/parsers/null.d.mts.map +1 -1
  27. package/_vendor/zod-to-json-schema/parsers/null.d.ts.map +1 -1
  28. package/_vendor/zod-to-json-schema/parsers/null.js +1 -0
  29. package/_vendor/zod-to-json-schema/parsers/null.js.map +1 -1
  30. package/_vendor/zod-to-json-schema/parsers/null.mjs +1 -0
  31. package/_vendor/zod-to-json-schema/parsers/null.mjs.map +1 -1
  32. package/_vendor/zod-to-json-schema/parsers/nullable.d.mts.map +1 -1
  33. package/_vendor/zod-to-json-schema/parsers/nullable.d.ts.map +1 -1
  34. package/_vendor/zod-to-json-schema/parsers/nullable.js +4 -0
  35. package/_vendor/zod-to-json-schema/parsers/nullable.js.map +1 -1
  36. package/_vendor/zod-to-json-schema/parsers/nullable.mjs +4 -0
  37. package/_vendor/zod-to-json-schema/parsers/nullable.mjs.map +1 -1
  38. package/_vendor/zod-to-json-schema/parsers/number.d.mts.map +1 -1
  39. package/_vendor/zod-to-json-schema/parsers/number.d.ts.map +1 -1
  40. package/_vendor/zod-to-json-schema/parsers/number.js +2 -0
  41. package/_vendor/zod-to-json-schema/parsers/number.js.map +1 -1
  42. package/_vendor/zod-to-json-schema/parsers/number.mjs +2 -0
  43. package/_vendor/zod-to-json-schema/parsers/number.mjs.map +1 -1
  44. package/_vendor/zod-to-json-schema/parsers/optional.d.mts.map +1 -1
  45. package/_vendor/zod-to-json-schema/parsers/optional.d.ts.map +1 -1
  46. package/_vendor/zod-to-json-schema/parsers/optional.js +6 -7
  47. package/_vendor/zod-to-json-schema/parsers/optional.js.map +1 -1
  48. package/_vendor/zod-to-json-schema/parsers/optional.mjs +6 -7
  49. package/_vendor/zod-to-json-schema/parsers/optional.mjs.map +1 -1
  50. package/_vendor/zod-to-json-schema/parsers/record.d.mts.map +1 -1
  51. package/_vendor/zod-to-json-schema/parsers/record.d.ts.map +1 -1
  52. package/_vendor/zod-to-json-schema/parsers/record.js +2 -0
  53. package/_vendor/zod-to-json-schema/parsers/record.js.map +1 -1
  54. package/_vendor/zod-to-json-schema/parsers/record.mjs +2 -0
  55. package/_vendor/zod-to-json-schema/parsers/record.mjs.map +1 -1
  56. package/_vendor/zod-to-json-schema/parsers/string.d.mts.map +1 -1
  57. package/_vendor/zod-to-json-schema/parsers/string.d.ts.map +1 -1
  58. package/_vendor/zod-to-json-schema/parsers/string.js +1 -0
  59. package/_vendor/zod-to-json-schema/parsers/string.js.map +1 -1
  60. package/_vendor/zod-to-json-schema/parsers/string.mjs +1 -0
  61. package/_vendor/zod-to-json-schema/parsers/string.mjs.map +1 -1
  62. package/_vendor/zod-to-json-schema/parsers/union.d.mts.map +1 -1
  63. package/_vendor/zod-to-json-schema/parsers/union.d.ts.map +1 -1
  64. package/_vendor/zod-to-json-schema/parsers/union.js +3 -0
  65. package/_vendor/zod-to-json-schema/parsers/union.js.map +1 -1
  66. package/_vendor/zod-to-json-schema/parsers/union.mjs +3 -0
  67. package/_vendor/zod-to-json-schema/parsers/union.mjs.map +1 -1
  68. package/_vendor/zod-to-json-schema/util.d.mts.map +1 -1
  69. package/_vendor/zod-to-json-schema/util.d.ts.map +1 -1
  70. package/_vendor/zod-to-json-schema/util.js +1 -0
  71. package/_vendor/zod-to-json-schema/util.js.map +1 -1
  72. package/_vendor/zod-to-json-schema/util.mjs +1 -0
  73. package/_vendor/zod-to-json-schema/util.mjs.map +1 -1
  74. package/_vendor/zod-to-json-schema/zodToJsonSchema.d.mts.map +1 -1
  75. package/_vendor/zod-to-json-schema/zodToJsonSchema.d.ts.map +1 -1
  76. package/_vendor/zod-to-json-schema/zodToJsonSchema.js +2 -0
  77. package/_vendor/zod-to-json-schema/zodToJsonSchema.js.map +1 -1
  78. package/_vendor/zod-to-json-schema/zodToJsonSchema.mjs +2 -0
  79. package/_vendor/zod-to-json-schema/zodToJsonSchema.mjs.map +1 -1
  80. package/auth/subject-token-providers.d.mts.map +1 -1
  81. package/auth/subject-token-providers.d.ts.map +1 -1
  82. package/auth/subject-token-providers.js +6 -1
  83. package/auth/subject-token-providers.js.map +1 -1
  84. package/auth/subject-token-providers.mjs +6 -1
  85. package/auth/subject-token-providers.mjs.map +1 -1
  86. package/auth/workload-identity-auth.d.mts.map +1 -1
  87. package/auth/workload-identity-auth.d.ts.map +1 -1
  88. package/auth/workload-identity-auth.js +9 -0
  89. package/auth/workload-identity-auth.js.map +1 -1
  90. package/auth/workload-identity-auth.mjs +9 -0
  91. package/auth/workload-identity-auth.mjs.map +1 -1
  92. package/auth/x509-transport.d.mts.map +1 -1
  93. package/auth/x509-transport.d.ts.map +1 -1
  94. package/auth/x509-transport.js +11 -0
  95. package/auth/x509-transport.js.map +1 -1
  96. package/auth/x509-transport.mjs +11 -0
  97. package/auth/x509-transport.mjs.map +1 -1
  98. package/azure.d.mts.map +1 -1
  99. package/azure.d.ts.map +1 -1
  100. package/azure.js +3 -0
  101. package/azure.js.map +1 -1
  102. package/azure.mjs +3 -0
  103. package/azure.mjs.map +1 -1
  104. package/bedrock.d.mts.map +1 -1
  105. package/bedrock.d.ts.map +1 -1
  106. package/bedrock.js +5 -0
  107. package/bedrock.js.map +1 -1
  108. package/bedrock.mjs +5 -0
  109. package/bedrock.mjs.map +1 -1
  110. package/beta/realtime/internal-base.d.mts.map +1 -1
  111. package/beta/realtime/internal-base.d.ts.map +1 -1
  112. package/beta/realtime/internal-base.js +1 -0
  113. package/beta/realtime/internal-base.js.map +1 -1
  114. package/beta/realtime/internal-base.mjs +1 -0
  115. package/beta/realtime/internal-base.mjs.map +1 -1
  116. package/beta/realtime/websocket.d.mts.map +1 -1
  117. package/beta/realtime/websocket.d.ts.map +1 -1
  118. package/beta/realtime/websocket.js +9 -1
  119. package/beta/realtime/websocket.js.map +1 -1
  120. package/beta/realtime/websocket.mjs +9 -1
  121. package/beta/realtime/websocket.mjs.map +1 -1
  122. package/beta/realtime/ws.d.mts.map +1 -1
  123. package/beta/realtime/ws.d.ts.map +1 -1
  124. package/beta/realtime/ws.js +3 -0
  125. package/beta/realtime/ws.js.map +1 -1
  126. package/beta/realtime/ws.mjs +3 -0
  127. package/beta/realtime/ws.mjs.map +1 -1
  128. package/client.d.mts +3 -0
  129. package/client.d.mts.map +1 -1
  130. package/client.d.ts +3 -0
  131. package/client.d.ts.map +1 -1
  132. package/client.js +39 -6
  133. package/client.js.map +1 -1
  134. package/client.mjs +39 -6
  135. package/client.mjs.map +1 -1
  136. package/core/EventEmitter.d.mts.map +1 -1
  137. package/core/EventEmitter.d.ts.map +1 -1
  138. package/core/EventEmitter.js +15 -0
  139. package/core/EventEmitter.js.map +1 -1
  140. package/core/EventEmitter.mjs +15 -0
  141. package/core/EventEmitter.mjs.map +1 -1
  142. package/core/streaming.d.mts +1 -0
  143. package/core/streaming.d.mts.map +1 -1
  144. package/core/streaming.d.ts +1 -0
  145. package/core/streaming.d.ts.map +1 -1
  146. package/core/streaming.js +28 -1
  147. package/core/streaming.js.map +1 -1
  148. package/core/streaming.mjs +28 -1
  149. package/core/streaming.mjs.map +1 -1
  150. package/helpers/audio.d.mts.map +1 -1
  151. package/helpers/audio.d.ts.map +1 -1
  152. package/helpers/audio.js +2 -0
  153. package/helpers/audio.js.map +1 -1
  154. package/helpers/audio.mjs +2 -0
  155. package/helpers/audio.mjs.map +1 -1
  156. package/helpers/standard-schema.d.mts.map +1 -1
  157. package/helpers/standard-schema.d.ts.map +1 -1
  158. package/helpers/standard-schema.js +28 -18
  159. package/helpers/standard-schema.js.map +1 -1
  160. package/helpers/standard-schema.mjs +28 -18
  161. package/helpers/standard-schema.mjs.map +1 -1
  162. package/helpers/zod-v3-strict-schema.d.mts.map +1 -1
  163. package/helpers/zod-v3-strict-schema.d.ts.map +1 -1
  164. package/helpers/zod-v3-strict-schema.js +5 -0
  165. package/helpers/zod-v3-strict-schema.js.map +1 -1
  166. package/helpers/zod-v3-strict-schema.mjs +5 -0
  167. package/helpers/zod-v3-strict-schema.mjs.map +1 -1
  168. package/helpers/zod.d.mts.map +1 -1
  169. package/helpers/zod.d.ts.map +1 -1
  170. package/helpers/zod.js +16 -1
  171. package/helpers/zod.js.map +1 -1
  172. package/helpers/zod.mjs +17 -2
  173. package/helpers/zod.mjs.map +1 -1
  174. package/internal/assistant-stream-delta.d.mts.map +1 -1
  175. package/internal/assistant-stream-delta.d.ts.map +1 -1
  176. package/internal/assistant-stream-delta.js +8 -1
  177. package/internal/assistant-stream-delta.js.map +1 -1
  178. package/internal/assistant-stream-delta.mjs +8 -1
  179. package/internal/assistant-stream-delta.mjs.map +1 -1
  180. package/internal/auth/x509-credential-options.d.mts.map +1 -1
  181. package/internal/auth/x509-credential-options.d.ts.map +1 -1
  182. package/internal/auth/x509-credential-options.js +3 -0
  183. package/internal/auth/x509-credential-options.js.map +1 -1
  184. package/internal/auth/x509-credential-options.mjs +3 -0
  185. package/internal/auth/x509-credential-options.mjs.map +1 -1
  186. package/internal/auth/x509-token-exchange.d.mts.map +1 -1
  187. package/internal/auth/x509-token-exchange.d.ts.map +1 -1
  188. package/internal/auth/x509-token-exchange.js +2 -0
  189. package/internal/auth/x509-token-exchange.js.map +1 -1
  190. package/internal/auth/x509-token-exchange.mjs +2 -0
  191. package/internal/auth/x509-token-exchange.mjs.map +1 -1
  192. package/internal/auth/x509-transport-capability.d.mts.map +1 -1
  193. package/internal/auth/x509-transport-capability.d.ts.map +1 -1
  194. package/internal/auth/x509-transport-capability.js +1 -0
  195. package/internal/auth/x509-transport-capability.js.map +1 -1
  196. package/internal/auth/x509-transport-capability.mjs +1 -0
  197. package/internal/auth/x509-transport-capability.mjs.map +1 -1
  198. package/internal/auth/x509-transport-state.mjs +1 -0
  199. package/internal/auth/x509-workload-identity-auth.d.mts.map +1 -1
  200. package/internal/auth/x509-workload-identity-auth.d.ts.map +1 -1
  201. package/internal/auth/x509-workload-identity-auth.js +11 -0
  202. package/internal/auth/x509-workload-identity-auth.js.map +1 -1
  203. package/internal/auth/x509-workload-identity-auth.mjs +11 -0
  204. package/internal/auth/x509-workload-identity-auth.mjs.map +1 -1
  205. package/internal/bedrock.d.mts.map +1 -1
  206. package/internal/bedrock.d.ts.map +1 -1
  207. package/internal/bedrock.js +17 -1
  208. package/internal/bedrock.js.map +1 -1
  209. package/internal/bedrock.mjs +17 -1
  210. package/internal/bedrock.mjs.map +1 -1
  211. package/internal/decoders/line.d.mts.map +1 -1
  212. package/internal/decoders/line.d.ts.map +1 -1
  213. package/internal/decoders/line.js +1 -0
  214. package/internal/decoders/line.js.map +1 -1
  215. package/internal/decoders/line.mjs +1 -0
  216. package/internal/decoders/line.mjs.map +1 -1
  217. package/internal/parse.d.mts +1 -0
  218. package/internal/parse.d.mts.map +1 -1
  219. package/internal/parse.d.ts +1 -0
  220. package/internal/parse.d.ts.map +1 -1
  221. package/internal/parse.js.map +1 -1
  222. package/internal/parse.mjs.map +1 -1
  223. package/internal/provider.d.mts.map +1 -1
  224. package/internal/provider.d.ts.map +1 -1
  225. package/internal/provider.js +3 -0
  226. package/internal/provider.js.map +1 -1
  227. package/internal/provider.mjs +3 -0
  228. package/internal/provider.mjs.map +1 -1
  229. package/internal/qs/stringify.d.mts.map +1 -1
  230. package/internal/qs/stringify.d.ts.map +1 -1
  231. package/internal/qs/stringify.js +3 -0
  232. package/internal/qs/stringify.js.map +1 -1
  233. package/internal/qs/stringify.mjs +3 -0
  234. package/internal/qs/stringify.mjs.map +1 -1
  235. package/internal/qs/utils.d.mts.map +1 -1
  236. package/internal/qs/utils.d.ts.map +1 -1
  237. package/internal/qs/utils.js +15 -3
  238. package/internal/qs/utils.js.map +1 -1
  239. package/internal/qs/utils.mjs +15 -3
  240. package/internal/qs/utils.mjs.map +1 -1
  241. package/internal/responses/response-accumulator.d.mts.map +1 -1
  242. package/internal/responses/response-accumulator.d.ts.map +1 -1
  243. package/internal/responses/response-accumulator.js +20 -4
  244. package/internal/responses/response-accumulator.js.map +1 -1
  245. package/internal/responses/response-accumulator.mjs +20 -4
  246. package/internal/responses/response-accumulator.mjs.map +1 -1
  247. package/internal/to-file.js.map +1 -1
  248. package/internal/to-file.mjs.map +1 -1
  249. package/internal/uploads.d.mts.map +1 -1
  250. package/internal/uploads.d.ts.map +1 -1
  251. package/internal/uploads.js +10 -0
  252. package/internal/uploads.js.map +1 -1
  253. package/internal/uploads.mjs +10 -0
  254. package/internal/uploads.mjs.map +1 -1
  255. package/internal/utils/abort.d.mts.map +1 -1
  256. package/internal/utils/abort.d.ts.map +1 -1
  257. package/internal/utils/abort.js +9 -2
  258. package/internal/utils/abort.js.map +1 -1
  259. package/internal/utils/abort.mjs +9 -2
  260. package/internal/utils/abort.mjs.map +1 -1
  261. package/internal/utils/bytes.d.mts.map +1 -1
  262. package/internal/utils/bytes.d.ts.map +1 -1
  263. package/internal/utils/bytes.js +2 -0
  264. package/internal/utils/bytes.js.map +1 -1
  265. package/internal/utils/bytes.mjs +2 -0
  266. package/internal/utils/bytes.mjs.map +1 -1
  267. package/internal/utils/path.d.mts.map +1 -1
  268. package/internal/utils/path.d.ts.map +1 -1
  269. package/internal/utils/path.js +2 -0
  270. package/internal/utils/path.js.map +1 -1
  271. package/internal/utils/path.mjs +2 -0
  272. package/internal/utils/path.mjs.map +1 -1
  273. package/internal/utils/sleep.d.mts +1 -1
  274. package/internal/utils/sleep.d.mts.map +1 -1
  275. package/internal/utils/sleep.d.ts +1 -1
  276. package/internal/utils/sleep.d.ts.map +1 -1
  277. package/internal/utils/sleep.js +51 -1
  278. package/internal/utils/sleep.js.map +1 -1
  279. package/internal/utils/sleep.mjs +51 -1
  280. package/internal/utils/sleep.mjs.map +1 -1
  281. package/internal/ws-adapter-browser.d.mts.map +1 -1
  282. package/internal/ws-adapter-browser.d.ts.map +1 -1
  283. package/internal/ws-adapter-browser.js +2 -0
  284. package/internal/ws-adapter-browser.js.map +1 -1
  285. package/internal/ws-adapter-browser.mjs +2 -0
  286. package/internal/ws-adapter-browser.mjs.map +1 -1
  287. package/internal/ws.d.mts +16 -0
  288. package/internal/ws.d.mts.map +1 -1
  289. package/internal/ws.d.ts +16 -0
  290. package/internal/ws.d.ts.map +1 -1
  291. package/internal/ws.js +71 -5
  292. package/internal/ws.js.map +1 -1
  293. package/internal/ws.mjs +68 -6
  294. package/internal/ws.mjs.map +1 -1
  295. package/lib/AbstractChatCompletionRunner.d.mts.map +1 -1
  296. package/lib/AbstractChatCompletionRunner.d.ts.map +1 -1
  297. package/lib/AbstractChatCompletionRunner.js +41 -16
  298. package/lib/AbstractChatCompletionRunner.js.map +1 -1
  299. package/lib/AbstractChatCompletionRunner.mjs +42 -17
  300. package/lib/AbstractChatCompletionRunner.mjs.map +1 -1
  301. package/lib/AssistantStream.d.mts.map +1 -1
  302. package/lib/AssistantStream.d.ts.map +1 -1
  303. package/lib/AssistantStream.js +19 -5
  304. package/lib/AssistantStream.js.map +1 -1
  305. package/lib/AssistantStream.mjs +20 -6
  306. package/lib/AssistantStream.mjs.map +1 -1
  307. package/lib/ChatCompletionRunner.d.mts.map +1 -1
  308. package/lib/ChatCompletionRunner.d.ts.map +1 -1
  309. package/lib/ChatCompletionRunner.js +1 -0
  310. package/lib/ChatCompletionRunner.js.map +1 -1
  311. package/lib/ChatCompletionRunner.mjs +1 -0
  312. package/lib/ChatCompletionRunner.mjs.map +1 -1
  313. package/lib/ChatCompletionStream.d.mts +6 -1
  314. package/lib/ChatCompletionStream.d.mts.map +1 -1
  315. package/lib/ChatCompletionStream.d.ts +6 -1
  316. package/lib/ChatCompletionStream.d.ts.map +1 -1
  317. package/lib/ChatCompletionStream.js +63 -7
  318. package/lib/ChatCompletionStream.js.map +1 -1
  319. package/lib/ChatCompletionStream.mjs +64 -8
  320. package/lib/ChatCompletionStream.mjs.map +1 -1
  321. package/lib/EventEmitter.d.mts.map +1 -1
  322. package/lib/EventEmitter.d.ts.map +1 -1
  323. package/lib/EventEmitter.js +15 -0
  324. package/lib/EventEmitter.js.map +1 -1
  325. package/lib/EventEmitter.mjs +15 -0
  326. package/lib/EventEmitter.mjs.map +1 -1
  327. package/lib/EventStream.d.mts +2 -0
  328. package/lib/EventStream.d.mts.map +1 -1
  329. package/lib/EventStream.d.ts +2 -0
  330. package/lib/EventStream.d.ts.map +1 -1
  331. package/lib/EventStream.js +111 -14
  332. package/lib/EventStream.js.map +1 -1
  333. package/lib/EventStream.mjs +111 -14
  334. package/lib/EventStream.mjs.map +1 -1
  335. package/lib/ResponsesParser.d.mts.map +1 -1
  336. package/lib/ResponsesParser.d.ts.map +1 -1
  337. package/lib/ResponsesParser.js +4 -0
  338. package/lib/ResponsesParser.js.map +1 -1
  339. package/lib/ResponsesParser.mjs +4 -0
  340. package/lib/ResponsesParser.mjs.map +1 -1
  341. package/lib/RunnableFunction.d.mts.map +1 -1
  342. package/lib/RunnableFunction.d.ts.map +1 -1
  343. package/lib/RunnableFunction.js.map +1 -1
  344. package/lib/RunnableFunction.mjs.map +1 -1
  345. package/lib/agents/agent-session-stream.d.mts.map +1 -1
  346. package/lib/agents/agent-session-stream.d.ts.map +1 -1
  347. package/lib/agents/agent-session-stream.js +5 -2
  348. package/lib/agents/agent-session-stream.js.map +1 -1
  349. package/lib/agents/agent-session-stream.mjs +5 -2
  350. package/lib/agents/agent-session-stream.mjs.map +1 -1
  351. package/lib/embeddings.d.mts.map +1 -1
  352. package/lib/embeddings.d.ts.map +1 -1
  353. package/lib/embeddings.js +2 -0
  354. package/lib/embeddings.js.map +1 -1
  355. package/lib/embeddings.mjs +2 -0
  356. package/lib/embeddings.mjs.map +1 -1
  357. package/lib/live/transcript-grouper.d.mts.map +1 -1
  358. package/lib/live/transcript-grouper.d.ts.map +1 -1
  359. package/lib/live/transcript-grouper.js +8 -2
  360. package/lib/live/transcript-grouper.js.map +1 -1
  361. package/lib/live/transcript-grouper.mjs +8 -2
  362. package/lib/live/transcript-grouper.mjs.map +1 -1
  363. package/lib/parser.d.mts.map +1 -1
  364. package/lib/parser.d.ts.map +1 -1
  365. package/lib/parser.js +13 -0
  366. package/lib/parser.js.map +1 -1
  367. package/lib/parser.mjs +13 -0
  368. package/lib/parser.mjs.map +1 -1
  369. package/lib/responses/ResponseInputItems.d.mts.map +1 -1
  370. package/lib/responses/ResponseInputItems.d.ts.map +1 -1
  371. package/lib/responses/ResponseInputItems.js +11 -0
  372. package/lib/responses/ResponseInputItems.js.map +1 -1
  373. package/lib/responses/ResponseInputItems.mjs +11 -0
  374. package/lib/responses/ResponseInputItems.mjs.map +1 -1
  375. package/lib/responses/ResponseStream.d.mts.map +1 -1
  376. package/lib/responses/ResponseStream.d.ts.map +1 -1
  377. package/lib/responses/ResponseStream.js +7 -3
  378. package/lib/responses/ResponseStream.js.map +1 -1
  379. package/lib/responses/ResponseStream.mjs +8 -4
  380. package/lib/responses/ResponseStream.mjs.map +1 -1
  381. package/lib/responses/responses-websocket-lane.d.mts +63 -0
  382. package/lib/responses/responses-websocket-lane.d.mts.map +1 -0
  383. package/lib/responses/responses-websocket-lane.d.ts +63 -0
  384. package/lib/responses/responses-websocket-lane.d.ts.map +1 -0
  385. package/lib/responses/responses-websocket-lane.js +314 -0
  386. package/lib/responses/responses-websocket-lane.js.map +1 -0
  387. package/lib/responses/responses-websocket-lane.mjs +309 -0
  388. package/lib/responses/responses-websocket-lane.mjs.map +1 -0
  389. package/lib/responses/responses-websocket-session.d.mts +38 -0
  390. package/lib/responses/responses-websocket-session.d.mts.map +1 -0
  391. package/lib/responses/responses-websocket-session.d.ts +38 -0
  392. package/lib/responses/responses-websocket-session.d.ts.map +1 -0
  393. package/lib/responses/responses-websocket-session.js +268 -0
  394. package/lib/responses/responses-websocket-session.js.map +1 -0
  395. package/lib/responses/responses-websocket-session.mjs +263 -0
  396. package/lib/responses/responses-websocket-session.mjs.map +1 -0
  397. package/lib/transform.d.mts.map +1 -1
  398. package/lib/transform.d.ts.map +1 -1
  399. package/lib/transform.js +69 -33
  400. package/lib/transform.js.map +1 -1
  401. package/lib/transform.mjs +69 -33
  402. package/lib/transform.mjs.map +1 -1
  403. package/lib/webrtc/connection.d.mts.map +1 -1
  404. package/lib/webrtc/connection.d.ts.map +1 -1
  405. package/lib/webrtc/connection.js +6 -1
  406. package/lib/webrtc/connection.js.map +1 -1
  407. package/lib/webrtc/connection.mjs +6 -1
  408. package/lib/webrtc/connection.mjs.map +1 -1
  409. package/lib/webrtc/data-channel.d.mts.map +1 -1
  410. package/lib/webrtc/data-channel.d.ts.map +1 -1
  411. package/lib/webrtc/data-channel.js +9 -1
  412. package/lib/webrtc/data-channel.js.map +1 -1
  413. package/lib/webrtc/data-channel.mjs +9 -1
  414. package/lib/webrtc/data-channel.mjs.map +1 -1
  415. package/lib/webrtc/subscriptions.d.mts.map +1 -1
  416. package/lib/webrtc/subscriptions.d.ts.map +1 -1
  417. package/lib/webrtc/subscriptions.js +2 -0
  418. package/lib/webrtc/subscriptions.js.map +1 -1
  419. package/lib/webrtc/subscriptions.mjs +2 -0
  420. package/lib/webrtc/subscriptions.mjs.map +1 -1
  421. package/lib/webrtc/types.d.mts.map +1 -1
  422. package/lib/webrtc/types.d.ts.map +1 -1
  423. package/package.json +1 -1
  424. package/providers/bedrock/aws.d.mts.map +1 -1
  425. package/providers/bedrock/aws.d.ts.map +1 -1
  426. package/providers/bedrock/aws.js +4 -0
  427. package/providers/bedrock/aws.js.map +1 -1
  428. package/providers/bedrock/aws.mjs +4 -0
  429. package/providers/bedrock/aws.mjs.map +1 -1
  430. package/realtime/internal-base.d.mts.map +1 -1
  431. package/realtime/internal-base.d.ts.map +1 -1
  432. package/realtime/internal-base.js +1 -0
  433. package/realtime/internal-base.js.map +1 -1
  434. package/realtime/internal-base.mjs +1 -0
  435. package/realtime/internal-base.mjs.map +1 -1
  436. package/realtime/websocket.d.mts.map +1 -1
  437. package/realtime/websocket.d.ts.map +1 -1
  438. package/realtime/websocket.js +9 -1
  439. package/realtime/websocket.js.map +1 -1
  440. package/realtime/websocket.mjs +9 -1
  441. package/realtime/websocket.mjs.map +1 -1
  442. package/realtime/ws.d.mts.map +1 -1
  443. package/realtime/ws.d.ts.map +1 -1
  444. package/realtime/ws.js +3 -0
  445. package/realtime/ws.js.map +1 -1
  446. package/realtime/ws.mjs +3 -0
  447. package/realtime/ws.mjs.map +1 -1
  448. package/resources/beta/agents/agents.d.mts +2 -1
  449. package/resources/beta/agents/agents.d.mts.map +1 -1
  450. package/resources/beta/agents/agents.d.ts +2 -1
  451. package/resources/beta/agents/agents.d.ts.map +1 -1
  452. package/resources/beta/agents/agents.js.map +1 -1
  453. package/resources/beta/agents/agents.mjs.map +1 -1
  454. package/resources/beta/agents/sessions/sessions.d.mts +42 -1
  455. package/resources/beta/agents/sessions/sessions.d.mts.map +1 -1
  456. package/resources/beta/agents/sessions/sessions.d.ts +42 -1
  457. package/resources/beta/agents/sessions/sessions.d.ts.map +1 -1
  458. package/resources/beta/agents/sessions/sessions.js +2 -1
  459. package/resources/beta/agents/sessions/sessions.js.map +1 -1
  460. package/resources/beta/agents/sessions/sessions.mjs +2 -1
  461. package/resources/beta/agents/sessions/sessions.mjs.map +1 -1
  462. package/resources/beta/beta.d.mts +2 -2
  463. package/resources/beta/beta.d.mts.map +1 -1
  464. package/resources/beta/beta.d.ts +2 -2
  465. package/resources/beta/beta.d.ts.map +1 -1
  466. package/resources/beta/beta.js.map +1 -1
  467. package/resources/beta/beta.mjs.map +1 -1
  468. package/resources/beta/index.d.mts +1 -1
  469. package/resources/beta/index.d.mts.map +1 -1
  470. package/resources/beta/index.d.ts +1 -1
  471. package/resources/beta/index.d.ts.map +1 -1
  472. package/resources/beta/index.js.map +1 -1
  473. package/resources/beta/index.mjs.map +1 -1
  474. package/resources/beta/responses/index.d.mts +1 -1
  475. package/resources/beta/responses/index.d.mts.map +1 -1
  476. package/resources/beta/responses/index.d.ts +1 -1
  477. package/resources/beta/responses/index.d.ts.map +1 -1
  478. package/resources/beta/responses/index.js.map +1 -1
  479. package/resources/beta/responses/index.mjs.map +1 -1
  480. package/resources/beta/responses/internal-base.d.mts +3 -0
  481. package/resources/beta/responses/internal-base.d.mts.map +1 -1
  482. package/resources/beta/responses/internal-base.d.ts +3 -0
  483. package/resources/beta/responses/internal-base.d.ts.map +1 -1
  484. package/resources/beta/responses/internal-base.js +21 -12
  485. package/resources/beta/responses/internal-base.js.map +1 -1
  486. package/resources/beta/responses/internal-base.mjs +21 -12
  487. package/resources/beta/responses/internal-base.mjs.map +1 -1
  488. package/resources/beta/responses/responses.d.mts +65 -7
  489. package/resources/beta/responses/responses.d.mts.map +1 -1
  490. package/resources/beta/responses/responses.d.ts +65 -7
  491. package/resources/beta/responses/responses.d.ts.map +1 -1
  492. package/resources/beta/responses/responses.js.map +1 -1
  493. package/resources/beta/responses/responses.mjs.map +1 -1
  494. package/resources/beta/responses/ws-base.d.mts +9 -1
  495. package/resources/beta/responses/ws-base.d.mts.map +1 -1
  496. package/resources/beta/responses/ws-base.d.ts +9 -1
  497. package/resources/beta/responses/ws-base.d.ts.map +1 -1
  498. package/resources/beta/responses/ws-base.js +24 -5
  499. package/resources/beta/responses/ws-base.js.map +1 -1
  500. package/resources/beta/responses/ws-base.mjs +23 -6
  501. package/resources/beta/responses/ws-base.mjs.map +1 -1
  502. package/resources/beta/responses/ws.d.mts +2 -0
  503. package/resources/beta/responses/ws.d.mts.map +1 -1
  504. package/resources/beta/responses/ws.d.ts +2 -0
  505. package/resources/beta/responses/ws.d.ts.map +1 -1
  506. package/resources/beta/responses/ws.js +21 -8
  507. package/resources/beta/responses/ws.js.map +1 -1
  508. package/resources/beta/responses/ws.mjs +21 -8
  509. package/resources/beta/responses/ws.mjs.map +1 -1
  510. package/resources/live/forks/internal-base.d.mts +3 -0
  511. package/resources/live/forks/internal-base.d.mts.map +1 -1
  512. package/resources/live/forks/internal-base.d.ts +3 -0
  513. package/resources/live/forks/internal-base.d.ts.map +1 -1
  514. package/resources/live/forks/internal-base.js +21 -5
  515. package/resources/live/forks/internal-base.js.map +1 -1
  516. package/resources/live/forks/internal-base.mjs +21 -5
  517. package/resources/live/forks/internal-base.mjs.map +1 -1
  518. package/resources/live/forks/ws.d.mts.map +1 -1
  519. package/resources/live/forks/ws.d.ts.map +1 -1
  520. package/resources/live/forks/ws.js +2 -4
  521. package/resources/live/forks/ws.js.map +1 -1
  522. package/resources/live/forks/ws.mjs +2 -4
  523. package/resources/live/forks/ws.mjs.map +1 -1
  524. package/resources/live/internal-base.d.mts +3 -0
  525. package/resources/live/internal-base.d.mts.map +1 -1
  526. package/resources/live/internal-base.d.ts +3 -0
  527. package/resources/live/internal-base.d.ts.map +1 -1
  528. package/resources/live/internal-base.js +21 -5
  529. package/resources/live/internal-base.js.map +1 -1
  530. package/resources/live/internal-base.mjs +21 -5
  531. package/resources/live/internal-base.mjs.map +1 -1
  532. package/resources/live/sideband/internal-base.d.mts +3 -0
  533. package/resources/live/sideband/internal-base.d.mts.map +1 -1
  534. package/resources/live/sideband/internal-base.d.ts +3 -0
  535. package/resources/live/sideband/internal-base.d.ts.map +1 -1
  536. package/resources/live/sideband/internal-base.js +21 -5
  537. package/resources/live/sideband/internal-base.js.map +1 -1
  538. package/resources/live/sideband/internal-base.mjs +21 -5
  539. package/resources/live/sideband/internal-base.mjs.map +1 -1
  540. package/resources/live/sideband/ws.d.mts.map +1 -1
  541. package/resources/live/sideband/ws.d.ts.map +1 -1
  542. package/resources/live/sideband/ws.js +2 -4
  543. package/resources/live/sideband/ws.js.map +1 -1
  544. package/resources/live/sideband/ws.mjs +2 -4
  545. package/resources/live/sideband/ws.mjs.map +1 -1
  546. package/resources/live/ws.d.mts.map +1 -1
  547. package/resources/live/ws.d.ts.map +1 -1
  548. package/resources/live/ws.js +2 -4
  549. package/resources/live/ws.js.map +1 -1
  550. package/resources/live/ws.mjs +2 -4
  551. package/resources/live/ws.mjs.map +1 -1
  552. package/resources/responses/internal-base.d.mts +3 -0
  553. package/resources/responses/internal-base.d.mts.map +1 -1
  554. package/resources/responses/internal-base.d.ts +3 -0
  555. package/resources/responses/internal-base.d.ts.map +1 -1
  556. package/resources/responses/internal-base.js +21 -12
  557. package/resources/responses/internal-base.js.map +1 -1
  558. package/resources/responses/internal-base.mjs +21 -12
  559. package/resources/responses/internal-base.mjs.map +1 -1
  560. package/resources/responses/responses.d.mts +47 -4
  561. package/resources/responses/responses.d.mts.map +1 -1
  562. package/resources/responses/responses.d.ts +47 -4
  563. package/resources/responses/responses.d.ts.map +1 -1
  564. package/resources/responses/responses.js.map +1 -1
  565. package/resources/responses/responses.mjs.map +1 -1
  566. package/resources/responses/ws-base.d.mts +11 -1
  567. package/resources/responses/ws-base.d.mts.map +1 -1
  568. package/resources/responses/ws-base.d.ts +11 -1
  569. package/resources/responses/ws-base.d.ts.map +1 -1
  570. package/resources/responses/ws-base.js +29 -8
  571. package/resources/responses/ws-base.js.map +1 -1
  572. package/resources/responses/ws-base.mjs +28 -9
  573. package/resources/responses/ws-base.mjs.map +1 -1
  574. package/resources/responses/ws.d.mts +2 -0
  575. package/resources/responses/ws.d.mts.map +1 -1
  576. package/resources/responses/ws.d.ts +2 -0
  577. package/resources/responses/ws.d.ts.map +1 -1
  578. package/resources/responses/ws.js +21 -8
  579. package/resources/responses/ws.js.map +1 -1
  580. package/resources/responses/ws.mjs +21 -8
  581. package/resources/responses/ws.mjs.map +1 -1
  582. package/resources/shared.d.mts +1 -1
  583. package/resources/shared.d.mts.map +1 -1
  584. package/resources/shared.d.ts +1 -1
  585. package/resources/shared.d.ts.map +1 -1
  586. package/resources/webhooks/webhooks.d.mts +3 -4
  587. package/resources/webhooks/webhooks.d.mts.map +1 -1
  588. package/resources/webhooks/webhooks.d.ts +3 -4
  589. package/resources/webhooks/webhooks.d.ts.map +1 -1
  590. package/src/_vendor/zod-to-json-schema/Options.ts +2 -0
  591. package/src/_vendor/zod-to-json-schema/parseDef.ts +1 -0
  592. package/src/_vendor/zod-to-json-schema/parsers/bigint.ts +2 -0
  593. package/src/_vendor/zod-to-json-schema/parsers/literal.ts +1 -0
  594. package/src/_vendor/zod-to-json-schema/parsers/null.ts +1 -0
  595. package/src/_vendor/zod-to-json-schema/parsers/nullable.ts +4 -0
  596. package/src/_vendor/zod-to-json-schema/parsers/number.ts +2 -0
  597. package/src/_vendor/zod-to-json-schema/parsers/optional.ts +6 -7
  598. package/src/_vendor/zod-to-json-schema/parsers/record.ts +2 -0
  599. package/src/_vendor/zod-to-json-schema/parsers/string.ts +1 -0
  600. package/src/_vendor/zod-to-json-schema/parsers/union.ts +3 -0
  601. package/src/_vendor/zod-to-json-schema/util.ts +1 -0
  602. package/src/_vendor/zod-to-json-schema/zodToJsonSchema.ts +3 -1
  603. package/src/auth/subject-token-providers.ts +6 -1
  604. package/src/auth/workload-identity-auth.ts +10 -1
  605. package/src/auth/x509-transport.ts +13 -2
  606. package/src/azure.ts +3 -0
  607. package/src/bedrock.ts +5 -0
  608. package/src/beta/realtime/internal-base.ts +2 -0
  609. package/src/beta/realtime/websocket.ts +11 -1
  610. package/src/beta/realtime/ws.ts +3 -0
  611. package/src/client.ts +50 -3
  612. package/src/core/EventEmitter.ts +15 -0
  613. package/src/core/streaming.ts +30 -2
  614. package/src/helpers/audio.ts +2 -0
  615. package/src/helpers/standard-schema.ts +31 -19
  616. package/src/helpers/zod-v3-strict-schema.ts +8 -2
  617. package/src/helpers/zod.ts +32 -13
  618. package/src/internal/assistant-stream-delta.ts +7 -1
  619. package/src/internal/auth/x509-credential-options.ts +3 -0
  620. package/src/internal/auth/x509-token-exchange.ts +10 -1
  621. package/src/internal/auth/x509-transport-capability.ts +2 -1
  622. package/src/internal/auth/x509-workload-identity-auth.ts +13 -8
  623. package/src/internal/bedrock.ts +15 -0
  624. package/src/internal/decoders/line.ts +1 -0
  625. package/src/internal/parse.ts +1 -0
  626. package/src/internal/provider.ts +3 -0
  627. package/src/internal/qs/stringify.ts +3 -0
  628. package/src/internal/qs/utils.ts +14 -3
  629. package/src/internal/responses/response-accumulator.ts +34 -4
  630. package/src/internal/to-file.ts +1 -1
  631. package/src/internal/uploads.ts +11 -1
  632. package/src/internal/utils/abort.ts +7 -2
  633. package/src/internal/utils/bytes.ts +2 -0
  634. package/src/internal/utils/path.ts +2 -0
  635. package/src/internal/utils/sleep.ts +52 -1
  636. package/src/internal/ws-adapter-browser.ts +2 -0
  637. package/src/internal/ws.ts +80 -6
  638. package/src/lib/AbstractChatCompletionRunner.ts +40 -17
  639. package/src/lib/AssistantStream.ts +31 -20
  640. package/src/lib/ChatCompletionRunner.ts +1 -0
  641. package/src/lib/ChatCompletionStream.ts +81 -14
  642. package/src/lib/EventEmitter.ts +15 -0
  643. package/src/lib/EventStream.ts +93 -3
  644. package/src/lib/ResponsesParser.ts +5 -0
  645. package/src/lib/RunnableFunction.ts +4 -1
  646. package/src/lib/agents/agent-session-stream.ts +5 -3
  647. package/src/lib/embeddings.ts +3 -1
  648. package/src/lib/live/transcript-grouper.ts +4 -0
  649. package/src/lib/parser.ts +16 -2
  650. package/src/lib/responses/ResponseInputItems.ts +11 -0
  651. package/src/lib/responses/ResponseStream.ts +6 -3
  652. package/src/lib/responses/responses-websocket-lane.ts +388 -0
  653. package/src/lib/responses/responses-websocket-session.ts +317 -0
  654. package/src/lib/transform.ts +70 -35
  655. package/src/lib/webrtc/connection.ts +5 -1
  656. package/src/lib/webrtc/data-channel.ts +7 -0
  657. package/src/lib/webrtc/subscriptions.ts +3 -0
  658. package/src/lib/webrtc/types.ts +1 -0
  659. package/src/providers/bedrock/aws.ts +5 -1
  660. package/src/realtime/internal-base.ts +2 -0
  661. package/src/realtime/websocket.ts +11 -1
  662. package/src/realtime/ws.ts +3 -0
  663. package/src/resources/beta/agents/agents.ts +2 -0
  664. package/src/resources/beta/agents/sessions/sessions.ts +47 -1
  665. package/src/resources/beta/beta.ts +2 -0
  666. package/src/resources/beta/index.ts +1 -0
  667. package/src/resources/beta/responses/index.ts +1 -0
  668. package/src/resources/beta/responses/internal-base.ts +24 -11
  669. package/src/resources/beta/responses/responses.ts +82 -4
  670. package/src/resources/beta/responses/ws-base.ts +31 -6
  671. package/src/resources/beta/responses/ws.ts +29 -11
  672. package/src/resources/live/forks/internal-base.ts +24 -5
  673. package/src/resources/live/forks/ws.ts +4 -5
  674. package/src/resources/live/internal-base.ts +24 -5
  675. package/src/resources/live/sideband/internal-base.ts +24 -5
  676. package/src/resources/live/sideband/ws.ts +4 -5
  677. package/src/resources/live/ws.ts +4 -5
  678. package/src/resources/responses/api.md +1 -0
  679. package/src/resources/responses/internal-base.ts +24 -11
  680. package/src/resources/responses/responses.ts +56 -1
  681. package/src/resources/responses/ws-base.ts +36 -9
  682. package/src/resources/responses/ws.ts +29 -11
  683. package/src/resources/shared.ts +4 -2
  684. package/src/resources/webhooks/webhooks.ts +3 -4
  685. package/src/version.ts +1 -1
  686. package/version.d.mts +1 -1
  687. package/version.d.ts +1 -1
  688. package/version.js +1 -1
  689. package/version.mjs +1 -1
package/src/client.ts CHANGED
@@ -739,6 +739,21 @@ export class OpenAI {
739
739
  return this._options.defaultQuery;
740
740
  }
741
741
 
742
+ /** @internal Client request headers for each new WebSocket handshake. */
743
+ _buildWebSocketHeaders(authHeaders: Record<string, string>): Record<string, string> {
744
+ return Object.fromEntries(
745
+ buildHeaders([
746
+ {
747
+ 'User-Agent': this.getUserAgent(),
748
+ 'OpenAI-Organization': this.organization,
749
+ 'OpenAI-Project': this.project,
750
+ },
751
+ authHeaders,
752
+ this._options.defaultHeaders,
753
+ ]).values,
754
+ );
755
+ }
756
+
742
757
  protected validateHeaders(
743
758
  { values, nulls }: NullableHeaders,
744
759
  schemes: { bearerAuth?: boolean; adminAPIKeyAuth?: boolean } = {
@@ -856,6 +871,10 @@ export class OpenAI {
856
871
  return Errors.APIError.generate(status, normalizedError, message, headers);
857
872
  }
858
873
 
874
+ _hasApiKeyProvider(): boolean {
875
+ return typeof this._options.apiKey === 'function';
876
+ }
877
+
859
878
  /**
860
879
  * Resolves a function-based API key and retains the resolved value on this client.
861
880
  * Returns whether a provider was invoked. Internal callers can capture this
@@ -1108,6 +1127,8 @@ export class OpenAI {
1108
1127
  props.options,
1109
1128
  retriesRemaining,
1110
1129
  props.retryOfRequestLogID ?? props.requestLogID,
1130
+ undefined,
1131
+ props.requestSignal,
1111
1132
  );
1112
1133
  Object.assign(props, next);
1113
1134
  } finally {
@@ -1318,7 +1339,13 @@ export class OpenAI {
1318
1339
  message: x509Authentication ? 'X.509 workload identity API connection failed.' : response.message,
1319
1340
  }),
1320
1341
  );
1321
- return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);
1342
+ return this.retryRequest(
1343
+ options,
1344
+ retriesRemaining,
1345
+ retryOfRequestLogID ?? requestLogID,
1346
+ undefined,
1347
+ req.signal,
1348
+ );
1322
1349
  }
1323
1350
  const terminalMessage = hasStreamingBody
1324
1351
  ? 'error; streaming body cannot be retried'
@@ -1442,6 +1469,7 @@ export class OpenAI {
1442
1469
  retriesRemaining,
1443
1470
  retryOfRequestLogID ?? requestLogID,
1444
1471
  response.headers,
1472
+ req.signal,
1445
1473
  );
1446
1474
  }
1447
1475
 
@@ -1497,7 +1525,15 @@ export class OpenAI {
1497
1525
  helperMethod: options.__metadata?.['helperMethod'],
1498
1526
  ...(continueRequest ? { continueRequest } : {}),
1499
1527
  });
1500
- return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };
1528
+ return {
1529
+ response,
1530
+ options,
1531
+ controller,
1532
+ requestSignal: req.signal,
1533
+ requestLogID,
1534
+ retryOfRequestLogID,
1535
+ startTime,
1536
+ };
1501
1537
  }
1502
1538
 
1503
1539
  getAPIList<Item, PageClass extends Pagination.AbstractPage<Item> = Pagination.AbstractPage<Item>>(
@@ -1638,6 +1674,7 @@ export class OpenAI {
1638
1674
  retriesRemaining: number,
1639
1675
  requestLogID: string,
1640
1676
  responseHeaders?: Headers | undefined,
1677
+ requestSignal: AbortSignal | null | undefined = options.signal,
1641
1678
  ): Promise<APIResponseProps> {
1642
1679
  let timeoutMillis: number | undefined;
1643
1680
 
@@ -1685,7 +1722,17 @@ export class OpenAI {
1685
1722
  if (x509Authentication) {
1686
1723
  await x509Authentication.waitForRetry(timeoutMillis, x509Authentication.effectiveSignal());
1687
1724
  } else {
1688
- await sleep(timeoutMillis);
1725
+ const retrySignals =
1726
+ requestSignal === options.signal ? [requestSignal] : [requestSignal, options.signal];
1727
+ try {
1728
+ await sleep(timeoutMillis, ...retrySignals);
1729
+ } catch (error) {
1730
+ const abortedSignal = retrySignals.find((signal) => signal?.aborted);
1731
+ if (abortedSignal) {
1732
+ throw this._makeUserAbortError(abortedSignal);
1733
+ }
1734
+ throw error;
1735
+ }
1689
1736
  }
1690
1737
 
1691
1738
  return this.makeRequest(options, retriesRemaining - 1, requestLogID);
@@ -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
@@ -1,3 +1,4 @@
1
+ import { isObj } from '../internal/utils/values';
1
2
  import { OpenAIError } from '../error';
2
3
  import type { AutoParseableResponseFormat, AutoParseableTextFormat, AutoParseableTool } from '../lib/parser';
3
4
  import {
@@ -138,6 +139,7 @@ type StandardTextFormatProps = Omit<
138
139
  /** Function callback invoked with arguments validated by a Standard Schema implementation. */
139
140
  type StandardToolFunction<Parameters extends StandardSchemaLike> = (
140
141
  args: InferStandardOutput<Parameters>,
142
+ // oxlint-disable-next-line anti-slop/no-unknown-returns -- Public tool callbacks may return arbitrary application values; preserve the published callback contract.
141
143
  ) => unknown | Promise<unknown>;
142
144
 
143
145
  /** Model-facing function-tool settings and optional Standard Schema validation callback. */
@@ -198,10 +200,11 @@ const JSON_SCHEMA_TYPES = new Set(['string', 'number', 'integer', 'boolean', 'ob
198
200
  type JSONPrimitive = string | number | boolean | null;
199
201
 
200
202
  function getSchemaTypes(schema: unknown): Set<string> | undefined {
201
- if (!schema || typeof schema !== 'object' || Array.isArray(schema)) {
203
+ if (!isObj(schema)) {
202
204
  return undefined;
203
205
  }
204
206
 
207
+ // SAFETY: The preceding guard excludes null, primitives, and arrays; property values remain unknown until their individual schema checks.
205
208
  const type = (schema as Record<string, unknown>)['type'];
206
209
  if (type === undefined) {
207
210
  return getLiteralSchemaTypes(schema);
@@ -227,10 +230,11 @@ function isJSONPrimitive(value: unknown): value is JSONPrimitive {
227
230
  }
228
231
 
229
232
  function getLiteralValues(schema: unknown): JSONPrimitive[] | undefined {
230
- if (!schema || typeof schema !== 'object' || Array.isArray(schema)) {
233
+ if (!isObj(schema)) {
231
234
  return undefined;
232
235
  }
233
236
 
237
+ // SAFETY: The preceding guard excludes null, primitives, and arrays; property values remain unknown until their individual schema checks.
234
238
  const record = schema as Record<string, unknown>;
235
239
  if ('const' in record && isJSONPrimitive(record['const'])) {
236
240
  return [record['const']];
@@ -286,19 +290,17 @@ function haveDisjointObjectDiscriminator(left: unknown, right: unknown, root: JS
286
290
  return false;
287
291
  }
288
292
 
293
+ // SAFETY: The preceding guard excludes null, primitives, and arrays; property values remain unknown until their individual schema checks.
289
294
  const leftRecord = left as Record<string, unknown>;
295
+ // SAFETY: The preceding guard excludes null, primitives, and arrays; property values remain unknown until their individual schema checks.
290
296
  const rightRecord = right as Record<string, unknown>;
291
297
  const leftProperties = leftRecord['properties'];
292
298
  const rightProperties = rightRecord['properties'];
293
299
  const leftRequired = leftRecord['required'];
294
300
  const rightRequired = rightRecord['required'];
295
301
  if (
296
- !leftProperties ||
297
- typeof leftProperties !== 'object' ||
298
- Array.isArray(leftProperties) ||
299
- !rightProperties ||
300
- typeof rightProperties !== 'object' ||
301
- Array.isArray(rightProperties) ||
302
+ !isObj(leftProperties) ||
303
+ !isObj(rightProperties) ||
302
304
  !Array.isArray(leftRequired) ||
303
305
  !Array.isArray(rightRequired)
304
306
  ) {
@@ -306,6 +308,7 @@ function haveDisjointObjectDiscriminator(left: unknown, right: unknown, root: JS
306
308
  }
307
309
 
308
310
  for (const property of leftRequired) {
311
+ // SAFETY: Both properties maps were checked as non-null non-array objects; the selected values remain untrusted inputs to reference resolution.
309
312
  if (
310
313
  typeof property === 'string' &&
311
314
  rightRequired.includes(property) &&
@@ -328,14 +331,13 @@ function getClosedObjectPropertySet(
328
331
  return undefined;
329
332
  }
330
333
 
334
+ // SAFETY: The preceding guard excludes null, primitives, and arrays; property values remain unknown until their individual schema checks.
331
335
  const record = schema as Record<string, unknown>;
332
336
  const properties = record['properties'];
333
337
  const required = record['required'];
334
338
  if (
335
339
  record['additionalProperties'] !== false ||
336
- !properties ||
337
- typeof properties !== 'object' ||
338
- Array.isArray(properties) ||
340
+ !isObj(properties) ||
339
341
  !Array.isArray(required) ||
340
342
  required.some((property) => typeof property !== 'string')
341
343
  ) {
@@ -343,6 +345,7 @@ function getClosedObjectPropertySet(
343
345
  }
344
346
 
345
347
  const propertySet = new Set(Object.keys(properties));
348
+ // SAFETY: The preceding every check proved each required-property name is a string.
346
349
  const requiredProperties = required as string[];
347
350
  // A required undeclared property makes a closed branch unsatisfiable, but
348
351
  // the strictifier rejects that shape rather than representing it. Keep this
@@ -355,9 +358,9 @@ function getClosedObjectPropertySet(
355
358
  }
356
359
 
357
360
  function haveDisjointClosedObjectPropertySets(left: unknown, right: unknown): boolean {
358
- const leftShape = getClosedObjectPropertySet(left);
359
- const rightShape = getClosedObjectPropertySet(right);
360
- if (!leftShape || !rightShape) {
361
+ const leftPropertySet = getClosedObjectPropertySet(left);
362
+ const rightPropertySet = getClosedObjectPropertySet(right);
363
+ if (!leftPropertySet || !rightPropertySet) {
361
364
  return false;
362
365
  }
363
366
 
@@ -366,8 +369,8 @@ function haveDisjointClosedObjectPropertySets(left: unknown, right: unknown): bo
366
369
  // an additional property. This proves oneOf exclusivity without widening
367
370
  // overlapping closed shapes.
368
371
  return (
369
- leftShape.required.some((property) => !rightShape.properties.has(property)) ||
370
- rightShape.required.some((property) => !leftShape.properties.has(property))
372
+ leftPropertySet.required.some((property) => !rightPropertySet.properties.has(property)) ||
373
+ rightPropertySet.required.some((property) => !leftPropertySet.properties.has(property))
371
374
  );
372
375
  }
373
376
 
@@ -395,17 +398,20 @@ function resolveLocalRefForExclusivity(
395
398
  schema: unknown,
396
399
  root: JSONSchema,
397
400
  seenRefs = new Set<string>(),
401
+ // oxlint-disable-next-line anti-slop/no-unknown-returns -- Resolving untrusted schema references may produce any value; callers perform the schema checks.
398
402
  ): unknown | undefined {
399
- if (!schema || typeof schema !== 'object' || Array.isArray(schema)) {
403
+ if (!isObj(schema)) {
400
404
  return schema;
401
405
  }
402
406
 
407
+ // SAFETY: The preceding guard excludes null, primitives, and arrays; property values remain unknown until their individual schema checks.
403
408
  const record = schema as Record<string, unknown>;
404
409
  const ref = record['$ref'];
405
410
  if (ref !== undefined) {
406
411
  // Annotation keywords do not affect Draft 7 validation, so they are safe
407
412
  // to retain while proving the referenced branches are mutually exclusive.
408
413
  // Keep the proof conservative for every other sibling constraint.
414
+ // SAFETY: The helper only checks allowed sibling keys on this object; it does not assume that arbitrary property values form a valid schema.
409
415
  if (typeof ref !== 'string' || !hasOnlyRefAndAnnotations(record as JSONSchema)) {
410
416
  return undefined;
411
417
  }
@@ -425,6 +431,7 @@ function resolveLocalRefForExclusivity(
425
431
  if (!Array.isArray(record['allOf'])) {
426
432
  return undefined;
427
433
  }
434
+ // SAFETY: The allOf value was checked as an array; normalization performs the remaining branch-shape checks before proving exclusivity.
428
435
  const normalized = normalizeObjectAllOfForExclusivity(record as JSONSchema, root);
429
436
  if (normalized === undefined) {
430
437
  return undefined;
@@ -460,9 +467,10 @@ function normalizeStructuredOutputSchema(schema: JSONSchema): JSONSchema {
460
467
  const visitedSchemas = new Set<Record<string, unknown>>();
461
468
 
462
469
  const visitSchema = (value: unknown): void => {
463
- if (!value || typeof value !== 'object' || Array.isArray(value)) {
470
+ if (!isObj(value)) {
464
471
  return;
465
472
  }
473
+ // SAFETY: The preceding guard excludes null, primitives, and arrays; property values remain unknown until their individual schema checks.
466
474
  const record = value as Record<string, unknown>;
467
475
  if (visitedSchemas.has(record)) {
468
476
  return;
@@ -528,6 +536,7 @@ function parseStandardSchema<Schema extends StandardSchemaLike>(
528
536
  ): InferStandardOutput<Schema> {
529
537
  const parsed = parseResponseFormatContent({ type: 'json_schema', $parseRaw: undefined }, content);
530
538
  const { standard, validate } = getBinding();
539
+ // oxlint-disable-next-line anti-slop/no-reflect-apply -- A validator may shadow call; invoke the captured function with its original metadata receiver.
531
540
  const result = Reflect.apply(validate, standard, [parsed]);
532
541
 
533
542
  if (isPromiseLike(result)) {
@@ -541,6 +550,7 @@ function parseStandardSchema<Schema extends StandardSchemaLike>(
541
550
  throw new OpenAIError(`Standard Schema validation failed: ${formatStandardSchemaIssues(result.issues)}`);
542
551
  }
543
552
 
553
+ // SAFETY: The captured Standard Schema validator completed synchronously without issues, so its value follows that schema's inferred output contract.
544
554
  return result.value as InferStandardOutput<Schema>;
545
555
  }
546
556
 
@@ -548,6 +558,7 @@ function resolveStandardJSONSchema<Schema extends StandardSchemaLike>(
548
558
  getBinding: () => StandardSchemaBinding<Schema>,
549
559
  schemaOverride?: JSONSchema | Record<string, unknown> | undefined,
550
560
  ): Record<string, unknown> {
561
+ // SAFETY: The override or Standard Schema input converter supplies the schema; normalization and strict conversion below validate the supported structure.
551
562
  const schema = (schemaOverride ?? getBinding().standard.jsonSchema?.input({ target: 'draft-07' })) as
552
563
  | JSONSchema
553
564
  | undefined;
@@ -558,7 +569,8 @@ function resolveStandardJSONSchema<Schema extends StandardSchemaLike>(
558
569
  );
559
570
  }
560
571
 
561
- return toStrictJsonSchema(normalizeStructuredOutputSchema(schema)) as unknown as Record<string, unknown>;
572
+ // SAFETY: Strict conversion returns an object schema here; the record view exposes its JSON keyword properties without narrowing their values.
573
+ return toStrictJsonSchema(normalizeStructuredOutputSchema(schema)) as Record<string, unknown>;
562
574
  }
563
575
 
564
576
  /**
@@ -10,6 +10,7 @@ interface SchemaDefinition {
10
10
  typeName: string;
11
11
  checks?: readonly { kind: string; value?: unknown }[];
12
12
  coerce?: boolean;
13
+ // oxlint-disable-next-line anti-slop/no-shape-in-symbol-names -- Zod v3 defines this property name on object schemas.
13
14
  shape: () => Record<string, SchemaNode>;
14
15
  type: SchemaNode;
15
16
  innerType: SchemaNode;
@@ -32,6 +33,7 @@ interface SchemaChild {
32
33
  path: string;
33
34
  }
34
35
 
36
+ // oxlint-disable-next-line anti-slop/no-known-value-widening -- Runtime Zod type names index this dictionary, including unsupported names outside the known entries.
35
37
  const simpleJSONDomains: Readonly<Record<string, JSONDomain['type']>> = {
36
38
  ZodString: 'string',
37
39
  ZodNumber: 'number',
@@ -109,6 +111,7 @@ function nativeEnumDomains(def: SchemaDefinition): JSONDomain[] {
109
111
  if (!definitionValues || Array.isArray(definitionValues)) {
110
112
  return [];
111
113
  }
114
+ // SAFETY: The preceding guard accepts a non-array object; its values remain unknown until individual definition checks.
112
115
  const object = definitionValues as Record<string, unknown>;
113
116
  const values = Object.keys(object)
114
117
  .filter((key) => {
@@ -429,12 +432,15 @@ export function assertSupportedZodV3Schema(
429
432
  definitions: Record<string, ZodV3Schema> | undefined,
430
433
  ): void {
431
434
  const visited = new Set<SchemaDefinition>();
432
- visit(schema as unknown as SchemaNode, '$', visited);
435
+ // SAFETY: The public Zod v3 input is viewed through the validator's minimal schema-node contract; visit checks its definition and rejects unsupported kinds.
436
+ visit(schema as SchemaNode, '$', visited);
433
437
  for (const [name, definition] of Object.entries(definitions ?? {})) {
434
- visit(definition as unknown as SchemaNode, `$.definitions.${name}`, visited);
438
+ // SAFETY: The public Zod v3 input is viewed through the validator's minimal schema-node contract; visit checks its definition and rejects unsupported kinds.
439
+ visit(definition as SchemaNode, `$.definitions.${name}`, visited);
435
440
  }
436
441
  }
437
442
 
443
+ // oxlint-disable-next-line anti-slop/no-object-parameters -- Serialization validation must inspect any object, including arrays and foreign prototypes, without trusting fields.
438
444
  function assertNoJSONSerializationHook(value: object, path: string): void {
439
445
  for (let current: object | null = value; current !== null; current = Object.getPrototypeOf(current)) {
440
446
  const descriptor = Object.getOwnPropertyDescriptor(current, 'toJSON');