@vertesia/common 1.5.0-dev.20260725.083715Z → 1.5.0-dev.20260806.125520Z

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 (552) hide show
  1. package/lib/Progress.d.ts.map +1 -1
  2. package/lib/Progress.js.map +1 -1
  3. package/lib/access-control-values.d.ts +98 -0
  4. package/lib/access-control-values.d.ts.map +1 -0
  5. package/lib/access-control-values.js +101 -0
  6. package/lib/access-control-values.js.map +1 -0
  7. package/lib/access-control.d.ts +22 -119
  8. package/lib/access-control.d.ts.map +1 -1
  9. package/lib/access-control.js +6 -78
  10. package/lib/access-control.js.map +1 -1
  11. package/lib/account-values.d.ts +53 -0
  12. package/lib/account-values.d.ts.map +1 -0
  13. package/lib/account-values.js +91 -0
  14. package/lib/account-values.js.map +1 -0
  15. package/lib/analytics.d.ts +12 -38
  16. package/lib/analytics.d.ts.map +1 -1
  17. package/lib/api-schemas/access-control.d.ts +215 -0
  18. package/lib/api-schemas/access-control.d.ts.map +1 -0
  19. package/lib/api-schemas/access-control.js +165 -0
  20. package/lib/api-schemas/access-control.js.map +1 -0
  21. package/lib/api-schemas/account.d.ts +101 -0
  22. package/lib/api-schemas/account.d.ts.map +1 -0
  23. package/lib/api-schemas/account.js +136 -0
  24. package/lib/api-schemas/account.js.map +1 -0
  25. package/lib/api-schemas/adapter.d.ts +80 -0
  26. package/lib/api-schemas/adapter.d.ts.map +1 -0
  27. package/lib/api-schemas/adapter.js +726 -0
  28. package/lib/api-schemas/adapter.js.map +1 -0
  29. package/lib/api-schemas/agent-runs.d.ts +3786 -0
  30. package/lib/api-schemas/agent-runs.d.ts.map +1 -0
  31. package/lib/api-schemas/agent-runs.js +1000 -0
  32. package/lib/api-schemas/agent-runs.js.map +1 -0
  33. package/lib/api-schemas/analytics.d.ts +86 -0
  34. package/lib/api-schemas/analytics.d.ts.map +1 -0
  35. package/lib/api-schemas/analytics.js +58 -0
  36. package/lib/api-schemas/analytics.js.map +1 -0
  37. package/lib/api-schemas/apikey.d.ts +231 -0
  38. package/lib/api-schemas/apikey.d.ts.map +1 -0
  39. package/lib/api-schemas/apikey.js +172 -0
  40. package/lib/api-schemas/apikey.js.map +1 -0
  41. package/lib/api-schemas/app-lifecycle.d.ts +1148 -0
  42. package/lib/api-schemas/app-lifecycle.d.ts.map +1 -0
  43. package/lib/api-schemas/app-lifecycle.js +801 -0
  44. package/lib/api-schemas/app-lifecycle.js.map +1 -0
  45. package/lib/api-schemas/app-runtime.d.ts +10951 -0
  46. package/lib/api-schemas/app-runtime.d.ts.map +1 -0
  47. package/lib/api-schemas/app-runtime.js +874 -0
  48. package/lib/api-schemas/app-runtime.js.map +1 -0
  49. package/lib/api-schemas/apps.d.ts +271 -0
  50. package/lib/api-schemas/apps.d.ts.map +1 -0
  51. package/lib/api-schemas/apps.js +426 -0
  52. package/lib/api-schemas/apps.js.map +1 -0
  53. package/lib/api-schemas/audit-trail.d.ts +465 -0
  54. package/lib/api-schemas/audit-trail.d.ts.map +1 -0
  55. package/lib/api-schemas/audit-trail.js +218 -0
  56. package/lib/api-schemas/audit-trail.js.map +1 -0
  57. package/lib/api-schemas/bulk-operation.d.ts +104 -0
  58. package/lib/api-schemas/bulk-operation.d.ts.map +1 -0
  59. package/lib/api-schemas/bulk-operation.js +66 -0
  60. package/lib/api-schemas/bulk-operation.js.map +1 -0
  61. package/lib/api-schemas/commands.d.ts +50 -0
  62. package/lib/api-schemas/commands.d.ts.map +1 -0
  63. package/lib/api-schemas/commands.js +58 -0
  64. package/lib/api-schemas/commands.js.map +1 -0
  65. package/lib/api-schemas/content.d.ts +3565 -0
  66. package/lib/api-schemas/content.d.ts.map +1 -0
  67. package/lib/api-schemas/content.js +854 -0
  68. package/lib/api-schemas/content.js.map +1 -0
  69. package/lib/api-schemas/cost-analytics.d.ts +300 -0
  70. package/lib/api-schemas/cost-analytics.d.ts.map +1 -0
  71. package/lib/api-schemas/cost-analytics.js +218 -0
  72. package/lib/api-schemas/cost-analytics.js.map +1 -0
  73. package/lib/api-schemas/dashboard.d.ts +408 -0
  74. package/lib/api-schemas/dashboard.d.ts.map +1 -0
  75. package/lib/api-schemas/dashboard.js +311 -0
  76. package/lib/api-schemas/dashboard.js.map +1 -0
  77. package/lib/api-schemas/data-store.d.ts +1650 -0
  78. package/lib/api-schemas/data-store.d.ts.map +1 -0
  79. package/lib/api-schemas/data-store.js +504 -0
  80. package/lib/api-schemas/data-store.js.map +1 -0
  81. package/lib/api-schemas/document-processing.d.ts +1501 -0
  82. package/lib/api-schemas/document-processing.d.ts.map +1 -0
  83. package/lib/api-schemas/document-processing.js +312 -0
  84. package/lib/api-schemas/document-processing.js.map +1 -0
  85. package/lib/api-schemas/embeddings.d.ts +184 -0
  86. package/lib/api-schemas/embeddings.d.ts.map +1 -0
  87. package/lib/api-schemas/embeddings.js +102 -0
  88. package/lib/api-schemas/embeddings.js.map +1 -0
  89. package/lib/api-schemas/environment.d.ts +412 -0
  90. package/lib/api-schemas/environment.d.ts.map +1 -0
  91. package/lib/api-schemas/environment.js +170 -0
  92. package/lib/api-schemas/environment.js.map +1 -0
  93. package/lib/api-schemas/events.d.ts +4918 -0
  94. package/lib/api-schemas/events.d.ts.map +1 -0
  95. package/lib/api-schemas/events.js +888 -0
  96. package/lib/api-schemas/events.js.map +1 -0
  97. package/lib/api-schemas/files.d.ts +107 -0
  98. package/lib/api-schemas/files.d.ts.map +1 -0
  99. package/lib/api-schemas/files.js +137 -0
  100. package/lib/api-schemas/files.js.map +1 -0
  101. package/lib/api-schemas/group.d.ts +122 -0
  102. package/lib/api-schemas/group.d.ts.map +1 -0
  103. package/lib/api-schemas/group.js +142 -0
  104. package/lib/api-schemas/group.js.map +1 -0
  105. package/lib/api-schemas/index.d.ts +36 -0
  106. package/lib/api-schemas/index.d.ts.map +1 -0
  107. package/lib/api-schemas/index.js +36 -0
  108. package/lib/api-schemas/index.js.map +1 -0
  109. package/lib/api-schemas/indexing.d.ts +144 -0
  110. package/lib/api-schemas/indexing.d.ts.map +1 -0
  111. package/lib/api-schemas/indexing.js +217 -0
  112. package/lib/api-schemas/indexing.js.map +1 -0
  113. package/lib/api-schemas/integrations.d.ts +269 -0
  114. package/lib/api-schemas/integrations.d.ts.map +1 -0
  115. package/lib/api-schemas/integrations.js +335 -0
  116. package/lib/api-schemas/integrations.js.map +1 -0
  117. package/lib/api-schemas/interaction.d.ts +22456 -0
  118. package/lib/api-schemas/interaction.d.ts.map +1 -0
  119. package/lib/api-schemas/interaction.js +2071 -0
  120. package/lib/api-schemas/interaction.js.map +1 -0
  121. package/lib/api-schemas/invites.d.ts +162 -0
  122. package/lib/api-schemas/invites.d.ts.map +1 -0
  123. package/lib/api-schemas/invites.js +106 -0
  124. package/lib/api-schemas/invites.js.map +1 -0
  125. package/lib/api-schemas/oauth-server.d.ts +415 -0
  126. package/lib/api-schemas/oauth-server.d.ts.map +1 -0
  127. package/lib/api-schemas/oauth-server.js +193 -0
  128. package/lib/api-schemas/oauth-server.js.map +1 -0
  129. package/lib/api-schemas/oauth.d.ts +150 -0
  130. package/lib/api-schemas/oauth.d.ts.map +1 -0
  131. package/lib/api-schemas/oauth.js +148 -0
  132. package/lib/api-schemas/oauth.js.map +1 -0
  133. package/lib/api-schemas/parameters.d.ts +64 -0
  134. package/lib/api-schemas/parameters.d.ts.map +1 -0
  135. package/lib/api-schemas/parameters.js +246 -0
  136. package/lib/api-schemas/parameters.js.map +1 -0
  137. package/lib/api-schemas/process.d.ts +499 -0
  138. package/lib/api-schemas/process.d.ts.map +1 -0
  139. package/lib/api-schemas/process.js +817 -0
  140. package/lib/api-schemas/process.js.map +1 -0
  141. package/lib/api-schemas/project-configuration.d.ts +4900 -0
  142. package/lib/api-schemas/project-configuration.d.ts.map +1 -0
  143. package/lib/api-schemas/project-configuration.js +425 -0
  144. package/lib/api-schemas/project-configuration.js.map +1 -0
  145. package/lib/api-schemas/project.d.ts +7247 -0
  146. package/lib/api-schemas/project.d.ts.map +1 -0
  147. package/lib/api-schemas/project.js +185 -0
  148. package/lib/api-schemas/project.js.map +1 -0
  149. package/lib/api-schemas/prompt.d.ts +70 -0
  150. package/lib/api-schemas/prompt.d.ts.map +1 -0
  151. package/lib/api-schemas/prompt.js +77 -0
  152. package/lib/api-schemas/prompt.js.map +1 -0
  153. package/lib/api-schemas/quota.d.ts +90 -0
  154. package/lib/api-schemas/quota.d.ts.map +1 -0
  155. package/lib/api-schemas/quota.js +95 -0
  156. package/lib/api-schemas/quota.js.map +1 -0
  157. package/lib/api-schemas/registry.d.ts +98506 -0
  158. package/lib/api-schemas/registry.d.ts.map +1 -0
  159. package/lib/api-schemas/registry.js +2606 -0
  160. package/lib/api-schemas/registry.js.map +1 -0
  161. package/lib/api-schemas/schema-primitives.d.ts +5 -0
  162. package/lib/api-schemas/schema-primitives.d.ts.map +1 -0
  163. package/lib/api-schemas/schema-primitives.js +11 -0
  164. package/lib/api-schemas/schema-primitives.js.map +1 -0
  165. package/lib/api-schemas/secrets.d.ts +497 -0
  166. package/lib/api-schemas/secrets.d.ts.map +1 -0
  167. package/lib/api-schemas/secrets.js +298 -0
  168. package/lib/api-schemas/secrets.js.map +1 -0
  169. package/lib/api-schemas/store.d.ts +22140 -0
  170. package/lib/api-schemas/store.d.ts.map +1 -0
  171. package/lib/api-schemas/store.js +557 -0
  172. package/lib/api-schemas/store.js.map +1 -0
  173. package/lib/api-schemas/sts.d.ts +166 -0
  174. package/lib/api-schemas/sts.d.ts.map +1 -0
  175. package/lib/api-schemas/sts.js +107 -0
  176. package/lib/api-schemas/sts.js.map +1 -0
  177. package/lib/api-schemas/task.d.ts +215 -0
  178. package/lib/api-schemas/task.d.ts.map +1 -0
  179. package/lib/api-schemas/task.js +95 -0
  180. package/lib/api-schemas/task.js.map +1 -0
  181. package/lib/api-schemas/tools.d.ts +111 -0
  182. package/lib/api-schemas/tools.d.ts.map +1 -0
  183. package/lib/api-schemas/tools.js +122 -0
  184. package/lib/api-schemas/tools.js.map +1 -0
  185. package/lib/api-schemas/user.d.ts +208 -0
  186. package/lib/api-schemas/user.d.ts.map +1 -0
  187. package/lib/api-schemas/user.js +180 -0
  188. package/lib/api-schemas/user.js.map +1 -0
  189. package/lib/api-schemas/view-execution.d.ts +3163 -0
  190. package/lib/api-schemas/view-execution.d.ts.map +1 -0
  191. package/lib/api-schemas/view-execution.js +172 -0
  192. package/lib/api-schemas/view-execution.js.map +1 -0
  193. package/lib/api-schemas/views.d.ts +5990 -0
  194. package/lib/api-schemas/views.d.ts.map +1 -0
  195. package/lib/api-schemas/views.js +396 -0
  196. package/lib/api-schemas/views.js.map +1 -0
  197. package/lib/api-schemas/workflow-runs.d.ts +2210 -0
  198. package/lib/api-schemas/workflow-runs.d.ts.map +1 -0
  199. package/lib/api-schemas/workflow-runs.js +589 -0
  200. package/lib/api-schemas/workflow-runs.js.map +1 -0
  201. package/lib/apikey-values.d.ts +10 -0
  202. package/lib/apikey-values.d.ts.map +1 -0
  203. package/lib/apikey-values.js +11 -0
  204. package/lib/apikey-values.js.map +1 -0
  205. package/lib/apikey.d.ts +37 -36
  206. package/lib/apikey.d.ts.map +1 -1
  207. package/lib/apikey.js +5 -4
  208. package/lib/apikey.js.map +1 -1
  209. package/lib/apps.d.ts +142 -1172
  210. package/lib/apps.d.ts.map +1 -1
  211. package/lib/apps.js +4 -0
  212. package/lib/apps.js.map +1 -1
  213. package/lib/ask-user.d.ts +8 -1
  214. package/lib/ask-user.d.ts.map +1 -1
  215. package/lib/audit-trail.d.ts +20 -131
  216. package/lib/audit-trail.d.ts.map +1 -1
  217. package/lib/audit-trail.js.map +1 -1
  218. package/lib/browser-credentials.d.ts +11 -106
  219. package/lib/browser-credentials.d.ts.map +1 -1
  220. package/lib/common.d.ts +59 -81
  221. package/lib/common.d.ts.map +1 -1
  222. package/lib/cost-analytics.d.ts +14 -167
  223. package/lib/cost-analytics.d.ts.map +1 -1
  224. package/lib/cost-analytics.js.map +1 -1
  225. package/lib/data-platform.d.ts +122 -786
  226. package/lib/data-platform.d.ts.map +1 -1
  227. package/lib/data-platform.js +41 -61
  228. package/lib/data-platform.js.map +1 -1
  229. package/lib/email.d.ts +5 -17
  230. package/lib/email.d.ts.map +1 -1
  231. package/lib/email.js +0 -3
  232. package/lib/email.js.map +1 -1
  233. package/lib/embeddings.d.ts +14 -56
  234. package/lib/embeddings.d.ts.map +1 -1
  235. package/lib/environment.d.ts +22 -118
  236. package/lib/environment.d.ts.map +1 -1
  237. package/lib/environment.js +3 -0
  238. package/lib/environment.js.map +1 -1
  239. package/lib/facets.d.ts +4 -7
  240. package/lib/facets.d.ts.map +1 -1
  241. package/lib/group.d.ts +33 -39
  242. package/lib/group.d.ts.map +1 -1
  243. package/lib/group.js +0 -1
  244. package/lib/group.js.map +1 -1
  245. package/lib/index.d.ts +8 -0
  246. package/lib/index.d.ts.map +1 -1
  247. package/lib/index.js +1 -0
  248. package/lib/index.js.map +1 -1
  249. package/lib/integrations.d.ts +20 -108
  250. package/lib/integrations.d.ts.map +1 -1
  251. package/lib/integrations.js.map +1 -1
  252. package/lib/interaction-values.d.ts +11 -0
  253. package/lib/interaction-values.d.ts.map +1 -0
  254. package/lib/interaction-values.js +24 -0
  255. package/lib/interaction-values.js.map +1 -0
  256. package/lib/interaction.d.ts +88 -778
  257. package/lib/interaction.d.ts.map +1 -1
  258. package/lib/interaction.js +8 -12
  259. package/lib/interaction.js.map +1 -1
  260. package/lib/meters.d.ts +11 -7
  261. package/lib/meters.d.ts.map +1 -1
  262. package/lib/meters.js.map +1 -1
  263. package/lib/oauth-server.d.ts +33 -119
  264. package/lib/oauth-server.d.ts.map +1 -1
  265. package/lib/oauth.d.ts +14 -96
  266. package/lib/oauth.d.ts.map +1 -1
  267. package/lib/oauth.js +0 -4
  268. package/lib/oauth.js.map +1 -1
  269. package/lib/payload.d.ts +15 -38
  270. package/lib/payload.d.ts.map +1 -1
  271. package/lib/platform-event-validation.d.ts.map +1 -1
  272. package/lib/platform-event-validation.js +15 -2
  273. package/lib/platform-event-validation.js.map +1 -1
  274. package/lib/platform-event.d.ts +79 -464
  275. package/lib/platform-event.d.ts.map +1 -1
  276. package/lib/platform-event.js.map +1 -1
  277. package/lib/principal-context.d.ts +10 -15
  278. package/lib/principal-context.d.ts.map +1 -1
  279. package/lib/project-values.d.ts +24 -0
  280. package/lib/project-values.d.ts.map +1 -0
  281. package/lib/project-values.js +42 -0
  282. package/lib/project-values.js.map +1 -0
  283. package/lib/project.d.ts +56 -504
  284. package/lib/project.d.ts.map +1 -1
  285. package/lib/project.js +6 -76
  286. package/lib/project.js.map +1 -1
  287. package/lib/prompt.d.ts +20 -51
  288. package/lib/prompt.d.ts.map +1 -1
  289. package/lib/prompt.js.map +1 -1
  290. package/lib/query.d.ts +27 -88
  291. package/lib/query.d.ts.map +1 -1
  292. package/lib/rate-limiter.d.ts +19 -70
  293. package/lib/rate-limiter.d.ts.map +1 -1
  294. package/lib/rate-limiter.js +0 -3
  295. package/lib/rate-limiter.js.map +1 -1
  296. package/lib/refs.d.ts +3 -11
  297. package/lib/refs.d.ts.map +1 -1
  298. package/lib/refs.js.map +1 -1
  299. package/lib/roles/types.d.ts +14 -20
  300. package/lib/roles/types.d.ts.map +1 -1
  301. package/lib/roles/types.js +5 -9
  302. package/lib/roles/types.js.map +1 -1
  303. package/lib/runs.d.ts +6 -25
  304. package/lib/runs.d.ts.map +1 -1
  305. package/lib/schema-for-extraction.js.map +1 -1
  306. package/lib/secrets.d.ts +20 -105
  307. package/lib/secrets.d.ts.map +1 -1
  308. package/lib/store/agent-approval.d.ts +6 -15
  309. package/lib/store/agent-approval.d.ts.map +1 -1
  310. package/lib/store/agent-approval.js.map +1 -1
  311. package/lib/store/agent-run.d.ts +57 -358
  312. package/lib/store/agent-run.d.ts.map +1 -1
  313. package/lib/store/collections.d.ts +11 -63
  314. package/lib/store/collections.d.ts.map +1 -1
  315. package/lib/store/collections.js.map +1 -1
  316. package/lib/store/conversation-state.d.ts +61 -61
  317. package/lib/store/conversation-state.d.ts.map +1 -1
  318. package/lib/store/conversation-state.js +2 -0
  319. package/lib/store/conversation-state.js.map +1 -1
  320. package/lib/store/doc-analyzer.d.ts +9 -32
  321. package/lib/store/doc-analyzer.d.ts.map +1 -1
  322. package/lib/store/dsl-workflow.d.ts +37 -151
  323. package/lib/store/dsl-workflow.d.ts.map +1 -1
  324. package/lib/store/dsl-workflow.js.map +1 -1
  325. package/lib/store/editing-policy-schema.generated.d.ts +3 -0
  326. package/lib/store/editing-policy-schema.generated.d.ts.map +1 -0
  327. package/lib/store/editing-policy-schema.generated.js +28 -0
  328. package/lib/store/editing-policy-schema.generated.js.map +1 -0
  329. package/lib/store/grounded-extraction.d.ts +7 -104
  330. package/lib/store/grounded-extraction.d.ts.map +1 -1
  331. package/lib/store/grounded-extraction.js.map +1 -1
  332. package/lib/store/index.d.ts +2 -0
  333. package/lib/store/index.d.ts.map +1 -1
  334. package/lib/store/index.js +3 -0
  335. package/lib/store/index.js.map +1 -1
  336. package/lib/store/intake-policy-schema.generated.d.ts +3 -0
  337. package/lib/store/intake-policy-schema.generated.d.ts.map +1 -0
  338. package/lib/store/intake-policy-schema.generated.js +1425 -0
  339. package/lib/store/intake-policy-schema.generated.js.map +1 -0
  340. package/lib/store/process-schema.d.ts +81 -1
  341. package/lib/store/process-schema.d.ts.map +1 -1
  342. package/lib/store/process-schema.js +79 -0
  343. package/lib/store/process-schema.js.map +1 -1
  344. package/lib/store/process-validation.d.ts.map +1 -1
  345. package/lib/store/process-validation.js +70 -2
  346. package/lib/store/process-validation.js.map +1 -1
  347. package/lib/store/process.d.ts +36 -125
  348. package/lib/store/process.d.ts.map +1 -1
  349. package/lib/store/process.js.map +1 -1
  350. package/lib/store/rendering.d.ts +9 -64
  351. package/lib/store/rendering.d.ts.map +1 -1
  352. package/lib/store/rendering.js.map +1 -1
  353. package/lib/store/schedule.d.ts +6 -6
  354. package/lib/store/schedule.d.ts.map +1 -1
  355. package/lib/store/store.d.ts +99 -701
  356. package/lib/store/store.d.ts.map +1 -1
  357. package/lib/store/store.js +4 -456
  358. package/lib/store/store.js.map +1 -1
  359. package/lib/store/task.d.ts +15 -59
  360. package/lib/store/task.d.ts.map +1 -1
  361. package/lib/store/task.js +0 -3
  362. package/lib/store/task.js.map +1 -1
  363. package/lib/store/workflow.d.ts +58 -516
  364. package/lib/store/workflow.d.ts.map +1 -1
  365. package/lib/store/workflow.js +31 -11
  366. package/lib/store/workflow.js.map +1 -1
  367. package/lib/sts-errors.d.ts +7 -0
  368. package/lib/sts-errors.d.ts.map +1 -0
  369. package/lib/sts-errors.js +11 -0
  370. package/lib/sts-errors.js.map +1 -0
  371. package/lib/sts-token-types.d.ts +13 -66
  372. package/lib/sts-token-types.d.ts.map +1 -1
  373. package/lib/sts-token-types.js.map +1 -1
  374. package/lib/tools.d.ts +8 -100
  375. package/lib/tools.d.ts.map +1 -1
  376. package/lib/transient-tokens-values.d.ts +11 -0
  377. package/lib/transient-tokens-values.d.ts.map +1 -0
  378. package/lib/transient-tokens-values.js +12 -0
  379. package/lib/transient-tokens-values.js.map +1 -0
  380. package/lib/transient-tokens.d.ts +15 -13
  381. package/lib/transient-tokens.d.ts.map +1 -1
  382. package/lib/transient-tokens.js +5 -5
  383. package/lib/transient-tokens.js.map +1 -1
  384. package/lib/user.d.ts +55 -156
  385. package/lib/user.d.ts.map +1 -1
  386. package/lib/user.js +2 -79
  387. package/lib/user.js.map +1 -1
  388. package/lib/versions.d.ts +34 -1
  389. package/lib/versions.d.ts.map +1 -1
  390. package/lib/versions.js +33 -0
  391. package/lib/versions.js.map +1 -1
  392. package/lib/vertesia-common.js +6 -2
  393. package/lib/vertesia-common.js.map +1 -1
  394. package/lib/view-configuration-validation.js.map +1 -1
  395. package/lib/view-query-validation.js.map +1 -1
  396. package/lib/view-validation-helpers.d.ts +1 -1
  397. package/lib/view-validation-helpers.d.ts.map +1 -1
  398. package/lib/views-schema.d.ts +51 -51
  399. package/lib/views-schema.d.ts.map +1 -1
  400. package/lib/views-validation.js.map +1 -1
  401. package/lib/views.d.ts +58 -314
  402. package/lib/views.d.ts.map +1 -1
  403. package/lib/views.js.map +1 -1
  404. package/lib/workflow-analytics.d.ts +10 -3
  405. package/lib/workflow-analytics.d.ts.map +1 -1
  406. package/package.json +14 -5
  407. package/src/access-control-values.ts +113 -0
  408. package/src/access-control.ts +33 -138
  409. package/src/account-values.ts +95 -0
  410. package/src/analytics.ts +18 -42
  411. package/src/api-schemas/access-control.contract.test.ts +209 -0
  412. package/src/api-schemas/access-control.ts +208 -0
  413. package/src/api-schemas/account.contract.test.ts +318 -0
  414. package/src/api-schemas/account.ts +150 -0
  415. package/src/api-schemas/adapter-edge-cases.test.ts +480 -0
  416. package/src/api-schemas/adapter.ts +778 -0
  417. package/src/api-schemas/agent-runs.ts +1091 -0
  418. package/src/api-schemas/analytics.ts +65 -0
  419. package/src/api-schemas/apikey.contract.test.ts +270 -0
  420. package/src/api-schemas/apikey.ts +199 -0
  421. package/src/api-schemas/app-delete-summary.contract.test.ts +67 -0
  422. package/src/api-schemas/app-lifecycle.ts +900 -0
  423. package/src/api-schemas/app-runtime.ts +1022 -0
  424. package/src/api-schemas/apps.ts +484 -0
  425. package/src/api-schemas/audit-trail.ts +243 -0
  426. package/src/api-schemas/bulk-operation.contract.test.ts +39 -0
  427. package/src/api-schemas/bulk-operation.ts +75 -0
  428. package/src/api-schemas/bundle-isolation.test.ts +80 -0
  429. package/src/api-schemas/commands.contract.test.ts +51 -0
  430. package/src/api-schemas/commands.ts +62 -0
  431. package/src/api-schemas/content.ts +952 -0
  432. package/src/api-schemas/cost-analytics.contract.test.ts +64 -0
  433. package/src/api-schemas/cost-analytics.ts +235 -0
  434. package/src/api-schemas/dashboard.contract.test.ts +127 -0
  435. package/src/api-schemas/dashboard.ts +351 -0
  436. package/src/api-schemas/data-store.contract.test.ts +91 -0
  437. package/src/api-schemas/data-store.ts +571 -0
  438. package/src/api-schemas/document-processing.contract.test.ts +76 -0
  439. package/src/api-schemas/document-processing.ts +344 -0
  440. package/src/api-schemas/embeddings.ts +113 -0
  441. package/src/api-schemas/environment.contract.test.ts +184 -0
  442. package/src/api-schemas/environment.ts +190 -0
  443. package/src/api-schemas/events.ts +981 -0
  444. package/src/api-schemas/files.ts +159 -0
  445. package/src/api-schemas/group.contract.test.ts +205 -0
  446. package/src/api-schemas/group.ts +155 -0
  447. package/src/api-schemas/index.ts +35 -0
  448. package/src/api-schemas/indexing.contract.test.ts +83 -0
  449. package/src/api-schemas/indexing.ts +234 -0
  450. package/src/api-schemas/integrations.ts +369 -0
  451. package/src/api-schemas/interaction.contract.test.ts +27 -0
  452. package/src/api-schemas/interaction.ts +2364 -0
  453. package/src/api-schemas/invites.contract.test.ts +268 -0
  454. package/src/api-schemas/invites.ts +127 -0
  455. package/src/api-schemas/llumiverse.contract.test.ts +108 -0
  456. package/src/api-schemas/mcp-api-key.contract.test.ts +86 -0
  457. package/src/api-schemas/oauth-server.ts +219 -0
  458. package/src/api-schemas/oauth.contract.test.ts +118 -0
  459. package/src/api-schemas/oauth.ts +166 -0
  460. package/src/api-schemas/parameters.test.ts +402 -0
  461. package/src/api-schemas/parameters.ts +310 -0
  462. package/src/api-schemas/process.ts +929 -0
  463. package/src/api-schemas/project-configuration.ts +478 -0
  464. package/src/api-schemas/project.contract.test.ts +365 -0
  465. package/src/api-schemas/project.ts +214 -0
  466. package/src/api-schemas/prompt.ts +88 -0
  467. package/src/api-schemas/pruning-limits.test.ts +189 -0
  468. package/src/api-schemas/quota.contract.test.ts +147 -0
  469. package/src/api-schemas/quota.ts +122 -0
  470. package/src/api-schemas/registry-groups.test.ts +91 -0
  471. package/src/api-schemas/registry.ts +3512 -0
  472. package/src/api-schemas/response-pruning.test.ts +260 -0
  473. package/src/api-schemas/schema-primitives.ts +12 -0
  474. package/src/api-schemas/secrets.ts +332 -0
  475. package/src/api-schemas/store.contract.test.ts +471 -0
  476. package/src/api-schemas/store.ts +604 -0
  477. package/src/api-schemas/sts.contract.test.ts +112 -0
  478. package/src/api-schemas/sts.ts +123 -0
  479. package/src/api-schemas/task.ts +104 -0
  480. package/src/api-schemas/tools.ts +140 -0
  481. package/src/api-schemas/user.contract.test.ts +191 -0
  482. package/src/api-schemas/user.ts +204 -0
  483. package/src/api-schemas/view-execution.ts +200 -0
  484. package/src/api-schemas/views.ts +437 -0
  485. package/src/api-schemas/workflow-runs.ts +653 -0
  486. package/src/apikey-values.ts +10 -0
  487. package/src/apikey.ts +49 -40
  488. package/src/apps.test.ts +82 -0
  489. package/src/apps.ts +283 -1228
  490. package/src/ask-user.ts +9 -1
  491. package/src/audit-trail.ts +45 -137
  492. package/src/browser-credentials.ts +21 -106
  493. package/src/common.ts +67 -78
  494. package/src/cost-analytics.ts +37 -176
  495. package/src/data-platform.ts +205 -776
  496. package/src/email.ts +5 -17
  497. package/src/embeddings.ts +22 -60
  498. package/src/environment.ts +52 -126
  499. package/src/facets.ts +4 -7
  500. package/src/group.ts +38 -42
  501. package/src/index.ts +12 -0
  502. package/src/integrations.ts +39 -129
  503. package/src/interaction-values.ts +23 -0
  504. package/src/interaction.ts +162 -902
  505. package/src/meters.ts +11 -7
  506. package/src/oauth-server.ts +58 -127
  507. package/src/oauth.ts +24 -108
  508. package/src/payload.ts +25 -40
  509. package/src/platform-event-validation.test.ts +26 -0
  510. package/src/platform-event-validation.ts +15 -2
  511. package/src/platform-event.ts +141 -484
  512. package/src/principal-context.ts +11 -15
  513. package/src/project-values.ts +41 -0
  514. package/src/project.ts +116 -588
  515. package/src/prompt.ts +34 -61
  516. package/src/query.ts +34 -93
  517. package/src/rate-limiter.ts +27 -75
  518. package/src/refs.ts +4 -11
  519. package/src/roles/types.ts +20 -20
  520. package/src/runs.ts +11 -24
  521. package/src/secrets.ts +38 -117
  522. package/src/store/agent-approval.ts +9 -14
  523. package/src/store/agent-run.ts +93 -450
  524. package/src/store/collections.ts +21 -63
  525. package/src/store/content-type-editing.test.ts +1 -1
  526. package/src/store/conversation-state.ts +75 -64
  527. package/src/store/doc-analyzer.ts +17 -33
  528. package/src/store/dsl-workflow.ts +62 -158
  529. package/src/store/editing-policy-schema.generated.ts +30 -0
  530. package/src/store/grounded-extraction.ts +13 -104
  531. package/src/store/index.ts +3 -0
  532. package/src/store/intake-policy-schema.generated.ts +1442 -0
  533. package/src/store/process-schema.test.ts +43 -0
  534. package/src/store/process-schema.ts +79 -0
  535. package/src/store/process-validation.test.ts +141 -0
  536. package/src/store/process-validation.ts +82 -2
  537. package/src/store/process.ts +70 -146
  538. package/src/store/rendering.ts +15 -64
  539. package/src/store/store.ts +197 -1204
  540. package/src/store/task.ts +25 -59
  541. package/src/store/workflow.ts +103 -554
  542. package/src/sts-errors.ts +13 -0
  543. package/src/sts-token-types.ts +26 -75
  544. package/src/tools.ts +18 -97
  545. package/src/transient-tokens-values.ts +11 -0
  546. package/src/transient-tokens.ts +16 -13
  547. package/src/user.ts +75 -215
  548. package/src/versions.test.ts +13 -0
  549. package/src/versions.ts +36 -0
  550. package/src/views-schema.test.ts +9 -1
  551. package/src/views.ts +106 -329
  552. package/src/workflow-analytics.ts +10 -3
