openai 7.15.0 → 7.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (696) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +6 -0
  3. package/_vendor/zod-to-json-schema/Options.d.mts.map +1 -1
  4. package/_vendor/zod-to-json-schema/Options.d.ts.map +1 -1
  5. package/_vendor/zod-to-json-schema/Options.js +2 -0
  6. package/_vendor/zod-to-json-schema/Options.js.map +1 -1
  7. package/_vendor/zod-to-json-schema/Options.mjs +2 -0
  8. package/_vendor/zod-to-json-schema/Options.mjs.map +1 -1
  9. package/_vendor/zod-to-json-schema/parseDef.d.mts.map +1 -1
  10. package/_vendor/zod-to-json-schema/parseDef.d.ts.map +1 -1
  11. package/_vendor/zod-to-json-schema/parseDef.js +1 -0
  12. package/_vendor/zod-to-json-schema/parseDef.js.map +1 -1
  13. package/_vendor/zod-to-json-schema/parseDef.mjs +1 -0
  14. package/_vendor/zod-to-json-schema/parseDef.mjs.map +1 -1
  15. package/_vendor/zod-to-json-schema/parsers/bigint.d.mts.map +1 -1
  16. package/_vendor/zod-to-json-schema/parsers/bigint.d.ts.map +1 -1
  17. package/_vendor/zod-to-json-schema/parsers/bigint.js +2 -0
  18. package/_vendor/zod-to-json-schema/parsers/bigint.js.map +1 -1
  19. package/_vendor/zod-to-json-schema/parsers/bigint.mjs +2 -0
  20. package/_vendor/zod-to-json-schema/parsers/bigint.mjs.map +1 -1
  21. package/_vendor/zod-to-json-schema/parsers/literal.d.mts.map +1 -1
  22. package/_vendor/zod-to-json-schema/parsers/literal.d.ts.map +1 -1
  23. package/_vendor/zod-to-json-schema/parsers/literal.js +1 -0
  24. package/_vendor/zod-to-json-schema/parsers/literal.js.map +1 -1
  25. package/_vendor/zod-to-json-schema/parsers/literal.mjs +1 -0
  26. package/_vendor/zod-to-json-schema/parsers/literal.mjs.map +1 -1
  27. package/_vendor/zod-to-json-schema/parsers/null.d.mts.map +1 -1
  28. package/_vendor/zod-to-json-schema/parsers/null.d.ts.map +1 -1
  29. package/_vendor/zod-to-json-schema/parsers/null.js +1 -0
  30. package/_vendor/zod-to-json-schema/parsers/null.js.map +1 -1
  31. package/_vendor/zod-to-json-schema/parsers/null.mjs +1 -0
  32. package/_vendor/zod-to-json-schema/parsers/null.mjs.map +1 -1
  33. package/_vendor/zod-to-json-schema/parsers/nullable.d.mts.map +1 -1
  34. package/_vendor/zod-to-json-schema/parsers/nullable.d.ts.map +1 -1
  35. package/_vendor/zod-to-json-schema/parsers/nullable.js +4 -0
  36. package/_vendor/zod-to-json-schema/parsers/nullable.js.map +1 -1
  37. package/_vendor/zod-to-json-schema/parsers/nullable.mjs +4 -0
  38. package/_vendor/zod-to-json-schema/parsers/nullable.mjs.map +1 -1
  39. package/_vendor/zod-to-json-schema/parsers/number.d.mts.map +1 -1
  40. package/_vendor/zod-to-json-schema/parsers/number.d.ts.map +1 -1
  41. package/_vendor/zod-to-json-schema/parsers/number.js +2 -0
  42. package/_vendor/zod-to-json-schema/parsers/number.js.map +1 -1
  43. package/_vendor/zod-to-json-schema/parsers/number.mjs +2 -0
  44. package/_vendor/zod-to-json-schema/parsers/number.mjs.map +1 -1
  45. package/_vendor/zod-to-json-schema/parsers/optional.d.mts.map +1 -1
  46. package/_vendor/zod-to-json-schema/parsers/optional.d.ts.map +1 -1
  47. package/_vendor/zod-to-json-schema/parsers/optional.js +6 -7
  48. package/_vendor/zod-to-json-schema/parsers/optional.js.map +1 -1
  49. package/_vendor/zod-to-json-schema/parsers/optional.mjs +6 -7
  50. package/_vendor/zod-to-json-schema/parsers/optional.mjs.map +1 -1
  51. package/_vendor/zod-to-json-schema/parsers/record.d.mts.map +1 -1
  52. package/_vendor/zod-to-json-schema/parsers/record.d.ts.map +1 -1
  53. package/_vendor/zod-to-json-schema/parsers/record.js +2 -0
  54. package/_vendor/zod-to-json-schema/parsers/record.js.map +1 -1
  55. package/_vendor/zod-to-json-schema/parsers/record.mjs +2 -0
  56. package/_vendor/zod-to-json-schema/parsers/record.mjs.map +1 -1
  57. package/_vendor/zod-to-json-schema/parsers/string.d.mts.map +1 -1
  58. package/_vendor/zod-to-json-schema/parsers/string.d.ts.map +1 -1
  59. package/_vendor/zod-to-json-schema/parsers/string.js +1 -0
  60. package/_vendor/zod-to-json-schema/parsers/string.js.map +1 -1
  61. package/_vendor/zod-to-json-schema/parsers/string.mjs +1 -0
  62. package/_vendor/zod-to-json-schema/parsers/string.mjs.map +1 -1
  63. package/_vendor/zod-to-json-schema/parsers/union.d.mts.map +1 -1
  64. package/_vendor/zod-to-json-schema/parsers/union.d.ts.map +1 -1
  65. package/_vendor/zod-to-json-schema/parsers/union.js +3 -0
  66. package/_vendor/zod-to-json-schema/parsers/union.js.map +1 -1
  67. package/_vendor/zod-to-json-schema/parsers/union.mjs +3 -0
  68. package/_vendor/zod-to-json-schema/parsers/union.mjs.map +1 -1
  69. package/_vendor/zod-to-json-schema/util.d.mts.map +1 -1
  70. package/_vendor/zod-to-json-schema/util.d.ts.map +1 -1
  71. package/_vendor/zod-to-json-schema/util.js +1 -0
  72. package/_vendor/zod-to-json-schema/util.js.map +1 -1
  73. package/_vendor/zod-to-json-schema/util.mjs +1 -0
  74. package/_vendor/zod-to-json-schema/util.mjs.map +1 -1
  75. package/_vendor/zod-to-json-schema/zodToJsonSchema.d.mts.map +1 -1
  76. package/_vendor/zod-to-json-schema/zodToJsonSchema.d.ts.map +1 -1
  77. package/_vendor/zod-to-json-schema/zodToJsonSchema.js +2 -0
  78. package/_vendor/zod-to-json-schema/zodToJsonSchema.js.map +1 -1
  79. package/_vendor/zod-to-json-schema/zodToJsonSchema.mjs +2 -0
  80. package/_vendor/zod-to-json-schema/zodToJsonSchema.mjs.map +1 -1
  81. package/auth/subject-token-providers.d.mts.map +1 -1
  82. package/auth/subject-token-providers.d.ts.map +1 -1
  83. package/auth/subject-token-providers.js +6 -1
  84. package/auth/subject-token-providers.js.map +1 -1
  85. package/auth/subject-token-providers.mjs +6 -1
  86. package/auth/subject-token-providers.mjs.map +1 -1
  87. package/auth/workload-identity-auth.d.mts.map +1 -1
  88. package/auth/workload-identity-auth.d.ts.map +1 -1
  89. package/auth/workload-identity-auth.js +9 -0
  90. package/auth/workload-identity-auth.js.map +1 -1
  91. package/auth/workload-identity-auth.mjs +9 -0
  92. package/auth/workload-identity-auth.mjs.map +1 -1
  93. package/auth/x509-transport.d.mts.map +1 -1
  94. package/auth/x509-transport.d.ts.map +1 -1
  95. package/auth/x509-transport.js +11 -0
  96. package/auth/x509-transport.js.map +1 -1
  97. package/auth/x509-transport.mjs +11 -0
  98. package/auth/x509-transport.mjs.map +1 -1
  99. package/azure.d.mts.map +1 -1
  100. package/azure.d.ts.map +1 -1
  101. package/azure.js +3 -0
  102. package/azure.js.map +1 -1
  103. package/azure.mjs +3 -0
  104. package/azure.mjs.map +1 -1
  105. package/bedrock.d.mts.map +1 -1
  106. package/bedrock.d.ts.map +1 -1
  107. package/bedrock.js +14 -6
  108. package/bedrock.js.map +1 -1
  109. package/bedrock.mjs +14 -6
  110. package/bedrock.mjs.map +1 -1
  111. package/beta/realtime/internal-base.d.mts.map +1 -1
  112. package/beta/realtime/internal-base.d.ts.map +1 -1
  113. package/beta/realtime/internal-base.js +1 -0
  114. package/beta/realtime/internal-base.js.map +1 -1
  115. package/beta/realtime/internal-base.mjs +1 -0
  116. package/beta/realtime/internal-base.mjs.map +1 -1
  117. package/beta/realtime/websocket.d.mts.map +1 -1
  118. package/beta/realtime/websocket.d.ts.map +1 -1
  119. package/beta/realtime/websocket.js +9 -1
  120. package/beta/realtime/websocket.js.map +1 -1
  121. package/beta/realtime/websocket.mjs +9 -1
  122. package/beta/realtime/websocket.mjs.map +1 -1
  123. package/beta/realtime/ws.d.mts.map +1 -1
  124. package/beta/realtime/ws.d.ts.map +1 -1
  125. package/beta/realtime/ws.js +3 -0
  126. package/beta/realtime/ws.js.map +1 -1
  127. package/beta/realtime/ws.mjs +3 -0
  128. package/beta/realtime/ws.mjs.map +1 -1
  129. package/client.d.mts +14 -3
  130. package/client.d.mts.map +1 -1
  131. package/client.d.ts +14 -3
  132. package/client.d.ts.map +1 -1
  133. package/client.js +64 -26
  134. package/client.js.map +1 -1
  135. package/client.mjs +64 -26
  136. package/client.mjs.map +1 -1
  137. package/core/EventEmitter.d.mts.map +1 -1
  138. package/core/EventEmitter.d.ts.map +1 -1
  139. package/core/EventEmitter.js +15 -0
  140. package/core/EventEmitter.js.map +1 -1
  141. package/core/EventEmitter.mjs +15 -0
  142. package/core/EventEmitter.mjs.map +1 -1
  143. package/core/streaming.d.mts +1 -0
  144. package/core/streaming.d.mts.map +1 -1
  145. package/core/streaming.d.ts +1 -0
  146. package/core/streaming.d.ts.map +1 -1
  147. package/core/streaming.js +28 -1
  148. package/core/streaming.js.map +1 -1
  149. package/core/streaming.mjs +28 -1
  150. package/core/streaming.mjs.map +1 -1
  151. package/helpers/audio.d.mts.map +1 -1
  152. package/helpers/audio.d.ts.map +1 -1
  153. package/helpers/audio.js +2 -0
  154. package/helpers/audio.js.map +1 -1
  155. package/helpers/audio.mjs +2 -0
  156. package/helpers/audio.mjs.map +1 -1
  157. package/helpers/standard-schema.d.mts.map +1 -1
  158. package/helpers/standard-schema.d.ts.map +1 -1
  159. package/helpers/standard-schema.js +28 -18
  160. package/helpers/standard-schema.js.map +1 -1
  161. package/helpers/standard-schema.mjs +28 -18
  162. package/helpers/standard-schema.mjs.map +1 -1
  163. package/helpers/zod-v3-strict-schema.d.mts.map +1 -1
  164. package/helpers/zod-v3-strict-schema.d.ts.map +1 -1
  165. package/helpers/zod-v3-strict-schema.js +5 -0
  166. package/helpers/zod-v3-strict-schema.js.map +1 -1
  167. package/helpers/zod-v3-strict-schema.mjs +5 -0
  168. package/helpers/zod-v3-strict-schema.mjs.map +1 -1
  169. package/helpers/zod.d.mts.map +1 -1
  170. package/helpers/zod.d.ts.map +1 -1
  171. package/helpers/zod.js +16 -1
  172. package/helpers/zod.js.map +1 -1
  173. package/helpers/zod.mjs +17 -2
  174. package/helpers/zod.mjs.map +1 -1
  175. package/internal/assistant-stream-delta.d.mts.map +1 -1
  176. package/internal/assistant-stream-delta.d.ts.map +1 -1
  177. package/internal/assistant-stream-delta.js +8 -1
  178. package/internal/assistant-stream-delta.js.map +1 -1
  179. package/internal/assistant-stream-delta.mjs +8 -1
  180. package/internal/assistant-stream-delta.mjs.map +1 -1
  181. package/internal/auth/x509-credential-options.d.mts.map +1 -1
  182. package/internal/auth/x509-credential-options.d.ts.map +1 -1
  183. package/internal/auth/x509-credential-options.js +3 -0
  184. package/internal/auth/x509-credential-options.js.map +1 -1
  185. package/internal/auth/x509-credential-options.mjs +3 -0
  186. package/internal/auth/x509-credential-options.mjs.map +1 -1
  187. package/internal/auth/x509-token-exchange.d.mts.map +1 -1
  188. package/internal/auth/x509-token-exchange.d.ts.map +1 -1
  189. package/internal/auth/x509-token-exchange.js +2 -0
  190. package/internal/auth/x509-token-exchange.js.map +1 -1
  191. package/internal/auth/x509-token-exchange.mjs +2 -0
  192. package/internal/auth/x509-token-exchange.mjs.map +1 -1
  193. package/internal/auth/x509-transport-capability.d.mts.map +1 -1
  194. package/internal/auth/x509-transport-capability.d.ts.map +1 -1
  195. package/internal/auth/x509-transport-capability.js +1 -0
  196. package/internal/auth/x509-transport-capability.js.map +1 -1
  197. package/internal/auth/x509-transport-capability.mjs +1 -0
  198. package/internal/auth/x509-transport-capability.mjs.map +1 -1
  199. package/internal/auth/x509-transport-state.mjs +1 -0
  200. package/internal/auth/x509-workload-identity-auth.d.mts.map +1 -1
  201. package/internal/auth/x509-workload-identity-auth.d.ts.map +1 -1
  202. package/internal/auth/x509-workload-identity-auth.js +11 -0
  203. package/internal/auth/x509-workload-identity-auth.js.map +1 -1
  204. package/internal/auth/x509-workload-identity-auth.mjs +11 -0
  205. package/internal/auth/x509-workload-identity-auth.mjs.map +1 -1
  206. package/internal/bedrock.d.mts.map +1 -1
  207. package/internal/bedrock.d.ts.map +1 -1
  208. package/internal/bedrock.js +17 -1
  209. package/internal/bedrock.js.map +1 -1
  210. package/internal/bedrock.mjs +17 -1
  211. package/internal/bedrock.mjs.map +1 -1
  212. package/internal/decoders/line.d.mts.map +1 -1
  213. package/internal/decoders/line.d.ts.map +1 -1
  214. package/internal/decoders/line.js +1 -0
  215. package/internal/decoders/line.js.map +1 -1
  216. package/internal/decoders/line.mjs +1 -0
  217. package/internal/decoders/line.mjs.map +1 -1
  218. package/internal/parse.d.mts +1 -0
  219. package/internal/parse.d.mts.map +1 -1
  220. package/internal/parse.d.ts +1 -0
  221. package/internal/parse.d.ts.map +1 -1
  222. package/internal/parse.js.map +1 -1
  223. package/internal/parse.mjs.map +1 -1
  224. package/internal/provider.d.mts.map +1 -1
  225. package/internal/provider.d.ts.map +1 -1
  226. package/internal/provider.js +3 -0
  227. package/internal/provider.js.map +1 -1
  228. package/internal/provider.mjs +3 -0
  229. package/internal/provider.mjs.map +1 -1
  230. package/internal/qs/stringify.d.mts.map +1 -1
  231. package/internal/qs/stringify.d.ts.map +1 -1
  232. package/internal/qs/stringify.js +3 -0
  233. package/internal/qs/stringify.js.map +1 -1
  234. package/internal/qs/stringify.mjs +3 -0
  235. package/internal/qs/stringify.mjs.map +1 -1
  236. package/internal/qs/utils.d.mts.map +1 -1
  237. package/internal/qs/utils.d.ts.map +1 -1
  238. package/internal/qs/utils.js +15 -3
  239. package/internal/qs/utils.js.map +1 -1
  240. package/internal/qs/utils.mjs +15 -3
  241. package/internal/qs/utils.mjs.map +1 -1
  242. package/internal/realtime-credentials.d.mts +1 -1
  243. package/internal/realtime-credentials.d.ts +1 -1
  244. package/internal/realtime-credentials.js +1 -1
  245. package/internal/realtime-credentials.mjs +1 -1
  246. package/internal/responses/response-accumulator.d.mts.map +1 -1
  247. package/internal/responses/response-accumulator.d.ts.map +1 -1
  248. package/internal/responses/response-accumulator.js +20 -4
  249. package/internal/responses/response-accumulator.js.map +1 -1
  250. package/internal/responses/response-accumulator.mjs +20 -4
  251. package/internal/responses/response-accumulator.mjs.map +1 -1
  252. package/internal/to-file.js.map +1 -1
  253. package/internal/to-file.mjs.map +1 -1
  254. package/internal/uploads.d.mts.map +1 -1
  255. package/internal/uploads.d.ts.map +1 -1
  256. package/internal/uploads.js +10 -0
  257. package/internal/uploads.js.map +1 -1
  258. package/internal/uploads.mjs +10 -0
  259. package/internal/uploads.mjs.map +1 -1
  260. package/internal/utils/abort.d.mts +11 -0
  261. package/internal/utils/abort.d.mts.map +1 -0
  262. package/internal/utils/abort.d.ts +11 -0
  263. package/internal/utils/abort.d.ts.map +1 -0
  264. package/internal/utils/abort.js +94 -0
  265. package/internal/utils/abort.js.map +1 -0
  266. package/internal/utils/abort.mjs +90 -0
  267. package/internal/utils/abort.mjs.map +1 -0
  268. package/internal/utils/bytes.d.mts.map +1 -1
  269. package/internal/utils/bytes.d.ts.map +1 -1
  270. package/internal/utils/bytes.js +2 -0
  271. package/internal/utils/bytes.js.map +1 -1
  272. package/internal/utils/bytes.mjs +2 -0
  273. package/internal/utils/bytes.mjs.map +1 -1
  274. package/internal/utils/path.d.mts.map +1 -1
  275. package/internal/utils/path.d.ts.map +1 -1
  276. package/internal/utils/path.js +2 -0
  277. package/internal/utils/path.js.map +1 -1
  278. package/internal/utils/path.mjs +2 -0
  279. package/internal/utils/path.mjs.map +1 -1
  280. package/internal/utils/sleep.d.mts +1 -1
  281. package/internal/utils/sleep.d.mts.map +1 -1
  282. package/internal/utils/sleep.d.ts +1 -1
  283. package/internal/utils/sleep.d.ts.map +1 -1
  284. package/internal/utils/sleep.js +51 -1
  285. package/internal/utils/sleep.js.map +1 -1
  286. package/internal/utils/sleep.mjs +51 -1
  287. package/internal/utils/sleep.mjs.map +1 -1
  288. package/internal/ws-adapter-browser.d.mts.map +1 -1
  289. package/internal/ws-adapter-browser.d.ts.map +1 -1
  290. package/internal/ws-adapter-browser.js +2 -0
  291. package/internal/ws-adapter-browser.js.map +1 -1
  292. package/internal/ws-adapter-browser.mjs +2 -0
  293. package/internal/ws-adapter-browser.mjs.map +1 -1
  294. package/internal/ws.d.mts +22 -0
  295. package/internal/ws.d.mts.map +1 -1
  296. package/internal/ws.d.ts +22 -0
  297. package/internal/ws.d.ts.map +1 -1
  298. package/internal/ws.js +46 -4
  299. package/internal/ws.js.map +1 -1
  300. package/internal/ws.mjs +44 -4
  301. package/internal/ws.mjs.map +1 -1
  302. package/lib/AbstractChatCompletionRunner.d.mts.map +1 -1
  303. package/lib/AbstractChatCompletionRunner.d.ts.map +1 -1
  304. package/lib/AbstractChatCompletionRunner.js +41 -16
  305. package/lib/AbstractChatCompletionRunner.js.map +1 -1
  306. package/lib/AbstractChatCompletionRunner.mjs +42 -17
  307. package/lib/AbstractChatCompletionRunner.mjs.map +1 -1
  308. package/lib/AssistantStream.d.mts.map +1 -1
  309. package/lib/AssistantStream.d.ts.map +1 -1
  310. package/lib/AssistantStream.js +19 -5
  311. package/lib/AssistantStream.js.map +1 -1
  312. package/lib/AssistantStream.mjs +20 -6
  313. package/lib/AssistantStream.mjs.map +1 -1
  314. package/lib/ChatCompletionRunner.d.mts.map +1 -1
  315. package/lib/ChatCompletionRunner.d.ts.map +1 -1
  316. package/lib/ChatCompletionRunner.js +1 -0
  317. package/lib/ChatCompletionRunner.js.map +1 -1
  318. package/lib/ChatCompletionRunner.mjs +1 -0
  319. package/lib/ChatCompletionRunner.mjs.map +1 -1
  320. package/lib/ChatCompletionStream.d.mts +6 -1
  321. package/lib/ChatCompletionStream.d.mts.map +1 -1
  322. package/lib/ChatCompletionStream.d.ts +6 -1
  323. package/lib/ChatCompletionStream.d.ts.map +1 -1
  324. package/lib/ChatCompletionStream.js +63 -7
  325. package/lib/ChatCompletionStream.js.map +1 -1
  326. package/lib/ChatCompletionStream.mjs +64 -8
  327. package/lib/ChatCompletionStream.mjs.map +1 -1
  328. package/lib/EventEmitter.d.mts.map +1 -1
  329. package/lib/EventEmitter.d.ts.map +1 -1
  330. package/lib/EventEmitter.js +15 -0
  331. package/lib/EventEmitter.js.map +1 -1
  332. package/lib/EventEmitter.mjs +15 -0
  333. package/lib/EventEmitter.mjs.map +1 -1
  334. package/lib/EventStream.d.mts +2 -0
  335. package/lib/EventStream.d.mts.map +1 -1
  336. package/lib/EventStream.d.ts +2 -0
  337. package/lib/EventStream.d.ts.map +1 -1
  338. package/lib/EventStream.js +111 -14
  339. package/lib/EventStream.js.map +1 -1
  340. package/lib/EventStream.mjs +111 -14
  341. package/lib/EventStream.mjs.map +1 -1
  342. package/lib/ResponsesParser.d.mts.map +1 -1
  343. package/lib/ResponsesParser.d.ts.map +1 -1
  344. package/lib/ResponsesParser.js +4 -0
  345. package/lib/ResponsesParser.js.map +1 -1
  346. package/lib/ResponsesParser.mjs +4 -0
  347. package/lib/ResponsesParser.mjs.map +1 -1
  348. package/lib/RunnableFunction.d.mts.map +1 -1
  349. package/lib/RunnableFunction.d.ts.map +1 -1
  350. package/lib/RunnableFunction.js.map +1 -1
  351. package/lib/RunnableFunction.mjs.map +1 -1
  352. package/lib/agents/agent-session-stream.d.mts.map +1 -1
  353. package/lib/agents/agent-session-stream.d.ts.map +1 -1
  354. package/lib/agents/agent-session-stream.js +5 -2
  355. package/lib/agents/agent-session-stream.js.map +1 -1
  356. package/lib/agents/agent-session-stream.mjs +5 -2
  357. package/lib/agents/agent-session-stream.mjs.map +1 -1
  358. package/lib/embeddings.d.mts.map +1 -1
  359. package/lib/embeddings.d.ts.map +1 -1
  360. package/lib/embeddings.js +2 -0
  361. package/lib/embeddings.js.map +1 -1
  362. package/lib/embeddings.mjs +2 -0
  363. package/lib/embeddings.mjs.map +1 -1
  364. package/lib/live/transcript-grouper.d.mts.map +1 -1
  365. package/lib/live/transcript-grouper.d.ts.map +1 -1
  366. package/lib/live/transcript-grouper.js +8 -2
  367. package/lib/live/transcript-grouper.js.map +1 -1
  368. package/lib/live/transcript-grouper.mjs +8 -2
  369. package/lib/live/transcript-grouper.mjs.map +1 -1
  370. package/lib/live/transcript-grouping.d.mts +2 -2
  371. package/lib/live/transcript-grouping.d.mts.map +1 -1
  372. package/lib/live/transcript-grouping.d.ts +2 -2
  373. package/lib/live/transcript-grouping.d.ts.map +1 -1
  374. package/lib/live/transcript-grouping.js +44 -22
  375. package/lib/live/transcript-grouping.js.map +1 -1
  376. package/lib/live/transcript-grouping.mjs +44 -22
  377. package/lib/live/transcript-grouping.mjs.map +1 -1
  378. package/lib/parser.d.mts.map +1 -1
  379. package/lib/parser.d.ts.map +1 -1
  380. package/lib/parser.js +13 -0
  381. package/lib/parser.js.map +1 -1
  382. package/lib/parser.mjs +13 -0
  383. package/lib/parser.mjs.map +1 -1
  384. package/lib/responses/ResponseInputItems.d.mts.map +1 -1
  385. package/lib/responses/ResponseInputItems.d.ts.map +1 -1
  386. package/lib/responses/ResponseInputItems.js +11 -0
  387. package/lib/responses/ResponseInputItems.js.map +1 -1
  388. package/lib/responses/ResponseInputItems.mjs +11 -0
  389. package/lib/responses/ResponseInputItems.mjs.map +1 -1
  390. package/lib/responses/ResponseStream.d.mts.map +1 -1
  391. package/lib/responses/ResponseStream.d.ts.map +1 -1
  392. package/lib/responses/ResponseStream.js +7 -3
  393. package/lib/responses/ResponseStream.js.map +1 -1
  394. package/lib/responses/ResponseStream.mjs +8 -4
  395. package/lib/responses/ResponseStream.mjs.map +1 -1
  396. package/lib/transform.d.mts.map +1 -1
  397. package/lib/transform.d.ts.map +1 -1
  398. package/lib/transform.js +69 -33
  399. package/lib/transform.js.map +1 -1
  400. package/lib/transform.mjs +69 -33
  401. package/lib/transform.mjs.map +1 -1
  402. package/lib/webrtc/connection.d.mts.map +1 -1
  403. package/lib/webrtc/connection.d.ts.map +1 -1
  404. package/lib/webrtc/connection.js +6 -1
  405. package/lib/webrtc/connection.js.map +1 -1
  406. package/lib/webrtc/connection.mjs +6 -1
  407. package/lib/webrtc/connection.mjs.map +1 -1
  408. package/lib/webrtc/data-channel.d.mts.map +1 -1
  409. package/lib/webrtc/data-channel.d.ts.map +1 -1
  410. package/lib/webrtc/data-channel.js +9 -1
  411. package/lib/webrtc/data-channel.js.map +1 -1
  412. package/lib/webrtc/data-channel.mjs +9 -1
  413. package/lib/webrtc/data-channel.mjs.map +1 -1
  414. package/lib/webrtc/subscriptions.d.mts.map +1 -1
  415. package/lib/webrtc/subscriptions.d.ts.map +1 -1
  416. package/lib/webrtc/subscriptions.js +2 -0
  417. package/lib/webrtc/subscriptions.js.map +1 -1
  418. package/lib/webrtc/subscriptions.mjs +2 -0
  419. package/lib/webrtc/subscriptions.mjs.map +1 -1
  420. package/lib/webrtc/types.d.mts.map +1 -1
  421. package/lib/webrtc/types.d.ts.map +1 -1
  422. package/package.json +1 -1
  423. package/providers/bedrock/aws.d.mts.map +1 -1
  424. package/providers/bedrock/aws.d.ts.map +1 -1
  425. package/providers/bedrock/aws.js +4 -0
  426. package/providers/bedrock/aws.js.map +1 -1
  427. package/providers/bedrock/aws.mjs +4 -0
  428. package/providers/bedrock/aws.mjs.map +1 -1
  429. package/realtime/internal-base.d.mts.map +1 -1
  430. package/realtime/internal-base.d.ts.map +1 -1
  431. package/realtime/internal-base.js +1 -0
  432. package/realtime/internal-base.js.map +1 -1
  433. package/realtime/internal-base.mjs +1 -0
  434. package/realtime/internal-base.mjs.map +1 -1
  435. package/realtime/websocket.d.mts.map +1 -1
  436. package/realtime/websocket.d.ts.map +1 -1
  437. package/realtime/websocket.js +9 -1
  438. package/realtime/websocket.js.map +1 -1
  439. package/realtime/websocket.mjs +9 -1
  440. package/realtime/websocket.mjs.map +1 -1
  441. package/realtime/ws.d.mts.map +1 -1
  442. package/realtime/ws.d.ts.map +1 -1
  443. package/realtime/ws.js +3 -0
  444. package/realtime/ws.js.map +1 -1
  445. package/realtime/ws.mjs +3 -0
  446. package/realtime/ws.mjs.map +1 -1
  447. package/resources/beta/agents/agents.d.mts +2 -1
  448. package/resources/beta/agents/agents.d.mts.map +1 -1
  449. package/resources/beta/agents/agents.d.ts +2 -1
  450. package/resources/beta/agents/agents.d.ts.map +1 -1
  451. package/resources/beta/agents/agents.js.map +1 -1
  452. package/resources/beta/agents/agents.mjs.map +1 -1
  453. package/resources/beta/beta.d.mts +2 -2
  454. package/resources/beta/beta.d.mts.map +1 -1
  455. package/resources/beta/beta.d.ts +2 -2
  456. package/resources/beta/beta.d.ts.map +1 -1
  457. package/resources/beta/beta.js.map +1 -1
  458. package/resources/beta/beta.mjs.map +1 -1
  459. package/resources/beta/index.d.mts +1 -1
  460. package/resources/beta/index.d.mts.map +1 -1
  461. package/resources/beta/index.d.ts +1 -1
  462. package/resources/beta/index.d.ts.map +1 -1
  463. package/resources/beta/index.js.map +1 -1
  464. package/resources/beta/index.mjs.map +1 -1
  465. package/resources/beta/responses/index.d.mts +1 -1
  466. package/resources/beta/responses/index.d.mts.map +1 -1
  467. package/resources/beta/responses/index.d.ts +1 -1
  468. package/resources/beta/responses/index.d.ts.map +1 -1
  469. package/resources/beta/responses/index.js.map +1 -1
  470. package/resources/beta/responses/index.mjs.map +1 -1
  471. package/resources/beta/responses/internal-base.d.mts +3 -0
  472. package/resources/beta/responses/internal-base.d.mts.map +1 -1
  473. package/resources/beta/responses/internal-base.d.ts +3 -0
  474. package/resources/beta/responses/internal-base.d.ts.map +1 -1
  475. package/resources/beta/responses/internal-base.js +21 -6
  476. package/resources/beta/responses/internal-base.js.map +1 -1
  477. package/resources/beta/responses/internal-base.mjs +21 -6
  478. package/resources/beta/responses/internal-base.mjs.map +1 -1
  479. package/resources/beta/responses/responses.d.mts +51 -3
  480. package/resources/beta/responses/responses.d.mts.map +1 -1
  481. package/resources/beta/responses/responses.d.ts +51 -3
  482. package/resources/beta/responses/responses.d.ts.map +1 -1
  483. package/resources/beta/responses/responses.js.map +1 -1
  484. package/resources/beta/responses/responses.mjs.map +1 -1
  485. package/resources/beta/responses/ws-base.d.mts +18 -9
  486. package/resources/beta/responses/ws-base.d.mts.map +1 -1
  487. package/resources/beta/responses/ws-base.d.ts +18 -9
  488. package/resources/beta/responses/ws-base.d.ts.map +1 -1
  489. package/resources/beta/responses/ws-base.js +87 -18
  490. package/resources/beta/responses/ws-base.js.map +1 -1
  491. package/resources/beta/responses/ws-base.mjs +89 -20
  492. package/resources/beta/responses/ws-base.mjs.map +1 -1
  493. package/resources/beta/responses/ws.d.mts +3 -0
  494. package/resources/beta/responses/ws.d.mts.map +1 -1
  495. package/resources/beta/responses/ws.d.ts +3 -0
  496. package/resources/beta/responses/ws.d.ts.map +1 -1
  497. package/resources/beta/responses/ws.js +12 -3
  498. package/resources/beta/responses/ws.js.map +1 -1
  499. package/resources/beta/responses/ws.mjs +12 -3
  500. package/resources/beta/responses/ws.mjs.map +1 -1
  501. package/resources/live/forks/internal-base.d.mts +3 -0
  502. package/resources/live/forks/internal-base.d.mts.map +1 -1
  503. package/resources/live/forks/internal-base.d.ts +3 -0
  504. package/resources/live/forks/internal-base.d.ts.map +1 -1
  505. package/resources/live/forks/internal-base.js +21 -5
  506. package/resources/live/forks/internal-base.js.map +1 -1
  507. package/resources/live/forks/internal-base.mjs +21 -5
  508. package/resources/live/forks/internal-base.mjs.map +1 -1
  509. package/resources/live/forks/ws-base.d.mts +13 -8
  510. package/resources/live/forks/ws-base.d.mts.map +1 -1
  511. package/resources/live/forks/ws-base.d.ts +13 -8
  512. package/resources/live/forks/ws-base.d.ts.map +1 -1
  513. package/resources/live/forks/ws-base.js +85 -14
  514. package/resources/live/forks/ws-base.js.map +1 -1
  515. package/resources/live/forks/ws-base.mjs +87 -16
  516. package/resources/live/forks/ws-base.mjs.map +1 -1
  517. package/resources/live/forks/ws.d.mts +1 -0
  518. package/resources/live/forks/ws.d.mts.map +1 -1
  519. package/resources/live/forks/ws.d.ts +1 -0
  520. package/resources/live/forks/ws.d.ts.map +1 -1
  521. package/resources/live/forks/ws.js.map +1 -1
  522. package/resources/live/forks/ws.mjs.map +1 -1
  523. package/resources/live/internal-base.d.mts +3 -0
  524. package/resources/live/internal-base.d.mts.map +1 -1
  525. package/resources/live/internal-base.d.ts +3 -0
  526. package/resources/live/internal-base.d.ts.map +1 -1
  527. package/resources/live/internal-base.js +21 -5
  528. package/resources/live/internal-base.js.map +1 -1
  529. package/resources/live/internal-base.mjs +21 -5
  530. package/resources/live/internal-base.mjs.map +1 -1
  531. package/resources/live/sideband/internal-base.d.mts +3 -0
  532. package/resources/live/sideband/internal-base.d.mts.map +1 -1
  533. package/resources/live/sideband/internal-base.d.ts +3 -0
  534. package/resources/live/sideband/internal-base.d.ts.map +1 -1
  535. package/resources/live/sideband/internal-base.js +21 -5
  536. package/resources/live/sideband/internal-base.js.map +1 -1
  537. package/resources/live/sideband/internal-base.mjs +21 -5
  538. package/resources/live/sideband/internal-base.mjs.map +1 -1
  539. package/resources/live/sideband/ws-base.d.mts +13 -8
  540. package/resources/live/sideband/ws-base.d.mts.map +1 -1
  541. package/resources/live/sideband/ws-base.d.ts +13 -8
  542. package/resources/live/sideband/ws-base.d.ts.map +1 -1
  543. package/resources/live/sideband/ws-base.js +85 -14
  544. package/resources/live/sideband/ws-base.js.map +1 -1
  545. package/resources/live/sideband/ws-base.mjs +87 -16
  546. package/resources/live/sideband/ws-base.mjs.map +1 -1
  547. package/resources/live/sideband/ws.d.mts +1 -0
  548. package/resources/live/sideband/ws.d.mts.map +1 -1
  549. package/resources/live/sideband/ws.d.ts +1 -0
  550. package/resources/live/sideband/ws.d.ts.map +1 -1
  551. package/resources/live/sideband/ws.js.map +1 -1
  552. package/resources/live/sideband/ws.mjs.map +1 -1
  553. package/resources/live/ws-base.d.mts +13 -8
  554. package/resources/live/ws-base.d.mts.map +1 -1
  555. package/resources/live/ws-base.d.ts +13 -8
  556. package/resources/live/ws-base.d.ts.map +1 -1
  557. package/resources/live/ws-base.js +85 -14
  558. package/resources/live/ws-base.js.map +1 -1
  559. package/resources/live/ws-base.mjs +87 -16
  560. package/resources/live/ws-base.mjs.map +1 -1
  561. package/resources/live/ws.d.mts +1 -0
  562. package/resources/live/ws.d.mts.map +1 -1
  563. package/resources/live/ws.d.ts +1 -0
  564. package/resources/live/ws.d.ts.map +1 -1
  565. package/resources/live/ws.js.map +1 -1
  566. package/resources/live/ws.mjs.map +1 -1
  567. package/resources/responses/internal-base.d.mts +3 -0
  568. package/resources/responses/internal-base.d.mts.map +1 -1
  569. package/resources/responses/internal-base.d.ts +3 -0
  570. package/resources/responses/internal-base.d.ts.map +1 -1
  571. package/resources/responses/internal-base.js +21 -6
  572. package/resources/responses/internal-base.js.map +1 -1
  573. package/resources/responses/internal-base.mjs +21 -6
  574. package/resources/responses/internal-base.mjs.map +1 -1
  575. package/resources/responses/responses.d.mts +36 -3
  576. package/resources/responses/responses.d.mts.map +1 -1
  577. package/resources/responses/responses.d.ts +36 -3
  578. package/resources/responses/responses.d.ts.map +1 -1
  579. package/resources/responses/responses.js.map +1 -1
  580. package/resources/responses/responses.mjs.map +1 -1
  581. package/resources/responses/ws-base.d.mts +18 -9
  582. package/resources/responses/ws-base.d.mts.map +1 -1
  583. package/resources/responses/ws-base.d.ts +18 -9
  584. package/resources/responses/ws-base.d.ts.map +1 -1
  585. package/resources/responses/ws-base.js +87 -18
  586. package/resources/responses/ws-base.js.map +1 -1
  587. package/resources/responses/ws-base.mjs +89 -20
  588. package/resources/responses/ws-base.mjs.map +1 -1
  589. package/resources/responses/ws.d.mts +3 -0
  590. package/resources/responses/ws.d.mts.map +1 -1
  591. package/resources/responses/ws.d.ts +3 -0
  592. package/resources/responses/ws.d.ts.map +1 -1
  593. package/resources/responses/ws.js +12 -3
  594. package/resources/responses/ws.js.map +1 -1
  595. package/resources/responses/ws.mjs +12 -3
  596. package/resources/responses/ws.mjs.map +1 -1
  597. package/src/_vendor/zod-to-json-schema/Options.ts +2 -0
  598. package/src/_vendor/zod-to-json-schema/parseDef.ts +1 -0
  599. package/src/_vendor/zod-to-json-schema/parsers/bigint.ts +2 -0
  600. package/src/_vendor/zod-to-json-schema/parsers/literal.ts +1 -0
  601. package/src/_vendor/zod-to-json-schema/parsers/null.ts +1 -0
  602. package/src/_vendor/zod-to-json-schema/parsers/nullable.ts +4 -0
  603. package/src/_vendor/zod-to-json-schema/parsers/number.ts +2 -0
  604. package/src/_vendor/zod-to-json-schema/parsers/optional.ts +6 -7
  605. package/src/_vendor/zod-to-json-schema/parsers/record.ts +2 -0
  606. package/src/_vendor/zod-to-json-schema/parsers/string.ts +1 -0
  607. package/src/_vendor/zod-to-json-schema/parsers/union.ts +3 -0
  608. package/src/_vendor/zod-to-json-schema/util.ts +1 -0
  609. package/src/_vendor/zod-to-json-schema/zodToJsonSchema.ts +3 -1
  610. package/src/auth/subject-token-providers.ts +6 -1
  611. package/src/auth/workload-identity-auth.ts +10 -1
  612. package/src/auth/x509-transport.ts +13 -2
  613. package/src/azure.ts +3 -0
  614. package/src/bedrock.ts +23 -7
  615. package/src/beta/realtime/internal-base.ts +2 -0
  616. package/src/beta/realtime/websocket.ts +11 -1
  617. package/src/beta/realtime/ws.ts +3 -0
  618. package/src/client.ts +78 -22
  619. package/src/core/EventEmitter.ts +15 -0
  620. package/src/core/streaming.ts +30 -2
  621. package/src/helpers/audio.ts +2 -0
  622. package/src/helpers/standard-schema.ts +31 -19
  623. package/src/helpers/zod-v3-strict-schema.ts +8 -2
  624. package/src/helpers/zod.ts +32 -13
  625. package/src/internal/assistant-stream-delta.ts +7 -1
  626. package/src/internal/auth/x509-credential-options.ts +3 -0
  627. package/src/internal/auth/x509-token-exchange.ts +10 -1
  628. package/src/internal/auth/x509-transport-capability.ts +2 -1
  629. package/src/internal/auth/x509-workload-identity-auth.ts +13 -8
  630. package/src/internal/bedrock.ts +15 -0
  631. package/src/internal/decoders/line.ts +1 -0
  632. package/src/internal/parse.ts +1 -0
  633. package/src/internal/provider.ts +3 -0
  634. package/src/internal/qs/stringify.ts +3 -0
  635. package/src/internal/qs/utils.ts +14 -3
  636. package/src/internal/realtime-credentials.ts +1 -1
  637. package/src/internal/responses/response-accumulator.ts +34 -4
  638. package/src/internal/to-file.ts +1 -1
  639. package/src/internal/uploads.ts +11 -1
  640. package/src/internal/utils/abort.ts +116 -0
  641. package/src/internal/utils/bytes.ts +2 -0
  642. package/src/internal/utils/path.ts +2 -0
  643. package/src/internal/utils/sleep.ts +52 -1
  644. package/src/internal/ws-adapter-browser.ts +2 -0
  645. package/src/internal/ws.ts +66 -4
  646. package/src/lib/AbstractChatCompletionRunner.ts +40 -17
  647. package/src/lib/AssistantStream.ts +31 -20
  648. package/src/lib/ChatCompletionRunner.ts +1 -0
  649. package/src/lib/ChatCompletionStream.ts +81 -14
  650. package/src/lib/EventEmitter.ts +15 -0
  651. package/src/lib/EventStream.ts +93 -3
  652. package/src/lib/ResponsesParser.ts +5 -0
  653. package/src/lib/RunnableFunction.ts +4 -1
  654. package/src/lib/agents/agent-session-stream.ts +5 -3
  655. package/src/lib/embeddings.ts +3 -1
  656. package/src/lib/live/transcript-grouper.ts +4 -0
  657. package/src/lib/live/transcript-grouping.ts +59 -27
  658. package/src/lib/parser.ts +16 -2
  659. package/src/lib/responses/ResponseInputItems.ts +11 -0
  660. package/src/lib/responses/ResponseStream.ts +6 -3
  661. package/src/lib/transform.ts +70 -35
  662. package/src/lib/webrtc/connection.ts +5 -1
  663. package/src/lib/webrtc/data-channel.ts +7 -0
  664. package/src/lib/webrtc/subscriptions.ts +3 -0
  665. package/src/lib/webrtc/types.ts +1 -0
  666. package/src/providers/bedrock/aws.ts +5 -1
  667. package/src/realtime/internal-base.ts +2 -0
  668. package/src/realtime/websocket.ts +11 -1
  669. package/src/realtime/ws.ts +3 -0
  670. package/src/resources/beta/agents/agents.ts +2 -0
  671. package/src/resources/beta/beta.ts +2 -0
  672. package/src/resources/beta/index.ts +1 -0
  673. package/src/resources/beta/responses/index.ts +1 -0
  674. package/src/resources/beta/responses/internal-base.ts +24 -6
  675. package/src/resources/beta/responses/responses.ts +58 -0
  676. package/src/resources/beta/responses/ws-base.ts +117 -26
  677. package/src/resources/beta/responses/ws.ts +23 -6
  678. package/src/resources/live/forks/internal-base.ts +24 -5
  679. package/src/resources/live/forks/ws-base.ts +110 -21
  680. package/src/resources/live/forks/ws.ts +2 -0
  681. package/src/resources/live/internal-base.ts +24 -5
  682. package/src/resources/live/sideband/internal-base.ts +24 -5
  683. package/src/resources/live/sideband/ws-base.ts +110 -21
  684. package/src/resources/live/sideband/ws.ts +2 -0
  685. package/src/resources/live/ws-base.ts +110 -21
  686. package/src/resources/live/ws.ts +2 -0
  687. package/src/resources/responses/api.md +1 -0
  688. package/src/resources/responses/internal-base.ts +24 -6
  689. package/src/resources/responses/responses.ts +41 -0
  690. package/src/resources/responses/ws-base.ts +117 -26
  691. package/src/resources/responses/ws.ts +23 -6
  692. package/src/version.ts +1 -1
  693. package/version.d.mts +1 -1
  694. package/version.d.ts +1 -1
  695. package/version.js +1 -1
  696. package/version.mjs +1 -1
