openai 7.5.0 → 7.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (597) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/README.md +46 -2
  3. package/auth/index.d.mts +1 -1
  4. package/auth/index.d.mts.map +1 -1
  5. package/auth/index.d.ts +1 -1
  6. package/auth/index.d.ts.map +1 -1
  7. package/auth/index.js.map +1 -1
  8. package/auth/index.mjs.map +1 -1
  9. package/auth/subject-token-providers.d.mts.map +1 -1
  10. package/auth/subject-token-providers.d.ts.map +1 -1
  11. package/auth/subject-token-providers.js +176 -4
  12. package/auth/subject-token-providers.js.map +1 -1
  13. package/auth/subject-token-providers.mjs +176 -4
  14. package/auth/subject-token-providers.mjs.map +1 -1
  15. package/auth/types.d.mts +17 -0
  16. package/auth/types.d.mts.map +1 -1
  17. package/auth/types.d.ts +17 -0
  18. package/auth/types.d.ts.map +1 -1
  19. package/auth/workload-identity-auth.d.mts.map +1 -1
  20. package/auth/workload-identity-auth.d.ts.map +1 -1
  21. package/auth/workload-identity-auth.js +80 -7
  22. package/auth/workload-identity-auth.js.map +1 -1
  23. package/auth/workload-identity-auth.mjs +80 -7
  24. package/auth/workload-identity-auth.mjs.map +1 -1
  25. package/auth/x509-transport.d.mts +5 -0
  26. package/auth/x509-transport.d.mts.map +1 -0
  27. package/auth/x509-transport.d.ts +5 -0
  28. package/auth/x509-transport.d.ts.map +1 -0
  29. package/auth/x509-transport.js +39 -0
  30. package/auth/x509-transport.js.map +1 -0
  31. package/auth/x509-transport.mjs +36 -0
  32. package/auth/x509-transport.mjs.map +1 -0
  33. package/azure.d.mts +11 -2
  34. package/azure.d.mts.map +1 -1
  35. package/azure.d.ts +11 -2
  36. package/azure.d.ts.map +1 -1
  37. package/azure.js +7 -1
  38. package/azure.js.map +1 -1
  39. package/azure.mjs +7 -1
  40. package/azure.mjs.map +1 -1
  41. package/bedrock.d.mts +6 -2
  42. package/bedrock.d.mts.map +1 -1
  43. package/bedrock.d.ts +6 -2
  44. package/bedrock.d.ts.map +1 -1
  45. package/bedrock.js +34 -4
  46. package/bedrock.js.map +1 -1
  47. package/bedrock.mjs +35 -5
  48. package/bedrock.mjs.map +1 -1
  49. package/beta/realtime/internal-base.d.mts +2 -0
  50. package/beta/realtime/internal-base.d.mts.map +1 -1
  51. package/beta/realtime/internal-base.d.ts +2 -0
  52. package/beta/realtime/internal-base.d.ts.map +1 -1
  53. package/beta/realtime/internal-base.js +15 -0
  54. package/beta/realtime/internal-base.js.map +1 -1
  55. package/beta/realtime/internal-base.mjs +14 -0
  56. package/beta/realtime/internal-base.mjs.map +1 -1
  57. package/beta/realtime/websocket.d.mts +11 -5
  58. package/beta/realtime/websocket.d.mts.map +1 -1
  59. package/beta/realtime/websocket.d.ts +11 -5
  60. package/beta/realtime/websocket.d.ts.map +1 -1
  61. package/beta/realtime/websocket.js +106 -31
  62. package/beta/realtime/websocket.js.map +1 -1
  63. package/beta/realtime/websocket.mjs +107 -32
  64. package/beta/realtime/websocket.mjs.map +1 -1
  65. package/beta/realtime/ws.d.mts +0 -2
  66. package/beta/realtime/ws.d.mts.map +1 -1
  67. package/beta/realtime/ws.d.ts +0 -2
  68. package/beta/realtime/ws.d.ts.map +1 -1
  69. package/beta/realtime/ws.js +24 -5
  70. package/beta/realtime/ws.js.map +1 -1
  71. package/beta/realtime/ws.mjs +25 -6
  72. package/beta/realtime/ws.mjs.map +1 -1
  73. package/client.d.mts +17 -2
  74. package/client.d.mts.map +1 -1
  75. package/client.d.ts +17 -2
  76. package/client.d.ts.map +1 -1
  77. package/client.js +422 -70
  78. package/client.js.map +1 -1
  79. package/client.mjs +423 -71
  80. package/client.mjs.map +1 -1
  81. package/core/EventEmitter.d.mts.map +1 -1
  82. package/core/EventEmitter.d.ts.map +1 -1
  83. package/core/EventEmitter.js +67 -9
  84. package/core/EventEmitter.js.map +1 -1
  85. package/core/EventEmitter.mjs +68 -10
  86. package/core/EventEmitter.mjs.map +1 -1
  87. package/core/streaming.d.mts +1 -0
  88. package/core/streaming.d.mts.map +1 -1
  89. package/core/streaming.d.ts +1 -0
  90. package/core/streaming.d.ts.map +1 -1
  91. package/core/streaming.js +58 -19
  92. package/core/streaming.js.map +1 -1
  93. package/core/streaming.mjs +58 -19
  94. package/core/streaming.mjs.map +1 -1
  95. package/helpers/audio.d.mts +5 -5
  96. package/helpers/audio.d.mts.map +1 -1
  97. package/helpers/audio.d.ts +5 -5
  98. package/helpers/audio.d.ts.map +1 -1
  99. package/helpers/audio.js +93 -22
  100. package/helpers/audio.js.map +1 -1
  101. package/helpers/audio.mjs +93 -22
  102. package/helpers/audio.mjs.map +1 -1
  103. package/helpers/standard-schema.d.mts.map +1 -1
  104. package/helpers/standard-schema.d.ts.map +1 -1
  105. package/helpers/standard-schema.js +34 -14
  106. package/helpers/standard-schema.js.map +1 -1
  107. package/helpers/standard-schema.mjs +35 -15
  108. package/helpers/standard-schema.mjs.map +1 -1
  109. package/helpers/zod-v3-strict-schema.d.mts +7 -0
  110. package/helpers/zod-v3-strict-schema.d.mts.map +1 -0
  111. package/helpers/zod-v3-strict-schema.d.ts +7 -0
  112. package/helpers/zod-v3-strict-schema.d.ts.map +1 -0
  113. package/helpers/zod-v3-strict-schema.js +403 -0
  114. package/helpers/zod-v3-strict-schema.js.map +1 -0
  115. package/helpers/zod-v3-strict-schema.mjs +399 -0
  116. package/helpers/zod-v3-strict-schema.mjs.map +1 -0
  117. package/helpers/zod.d.mts.map +1 -1
  118. package/helpers/zod.d.ts.map +1 -1
  119. package/helpers/zod.js +11 -3
  120. package/helpers/zod.js.map +1 -1
  121. package/helpers/zod.mjs +12 -4
  122. package/helpers/zod.mjs.map +1 -1
  123. package/index.d.mts +1 -1
  124. package/index.d.mts.map +1 -1
  125. package/index.d.ts +1 -1
  126. package/index.d.ts.map +1 -1
  127. package/index.js.map +1 -1
  128. package/index.mjs.map +1 -1
  129. package/internal/assistant-stream-delta.d.mts.map +1 -1
  130. package/internal/assistant-stream-delta.d.ts.map +1 -1
  131. package/internal/assistant-stream-delta.js +28 -8
  132. package/internal/assistant-stream-delta.js.map +1 -1
  133. package/internal/assistant-stream-delta.mjs +28 -8
  134. package/internal/assistant-stream-delta.mjs.map +1 -1
  135. package/internal/auth/x509-token-exchange.d.mts +16 -0
  136. package/internal/auth/x509-token-exchange.d.mts.map +1 -0
  137. package/internal/auth/x509-token-exchange.d.ts +16 -0
  138. package/internal/auth/x509-token-exchange.d.ts.map +1 -0
  139. package/internal/auth/x509-token-exchange.js +246 -0
  140. package/internal/auth/x509-token-exchange.js.map +1 -0
  141. package/internal/auth/x509-token-exchange.mjs +243 -0
  142. package/internal/auth/x509-token-exchange.mjs.map +1 -0
  143. package/internal/auth/x509-transport-capability.d.mts +37 -0
  144. package/internal/auth/x509-transport-capability.d.mts.map +1 -0
  145. package/internal/auth/x509-transport-capability.d.ts +37 -0
  146. package/internal/auth/x509-transport-capability.d.ts.map +1 -0
  147. package/internal/auth/x509-transport-capability.js +169 -0
  148. package/internal/auth/x509-transport-capability.js.map +1 -0
  149. package/internal/auth/x509-transport-capability.mjs +164 -0
  150. package/internal/auth/x509-transport-capability.mjs.map +1 -0
  151. package/internal/auth/x509-transport-registry.d.mts +63 -0
  152. package/internal/auth/x509-transport-registry.d.mts.map +1 -0
  153. package/internal/auth/x509-transport-registry.d.ts +63 -0
  154. package/internal/auth/x509-transport-registry.d.ts.map +1 -0
  155. package/internal/auth/x509-transport-registry.js +53 -0
  156. package/internal/auth/x509-transport-registry.js.map +1 -0
  157. package/internal/auth/x509-transport-registry.mjs +48 -0
  158. package/internal/auth/x509-transport-registry.mjs.map +1 -0
  159. package/internal/auth/x509-transport-state-browser.d.mts +21 -0
  160. package/internal/auth/x509-transport-state-browser.d.mts.map +1 -0
  161. package/internal/auth/x509-transport-state-browser.d.ts +21 -0
  162. package/internal/auth/x509-transport-state-browser.d.ts.map +1 -0
  163. package/internal/auth/x509-transport-state-browser.js +30 -0
  164. package/internal/auth/x509-transport-state-browser.js.map +1 -0
  165. package/internal/auth/x509-transport-state-browser.mjs +27 -0
  166. package/internal/auth/x509-transport-state-browser.mjs.map +1 -0
  167. package/internal/auth/x509-transport-state.cjs +30 -0
  168. package/internal/auth/x509-transport-state.cjs.map +1 -0
  169. package/internal/auth/x509-transport-state.d.cts +21 -0
  170. package/internal/auth/x509-transport-state.d.cts.map +1 -0
  171. package/internal/auth/x509-workload-identity-auth.d.mts +128 -0
  172. package/internal/auth/x509-workload-identity-auth.d.mts.map +1 -0
  173. package/internal/auth/x509-workload-identity-auth.d.ts +128 -0
  174. package/internal/auth/x509-workload-identity-auth.d.ts.map +1 -0
  175. package/internal/auth/x509-workload-identity-auth.js +767 -0
  176. package/internal/auth/x509-workload-identity-auth.js.map +1 -0
  177. package/internal/auth/x509-workload-identity-auth.mjs +757 -0
  178. package/internal/auth/x509-workload-identity-auth.mjs.map +1 -0
  179. package/internal/bedrock.d.mts +2 -0
  180. package/internal/bedrock.d.mts.map +1 -1
  181. package/internal/bedrock.d.ts +2 -0
  182. package/internal/bedrock.d.ts.map +1 -1
  183. package/internal/bedrock.js +169 -5
  184. package/internal/bedrock.js.map +1 -1
  185. package/internal/bedrock.mjs +168 -5
  186. package/internal/bedrock.mjs.map +1 -1
  187. package/internal/data-residency.d.mts +12 -0
  188. package/internal/data-residency.d.mts.map +1 -0
  189. package/internal/data-residency.d.ts +12 -0
  190. package/internal/data-residency.d.ts.map +1 -0
  191. package/internal/data-residency.js +34 -0
  192. package/internal/data-residency.js.map +1 -0
  193. package/internal/data-residency.mjs +30 -0
  194. package/internal/data-residency.mjs.map +1 -0
  195. package/internal/multipart-encoding.d.mts +8 -0
  196. package/internal/multipart-encoding.d.mts.map +1 -0
  197. package/internal/multipart-encoding.d.ts +8 -0
  198. package/internal/multipart-encoding.d.ts.map +1 -0
  199. package/internal/multipart-encoding.js +51 -0
  200. package/internal/multipart-encoding.js.map +1 -0
  201. package/internal/multipart-encoding.mjs +48 -0
  202. package/internal/multipart-encoding.mjs.map +1 -0
  203. package/internal/qs/utils.d.mts.map +1 -1
  204. package/internal/qs/utils.d.ts.map +1 -1
  205. package/internal/qs/utils.js +307 -10
  206. package/internal/qs/utils.js.map +1 -1
  207. package/internal/qs/utils.mjs +307 -10
  208. package/internal/qs/utils.mjs.map +1 -1
  209. package/internal/request-options.d.mts +7 -0
  210. package/internal/request-options.d.mts.map +1 -1
  211. package/internal/request-options.d.ts +7 -0
  212. package/internal/request-options.d.ts.map +1 -1
  213. package/internal/request-options.js +43 -1
  214. package/internal/request-options.js.map +1 -1
  215. package/internal/request-options.mjs +42 -1
  216. package/internal/request-options.mjs.map +1 -1
  217. package/internal/responses/canonical-output-text.js +3 -3
  218. package/internal/responses/canonical-output-text.js.map +1 -1
  219. package/internal/responses/canonical-output-text.mjs +3 -3
  220. package/internal/responses/canonical-output-text.mjs.map +1 -1
  221. package/internal/responses/response-accumulator.d.mts +1 -1
  222. package/internal/responses/response-accumulator.d.mts.map +1 -1
  223. package/internal/responses/response-accumulator.d.ts +1 -1
  224. package/internal/responses/response-accumulator.d.ts.map +1 -1
  225. package/internal/responses/response-accumulator.js +331 -25
  226. package/internal/responses/response-accumulator.js.map +1 -1
  227. package/internal/responses/response-accumulator.mjs +331 -25
  228. package/internal/responses/response-accumulator.mjs.map +1 -1
  229. package/internal/tslib.js +6 -0
  230. package/internal/tslib.mjs +6 -1
  231. package/internal/uploads.d.mts +10 -6
  232. package/internal/uploads.d.mts.map +1 -1
  233. package/internal/uploads.d.ts +10 -6
  234. package/internal/uploads.d.ts.map +1 -1
  235. package/internal/uploads.js +65 -24
  236. package/internal/uploads.js.map +1 -1
  237. package/internal/uploads.mjs +65 -24
  238. package/internal/uploads.mjs.map +1 -1
  239. package/internal/utils/env.d.mts.map +1 -1
  240. package/internal/utils/env.d.ts.map +1 -1
  241. package/internal/utils/env.js +9 -4
  242. package/internal/utils/env.js.map +1 -1
  243. package/internal/utils/env.mjs +9 -4
  244. package/internal/utils/env.mjs.map +1 -1
  245. package/internal/ws.d.mts.map +1 -1
  246. package/internal/ws.d.ts.map +1 -1
  247. package/internal/ws.js +23 -1
  248. package/internal/ws.js.map +1 -1
  249. package/internal/ws.mjs +23 -1
  250. package/internal/ws.mjs.map +1 -1
  251. package/lib/AbstractChatCompletionRunner.d.mts.map +1 -1
  252. package/lib/AbstractChatCompletionRunner.d.ts.map +1 -1
  253. package/lib/AbstractChatCompletionRunner.js +32 -7
  254. package/lib/AbstractChatCompletionRunner.js.map +1 -1
  255. package/lib/AbstractChatCompletionRunner.mjs +34 -9
  256. package/lib/AbstractChatCompletionRunner.mjs.map +1 -1
  257. package/lib/AssistantStream.d.mts.map +1 -1
  258. package/lib/AssistantStream.d.ts.map +1 -1
  259. package/lib/AssistantStream.js +211 -23
  260. package/lib/AssistantStream.js.map +1 -1
  261. package/lib/AssistantStream.mjs +211 -23
  262. package/lib/AssistantStream.mjs.map +1 -1
  263. package/lib/ChatCompletionStream.d.mts +1 -1
  264. package/lib/ChatCompletionStream.d.mts.map +1 -1
  265. package/lib/ChatCompletionStream.d.ts +1 -1
  266. package/lib/ChatCompletionStream.d.ts.map +1 -1
  267. package/lib/ChatCompletionStream.js +1118 -67
  268. package/lib/ChatCompletionStream.js.map +1 -1
  269. package/lib/ChatCompletionStream.mjs +1119 -68
  270. package/lib/ChatCompletionStream.mjs.map +1 -1
  271. package/lib/EventEmitter.d.mts.map +1 -1
  272. package/lib/EventEmitter.d.ts.map +1 -1
  273. package/lib/EventEmitter.js +67 -9
  274. package/lib/EventEmitter.js.map +1 -1
  275. package/lib/EventEmitter.mjs +68 -10
  276. package/lib/EventEmitter.mjs.map +1 -1
  277. package/lib/EventStream.d.mts +4 -0
  278. package/lib/EventStream.d.mts.map +1 -1
  279. package/lib/EventStream.d.ts +4 -0
  280. package/lib/EventStream.d.ts.map +1 -1
  281. package/lib/EventStream.js +1096 -11
  282. package/lib/EventStream.js.map +1 -1
  283. package/lib/EventStream.mjs +1097 -12
  284. package/lib/EventStream.mjs.map +1 -1
  285. package/lib/ResponsesParser.d.mts.map +1 -1
  286. package/lib/ResponsesParser.d.ts.map +1 -1
  287. package/lib/ResponsesParser.js +1 -1
  288. package/lib/ResponsesParser.js.map +1 -1
  289. package/lib/ResponsesParser.mjs +1 -1
  290. package/lib/ResponsesParser.mjs.map +1 -1
  291. package/lib/Util.d.mts +2 -0
  292. package/lib/Util.d.mts.map +1 -1
  293. package/lib/Util.d.ts +2 -0
  294. package/lib/Util.d.ts.map +1 -1
  295. package/lib/Util.js +7 -4
  296. package/lib/Util.js.map +1 -1
  297. package/lib/Util.mjs +7 -4
  298. package/lib/Util.mjs.map +1 -1
  299. package/lib/assistant-run-polling.d.mts +12 -0
  300. package/lib/assistant-run-polling.d.mts.map +1 -0
  301. package/lib/assistant-run-polling.d.ts +12 -0
  302. package/lib/assistant-run-polling.d.ts.map +1 -0
  303. package/lib/assistant-run-polling.js +17 -0
  304. package/lib/assistant-run-polling.js.map +1 -0
  305. package/lib/assistant-run-polling.mjs +14 -0
  306. package/lib/assistant-run-polling.mjs.map +1 -0
  307. package/lib/embeddings.d.mts +18 -0
  308. package/lib/embeddings.d.mts.map +1 -0
  309. package/lib/embeddings.d.ts +18 -0
  310. package/lib/embeddings.d.ts.map +1 -0
  311. package/lib/embeddings.js +50 -0
  312. package/lib/embeddings.js.map +1 -0
  313. package/lib/embeddings.mjs +47 -0
  314. package/lib/embeddings.mjs.map +1 -0
  315. package/lib/file-processing.d.mts +10 -0
  316. package/lib/file-processing.d.mts.map +1 -0
  317. package/lib/file-processing.d.ts +10 -0
  318. package/lib/file-processing.d.ts.map +1 -0
  319. package/lib/file-processing.js +30 -0
  320. package/lib/file-processing.js.map +1 -0
  321. package/lib/file-processing.mjs +27 -0
  322. package/lib/file-processing.mjs.map +1 -0
  323. package/lib/parser.d.mts.map +1 -1
  324. package/lib/parser.d.ts.map +1 -1
  325. package/lib/parser.js +16 -4
  326. package/lib/parser.js.map +1 -1
  327. package/lib/parser.mjs +16 -4
  328. package/lib/parser.mjs.map +1 -1
  329. package/lib/polling.d.mts +20 -0
  330. package/lib/polling.d.mts.map +1 -0
  331. package/lib/polling.d.ts +20 -0
  332. package/lib/polling.d.ts.map +1 -0
  333. package/lib/polling.js +130 -0
  334. package/lib/polling.js.map +1 -0
  335. package/lib/polling.mjs +127 -0
  336. package/lib/polling.mjs.map +1 -0
  337. package/lib/responses/ResponseStream.d.mts.map +1 -1
  338. package/lib/responses/ResponseStream.d.ts.map +1 -1
  339. package/lib/responses/ResponseStream.js +21 -11
  340. package/lib/responses/ResponseStream.js.map +1 -1
  341. package/lib/responses/ResponseStream.mjs +21 -11
  342. package/lib/responses/ResponseStream.mjs.map +1 -1
  343. package/lib/vector-store-polling.d.mts +22 -0
  344. package/lib/vector-store-polling.d.mts.map +1 -0
  345. package/lib/vector-store-polling.d.ts +22 -0
  346. package/lib/vector-store-polling.d.ts.map +1 -0
  347. package/lib/vector-store-polling.js +24 -0
  348. package/lib/vector-store-polling.js.map +1 -0
  349. package/lib/vector-store-polling.mjs +20 -0
  350. package/lib/vector-store-polling.mjs.map +1 -0
  351. package/lib/vector-store-upload.d.mts +17 -0
  352. package/lib/vector-store-upload.d.mts.map +1 -0
  353. package/lib/vector-store-upload.d.ts +17 -0
  354. package/lib/vector-store-upload.d.ts.map +1 -0
  355. package/lib/vector-store-upload.js +37 -0
  356. package/lib/vector-store-upload.js.map +1 -0
  357. package/lib/vector-store-upload.mjs +34 -0
  358. package/lib/vector-store-upload.mjs.map +1 -0
  359. package/lib/webhook-signature.d.mts +15 -0
  360. package/lib/webhook-signature.d.mts.map +1 -0
  361. package/lib/webhook-signature.d.ts +15 -0
  362. package/lib/webhook-signature.d.ts.map +1 -0
  363. package/lib/webhook-signature.js +125 -0
  364. package/lib/webhook-signature.js.map +1 -0
  365. package/lib/webhook-signature.mjs +121 -0
  366. package/lib/webhook-signature.mjs.map +1 -0
  367. package/package.json +14 -1
  368. package/realtime/internal-base.d.mts +2 -0
  369. package/realtime/internal-base.d.mts.map +1 -1
  370. package/realtime/internal-base.d.ts +2 -0
  371. package/realtime/internal-base.d.ts.map +1 -1
  372. package/realtime/internal-base.js +15 -0
  373. package/realtime/internal-base.js.map +1 -1
  374. package/realtime/internal-base.mjs +14 -0
  375. package/realtime/internal-base.mjs.map +1 -1
  376. package/realtime/websocket.d.mts +3 -2
  377. package/realtime/websocket.d.mts.map +1 -1
  378. package/realtime/websocket.d.ts +3 -2
  379. package/realtime/websocket.d.ts.map +1 -1
  380. package/realtime/websocket.js +90 -26
  381. package/realtime/websocket.js.map +1 -1
  382. package/realtime/websocket.mjs +91 -27
  383. package/realtime/websocket.mjs.map +1 -1
  384. package/realtime/ws.d.mts.map +1 -1
  385. package/realtime/ws.d.ts.map +1 -1
  386. package/realtime/ws.js +9 -1
  387. package/realtime/ws.js.map +1 -1
  388. package/realtime/ws.mjs +10 -2
  389. package/realtime/ws.mjs.map +1 -1
  390. package/resources/admin/organization/index.d.mts +2 -2
  391. package/resources/admin/organization/index.d.mts.map +1 -1
  392. package/resources/admin/organization/index.d.ts +2 -2
  393. package/resources/admin/organization/index.d.ts.map +1 -1
  394. package/resources/admin/organization/index.js.map +1 -1
  395. package/resources/admin/organization/index.mjs.map +1 -1
  396. package/resources/admin/organization/organization.d.mts +4 -4
  397. package/resources/admin/organization/organization.d.mts.map +1 -1
  398. package/resources/admin/organization/organization.d.ts +4 -4
  399. package/resources/admin/organization/organization.d.ts.map +1 -1
  400. package/resources/admin/organization/organization.js.map +1 -1
  401. package/resources/admin/organization/organization.mjs.map +1 -1
  402. package/resources/admin/organization/projects/index.d.mts +1 -1
  403. package/resources/admin/organization/projects/index.d.mts.map +1 -1
  404. package/resources/admin/organization/projects/index.d.ts +1 -1
  405. package/resources/admin/organization/projects/index.d.ts.map +1 -1
  406. package/resources/admin/organization/projects/index.js.map +1 -1
  407. package/resources/admin/organization/projects/index.mjs.map +1 -1
  408. package/resources/admin/organization/projects/projects.d.mts +22 -5
  409. package/resources/admin/organization/projects/projects.d.mts.map +1 -1
  410. package/resources/admin/organization/projects/projects.d.ts +22 -5
  411. package/resources/admin/organization/projects/projects.d.ts.map +1 -1
  412. package/resources/admin/organization/projects/projects.js.map +1 -1
  413. package/resources/admin/organization/projects/projects.mjs.map +1 -1
  414. package/resources/admin/organization/usage.d.mts +62 -1
  415. package/resources/admin/organization/usage.d.mts.map +1 -1
  416. package/resources/admin/organization/usage.d.ts +62 -1
  417. package/resources/admin/organization/usage.d.ts.map +1 -1
  418. package/resources/admin/organization/usage.js.map +1 -1
  419. package/resources/admin/organization/usage.mjs.map +1 -1
  420. package/resources/beta/responses/internal-base.d.mts.map +1 -1
  421. package/resources/beta/responses/internal-base.d.ts.map +1 -1
  422. package/resources/beta/responses/internal-base.js +2 -0
  423. package/resources/beta/responses/internal-base.js.map +1 -1
  424. package/resources/beta/responses/internal-base.mjs +2 -0
  425. package/resources/beta/responses/internal-base.mjs.map +1 -1
  426. package/resources/beta/responses/responses.d.mts +9 -12
  427. package/resources/beta/responses/responses.d.mts.map +1 -1
  428. package/resources/beta/responses/responses.d.ts +9 -12
  429. package/resources/beta/responses/responses.d.ts.map +1 -1
  430. package/resources/beta/responses/responses.js.map +1 -1
  431. package/resources/beta/responses/responses.mjs.map +1 -1
  432. package/resources/beta/threads/runs/index.d.mts +1 -1
  433. package/resources/beta/threads/runs/index.d.mts.map +1 -1
  434. package/resources/beta/threads/runs/index.d.ts +1 -1
  435. package/resources/beta/threads/runs/index.d.ts.map +1 -1
  436. package/resources/beta/threads/runs/runs.d.mts.map +1 -1
  437. package/resources/beta/threads/runs/runs.d.ts.map +1 -1
  438. package/resources/beta/threads/runs/runs.js +2 -43
  439. package/resources/beta/threads/runs/runs.js.map +1 -1
  440. package/resources/beta/threads/runs/runs.mjs +2 -43
  441. package/resources/beta/threads/runs/runs.mjs.map +1 -1
  442. package/resources/chat/completions/completions.d.mts +6 -0
  443. package/resources/chat/completions/completions.d.mts.map +1 -1
  444. package/resources/chat/completions/completions.d.ts +6 -0
  445. package/resources/chat/completions/completions.d.ts.map +1 -1
  446. package/resources/chat/completions/completions.js.map +1 -1
  447. package/resources/chat/completions/completions.mjs.map +1 -1
  448. package/resources/embeddings.d.mts.map +1 -1
  449. package/resources/embeddings.d.ts.map +1 -1
  450. package/resources/embeddings.js +2 -36
  451. package/resources/embeddings.js.map +1 -1
  452. package/resources/embeddings.mjs +2 -36
  453. package/resources/embeddings.mjs.map +1 -1
  454. package/resources/files.d.mts.map +1 -1
  455. package/resources/files.d.ts.map +1 -1
  456. package/resources/files.js +2 -15
  457. package/resources/files.js.map +1 -1
  458. package/resources/files.mjs +2 -15
  459. package/resources/files.mjs.map +1 -1
  460. package/resources/images.d.mts +12 -22
  461. package/resources/images.d.mts.map +1 -1
  462. package/resources/images.d.ts +12 -22
  463. package/resources/images.d.ts.map +1 -1
  464. package/resources/realtime/calls.d.mts +23 -1
  465. package/resources/realtime/calls.d.mts.map +1 -1
  466. package/resources/realtime/calls.d.ts +23 -1
  467. package/resources/realtime/calls.d.ts.map +1 -1
  468. package/resources/realtime/calls.js +24 -0
  469. package/resources/realtime/calls.js.map +1 -1
  470. package/resources/realtime/calls.mjs +24 -0
  471. package/resources/realtime/calls.mjs.map +1 -1
  472. package/resources/realtime/index.d.mts +1 -1
  473. package/resources/realtime/index.d.mts.map +1 -1
  474. package/resources/realtime/index.d.ts +1 -1
  475. package/resources/realtime/index.d.ts.map +1 -1
  476. package/resources/realtime/index.js.map +1 -1
  477. package/resources/realtime/index.mjs +1 -1
  478. package/resources/realtime/index.mjs.map +1 -1
  479. package/resources/realtime/realtime.d.mts +5 -4
  480. package/resources/realtime/realtime.d.mts.map +1 -1
  481. package/resources/realtime/realtime.d.ts +5 -4
  482. package/resources/realtime/realtime.d.ts.map +1 -1
  483. package/resources/realtime/realtime.js.map +1 -1
  484. package/resources/realtime/realtime.mjs.map +1 -1
  485. package/resources/responses/internal-base.d.mts.map +1 -1
  486. package/resources/responses/internal-base.d.ts.map +1 -1
  487. package/resources/responses/internal-base.js +2 -0
  488. package/resources/responses/internal-base.js.map +1 -1
  489. package/resources/responses/internal-base.mjs +2 -0
  490. package/resources/responses/internal-base.mjs.map +1 -1
  491. package/resources/responses/responses.d.mts +9 -12
  492. package/resources/responses/responses.d.mts.map +1 -1
  493. package/resources/responses/responses.d.ts +9 -12
  494. package/resources/responses/responses.d.ts.map +1 -1
  495. package/resources/responses/responses.js.map +1 -1
  496. package/resources/responses/responses.mjs.map +1 -1
  497. package/resources/vector-stores/file-batches.d.mts.map +1 -1
  498. package/resources/vector-stores/file-batches.d.ts.map +1 -1
  499. package/resources/vector-stores/file-batches.js +4 -61
  500. package/resources/vector-stores/file-batches.js.map +1 -1
  501. package/resources/vector-stores/file-batches.mjs +4 -61
  502. package/resources/vector-stores/file-batches.mjs.map +1 -1
  503. package/resources/vector-stores/files.d.mts +1 -1
  504. package/resources/vector-stores/files.d.mts.map +1 -1
  505. package/resources/vector-stores/files.d.ts +1 -1
  506. package/resources/vector-stores/files.d.ts.map +1 -1
  507. package/resources/vector-stores/files.js +2 -35
  508. package/resources/vector-stores/files.js.map +1 -1
  509. package/resources/vector-stores/files.mjs +2 -35
  510. package/resources/vector-stores/files.mjs.map +1 -1
  511. package/resources/webhooks/webhooks.d.mts.map +1 -1
  512. package/resources/webhooks/webhooks.d.ts.map +1 -1
  513. package/resources/webhooks/webhooks.js +5 -43
  514. package/resources/webhooks/webhooks.js.map +1 -1
  515. package/resources/webhooks/webhooks.mjs +5 -43
  516. package/resources/webhooks/webhooks.mjs.map +1 -1
  517. package/src/auth/index.ts +6 -1
  518. package/src/auth/subject-token-providers.ts +196 -4
  519. package/src/auth/types.ts +24 -0
  520. package/src/auth/workload-identity-auth.ts +104 -7
  521. package/src/auth/x509-transport.ts +49 -0
  522. package/src/azure.ts +22 -1
  523. package/src/bedrock.ts +49 -5
  524. package/src/beta/realtime/internal-base.ts +15 -0
  525. package/src/beta/realtime/websocket.ts +148 -40
  526. package/src/beta/realtime/ws.ts +31 -13
  527. package/src/client.ts +536 -92
  528. package/src/core/EventEmitter.ts +91 -7
  529. package/src/core/streaming.ts +71 -20
  530. package/src/helpers/audio.ts +93 -22
  531. package/src/helpers/standard-schema.ts +50 -16
  532. package/src/helpers/zod-v3-strict-schema.ts +514 -0
  533. package/src/helpers/zod.ts +17 -4
  534. package/src/index.ts +1 -1
  535. package/src/internal/assistant-stream-delta.ts +33 -10
  536. package/src/internal/auth/x509-token-exchange.ts +310 -0
  537. package/src/internal/auth/x509-transport-capability.ts +219 -0
  538. package/src/internal/auth/x509-transport-registry.ts +118 -0
  539. package/src/internal/auth/x509-transport-state-browser.ts +36 -0
  540. package/src/internal/auth/x509-transport-state.cts +36 -0
  541. package/src/internal/auth/x509-workload-identity-auth.ts +958 -0
  542. package/src/internal/bedrock.ts +182 -5
  543. package/src/internal/data-residency.ts +44 -0
  544. package/src/internal/multipart-encoding.ts +53 -0
  545. package/src/internal/qs/utils.ts +375 -13
  546. package/src/internal/request-options.ts +52 -1
  547. package/src/internal/responses/canonical-output-text.ts +3 -3
  548. package/src/internal/responses/response-accumulator.ts +411 -24
  549. package/src/internal/uploads.ts +81 -26
  550. package/src/internal/utils/env.ts +9 -5
  551. package/src/internal/ws.ts +24 -3
  552. package/src/lib/AbstractChatCompletionRunner.ts +33 -6
  553. package/src/lib/AssistantStream.ts +262 -22
  554. package/src/lib/ChatCompletionStream.ts +1467 -103
  555. package/src/lib/EventEmitter.ts +91 -7
  556. package/src/lib/EventStream.ts +1483 -10
  557. package/src/lib/ResponsesParser.ts +4 -1
  558. package/src/lib/Util.ts +7 -5
  559. package/src/lib/assistant-run-polling.ts +27 -0
  560. package/src/lib/embeddings.ts +65 -0
  561. package/src/lib/file-processing.ts +36 -0
  562. package/src/lib/parser.ts +19 -4
  563. package/src/lib/polling.ts +144 -0
  564. package/src/lib/responses/ResponseStream.ts +22 -10
  565. package/src/lib/vector-store-polling.ts +46 -0
  566. package/src/lib/vector-store-upload.ts +53 -0
  567. package/src/lib/webhook-signature.ts +164 -0
  568. package/src/realtime/internal-base.ts +15 -0
  569. package/src/realtime/websocket.ts +130 -27
  570. package/src/realtime/ws.ts +15 -2
  571. package/src/resources/admin/organization/index.ts +2 -0
  572. package/src/resources/admin/organization/organization.ts +4 -0
  573. package/src/resources/admin/organization/projects/index.ts +1 -0
  574. package/src/resources/admin/organization/projects/projects.ts +37 -4
  575. package/src/resources/admin/organization/usage.ts +83 -0
  576. package/src/resources/beta/responses/internal-base.ts +2 -0
  577. package/src/resources/beta/responses/responses.ts +9 -12
  578. package/src/resources/beta/threads/runs/index.ts +1 -1
  579. package/src/resources/beta/threads/runs/runs.ts +2 -45
  580. package/src/resources/chat/completions/completions.ts +7 -0
  581. package/src/resources/embeddings.ts +2 -42
  582. package/src/resources/files.ts +2 -19
  583. package/src/resources/images.ts +12 -22
  584. package/src/resources/realtime/api.md +1 -0
  585. package/src/resources/realtime/calls.ts +46 -0
  586. package/src/resources/realtime/index.ts +7 -1
  587. package/src/resources/realtime/realtime.ts +5 -3
  588. package/src/resources/responses/internal-base.ts +2 -0
  589. package/src/resources/responses/responses.ts +9 -12
  590. package/src/resources/vector-stores/file-batches.ts +8 -77
  591. package/src/resources/vector-stores/files.ts +3 -43
  592. package/src/resources/webhooks/webhooks.ts +5 -61
  593. package/src/version.ts +1 -1
  594. package/version.d.mts +1 -1
  595. package/version.d.ts +1 -1
  596. package/version.js +1 -1
  597. package/version.mjs +1 -1