@@ -0,0 +1,480 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { type JsonObject, SchemaAdapterError, toOpenApiComponents } from './adapter.js';
3
+
4
+ describe('reference integrity', () => {
5
+ it('rejects a reference to a component that does not exist', () => {
6
+ // A dangling pointer produces a spec that validates structurally but breaks every
7
+ // generated client at deserialization time.
8
+ expect(() =>
9
+ toOpenApiComponents({
10
+ Account: { type: 'object', properties: { billing: { $ref: '#/$defs/Missing' } } },
11
+ }),
12
+ ).toThrow(SchemaAdapterError);
13
+ });
14
+
15
+ it('accepts a reference once its target is defined', () => {
16
+ const components = toOpenApiComponents({
17
+ Account: {
18
+ type: 'object',
19
+ properties: { billing: { $ref: '#/$defs/AccountBilling' } },
20
+ $defs: { AccountBilling: { type: 'object', properties: { method: { type: 'string' } } } },
21
+ },
22
+ });
23
+ expect(Object.keys(components).sort()).toEqual(['Account', 'AccountBilling']);
24
+ });
25
+
26
+ it('resolves a reference against an external component without republishing it', () => {
27
+ const components = toOpenApiComponents(
28
+ {
29
+ AppManifest: {
30
+ type: 'object',
31
+ properties: { settings_schema: { $ref: '#/components/schemas/JSONSchema' } },
32
+ },
33
+ },
34
+ { referenceComponents: { JSONSchema: { type: 'object' } } },
35
+ );
36
+
37
+ expect(Object.keys(components)).toEqual(['AppManifest']);
38
+ expect((components.AppManifest.properties as JsonObject).settings_schema).toEqual({
39
+ $ref: '#/components/schemas/JSONSchema',
40
+ });
41
+ });
42
+ });
43
+
44
+ describe('additionalProperties policy', () => {
45
+ it('preserves a schema-valued additionalProperties on an open component', () => {
46
+ // Record<string, string> — deleting the keyword would widen the value type to `any`.
47
+ const components = toOpenApiComponents({
48
+ StringMap: { type: 'object', additionalProperties: { type: 'string' } },
49
+ });
50
+ expect(components.StringMap.additionalProperties).toEqual({ type: 'string' });
51
+ });
52
+
53
+ it('preserves additionalProperties:true on an open component', () => {
54
+ const components = toOpenApiComponents({
55
+ Freeform: { type: 'object', properties: { a: { type: 'string' } }, additionalProperties: true },
56
+ });
57
+ expect(components.Freeform.additionalProperties).toBe(true);
58
+ });
59
+
60
+ it('removes only an inherited additionalProperties:false', () => {
61
+ const components = toOpenApiComponents({
62
+ Closed: { type: 'object', properties: { a: { type: 'string' } }, additionalProperties: false },
63
+ });
64
+ expect(components.Closed.additionalProperties).toBeUndefined();
65
+ });
66
+ });
67
+
68
+ /**
69
+ * `{}` and `true` mean the same thing to a validator, and `propertyNames: {type: 'string'}`
70
+ * constrains nothing at all — but openapi-generator renders the two `additionalProperties` spellings
71
+ * as different Go types, so which one is published is a real decision rather than cosmetics.
72
+ */
73
+ describe('open-map normalization', () => {
74
+ it('publishes a nested empty additionalProperties as true', () => {
75
+ const components = toOpenApiComponents({
76
+ Holder: {
77
+ type: 'object',
78
+ properties: { map: { type: 'object', additionalProperties: {}, propertyNames: { type: 'string' } } },
79
+ },
80
+ });
81
+ const map = (components.Holder.properties as JsonObject).map as JsonObject;
82
+ expect(map.additionalProperties).toBe(true);
83
+ expect(map).not.toHaveProperty('propertyNames');
84
+ });
85
+
86
+ it('still deletes an empty additionalProperties at a component root', () => {
87
+ const components = toOpenApiComponents({
88
+ Root: { type: 'object', properties: { a: { type: 'string' } }, additionalProperties: {} },
89
+ });
90
+ expect(components.Root.additionalProperties).toBeUndefined();
91
+ });
92
+
93
+ it('keeps a propertyNames that actually constrains the keys', () => {
94
+ const components = toOpenApiComponents({
95
+ Holder: {
96
+ type: 'object',
97
+ properties: { map: { type: 'object', propertyNames: { type: 'string', pattern: '^x-' } } },
98
+ },
99
+ });
100
+ const map = (components.Holder.properties as JsonObject).map as JsonObject;
101
+ expect(map.propertyNames).toEqual({ type: 'string', pattern: '^x-' });
102
+ });
103
+
104
+ it('leaves a typed additionalProperties alone', () => {
105
+ const components = toOpenApiComponents({
106
+ Holder: {
107
+ type: 'object',
108
+ properties: { map: { type: 'object', additionalProperties: { type: 'string' } } },
109
+ },
110
+ });
111
+ expect(((components.Holder.properties as JsonObject).map as JsonObject).additionalProperties).toEqual({
112
+ type: 'string',
113
+ });
114
+ });
115
+
116
+ it('normalizes inside unions and arrays, not just properties', () => {
117
+ const components = toOpenApiComponents({
118
+ Holder: {
119
+ type: 'object',
120
+ properties: {
121
+ choice: { anyOf: [{ type: 'object', additionalProperties: {} }, { type: 'string' }] },
122
+ list: { type: 'array', items: { type: 'object', additionalProperties: {} } },
123
+ },
124
+ },
125
+ });
126
+ const properties = components.Holder.properties as Record<string, JsonObject>;
127
+ expect((properties.choice.anyOf as JsonObject[])[0].additionalProperties).toBe(true);
128
+ expect((properties.list.items as JsonObject).additionalProperties).toBe(true);
129
+ });
130
+ });
131
+
132
+ describe('conflicting definitions', () => {
133
+ it('reports two $defs entries that disagree instead of keeping the first', () => {
134
+ expect(() =>
135
+ toOpenApiComponents({
136
+ A: {
137
+ type: 'object',
138
+ properties: { x: { $ref: '#/$defs/Shared' } },
139
+ $defs: { Shared: { type: 'object', properties: { v: { type: 'string' } } } },
140
+ },
141
+ B: {
142
+ type: 'object',
143
+ properties: { y: { $ref: '#/$defs/Shared' } },
144
+ $defs: { Shared: { type: 'object', properties: { v: { type: 'number' } } } },
145
+ },
146
+ }),
147
+ ).toThrow(SchemaAdapterError);
148
+ });
149
+
150
+ it('accepts two $defs entries that agree', () => {
151
+ const shared = { type: 'object', properties: { v: { type: 'string' } } };
152
+ const components = toOpenApiComponents({
153
+ A: { type: 'object', properties: { x: { $ref: '#/$defs/Shared' } }, $defs: { Shared: shared } },
154
+ B: { type: 'object', properties: { y: { $ref: '#/$defs/Shared' } }, $defs: { Shared: shared } },
155
+ });
156
+ expect(components.Shared).toEqual(shared);
157
+ });
158
+ });
159
+
160
+ describe('$ref siblings', () => {
161
+ it('keeps sibling keywords alongside a rewritten reference', () => {
162
+ // 2020-12 allows annotations next to $ref; dropping them loses documentation and
163
+ // constraints that generated clients surface.
164
+ const components = toOpenApiComponents({
165
+ Account: {
166
+ type: 'object',
167
+ properties: {
168
+ billing: {
169
+ $ref: '#/$defs/AccountBilling',
170
+ description: 'Billing configuration',
171
+ deprecated: true,
172
+ },
173
+ },
174
+ $defs: { AccountBilling: { type: 'object', properties: { method: { type: 'string' } } } },
175
+ },
176
+ });
177
+ expect((components.Account.properties as JsonObject).billing).toEqual({
178
+ $ref: '#/components/schemas/AccountBilling',
179
+ description: 'Billing configuration',
180
+ deprecated: true,
181
+ });
182
+ });
183
+ });
184
+
185
+ describe('reference scope', () => {
186
+ it('resolves a self-reference inside a nested $id to that nested component', () => {
187
+ // `{"$ref": "#"}` inside Child means Child, not the enclosing Account.
188
+ const components = toOpenApiComponents({
189
+ Account: {
190
+ type: 'object',
191
+ properties: {
192
+ child: {
193
+ $id: 'Child',
194
+ type: 'object',
195
+ properties: { next: { $ref: '#' } },
196
+ },
197
+ },
198
+ },
199
+ });
200
+ const child = components.Child.properties as JsonObject;
201
+ expect(child.next).toEqual({ $ref: '#/components/schemas/Child' });
202
+ expect(child.next).not.toEqual({ $ref: '#/components/schemas/Account' });
203
+ });
204
+
205
+ it('still resolves a root-level self-reference to the root', () => {
206
+ const components = toOpenApiComponents({
207
+ Node: { type: 'object', properties: { children: { type: 'array', items: { $ref: '#' } } } },
208
+ });
209
+ const props = components.Node.properties as JsonObject;
210
+ expect((props.children as JsonObject).items).toEqual({ $ref: '#/components/schemas/Node' });
211
+ });
212
+ });
213
+
214
+ describe('discriminator synthesis', () => {
215
+ it('does not synthesize a discriminator from an optional property', () => {
216
+ // OpenAPI treats the discriminator as always present; promoting an optional property
217
+ // would publish a guarantee the schema does not make.
218
+ const components = toOpenApiComponents({
219
+ Union: {
220
+ anyOf: [{ $ref: '#/$defs/A' }, { $ref: '#/$defs/B' }],
221
+ $defs: {
222
+ A: { type: 'object', properties: { kind: { const: 'a' } } },
223
+ B: { type: 'object', properties: { kind: { const: 'b' } } },
224
+ },
225
+ },
226
+ });
227
+ expect(components.Union.discriminator).toBeUndefined();
228
+ expect(components.Union.anyOf).toBeDefined();
229
+ });
230
+
231
+ it('synthesizes a discriminator when the property is required in every branch', () => {
232
+ const components = toOpenApiComponents({
233
+ Union: {
234
+ anyOf: [{ $ref: '#/$defs/A' }, { $ref: '#/$defs/B' }],
235
+ $defs: {
236
+ A: { type: 'object', properties: { kind: { const: 'a' } }, required: ['kind'] },
237
+ B: { type: 'object', properties: { kind: { const: 'b' } }, required: ['kind'] },
238
+ },
239
+ },
240
+ });
241
+ expect(components.Union.discriminator).toEqual({
242
+ propertyName: 'kind',
243
+ mapping: { a: '#/components/schemas/A', b: '#/components/schemas/B' },
244
+ });
245
+ // Promoted to oneOf, which is what codegen needs.
246
+ expect(components.Union.oneOf).toBeDefined();
247
+ expect(components.Union.anyOf).toBeUndefined();
248
+ });
249
+
250
+ it('does not synthesize when two branches claim the same literal', () => {
251
+ const components = toOpenApiComponents({
252
+ Union: {
253
+ anyOf: [{ $ref: '#/$defs/A' }, { $ref: '#/$defs/B' }],
254
+ $defs: {
255
+ A: { type: 'object', properties: { kind: { const: 'same' } }, required: ['kind'] },
256
+ B: { type: 'object', properties: { kind: { const: 'same' } }, required: ['kind'] },
257
+ },
258
+ },
259
+ });
260
+ expect(components.Union.discriminator).toBeUndefined();
261
+ });
262
+
263
+ it('reads branches out of the reference components too', () => {
264
+ const components = toOpenApiComponents(
265
+ { Union: { anyOf: [{ $ref: 'A' }, { $ref: 'B' }] } },
266
+ {
267
+ referenceComponents: {
268
+ A: { type: 'object', properties: { kind: { const: 'a' } }, required: ['kind'] },
269
+ B: { type: 'object', properties: { kind: { const: 'b' } }, required: ['kind'] },
270
+ },
271
+ },
272
+ );
273
+ expect(components.Union.discriminator).toEqual({
274
+ propertyName: 'kind',
275
+ mapping: { a: '#/components/schemas/A', b: '#/components/schemas/B' },
276
+ });
277
+ });
278
+
279
+ it('prefers a hoisted branch over a reference component of the same name', () => {
280
+ // A root that redefines an already-published name means the hoisted shape wins, so the
281
+ // literal that lands in the mapping has to be read off the hoisted copy.
282
+ const components = toOpenApiComponents(
283
+ {
284
+ Union: {
285
+ anyOf: [{ $ref: '#/$defs/A' }, { $ref: '#/$defs/B' }],
286
+ $defs: {
287
+ A: { type: 'object', properties: { kind: { const: 'hoisted-a' } }, required: ['kind'] },
288
+ B: { type: 'object', properties: { kind: { const: 'b' } }, required: ['kind'] },
289
+ },
290
+ },
291
+ },
292
+ { referenceComponents: { A: { type: 'object', properties: { kind: { const: 'a' } } } } },
293
+ );
294
+ expect(components.Union.discriminator).toEqual({
295
+ propertyName: 'kind',
296
+ mapping: { 'hoisted-a': '#/components/schemas/A', b: '#/components/schemas/B' },
297
+ });
298
+ });
299
+ });
300
+
301
+ describe('strictness reaches anonymous nested objects', () => {
302
+ /**
303
+ * Strictness is declared per component, but an object nested inline in one has no name to declare.
304
+ * The TypeScript-derived generator closed every object it emitted, so the document already publishes
305
+ * those inline objects closed — `QuotaStandingResponse.admission` and `.llm` were the first two
306
+ * converted, and leaving them open would have loosened a published contract while reproducing it.
307
+ */
308
+ const nested = {
309
+ Report: {
310
+ type: 'object',
311
+ properties: {
312
+ inline: { type: 'object', properties: { note: { type: 'string' } } },
313
+ deeper: {
314
+ type: 'array',
315
+ items: { type: 'object', properties: { value: { type: 'number' } } },
316
+ },
317
+ },
318
+ },
319
+ } as const;
320
+
321
+ it('closes an inline object inside a strict component', () => {
322
+ const components = toOpenApiComponents(nested, { strictComponents: new Set(['Report']) });
323
+ const properties = components.Report.properties as Record<string, JsonObject>;
324
+ expect(components.Report.additionalProperties).toBe(false);
325
+ expect(properties.inline.additionalProperties).toBe(false);
326
+ });
327
+
328
+ it('closes an inline object nested under array items', () => {
329
+ const components = toOpenApiComponents(nested, { strictComponents: new Set(['Report']) });
330
+ const properties = components.Report.properties as Record<string, JsonObject>;
331
+ expect((properties.deeper.items as JsonObject).additionalProperties).toBe(false);
332
+ });
333
+
334
+ it('leaves inline objects open in a component that is not strict', () => {
335
+ const components = toOpenApiComponents(nested);
336
+ const properties = components.Report.properties as Record<string, JsonObject>;
337
+ expect(components.Report.additionalProperties).toBeUndefined();
338
+ expect(properties.inline.additionalProperties).toBeUndefined();
339
+ });
340
+
341
+ it('never overwrites an existing additionalProperties', () => {
342
+ // `true` or a subschema is a deliberate statement about the extras — a Record<string, string>
343
+ // value type, say — so replacing it with `false` would reject data the schema explicitly allows.
344
+ const components = toOpenApiComponents(
345
+ {
346
+ Report: {
347
+ type: 'object',
348
+ properties: {
349
+ map: { type: 'object', additionalProperties: { type: 'string' } },
350
+ open: { type: 'object', additionalProperties: true },
351
+ },
352
+ },
353
+ },
354
+ { strictComponents: new Set(['Report']) },
355
+ );
356
+ const properties = components.Report.properties as Record<string, JsonObject>;
357
+ expect(properties.map.additionalProperties).toEqual({ type: 'string' });
358
+ expect(properties.open.additionalProperties).toBe(true);
359
+ });
360
+
361
+ it('does not close a $ref node, which is governed by its own component', () => {
362
+ const components = toOpenApiComponents(
363
+ {
364
+ Report: {
365
+ type: 'object',
366
+ properties: { billing: { $ref: '#/$defs/Billing' } },
367
+ $defs: { Billing: { $id: 'Billing', type: 'object', properties: {} } },
368
+ },
369
+ },
370
+ { strictComponents: new Set(['Report']) },
371
+ );
372
+ const properties = components.Report.properties as Record<string, JsonObject>;
373
+ expect(Object.keys(properties.billing)).toEqual(['$ref']);
374
+ // Billing was not listed, so it stays open.
375
+ expect(components.Billing.additionalProperties).toBeUndefined();
376
+ });
377
+ });
378
+
379
+ describe('description is emitted last', () => {
380
+ /**
381
+ * Key order carries no meaning to a consumer, but it decides byte-identity — which is how a
382
+ * conversion proves it reproduced the published contract rather than renegotiating it. The
383
+ * scanner's TypeScript-derived output puts `description` last, so matching it is what lets a
384
+ * converted component diff clean.
385
+ */
386
+ it('puts description after a sibling $ref', () => {
387
+ const components = toOpenApiComponents({
388
+ Account: {
389
+ type: 'object',
390
+ properties: { tier: { description: 'The tier.', $ref: '#/$defs/Tier' } },
391
+ $defs: { Tier: { $id: 'Tier', type: 'string' } },
392
+ },
393
+ });
394
+ const properties = components.Account.properties as Record<string, JsonObject>;
395
+ expect(Object.keys(properties.tier)).toEqual(['$ref', 'description']);
396
+ });
397
+
398
+ it('puts description after the additionalProperties the strict policy appends', () => {
399
+ const components = toOpenApiComponents(
400
+ { Payload: { type: 'object', description: 'A payload.', properties: { a: { type: 'string' } } } },
401
+ { strictComponents: new Set(['Payload']) },
402
+ );
403
+ // Declared as `type, description, properties`; the strict policy appends additionalProperties,
404
+ // and description then moves behind it.
405
+ expect(Object.keys(components.Payload)).toEqual(['type', 'properties', 'additionalProperties', 'description']);
406
+ });
407
+
408
+ it('does not reorder a property NAMED description', () => {
409
+ // The trap a generic "walk every object" pass falls into: `properties` keys are user data, and
410
+ // five published components have a property called `description`. Moving it would change the
411
+ // published property order.
412
+ const components = toOpenApiComponents({
413
+ Project: {
414
+ type: 'object',
415
+ properties: {
416
+ id: { type: 'string' },
417
+ description: { type: 'string' },
418
+ account: { type: 'string' },
419
+ },
420
+ },
421
+ });
422
+ expect(Object.keys(components.Project.properties as JsonObject)).toEqual(['id', 'description', 'account']);
423
+ });
424
+
425
+ it('leaves a description that is already last alone', () => {
426
+ const components = toOpenApiComponents({ Tier: { type: 'string', description: 'A tier.' } });
427
+ expect(Object.keys(components.Tier)).toEqual(['type', 'description']);
428
+ });
429
+ });
430
+
431
+ describe('hoisting a union and its members', () => {
432
+ /**
433
+ * A discriminated union's `discriminator` is SYNTHESIZED from its members, so the members have to
434
+ * be registered before the union that references them. `$defs` order is whatever Zod emitted, and
435
+ * the same union is routinely reachable from two roots — once where its members happen to come
436
+ * first and once where they do not. Hoisting in declaration order made those two emissions differ,
437
+ * and the adapter then reported a component "defined twice with different shapes" that nobody had
438
+ * defined twice. `EmbeddingsApiInput` was the first to hit it.
439
+ */
440
+ const MEMBERS = {
441
+ Text: { $id: 'Text', type: 'object', properties: { kind: { const: 'text' } }, required: ['kind'] },
442
+ Image: { $id: 'Image', type: 'object', properties: { kind: { const: 'image' } }, required: ['kind'] },
443
+ };
444
+ const UNION = { $id: 'Input', anyOf: [{ $ref: '#/$defs/Text' }, { $ref: '#/$defs/Image' }] };
445
+
446
+ it('synthesizes the discriminator whichever order $defs lists them in', () => {
447
+ const unionFirst = toOpenApiComponents({
448
+ Request: {
449
+ type: 'object',
450
+ properties: { input: { $ref: '#/$defs/Input' } },
451
+ $defs: { Input: UNION, ...MEMBERS },
452
+ },
453
+ });
454
+ const membersFirst = toOpenApiComponents({
455
+ Request: {
456
+ type: 'object',
457
+ properties: { input: { $ref: '#/$defs/Input' } },
458
+ $defs: { ...MEMBERS, Input: UNION },
459
+ },
460
+ });
461
+
462
+ expect(unionFirst.Input).toEqual(membersFirst.Input);
463
+ expect(unionFirst.Input).toMatchObject({ discriminator: { propertyName: 'kind' }, required: ['kind'] });
464
+ });
465
+
466
+ it('emits the same union from a root that declares it and a root that references it', () => {
467
+ // The shape that actually threw: one root IS the union, another reaches it through a property.
468
+ // `register` compares fingerprints, so two spellings of the same component are a hard failure.
469
+ expect(() =>
470
+ toOpenApiComponents({
471
+ Request: {
472
+ type: 'object',
473
+ properties: { input: { $ref: '#/$defs/Input' } },
474
+ $defs: { Input: UNION, ...MEMBERS },
475
+ },
476
+ Input: { ...UNION, $defs: MEMBERS },
477
+ }),
478
+ ).not.toThrow();
479
+ });
480
+ });