package/lib/transform.mjs CHANGED
@@ -99,6 +99,7 @@ function assignSchema(target, ...sources) {
99
99
  * participate.
100
100
  */
101
101
  export function forEachJSONSchemaChild(schema, path, visit) {
102
+ // SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
102
103
  const record = schema;
103
104
  for (const keyword of JSON_SCHEMA_SINGLE_SCHEMA_KEYWORDS) {
104
105
  if (keyword in record) {
@@ -171,10 +172,11 @@ export function toStrictJsonSchema(schema) {
171
172
  return strictSchema;
172
173
  }
173
174
  function stripUndefinedSchemaKeywords(schema, visited = new Set()) {
174
- if (typeof schema === 'boolean' || !isObject(schema) || visited.has(schema)) {
175
+ if (!isObject(schema) || visited.has(schema)) {
175
176
  return;
176
177
  }
177
178
  visited.add(schema);
179
+ // SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
178
180
  const schemaRecord = schema;
179
181
  for (const keyword of Object.keys(schemaRecord)) {
180
182
  if (schemaRecord[keyword] === undefined) {
@@ -182,6 +184,7 @@ function stripUndefinedSchemaKeywords(schema, visited = new Set()) {
182
184
  }
183
185
  }
184
186
  forEachJSONSchemaChild(schema, [], (child) => {
187
+ // SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
185
188
  stripUndefinedSchemaKeywords(child, visited);
186
189
  });
187
190
  }
@@ -257,6 +260,7 @@ function inlineRootRefObject(schema) {
257
260
  }
258
261
  for (const keyword of JSON_SCHEMA_ANNOTATION_KEYWORDS) {
259
262
  if (!(keyword in inheritedAnnotations) && keyword in target) {
263
+ // SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
260
264
  inheritedAnnotations[keyword] = target[keyword];
261
265
  }
262
266
  }
@@ -275,6 +279,7 @@ function inlineRootRefObject(schema) {
275
279
  delete inlined[keyword];
276
280
  }
277
281
  }
282
+ // SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
278
283
  const schemaRecord = schema;
279
284
  for (const keyword of Object.keys(schema)) {
280
285
  delete schemaRecord[keyword];
@@ -313,12 +318,13 @@ function normalizeRootAllOf(schema) {
313
318
  return;
314
319
  }
315
320
  const branch = allOf[0];
316
- if (typeof branch === 'boolean' || !isObject(branch)) {
321
+ if (!isObject(branch)) {
317
322
  return;
318
323
  }
319
324
  const rootMetadata = { ...schema };
320
325
  delete rootMetadata.allOf;
321
326
  const normalized = structuredClone(branch);
327
+ // SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
322
328
  const schemaRecord = schema;
323
329
  for (const keyword of Object.keys(schema)) {
324
330
  delete schemaRecord[keyword];
@@ -347,7 +353,7 @@ function normalizeRootAnyOf(schema) {
347
353
  return false;
348
354
  }
349
355
  const { branch, index: branchIndex } = realBranches[0];
350
- if (typeof branch === 'boolean' || !isObject(branch) || !isObjectOnlySchema(branch, schema)) {
356
+ if (!isObject(branch) || !isObjectOnlySchema(branch, schema)) {
351
357
  return false;
352
358
  }
353
359
  const definitionRenames = planPromotedRootAnyOfDefinitionRenames(schema, branch);
@@ -374,6 +380,7 @@ function normalizeRootAnyOf(schema) {
374
380
  normalized[keyword] = mergedDefinitions;
375
381
  delete rootMetadata[keyword];
376
382
  }
383
+ // SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
377
384
  const schemaRecord = schema;
378
385
  for (const keyword of Object.keys(schema)) {
379
386
  delete schemaRecord[keyword];
@@ -438,13 +445,14 @@ function rewriteLocalRefsIntoPromotedRootAnyOfBranch(root, branchIndex, definiti
438
445
  : '#/' + promotedParts.map(encodeJSONPointerTokenForURIFragment).join('/');
439
446
  };
440
447
  const rewriteRefs = (value) => {
441
- if (typeof value === 'boolean' || !isObject(value)) {
448
+ if (!isObject(value)) {
442
449
  return;
443
450
  }
444
451
  if (typeof value.$ref === 'string') {
445
452
  value.$ref = rewriteRef(value.$ref);
446
453
  }
447
454
  forEachJSONSchemaChild(value, [], (child) => {
455
+ // SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
448
456
  rewriteRefs(child);
449
457
  });
450
458
  };
@@ -472,13 +480,14 @@ function hasOnlyRootRefAndDefinitions(schema) {
472
480
  * Multi-type arrays carry real union semantics and must remain unchanged.
473
481
  */
474
482
  function normalizeSingletonTypeArrays(schema) {
475
- if (typeof schema === 'boolean' || !isObject(schema)) {
483
+ if (!isObject(schema)) {
476
484
  return;
477
485
  }
478
486
  if (Array.isArray(schema.type) && schema.type.length === 1) {
479
487
  schema.type = schema.type[0];
480
488
  }
481
489
  forEachJSONSchemaChild(schema, [], (child) => {
490
+ // SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
482
491
  normalizeSingletonTypeArrays(child);
483
492
  });
484
493
  }
@@ -569,7 +578,7 @@ function ensureStrictJsonSchema(jsonSchema, path, root) {
569
578
  // keywords without an explicit type, so those implicit object shapes need
570
579
  // the same strict handling as type: 'object'. Explicitly open object schemas
571
580
  // cannot be represented in Structured Outputs strict mode.
572
- if (hasObjectShape(jsonSchema)) {
581
+ if (hasObjectConstraints(jsonSchema)) {
573
582
  if (!hasOwn(jsonSchema, 'additionalProperties')) {
574
583
  jsonSchema.additionalProperties = false;
575
584
  }
@@ -583,7 +592,7 @@ function ensureStrictJsonSchema(jsonSchema, path, root) {
583
592
  }
584
593
  // Handle object properties
585
594
  const properties = jsonSchema.properties;
586
- if (hasObjectShape(jsonSchema)) {
595
+ if (hasObjectConstraints(jsonSchema)) {
587
596
  for (const key of required) {
588
597
  if (!isObject(properties) || !hasOwn(properties, key)) {
589
598
  throw new Error(`Object schema at \`${path.join('/') || '<root>'}\` requires property \`${key}\` but does not declare it in \`properties\`.`);
@@ -630,6 +639,7 @@ function ensureStrictJsonSchema(jsonSchema, path, root) {
630
639
  }
631
640
  }
632
641
  normalizeArrayUnionWrapper(jsonSchema, root);
642
+ // SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
633
643
  const schemaRecord = jsonSchema;
634
644
  for (const keyword of JSON_SCHEMA_UNSUPPORTED_SCHEMA_KEYWORDS) {
635
645
  // Optional converter output often keeps undefined placeholders on the
@@ -653,6 +663,7 @@ function ensureStrictJsonSchema(jsonSchema, path, root) {
653
663
  if (typeof child === 'boolean' && (keyword === 'additionalProperties' || keyword === 'additionalItems')) {
654
664
  return;
655
665
  }
666
+ // SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
656
667
  ensureStrictJsonSchema(child, childPath, root);
657
668
  });
658
669
  // Strip `null` defaults as there's no meaningful distinction
@@ -692,6 +703,7 @@ function parseLocalRef(ref) {
692
703
  }
693
704
  return parts;
694
705
  }
706
+ // oxlint-disable-next-line anti-slop/no-unknown-returns -- Resolving untrusted schema references may produce any value; callers perform the schema checks. JSON Schema traversal accepts arbitrary keyword values and validates each node before interpreting it.
695
707
  function resolvePointerPart(resolved, part) {
696
708
  if (Array.isArray(resolved)) {
697
709
  if (!/^(?:0|[1-9]\d*)$/.test(part)) {
@@ -771,7 +783,7 @@ function isSchemaDefinition(value) {
771
783
  return typeof value === 'boolean' || isObject(value);
772
784
  }
773
785
  function isObjectOnlySchema(schema, root, seenRefs = new Set()) {
774
- if (typeof schema === 'boolean' || !isObject(schema)) {
786
+ if (!isObject(schema)) {
775
787
  return false;
776
788
  }
777
789
  if (schema.$ref !== undefined) {
@@ -799,7 +811,7 @@ function isObjectOnlySchema(schema, root, seenRefs = new Set()) {
799
811
  (Array.isArray(schema.type) && schema.type.length === 1 && schema.type[0] === 'object'));
800
812
  }
801
813
  function isArrayOnlySchema(schema, root, seenRefs = new Set()) {
802
- if (typeof schema === 'boolean' || !isObject(schema)) {
814
+ if (!isObject(schema)) {
803
815
  return false;
804
816
  }
805
817
  if (schema.$ref !== undefined) {
@@ -837,6 +849,7 @@ export function hasOnlyRefAndAnnotations(schema) {
837
849
  JSON_SCHEMA_ANNOTATION_KEYWORDS.has(keyword));
838
850
  }
839
851
  function hasOnlyAnnotationSiblings(schema, keyword) {
852
+ // SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
840
853
  const schemaRecord = schema;
841
854
  return Object.keys(schema).every(
842
855
  // Definition maps do not add sibling validation constraints. Keep them
@@ -865,7 +878,7 @@ function hasOnlyRootAnyOfMetadataSiblings(schema) {
865
878
  function hasObjectKeywords(schema) {
866
879
  return Object.keys(schema).some((keyword) => JSON_SCHEMA_OBJECT_KEYWORDS.has(keyword));
867
880
  }
868
- function hasObjectShape(schema) {
881
+ function hasObjectConstraints(schema) {
869
882
  const typ = schema.type;
870
883
  return (typ === 'object' ||
871
884
  (Array.isArray(typ) && typ.includes('object')) ||
@@ -887,7 +900,7 @@ function normalizeObjectUnionWrapper(jsonSchema, path, root) {
887
900
  if (hasEmptyRequired) {
888
901
  delete jsonSchema.required;
889
902
  }
890
- if (!hasObjectShape(jsonSchema)) {
903
+ if (!hasObjectConstraints(jsonSchema)) {
891
904
  return;
892
905
  }
893
906
  const hasOwnObjectConstraints = Object.keys(jsonSchema).some((keyword) => JSON_SCHEMA_OBJECT_KEYWORDS.has(keyword));
@@ -932,7 +945,7 @@ function normalizeAnyOfFalseBranches(jsonSchema) {
932
945
  */
933
946
  export function assertNoNestedSchemaIds(schema) {
934
947
  const visit = (value, path) => {
935
- if (typeof value === 'boolean' || !isObject(value)) {
948
+ if (!isObject(value)) {
936
949
  return;
937
950
  }
938
951
  if (path.length > 0 && value.$id !== undefined) {
@@ -941,6 +954,7 @@ export function assertNoNestedSchemaIds(schema) {
941
954
  ' establishes a separate JSON Schema resource scope and cannot be represented in strict Structured Outputs.');
942
955
  }
943
956
  forEachJSONSchemaChild(value, path, (child, childPath) => {
957
+ // SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
944
958
  visit(child, childPath);
945
959
  });
946
960
  };
@@ -1006,13 +1020,14 @@ export function rewriteLocalRefsIntoMovedOneOfBranches(root) {
1006
1020
  return changed ? '#/' + parts.map(encodeJSONPointerTokenForURIFragment).join('/') : ref;
1007
1021
  };
1008
1022
  const rewriteRefs = (value) => {
1009
- if (typeof value === 'boolean' || !isObject(value)) {
1023
+ if (!isObject(value)) {
1010
1024
  return;
1011
1025
  }
1012
1026
  if (typeof value.$ref === 'string') {
1013
1027
  value.$ref = rewriteRef(value.$ref);
1014
1028
  }
1015
1029
  forEachJSONSchemaChild(value, [], (child) => {
1030
+ // SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
1016
1031
  rewriteRefs(child);
1017
1032
  });
1018
1033
  };
@@ -1033,9 +1048,8 @@ function rewriteLocalRefsIntoFilteredAnyOfBranches(root) {
1033
1048
  let resolved = root;
1034
1049
  let changed = false;
1035
1050
  for (const [index, part] of originalParts.entries()) {
1036
- const resolvedRecord = typeof resolved === 'object' && resolved !== null && !Array.isArray(resolved)
1037
- ? resolved
1038
- : undefined;
1051
+ // SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
1052
+ const resolvedRecord = isObject(resolved) ? resolved : undefined;
1039
1053
  if (part === 'anyOf' &&
1040
1054
  index < originalParts.length - 1 &&
1041
1055
  resolvedRecord !== undefined &&
@@ -1073,13 +1087,14 @@ function rewriteLocalRefsIntoFilteredAnyOfBranches(root) {
1073
1087
  return changed ? '#/' + rewrittenParts.map(encodeJSONPointerTokenForURIFragment).join('/') : ref;
1074
1088
  };
1075
1089
  const rewriteRefs = (value) => {
1076
- if (typeof value === 'boolean' || !isObject(value)) {
1090
+ if (!isObject(value)) {
1077
1091
  return;
1078
1092
  }
1079
1093
  if (typeof value.$ref === 'string') {
1080
1094
  value.$ref = rewriteRef(value.$ref);
1081
1095
  }
1082
1096
  forEachJSONSchemaChild(value, [], (child) => {
1097
+ // SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
1083
1098
  rewriteRefs(child);
1084
1099
  });
1085
1100
  };
@@ -1093,7 +1108,7 @@ function rewriteLocalRefsIntoFilteredAnyOfBranches(root) {
1093
1108
  function preserveAllOfRefTargets(root, rootOnly = false) {
1094
1109
  const refsToPreserve = new Set();
1095
1110
  const collectRefs = (value) => {
1096
- if (typeof value === 'boolean' || !isObject(value)) {
1111
+ if (!isObject(value)) {
1097
1112
  return;
1098
1113
  }
1099
1114
  if (typeof value.$ref === 'string' && refTargetsAllOfBranch(root, value.$ref)) {
@@ -1103,6 +1118,7 @@ function preserveAllOfRefTargets(root, rootOnly = false) {
1103
1118
  }
1104
1119
  }
1105
1120
  forEachJSONSchemaChild(value, [], (child) => {
1121
+ // SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
1106
1122
  collectRefs(child);
1107
1123
  });
1108
1124
  };
@@ -1118,6 +1134,7 @@ function preserveAllOfRefTargets(root, rootOnly = false) {
1118
1134
  let aliasIndex = 0;
1119
1135
  for (const ref of refsToPreserve) {
1120
1136
  const target = resolveLocalRef(root, ref);
1137
+ // oxlint-disable-next-line anti-slop/no-known-value-widening -- Local references require runtime schema validation even when the static return type is narrower.
1121
1138
  if (!isSchemaDefinition(target)) {
1122
1139
  if (rootOnly) {
1123
1140
  continue;
@@ -1132,13 +1149,14 @@ function preserveAllOfRefTargets(root, rootOnly = false) {
1132
1149
  rewrittenRefs.set(ref, '#/$defs/' + escapeJSONPointerToken(alias));
1133
1150
  }
1134
1151
  const rewriteRefs = (value) => {
1135
- if (typeof value === 'boolean' || !isObject(value)) {
1152
+ if (!isObject(value)) {
1136
1153
  return;
1137
1154
  }
1138
1155
  if (typeof value.$ref === 'string') {
1139
1156
  value.$ref = rewrittenRefs.get(value.$ref) ?? value.$ref;
1140
1157
  }
1141
1158
  forEachJSONSchemaChild(value, [], (child) => {
1159
+ // SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
1142
1160
  rewriteRefs(child);
1143
1161
  });
1144
1162
  };
@@ -1155,7 +1173,7 @@ function preserveDiscardedAllOfPropertyRefTargets(root, discardedPaths) {
1155
1173
  }
1156
1174
  const refsToPreserve = new Set();
1157
1175
  const collectRefs = (value) => {
1158
- if (typeof value === 'boolean' || !isObject(value)) {
1176
+ if (!isObject(value)) {
1159
1177
  return;
1160
1178
  }
1161
1179
  if (typeof value.$ref === 'string') {
@@ -1167,6 +1185,7 @@ function preserveDiscardedAllOfPropertyRefTargets(root, discardedPaths) {
1167
1185
  }
1168
1186
  }
1169
1187
  forEachJSONSchemaChild(value, [], (child) => {
1188
+ // SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
1170
1189
  collectRefs(child);
1171
1190
  });
1172
1191
  };
@@ -1182,6 +1201,7 @@ function preserveDiscardedAllOfPropertyRefTargets(root, discardedPaths) {
1182
1201
  let aliasIndex = 0;
1183
1202
  for (const ref of refsToPreserve) {
1184
1203
  const target = resolveLocalRef(root, ref);
1204
+ // oxlint-disable-next-line anti-slop/no-known-value-widening -- Validate referenced schema values at runtime before preserving them under generated definitions.
1185
1205
  if (!isSchemaDefinition(target)) {
1186
1206
  throw new Error('Local $ref cannot be preserved before allOf property removal: ' + JSON.stringify(ref));
1187
1207
  }
@@ -1193,20 +1213,21 @@ function preserveDiscardedAllOfPropertyRefTargets(root, discardedPaths) {
1193
1213
  rewrittenRefs.set(ref, '#/$defs/' + escapeJSONPointerToken(alias));
1194
1214
  }
1195
1215
  const rewriteRefs = (value) => {
1196
- if (typeof value === 'boolean' || !isObject(value)) {
1216
+ if (!isObject(value)) {
1197
1217
  return;
1198
1218
  }
1199
1219
  if (typeof value.$ref === 'string') {
1200
1220
  value.$ref = rewrittenRefs.get(value.$ref) ?? value.$ref;
1201
1221
  }
1202
1222
  forEachJSONSchemaChild(value, [], (child) => {
1223
+ // SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
1203
1224
  rewriteRefs(child);
1204
1225
  });
1205
1226
  };
1206
1227
  rewriteRefs(root);
1207
1228
  }
1208
1229
  function validateRefSchemas(schema, path, root) {
1209
- if (typeof schema === 'boolean' || !isObject(schema)) {
1230
+ if (!isObject(schema)) {
1210
1231
  return;
1211
1232
  }
1212
1233
  const ref = schema.$ref;
@@ -1218,6 +1239,7 @@ function validateRefSchemas(schema, path, root) {
1218
1239
  throw new Error(`External $ref at \`${path.join('/') || '<root>'}\` is not supported in strict Structured Outputs: ${JSON.stringify(ref)}`);
1219
1240
  }
1220
1241
  const resolved = resolveLocalRef(root, ref);
1242
+ // oxlint-disable-next-line anti-slop/no-known-value-widening -- Untrusted local references must pass the runtime schema predicate before normalization.
1221
1243
  if (resolved === undefined || !isSchemaDefinition(resolved)) {
1222
1244
  throw new Error(`Local $ref at \`${path.join('/') || '<root>'}\` does not resolve to an object or boolean schema: ${JSON.stringify(ref)}`);
1223
1245
  }
@@ -1229,6 +1251,7 @@ function validateRefSchemas(schema, path, root) {
1229
1251
  }
1230
1252
  }
1231
1253
  forEachJSONSchemaChild(schema, path, (child, childPath) => {
1254
+ // SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
1232
1255
  validateRefSchemas(child, childPath, root);
1233
1256
  });
1234
1257
  }
@@ -1251,7 +1274,7 @@ function resolveObjectAllOfBranch(schema, root, normalizing) {
1251
1274
  }
1252
1275
  seenRefs.add(ref);
1253
1276
  const target = resolveLocalRef(root, ref);
1254
- if (typeof target === 'boolean' || !isObject(target)) {
1277
+ if (!isObject(target)) {
1255
1278
  return undefined;
1256
1279
  }
1257
1280
  const targetPath = parseLocalRef(ref);
@@ -1279,7 +1302,7 @@ function resolveObjectAllOfBranch(schema, root, normalizing) {
1279
1302
  }
1280
1303
  }
1281
1304
  function normalizeObjectAllOfBranches(schema, path, root, normalizing = new Set()) {
1282
- if (typeof schema === 'boolean' || !isObject(schema)) {
1305
+ if (!isObject(schema)) {
1283
1306
  return;
1284
1307
  }
1285
1308
  if (normalizing.has(schema)) {
@@ -1289,6 +1312,7 @@ function normalizeObjectAllOfBranches(schema, path, root, normalizing = new Set(
1289
1312
  try {
1290
1313
  while (true) {
1291
1314
  forEachJSONSchemaChild(schema, path, (child, childPath) => {
1315
+ // SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
1292
1316
  normalizeObjectAllOfBranches(child, childPath, root, normalizing);
1293
1317
  });
1294
1318
  // Intersections are associative, so normalize nested object
@@ -1328,13 +1352,14 @@ export function normalizeObjectAllOfForExclusivity(schema, root) {
1328
1352
  return undefined;
1329
1353
  }
1330
1354
  const branch = allOf[0];
1331
- if (typeof branch === 'boolean' || !isObject(branch)) {
1355
+ if (!isObject(branch)) {
1332
1356
  return undefined;
1333
1357
  }
1334
1358
  const siblings = { ...normalized };
1335
1359
  delete siblings.allOf;
1336
1360
  const flattened = structuredClone(branch);
1337
1361
  for (const keyword of Object.keys(normalized)) {
1362
+ // SAFETY: Only an enumerated own keyword is deleted from this mutable schema object before installing its normalized replacement.
1338
1363
  delete normalized[keyword];
1339
1364
  }
1340
1365
  assignSchema(normalized, flattened, siblings);
@@ -1371,23 +1396,23 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
1371
1396
  }
1372
1397
  return true;
1373
1398
  }
1374
- const parentHasObjectShape = hasObjectShapeWithoutAllOf(jsonSchema);
1399
+ const parentIsMergeableObject = isMergeableObjectSchema(jsonSchema);
1375
1400
  const resolvedEntries = allOf.map((entry) => isObject(entry) ? resolveObjectAllOfBranch(entry, root, normalizing) : undefined);
1376
1401
  const objectBranches = resolvedEntries
1377
1402
  .map((entry) => entry?.schema)
1378
- .filter((entry) => entry !== undefined && hasObjectShapeWithoutAllOf(entry));
1379
- if (!parentHasObjectShape && objectBranches.length === 0) {
1403
+ .filter((entry) => entry !== undefined && isMergeableObjectSchema(entry));
1404
+ if (!parentIsMergeableObject && objectBranches.length === 0) {
1380
1405
  return false;
1381
1406
  }
1382
1407
  // A lone object branch with no object-valued parent is handled by the
1383
1408
  // existing safe single-allOf flattening path below.
1384
- if (!parentHasObjectShape && allOf.length === 1) {
1409
+ if (!parentIsMergeableObject && allOf.length === 1) {
1385
1410
  return false;
1386
1411
  }
1387
1412
  const fail = () => {
1388
1413
  throw new Error(`Object allOf at \`${path.join('/') || '<root>'}\` cannot be merged without changing Draft 7 validation.`);
1389
1414
  };
1390
- if (!parentHasObjectShape &&
1415
+ if (!parentIsMergeableObject &&
1391
1416
  ['additionalProperties', 'properties', 'required', 'type'].some((keyword) => keyword in jsonSchema)) {
1392
1417
  fail();
1393
1418
  }
@@ -1401,7 +1426,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
1401
1426
  }
1402
1427
  }
1403
1428
  const branches = [];
1404
- if (parentHasObjectShape) {
1429
+ if (parentIsMergeableObject) {
1405
1430
  branches.push({ schema: jsonSchema, sourcePath: path });
1406
1431
  }
1407
1432
  for (const [index, entry] of allOf.entries()) {
@@ -1417,7 +1442,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
1417
1442
  // branch were preserved under stable root definitions before this merge,
1418
1443
  // so a valid definitions-only branch can now be discarded like an
1419
1444
  // annotation-only branch.
1420
- if (hasObjectShapeWithoutAllOf(branch)) {
1445
+ if (isMergeableObjectSchema(branch)) {
1421
1446
  branches.push({
1422
1447
  schema: branch,
1423
1448
  sourcePath: branch === entry ? [...path, 'allOf', String(index)] : undefined,
@@ -1428,6 +1453,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
1428
1453
  }
1429
1454
  }
1430
1455
  const merged = {};
1456
+ // SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
1431
1457
  for (const keyword of ['$defs', 'definitions']) {
1432
1458
  if (jsonSchema[keyword] !== undefined) {
1433
1459
  merged[keyword] = jsonSchema[keyword];
@@ -1436,10 +1462,13 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
1436
1462
  if (path.length === 0) {
1437
1463
  for (const keyword of JSON_SCHEMA_ROOT_METADATA_KEYWORDS) {
1438
1464
  if (keyword in jsonSchema) {
1465
+ // SAFETY: Root annotation keywords are copied unchanged between schema objects; the record views preserve their unknown values.
1466
+ // oxlint-disable-next-line anti-slop/no-known-value-widening -- Root annotation keywords are copied dynamically; JSONSchema has no index signature for extension fields. Metadata merging preserves arbitrary annotation/default values under the selected schema keywords.
1439
1467
  merged[keyword] = jsonSchema[keyword];
1440
1468
  }
1441
1469
  }
1442
1470
  }
1471
+ // SAFETY: This fresh null-prototype dictionary receives only JSON schema definitions while merging the validated property maps.
1443
1472
  const mergedProperties = Object.create(null);
1444
1473
  const mergedRequired = new Set();
1445
1474
  const closedPropertySets = [];
@@ -1457,6 +1486,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
1457
1486
  // first value (the outer schema, then earlier branches) instead of
1458
1487
  // rejecting an otherwise exactly mergeable intersection.
1459
1488
  if (!(keyword in merged)) {
1489
+ // SAFETY: These annotation keywords are copied unchanged from the validated branch; arbitrary values are preserved without narrowing.
1460
1490
  merged[keyword] = schema[keyword];
1461
1491
  }
1462
1492
  }
@@ -1475,6 +1505,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
1475
1505
  if (keyword === 'allOf' && branch === jsonSchema) {
1476
1506
  continue;
1477
1507
  }
1508
+ // SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
1478
1509
  if ((keyword === '$defs' || keyword === 'definitions') &&
1479
1510
  isObject(branch[keyword])) {
1480
1511
  continue;
@@ -1559,6 +1590,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
1559
1590
  if (collapsesToNull) {
1560
1591
  merged.type = 'null';
1561
1592
  for (const keyword of Object.keys(jsonSchema)) {
1593
+ // SAFETY: Only an enumerated own keyword is deleted from this mutable schema object before installing its normalized replacement.
1562
1594
  delete jsonSchema[keyword];
1563
1595
  }
1564
1596
  assignSchema(jsonSchema, merged);
@@ -1588,18 +1620,20 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
1588
1620
  merged.additionalProperties = false;
1589
1621
  }
1590
1622
  for (const keyword of Object.keys(jsonSchema)) {
1623
+ // SAFETY: Only an enumerated own keyword is deleted from this mutable schema object before installing its normalized replacement.
1591
1624
  delete jsonSchema[keyword];
1592
1625
  }
1593
1626
  assignSchema(jsonSchema, merged);
1594
1627
  return true;
1595
1628
  }
1596
- function hasObjectShapeWithoutAllOf(schema) {
1629
+ function isMergeableObjectSchema(schema) {
1597
1630
  if (schema.type !== undefined) {
1598
1631
  return isMergeableObjectType(schema.type);
1599
1632
  }
1600
1633
  return Object.keys(schema).some((keyword) => JSON_SCHEMA_OBJECT_KEYWORDS.has(keyword));
1601
1634
  }
1602
1635
  function hasOnlyNeutralAllOfBranchKeywords(schema) {
1636
+ // SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
1603
1637
  const schemaRecord = schema;
1604
1638
  return Object.keys(schema).every((keyword) => JSON_SCHEMA_ANNOTATION_KEYWORDS.has(keyword) ||
1605
1639
  ((keyword === '$defs' || keyword === 'definitions') && isObject(schemaRecord[keyword])));
@@ -1621,7 +1655,9 @@ function schemasEqual(left, right) {
1621
1655
  if (typeof left !== 'object' || left === null || typeof right !== 'object' || right === null) {
1622
1656
  return false;
1623
1657
  }
1658
+ // SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
1624
1659
  const leftRecord = left;
1660
+ // SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
1625
1661
  const rightRecord = right;
1626
1662
  const leftKeys = Object.keys(leftRecord);
1627
1663
  const rightKeys = Object.keys(rightRecord);