@@ -36,7 +36,10 @@ export interface StreamingFile {
36
36
  /** Source chunks read incrementally as the multipart request body is transmitted. */
37
37
  readonly data: StreamingFileInput;
38
38
 
39
- /** Filename sent in the multipart part's `Content-Disposition` header. */
39
+ /**
40
+ * Logical source filename; ordinary uploads send its basename, while Skills can preserve
41
+ * a validated relative directory path.
42
+ */
40
43
  readonly name: string;
41
44
 
42
45
  /** Optional MIME type; defaults to `application/octet-stream` when omitted. */
@@ -51,7 +54,8 @@ export interface StreamingFile {
51
54
  * form data when the request is sent.
52
55
  *
53
56
  * @param data Async-iterable or readable-stream chunks containing text, binary data, or blobs.
54
- * @param name Non-empty filename sent in the multipart request.
57
+ * @param name Non-empty logical/source filename. Ordinary uploads send only its basename; Skills
58
+ * uploads may preserve a validated relative path with normalized forward slashes.
55
59
  * @param options Optional MIME type for the streaming file.
56
60
  * @throws {TypeError} If `name` is empty or the content type contains control characters.
57
61
  */
@@ -117,7 +121,7 @@ export const checkFileSupport = () => {
117
121
  /**
118
122
  * Values accepted by SDK methods that upload multipart files.
119
123
  *
120
- * Supports native files, fetch responses, named blobs, Node.js filesystem read
124
+ * Supports native files, fetch responses, blobs, Node.js filesystem read
121
125
  * streams, async byte sources, web readable streams, and files created with
122
126
  * {@link toStreamingFile}. Use {@link toFile} to materialize compatible content
123
127
  * as a native `File` when buffering the complete upload is acceptable.
@@ -152,7 +156,7 @@ export function makeFile(
152
156
  *
153
157
  * Directory components separated by either `/` or `\\` are discarded unless an
154
158
  * explicitly supplied `name` or `filename` opts into preserving its path. Preserved
155
- * paths use forward slashes. Paths inferred from URLs and filesystem streams always
159
+ * paths must be safe and relative, and use forward slashes. Paths inferred from URLs and filesystem streams
156
160
  * discard their directories.
157
161
  */
158
162
  export function getName(value: any, options?: { stripFilename?: boolean | undefined }): string | undefined {
@@ -160,9 +164,9 @@ export function getName(value: any, options?: { stripFilename?: boolean | undefi
160
164
  return undefined;
161
165
  }
162
166
 
167
+ const name = 'name' in value ? value.name : undefined;
163
168
  const explicitName =
164
- ('name' in value && value.name && String(value.name)) ||
165
- ('filename' in value && value.filename && String(value.filename));
169
+ (name && String(name)) || ('filename' in value && value.filename && String(value.filename));
166
170
  if (explicitName) {
167
171
  return options?.stripFilename === false ? normalizeFilenamePath(explicitName) : basename(explicitName);
168
172
  }
@@ -185,7 +189,11 @@ function basename(value: string): string | undefined {
185
189
  }
186
190
 
187
191
  function normalizeFilenamePath(value: string): string {
188
- return value.replace(/\\/g, '/');
192
+ const normalized = value.replace(/\\/g, '/');
193
+ if (normalized.startsWith('/') || /^[A-Za-z]:/.test(normalized) || normalized.split('/').includes('..')) {
194
+ throw new TypeError('Upload file name must be a safe relative path without parent directory segments');
195
+ }
196
+ return normalized;
189
197
  }
190
198
 
191
199
  /** Identifies objects that expose a callable `Symbol.asyncIterator` method. */
@@ -195,7 +203,7 @@ export const isAsyncIterable = (value: any): value is AsyncIterable<any> =>
195
203
  /**
196
204
  * Converts a request to multipart form data when its body contains an upload.
197
205
  *
198
- * Uploads include files, named blobs, responses, async iterables, readable
206
+ * Uploads include files, blobs, responses, async iterables, readable
199
207
  * streams, and {@link StreamingFile} values anywhere in a nested body. Bodies
200
208
  * containing streaming values are encoded lazily; other uploads use `FormData`.
201
209
  * Requests without uploads are returned unchanged.
@@ -287,7 +295,7 @@ export type CreateFormOptions = {
287
295
  /**
288
296
  * Materializes an object into platform `FormData` after verifying fetch support.
289
297
  *
290
- * Strings, numbers, and booleans become text fields; responses, named blobs,
298
+ * Strings, numbers, and booleans become text fields; responses, blobs,
291
299
  * and async byte sources become file fields. Arrays and nested objects use
292
300
  * bracketed field names, while `undefined` values are omitted.
293
301
  *
@@ -311,9 +319,8 @@ export const createForm = async <T = Record<string, unknown>>(
311
319
  return form;
312
320
  };
313
321
 
314
- // We check for Blob not File because Bun.File doesn't inherit from File,
315
- // but they both inherit from Blob and have a `name` property at runtime.
316
- const isNamedBlob = (value: unknown): value is NamedBlob => value instanceof Blob && 'name' in value;
322
+ // Native files, Bun files, and unnamed upload values all inherit from Blob.
323
+ const isBlob = (value: unknown): value is Blob => value instanceof Blob;
317
324
 
318
325
  const isReadableStream = (value: unknown): value is ReadableStream<BlobPart> =>
319
326
  typeof value === 'object' &&
@@ -331,7 +338,7 @@ const isUploadable = (value: unknown): value is Uploadable =>
331
338
  isAsyncIterable(value) ||
332
339
  isReadableStream(value) ||
333
340
  isStreamingFile(value) ||
334
- isNamedBlob(value));
341
+ isBlob(value));
335
342
 
336
343
  const hasStreamingUploadableValue = (value: unknown): boolean => {
337
344
  if (isStreamingFile(value) || isAsyncIterable(value) || isReadableStream(value)) {
@@ -340,7 +347,7 @@ const hasStreamingUploadableValue = (value: unknown): boolean => {
340
347
  if (Array.isArray(value)) {
341
348
  return value.some(hasStreamingUploadableValue);
342
349
  }
343
- if (value && typeof value === 'object' && !isNamedBlob(value) && !(value instanceof Response)) {
350
+ if (value && typeof value === 'object' && !isBlob(value) && !(value instanceof Response)) {
344
351
  for (const k in value) {
345
352
  if (hasStreamingUploadableValue((value as Record<string, unknown>)[k])) {
346
353
  return true;
@@ -369,12 +376,34 @@ const hasUploadableValue = (value: unknown): boolean => {
369
376
 
370
377
  type FormEntry = { key: string; value: unknown };
371
378
 
379
+ const snapshotPreservedUploadEntries = (
380
+ entries: Iterable<FormEntry>,
381
+ filenames: WeakMap<object, string>,
382
+ ): FormEntry[] => {
383
+ const snapshot: FormEntry[] = [];
384
+ for (const entry of entries) {
385
+ if (isUploadable(entry.value) && !filenames.has(entry.value)) {
386
+ filenames.set(entry.value, getStreamingFileName(entry.value, { stripFilenames: false }));
387
+ }
388
+ snapshot.push(entry);
389
+ }
390
+ return snapshot;
391
+ };
392
+
372
393
  const createStreamingFormRequestOptions = (
373
394
  opts: RequestOptions,
374
395
  options: CreateFormOptions = {},
375
396
  ): RequestOptions => {
397
+ const entries = iterateFormEntries(opts.body);
398
+ const preservedFilenames = options.stripFilenames === false ? new WeakMap<object, string>() : undefined;
399
+ const multipartEntries = preservedFilenames
400
+ ? snapshotPreservedUploadEntries(entries, preservedFilenames)
401
+ : entries;
402
+
376
403
  const boundary = `openai-${Math.random().toString(36).slice(2)}`;
377
- const body = ReadableStreamFrom(iterateMultipartBody(opts.body, boundary, options));
404
+ const body = ReadableStreamFrom(
405
+ iterateMultipartBody(multipartEntries, boundary, options, preservedFilenames),
406
+ );
378
407
 
379
408
  return {
380
409
  ...opts,
@@ -384,13 +413,14 @@ const createStreamingFormRequestOptions = (
384
413
  };
385
414
 
386
415
  async function* iterateMultipartBody(
387
- body: unknown,
416
+ entries: Iterable<FormEntry>,
388
417
  boundary: string,
389
418
  options: CreateFormOptions,
419
+ preservedFilenames?: WeakMap<object, string>,
390
420
  ): AsyncGenerator<Uint8Array> {
391
- for await (const { key, value } of iterateFormEntries(body)) {
421
+ for await (const { key, value } of entries) {
392
422
  if (isUploadable(value)) {
393
- const filename = getStreamingFileName(value, options);
423
+ const filename = preservedFilenames?.get(value) ?? getStreamingFileName(value, options);
394
424
  const type = getStreamingFileType(value);
395
425
  yield encodeUTF8(`--${boundary}\r\n`);
396
426
  yield encodeUTF8(
@@ -410,7 +440,7 @@ async function* iterateMultipartBody(
410
440
  yield encodeUTF8(`--${boundary}--\r\n`);
411
441
  }
412
442
 
413
- async function* iterateFormEntries(body: unknown): AsyncGenerator<FormEntry> {
443
+ function* iterateFormEntries(body: unknown): Generator<FormEntry> {
414
444
  if (!body || typeof body !== 'object') {
415
445
  return;
416
446
  }
@@ -420,7 +450,7 @@ async function* iterateFormEntries(body: unknown): AsyncGenerator<FormEntry> {
420
450
  }
421
451
  }
422
452
 
423
- async function* iterateFormValue(key: string, value: unknown): AsyncGenerator<FormEntry> {
453
+ function* iterateFormValue(key: string, value: unknown): Generator<FormEntry> {
424
454
  if (value === undefined) {
425
455
  return;
426
456
  }
@@ -459,7 +489,9 @@ function getStreamingFileName(value: Uploadable, options: CreateFormOptions): st
459
489
  throw new TypeError('Streaming upload file name must be a non-empty string');
460
490
  }
461
491
 
462
- return options.stripFilenames === false ? normalizeFilenamePath(name) : name;
492
+ return options.stripFilenames === false
493
+ ? normalizeFilenamePath(name)
494
+ : (basename(name) ?? 'unknown_file');
463
495
  }
464
496
 
465
497
  return getName(value, { stripFilename: options.stripFilenames }) ?? 'unknown_file';
@@ -468,7 +500,7 @@ function getStreamingFileName(value: Uploadable, options: CreateFormOptions): st
468
500
  function getStreamingFileType(value: Uploadable): string {
469
501
  let type: string | undefined;
470
502
 
471
- if (isStreamingFile(value) || isNamedBlob(value)) {
503
+ if (isStreamingFile(value) || isBlob(value)) {
472
504
  ({ type } = value);
473
505
  } else if (value instanceof Response) {
474
506
  type = value.headers.get('content-type') ?? undefined;
@@ -555,9 +587,10 @@ const addFormValue = async (
555
587
  if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
556
588
  form.append(key, String(value));
557
589
  } else if (value instanceof Response) {
590
+ const blob = await value.blob();
558
591
  form.append(
559
592
  key,
560
- makeFile([await value.blob()], getName(value, { stripFilename: options.stripFilenames })),
593
+ makeFile([blob], getName(value, { stripFilename: options.stripFilenames }), { type: blob.type }),
561
594
  );
562
595
  } else if (isAsyncIterable(value)) {
563
596
  form.append(
@@ -567,10 +600,32 @@ const addFormValue = async (
567
600
  getName(value, { stripFilename: options.stripFilenames }),
568
601
  ),
569
602
  );
570
- } else if (isNamedBlob(value)) {
571
- form.append(key, value, getName(value, { stripFilename: options.stripFilenames }));
603
+ } else if (isBlob(value)) {
604
+ const filename = getName(value, { stripFilename: options.stripFilenames });
605
+ if (filename === undefined) {
606
+ form.append(key, value);
607
+ } else {
608
+ form.append(key, value, filename);
609
+ }
572
610
  } else if (Array.isArray(value)) {
573
- await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry, options)));
611
+ // Prepare array elements concurrently, then preserve their repeated-field order.
612
+ const entries = await Promise.all(
613
+ value.map(async (entry) => {
614
+ const entryForm = new FormData();
615
+ await addFormValue(entryForm, key + '[]', entry, options);
616
+ return entryForm;
617
+ }),
618
+ );
619
+
620
+ for (const entryForm of entries) {
621
+ if (!entryForm) {
622
+ continue;
623
+ }
624
+
625
+ for (const [entryKey, entryValue] of entryForm.entries()) {
626
+ form.append(entryKey, entryValue);
627
+ }
628
+ }
574
629
  } else if (typeof value === 'object') {
575
630
  await Promise.all(
576
631
  Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop, options)),
@@ -6,11 +6,15 @@
6
6
  * Will return undefined if the environment variable doesn't exist or cannot be accessed.
7
7
  */
8
8
  export const readEnv = (env: string): string | undefined => {
9
- if (typeof (globalThis as any).process !== 'undefined') {
10
- return (globalThis as any).process.env?.[env]?.trim() || undefined;
11
- }
12
- if (typeof (globalThis as any).Deno !== 'undefined') {
13
- return (globalThis as any).Deno.env?.get?.(env)?.trim() || undefined;
9
+ try {
10
+ if (typeof (globalThis as any).process !== 'undefined') {
11
+ return (globalThis as any).process.env?.[env]?.trim() || undefined;
12
+ }
13
+ if (typeof (globalThis as any).Deno !== 'undefined') {
14
+ return (globalThis as any).Deno.env?.get?.(env)?.trim() || undefined;
15
+ }
16
+ } catch {
17
+ return undefined;
14
18
  }
15
19
  return undefined;
16
20
  };
@@ -44,13 +44,34 @@ interface CredentialedWebSocketOptions {
44
44
  headers?: object | null | undefined;
45
45
  }
46
46
 
47
+ const REDIRECT_SAFE_WEBSOCKET_HEADERS = new Set([
48
+ 'connection',
49
+ 'host',
50
+ 'openai-beta',
51
+ 'origin',
52
+ 'sec-websocket-extensions',
53
+ 'sec-websocket-key',
54
+ 'sec-websocket-version',
55
+ 'upgrade',
56
+ 'user-agent',
57
+ 'x-access-level',
58
+ 'x-auth-metadata',
59
+ 'x-auth-tokenization',
60
+ 'x-authentication-metadata',
61
+ 'x-authentication-tokenization',
62
+ 'x-security-policy',
63
+ 'x-token-budget',
64
+ 'x-trace-id',
65
+ ]);
66
+
47
67
  /** Prevents WebSocket redirects from forwarding caller or SDK credentials to another origin. */
48
68
  export function protectWebSocketOptionsFromCredentialRedirects<Options extends CredentialedWebSocketOptions>(
49
69
  options: Options,
50
70
  ): Options {
51
- const hasSensitiveHeader = Object.keys(options.headers ?? {}).some(
52
- (name) => /^(?:authorization|proxy-authorization|cookie)$/iu.test(name) || /api[-_]?key/iu.test(name),
53
- );
71
+ const hasSensitiveHeader = Object.keys(options.headers ?? {}).some((name) => {
72
+ const normalized = name.toLowerCase().split('_').join('-');
73
+ return !REDIRECT_SAFE_WEBSOCKET_HEADERS.has(normalized);
74
+ });
54
75
 
55
76
  if (!options.auth && !hasSensitiveHeader) {
56
77
  return options;
@@ -1,4 +1,4 @@
1
- import { OpenAIError } from '../error';
1
+ import { APIUserAbortError, OpenAIError } from '../error';
2
2
  import type OpenAI from '../index';
3
3
  import type { RequestOptions } from '../internal/request-options';
4
4
  import { uuid4 } from '../internal/utils/uuid';
@@ -127,6 +127,7 @@ export class AbstractChatCompletionRunner<
127
127
  ParsedT,
128
128
  > extends EventStream<EventTypes> {
129
129
  protected _chatCompletions: ParsedChatCompletion<ParsedT>[] = [];
130
+ #completionArrivedBeforeAbort = false;
130
131
  /** Mutable conversation history, including initial input, assistant replies, and tool results. */
131
132
  messages: ChatCompletionMessageParam[] = [];
132
133
 
@@ -134,6 +135,7 @@ export class AbstractChatCompletionRunner<
134
135
  this: AbstractChatCompletionRunner<AbstractChatCompletionRunnerEvents, ParsedT>,
135
136
  chatCompletion: ParsedChatCompletion<ParsedT>,
136
137
  ): ParsedChatCompletion<ParsedT> {
138
+ this.#completionArrivedBeforeAbort = !this.controller.signal.aborted;
137
139
  normalizeToolCallIds(chatCompletion);
138
140
  this._chatCompletions.push(chatCompletion);
139
141
  this._emit('chatCompletion', chatCompletion);
@@ -439,7 +441,11 @@ export class AbstractChatCompletionRunner<
439
441
  functionCalled: boolean;
440
442
  };
441
443
 
444
+ let allowBufferedToolCall = false;
445
+
442
446
  const runToolCall = async (toolCall: ChatCompletionMessageToolCall): Promise<ToolCallResult> => {
447
+ const bufferedToolCall = allowBufferedToolCall;
448
+ allowBufferedToolCall = false;
443
449
  if (toolCall.type !== 'function') {
444
450
  return { message: undefined, functionCalled: false };
445
451
  }
@@ -472,11 +478,20 @@ export class AbstractChatCompletionRunner<
472
478
  try {
473
479
  parsed = await fn.parse(args);
474
480
  } catch (error) {
481
+ if (this.controller.signal.aborted) {
482
+ throw new APIUserAbortError();
483
+ }
475
484
  const content = error instanceof Error ? error.message : String(error);
476
485
  return { message: { role, tool_call_id, content }, functionCalled: false };
477
486
  }
487
+ if (this.controller.signal.aborted) {
488
+ throw new APIUserAbortError();
489
+ }
478
490
  rawContent = await fn.function(parsed, runner, toolContext);
479
491
  } else {
492
+ if (this.controller.signal.aborted && !bufferedToolCall) {
493
+ throw new APIUserAbortError();
494
+ }
480
495
  rawContent = await fn.function(args, runner, toolContext);
481
496
  }
482
497
 
@@ -495,6 +510,10 @@ export class AbstractChatCompletionRunner<
495
510
  },
496
511
  options,
497
512
  );
513
+ // A completed buffered turn retains its first immediate callback for
514
+ // compatibility; delayed parsed callbacks never inherit this exception.
515
+ allowBufferedToolCall = this.controller.signal.aborted && this.#completionArrivedBeforeAbort;
516
+
498
517
  const message = chatCompletion.choices[0]?.message;
499
518
  if (!message) {
500
519
  throw new OpenAIError(`missing message in ChatCompletion response`);
@@ -510,6 +529,9 @@ export class AbstractChatCompletionRunner<
510
529
  if (result.message) {
511
530
  this._addMessage(result.message);
512
531
  }
532
+ if (this.controller.signal.aborted) {
533
+ throw new APIUserAbortError();
534
+ }
513
535
 
514
536
  if (singleFunctionToCall && result.functionCalled) {
515
537
  await afterCompletion?.(chatCompletion, runner);
@@ -519,11 +541,13 @@ export class AbstractChatCompletionRunner<
519
541
  } else {
520
542
  const results = await Promise.allSettled(message.tool_calls.map(runToolCall));
521
543
 
522
- // Wait for every concurrently running tool to settle before surfacing an
523
- // error so tool side effects cannot continue after the runner has ended.
524
- for (const result of results) {
525
- if (result.status === 'rejected') {
526
- throw result.reason;
544
+ // Wait for all side effects. Ordinary failures retain their existing
545
+ // behavior; cancellation preserves every callback that already finished.
546
+ if (!this.controller.signal.aborted) {
547
+ for (const result of results) {
548
+ if (result.status === 'rejected') {
549
+ throw result.reason;
550
+ }
527
551
  }
528
552
  }
529
553
 
@@ -534,6 +558,9 @@ export class AbstractChatCompletionRunner<
534
558
  this._addMessage(result.value.message);
535
559
  }
536
560
  }
561
+ if (this.controller.signal.aborted) {
562
+ throw new APIUserAbortError();
563
+ }
537
564
  }
538
565
 
539
566
  await afterCompletion?.(chatCompletion, runner);