@vertesia/common 1.6.0-dev.20260923.085325Z → 1.6.0-dev.20261004.085740Z

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 (405) hide show
  1. package/lib/access-control-values.d.ts +2 -2
  2. package/lib/access-control-values.d.ts.map +1 -1
  3. package/lib/access-control-values.js +2 -2
  4. package/lib/access-control-values.js.map +1 -1
  5. package/lib/access-control.d.ts +7 -8
  6. package/lib/access-control.d.ts.map +1 -1
  7. package/lib/access-control.js +5 -0
  8. package/lib/access-control.js.map +1 -1
  9. package/lib/analytics.d.ts +6 -7
  10. package/lib/analytics.d.ts.map +1 -1
  11. package/lib/api-contract/components.generated.json +1389 -45
  12. package/lib/api-schemas/access-control.d.ts +33 -10
  13. package/lib/api-schemas/access-control.d.ts.map +1 -1
  14. package/lib/api-schemas/access-control.js +7 -6
  15. package/lib/api-schemas/access-control.js.map +1 -1
  16. package/lib/api-schemas/account.d.ts +5 -4
  17. package/lib/api-schemas/account.d.ts.map +1 -1
  18. package/lib/api-schemas/account.js.map +1 -1
  19. package/lib/api-schemas/agent-budget.d.ts +15 -0
  20. package/lib/api-schemas/agent-budget.d.ts.map +1 -0
  21. package/lib/api-schemas/agent-budget.js +55 -0
  22. package/lib/api-schemas/agent-budget.js.map +1 -0
  23. package/lib/api-schemas/agent-runs.d.ts +1525 -100
  24. package/lib/api-schemas/agent-runs.d.ts.map +1 -1
  25. package/lib/api-schemas/agent-runs.js +60 -28
  26. package/lib/api-schemas/agent-runs.js.map +1 -1
  27. package/lib/api-schemas/apikey.d.ts +11 -10
  28. package/lib/api-schemas/apikey.d.ts.map +1 -1
  29. package/lib/api-schemas/apikey.js.map +1 -1
  30. package/lib/api-schemas/app-lifecycle.d.ts +13 -0
  31. package/lib/api-schemas/app-lifecycle.d.ts.map +1 -1
  32. package/lib/api-schemas/app-lifecycle.js +4 -0
  33. package/lib/api-schemas/app-lifecycle.js.map +1 -1
  34. package/lib/api-schemas/app-runtime.d.ts +1821 -108
  35. package/lib/api-schemas/app-runtime.d.ts.map +1 -1
  36. package/lib/api-schemas/audit-trail.d.ts +20 -0
  37. package/lib/api-schemas/audit-trail.d.ts.map +1 -1
  38. package/lib/api-schemas/audit-trail.js +7 -1
  39. package/lib/api-schemas/audit-trail.js.map +1 -1
  40. package/lib/api-schemas/content.d.ts +665 -30
  41. package/lib/api-schemas/content.d.ts.map +1 -1
  42. package/lib/api-schemas/content.js +47 -0
  43. package/lib/api-schemas/content.js.map +1 -1
  44. package/lib/api-schemas/cost-analytics.d.ts +18 -0
  45. package/lib/api-schemas/cost-analytics.d.ts.map +1 -1
  46. package/lib/api-schemas/cost-analytics.js +31 -2
  47. package/lib/api-schemas/cost-analytics.js.map +1 -1
  48. package/lib/api-schemas/document-processing.d.ts +381 -18
  49. package/lib/api-schemas/document-processing.d.ts.map +1 -1
  50. package/lib/api-schemas/environment.d.ts +0 -5
  51. package/lib/api-schemas/environment.d.ts.map +1 -1
  52. package/lib/api-schemas/environment.js +0 -1
  53. package/lib/api-schemas/environment.js.map +1 -1
  54. package/lib/api-schemas/events.d.ts +1143 -54
  55. package/lib/api-schemas/events.d.ts.map +1 -1
  56. package/lib/api-schemas/group.d.ts +2 -1
  57. package/lib/api-schemas/group.d.ts.map +1 -1
  58. package/lib/api-schemas/group.js.map +1 -1
  59. package/lib/api-schemas/index.d.ts +1 -0
  60. package/lib/api-schemas/index.d.ts.map +1 -1
  61. package/lib/api-schemas/index.js +1 -0
  62. package/lib/api-schemas/index.js.map +1 -1
  63. package/lib/api-schemas/inference-profile.d.ts +5017 -0
  64. package/lib/api-schemas/inference-profile.d.ts.map +1 -0
  65. package/lib/api-schemas/inference-profile.js +135 -0
  66. package/lib/api-schemas/inference-profile.js.map +1 -0
  67. package/lib/api-schemas/integrations.d.ts +6 -6
  68. package/lib/api-schemas/interaction.d.ts +34391 -703
  69. package/lib/api-schemas/interaction.d.ts.map +1 -1
  70. package/lib/api-schemas/interaction.js +34 -1
  71. package/lib/api-schemas/interaction.js.map +1 -1
  72. package/lib/api-schemas/invites.d.ts +10 -9
  73. package/lib/api-schemas/invites.d.ts.map +1 -1
  74. package/lib/api-schemas/invites.js.map +1 -1
  75. package/lib/api-schemas/process.d.ts +653 -34
  76. package/lib/api-schemas/process.d.ts.map +1 -1
  77. package/lib/api-schemas/process.js +66 -0
  78. package/lib/api-schemas/process.js.map +1 -1
  79. package/lib/api-schemas/project-configuration.d.ts +1323 -62
  80. package/lib/api-schemas/project-configuration.d.ts.map +1 -1
  81. package/lib/api-schemas/project-configuration.js +15 -1
  82. package/lib/api-schemas/project-configuration.js.map +1 -1
  83. package/lib/api-schemas/project.d.ts +2031 -116
  84. package/lib/api-schemas/project.d.ts.map +1 -1
  85. package/lib/api-schemas/project.js +9 -1
  86. package/lib/api-schemas/project.js.map +1 -1
  87. package/lib/api-schemas/quota.d.ts +7 -6
  88. package/lib/api-schemas/quota.d.ts.map +1 -1
  89. package/lib/api-schemas/quota.js.map +1 -1
  90. package/lib/api-schemas/registry.d.ts +27820 -35892
  91. package/lib/api-schemas/registry.d.ts.map +1 -1
  92. package/lib/api-schemas/registry.js +55 -5
  93. package/lib/api-schemas/registry.js.map +1 -1
  94. package/lib/api-schemas/run-budget.d.ts +52 -0
  95. package/lib/api-schemas/run-budget.d.ts.map +1 -0
  96. package/lib/api-schemas/run-budget.js +55 -0
  97. package/lib/api-schemas/run-budget.js.map +1 -0
  98. package/lib/api-schemas/store.d.ts +6388 -338
  99. package/lib/api-schemas/store.d.ts.map +1 -1
  100. package/lib/api-schemas/store.js +11 -0
  101. package/lib/api-schemas/store.js.map +1 -1
  102. package/lib/api-schemas/user.d.ts +9 -8
  103. package/lib/api-schemas/user.d.ts.map +1 -1
  104. package/lib/api-schemas/user.js.map +1 -1
  105. package/lib/api-schemas/view-execution.d.ts +8 -0
  106. package/lib/api-schemas/view-execution.d.ts.map +1 -1
  107. package/lib/api-schemas/views.d.ts +14 -0
  108. package/lib/api-schemas/views.d.ts.map +1 -1
  109. package/lib/api-schemas/workflow-runs.d.ts +335 -12
  110. package/lib/api-schemas/workflow-runs.d.ts.map +1 -1
  111. package/lib/api-schemas/workflow-runs.js +2 -0
  112. package/lib/api-schemas/workflow-runs.js.map +1 -1
  113. package/lib/apikey.d.ts +30 -25
  114. package/lib/apikey.d.ts.map +1 -1
  115. package/lib/apikey.js.map +1 -1
  116. package/lib/apps.d.ts +116 -121
  117. package/lib/apps.d.ts.map +1 -1
  118. package/lib/apps.js.map +1 -1
  119. package/lib/audit-trail.d.ts +17 -18
  120. package/lib/audit-trail.d.ts.map +1 -1
  121. package/lib/audit-trail.js +2 -0
  122. package/lib/audit-trail.js.map +1 -1
  123. package/lib/browser-credentials.d.ts +11 -12
  124. package/lib/browser-credentials.d.ts.map +1 -1
  125. package/lib/common.d.ts +17 -24
  126. package/lib/common.d.ts.map +1 -1
  127. package/lib/content-query.d.ts +3 -4
  128. package/lib/content-query.d.ts.map +1 -1
  129. package/lib/cost-analytics.d.ts +13 -21
  130. package/lib/cost-analytics.d.ts.map +1 -1
  131. package/lib/cost-analytics.js +0 -7
  132. package/lib/cost-analytics.js.map +1 -1
  133. package/lib/data-platform.d.ts +79 -88
  134. package/lib/data-platform.d.ts.map +1 -1
  135. package/lib/data-platform.js.map +1 -1
  136. package/lib/delegation.d.ts +4 -5
  137. package/lib/delegation.d.ts.map +1 -1
  138. package/lib/email.d.ts +15 -17
  139. package/lib/email.d.ts.map +1 -1
  140. package/lib/email.js.map +1 -1
  141. package/lib/embeddings.d.ts +25 -26
  142. package/lib/embeddings.d.ts.map +1 -1
  143. package/lib/environment.d.ts +16 -17
  144. package/lib/environment.d.ts.map +1 -1
  145. package/lib/environment.js.map +1 -1
  146. package/lib/facets.d.ts +3 -4
  147. package/lib/facets.d.ts.map +1 -1
  148. package/lib/group.d.ts +6 -7
  149. package/lib/group.d.ts.map +1 -1
  150. package/lib/group.js.map +1 -1
  151. package/lib/index.d.ts +3 -1
  152. package/lib/index.d.ts.map +1 -1
  153. package/lib/index.js.map +1 -1
  154. package/lib/inference-profile.d.ts +17 -0
  155. package/lib/inference-profile.d.ts.map +1 -0
  156. package/lib/inference-profile.js +2 -0
  157. package/lib/inference-profile.js.map +1 -0
  158. package/lib/integrations.d.ts +19 -20
  159. package/lib/integrations.d.ts.map +1 -1
  160. package/lib/integrations.js.map +1 -1
  161. package/lib/interaction.d.ts +68 -73
  162. package/lib/interaction.d.ts.map +1 -1
  163. package/lib/interaction.js.map +1 -1
  164. package/lib/meters.d.ts +4 -5
  165. package/lib/meters.d.ts.map +1 -1
  166. package/lib/oauth-server.d.ts +40 -41
  167. package/lib/oauth-server.d.ts.map +1 -1
  168. package/lib/oauth.d.ts +9 -10
  169. package/lib/oauth.d.ts.map +1 -1
  170. package/lib/payload.d.ts +11 -14
  171. package/lib/payload.d.ts.map +1 -1
  172. package/lib/pending-asks.d.ts +8 -13
  173. package/lib/pending-asks.d.ts.map +1 -1
  174. package/lib/pending-asks.js +0 -4
  175. package/lib/pending-asks.js.map +1 -1
  176. package/lib/platform-event.d.ts +48 -51
  177. package/lib/platform-event.d.ts.map +1 -1
  178. package/lib/platform-event.js.map +1 -1
  179. package/lib/principal-context.d.ts +3 -3
  180. package/lib/principal-context.d.ts.map +1 -1
  181. package/lib/project.d.ts +42 -43
  182. package/lib/project.d.ts.map +1 -1
  183. package/lib/project.js.map +1 -1
  184. package/lib/prompt.d.ts +14 -16
  185. package/lib/prompt.d.ts.map +1 -1
  186. package/lib/prompt.js.map +1 -1
  187. package/lib/query.d.ts +10 -13
  188. package/lib/query.d.ts.map +1 -1
  189. package/lib/rate-limiter.d.ts +7 -11
  190. package/lib/rate-limiter.d.ts.map +1 -1
  191. package/lib/refs.d.ts +2 -3
  192. package/lib/refs.d.ts.map +1 -1
  193. package/lib/refs.js.map +1 -1
  194. package/lib/roles/types.d.ts +5 -6
  195. package/lib/roles/types.d.ts.map +1 -1
  196. package/lib/roles/types.js.map +1 -1
  197. package/lib/run-budget.d.ts +8 -0
  198. package/lib/run-budget.d.ts.map +1 -0
  199. package/lib/run-budget.js +2 -0
  200. package/lib/run-budget.js.map +1 -0
  201. package/lib/runs.d.ts +9 -10
  202. package/lib/runs.d.ts.map +1 -1
  203. package/lib/secrets.d.ts +20 -21
  204. package/lib/secrets.d.ts.map +1 -1
  205. package/lib/store/agent-approval.d.ts +4 -5
  206. package/lib/store/agent-approval.d.ts.map +1 -1
  207. package/lib/store/agent-approval.js.map +1 -1
  208. package/lib/store/agent-run.d.ts +50 -52
  209. package/lib/store/agent-run.d.ts.map +1 -1
  210. package/lib/store/agent-run.js.map +1 -1
  211. package/lib/store/collections.d.ts +11 -12
  212. package/lib/store/collections.d.ts.map +1 -1
  213. package/lib/store/collections.js.map +1 -1
  214. package/lib/store/conversation-state.d.ts +14 -8
  215. package/lib/store/conversation-state.d.ts.map +1 -1
  216. package/lib/store/doc-analyzer.d.ts +7 -8
  217. package/lib/store/doc-analyzer.d.ts.map +1 -1
  218. package/lib/store/dsl-workflow.d.ts +10 -12
  219. package/lib/store/dsl-workflow.d.ts.map +1 -1
  220. package/lib/store/dsl-workflow.js.map +1 -1
  221. package/lib/store/duration.d.ts +12 -0
  222. package/lib/store/duration.d.ts.map +1 -0
  223. package/lib/store/duration.js +2 -0
  224. package/lib/store/duration.js.map +1 -0
  225. package/lib/store/grounded-extraction.d.ts +6 -7
  226. package/lib/store/grounded-extraction.d.ts.map +1 -1
  227. package/lib/store/intake-policy-schema.generated.d.ts.map +1 -1
  228. package/lib/store/intake-policy-schema.generated.js +143 -2
  229. package/lib/store/intake-policy-schema.generated.js.map +1 -1
  230. package/lib/store/process.d.ts +70 -69
  231. package/lib/store/process.d.ts.map +1 -1
  232. package/lib/store/process.js.map +1 -1
  233. package/lib/store/rendering.d.ts +6 -12
  234. package/lib/store/rendering.d.ts.map +1 -1
  235. package/lib/store/rendering.js +0 -5
  236. package/lib/store/rendering.js.map +1 -1
  237. package/lib/store/signals.d.ts +43 -0
  238. package/lib/store/signals.d.ts.map +1 -1
  239. package/lib/store/signals.js +6 -1
  240. package/lib/store/signals.js.map +1 -1
  241. package/lib/store/store.d.ts +92 -91
  242. package/lib/store/store.d.ts.map +1 -1
  243. package/lib/store/store.js.map +1 -1
  244. package/lib/store/task.d.ts +10 -14
  245. package/lib/store/task.d.ts.map +1 -1
  246. package/lib/store/workflow.d.ts +35 -41
  247. package/lib/store/workflow.d.ts.map +1 -1
  248. package/lib/store/workflow.js.map +1 -1
  249. package/lib/sts-token-types.d.ts +14 -19
  250. package/lib/sts-token-types.d.ts.map +1 -1
  251. package/lib/tools.d.ts +12 -13
  252. package/lib/tools.d.ts.map +1 -1
  253. package/lib/transient-tokens.d.ts +3 -3
  254. package/lib/transient-tokens.d.ts.map +1 -1
  255. package/lib/user.d.ts +17 -20
  256. package/lib/user.d.ts.map +1 -1
  257. package/lib/user.js.map +1 -1
  258. package/lib/vertesia-common.js +2 -2
  259. package/lib/vertesia-common.js.map +1 -1
  260. package/lib/views.d.ts +61 -64
  261. package/lib/views.d.ts.map +1 -1
  262. package/lib/views.js.map +1 -1
  263. package/lib/wire-types.generated.d.ts +11231 -0
  264. package/lib/wire-types.generated.d.ts.map +1 -0
  265. package/lib/wire-types.generated.js +4 -0
  266. package/lib/wire-types.generated.js.map +1 -0
  267. package/lib/workflow-analytics.d.ts +21 -19
  268. package/lib/workflow-analytics.d.ts.map +1 -1
  269. package/lib/workflow-analytics.js +2 -2
  270. package/lib/workflow-analytics.js.map +1 -1
  271. package/package.json +15 -10
  272. package/src/access-control-values.ts +2 -2
  273. package/src/access-control.ts +7 -15
  274. package/src/analytics.ts +6 -13
  275. package/src/api-contract/components.generated.json +1389 -45
  276. package/src/api-schemas/access-control.ts +18 -16
  277. package/src/api-schemas/account.ts +5 -4
  278. package/src/api-schemas/agent-budget.ts +60 -0
  279. package/src/api-schemas/agent-runs.ts +63 -27
  280. package/src/api-schemas/apikey.ts +11 -10
  281. package/src/api-schemas/app-lifecycle.ts +5 -0
  282. package/src/api-schemas/audit-trail.ts +7 -1
  283. package/src/api-schemas/content.ts +55 -0
  284. package/src/api-schemas/cost-analytics.ts +34 -2
  285. package/src/api-schemas/environment.ts +0 -1
  286. package/src/api-schemas/group.ts +2 -1
  287. package/src/api-schemas/index.ts +1 -0
  288. package/src/api-schemas/inference-profile.ts +151 -0
  289. package/src/api-schemas/interaction.ts +40 -1
  290. package/src/api-schemas/invites.ts +10 -9
  291. package/src/api-schemas/process.ts +78 -2
  292. package/src/api-schemas/project-configuration.ts +19 -1
  293. package/src/api-schemas/project.ts +19 -10
  294. package/src/api-schemas/quota.ts +7 -6
  295. package/src/api-schemas/registry.ts +131 -33
  296. package/src/api-schemas/run-budget.ts +60 -0
  297. package/src/api-schemas/store.ts +12 -0
  298. package/src/api-schemas/user.ts +9 -8
  299. package/src/api-schemas/workflow-runs.ts +2 -0
  300. package/src/apikey.ts +30 -39
  301. package/src/apps.ts +116 -239
  302. package/src/audit-trail.ts +18 -33
  303. package/src/browser-credentials.ts +11 -23
  304. package/src/common.ts +17 -37
  305. package/src/content-query.ts +3 -4
  306. package/src/cost-analytics.ts +13 -35
  307. package/src/data-platform.ts +79 -168
  308. package/src/delegation.ts +4 -9
  309. package/src/email.ts +15 -29
  310. package/src/embeddings.ts +25 -51
  311. package/src/environment.ts +16 -33
  312. package/src/facets.ts +3 -4
  313. package/src/group.ts +6 -13
  314. package/src/index.ts +27 -0
  315. package/src/inference-profile.ts +20 -0
  316. package/src/integrations.ts +21 -41
  317. package/src/interaction.ts +68 -137
  318. package/src/meters.ts +4 -9
  319. package/src/oauth-server.ts +40 -81
  320. package/src/oauth.ts +9 -19
  321. package/src/payload.ts +11 -25
  322. package/src/pending-asks.ts +8 -22
  323. package/src/platform-event.ts +48 -97
  324. package/src/principal-context.ts +3 -3
  325. package/src/project.ts +43 -86
  326. package/src/prompt.ts +14 -31
  327. package/src/query.ts +10 -20
  328. package/src/rate-limiter.ts +7 -19
  329. package/src/refs.ts +2 -3
  330. package/src/roles/types.ts +5 -11
  331. package/src/run-budget.ts +8 -0
  332. package/src/runs.ts +9 -19
  333. package/src/secrets.ts +20 -41
  334. package/src/store/agent-approval.ts +4 -9
  335. package/src/store/agent-run.ts +53 -99
  336. package/src/store/collections.ts +11 -23
  337. package/src/store/conversation-state.ts +15 -15
  338. package/src/store/doc-analyzer.ts +7 -15
  339. package/src/store/dsl-workflow.ts +10 -23
  340. package/src/store/duration.ts +45 -0
  341. package/src/store/grounded-extraction.ts +6 -13
  342. package/src/store/intake-policy-schema.generated.ts +148 -2
  343. package/src/store/process.ts +70 -140
  344. package/src/store/rendering.ts +6 -19
  345. package/src/store/signals.ts +48 -0
  346. package/src/store/store.ts +92 -181
  347. package/src/store/task.ts +10 -24
  348. package/src/store/workflow.ts +35 -71
  349. package/src/sts-token-types.ts +14 -33
  350. package/src/tools.ts +12 -25
  351. package/src/transient-tokens.ts +3 -3
  352. package/src/user.ts +17 -39
  353. package/src/views.ts +61 -125
  354. package/src/wire-types.generated.ts +11889 -0
  355. package/src/workflow-analytics.ts +21 -19
  356. package/src/agent-resources.test.ts +0 -89
  357. package/src/api-contract/components.contract.test.ts +0 -99
  358. package/src/api-schemas/access-control.contract.test.ts +0 -209
  359. package/src/api-schemas/account-apikey.test.ts +0 -60
  360. package/src/api-schemas/account.contract.test.ts +0 -319
  361. package/src/api-schemas/adapter-edge-cases.test.ts +0 -499
  362. package/src/api-schemas/agent-communication.contract.test.ts +0 -90
  363. package/src/api-schemas/agent-history.contract.test.ts +0 -42
  364. package/src/api-schemas/agent-runs.contract.test.ts +0 -240
  365. package/src/api-schemas/api-discriminators.test.ts +0 -185
  366. package/src/api-schemas/apikey.contract.test.ts +0 -270
  367. package/src/api-schemas/app-delete-summary.contract.test.ts +0 -67
  368. package/src/api-schemas/bulk-operation.contract.test.ts +0 -39
  369. package/src/api-schemas/bundle-isolation.test.ts +0 -44
  370. package/src/api-schemas/commands.contract.test.ts +0 -51
  371. package/src/api-schemas/cost-analytics.contract.test.ts +0 -64
  372. package/src/api-schemas/dashboard.contract.test.ts +0 -138
  373. package/src/api-schemas/data-store.contract.test.ts +0 -97
  374. package/src/api-schemas/document-processing.contract.test.ts +0 -76
  375. package/src/api-schemas/emit-json-schema.test.ts +0 -36
  376. package/src/api-schemas/environment.contract.test.ts +0 -202
  377. package/src/api-schemas/group.contract.test.ts +0 -205
  378. package/src/api-schemas/indexing.contract.test.ts +0 -122
  379. package/src/api-schemas/interaction.contract.test.ts +0 -307
  380. package/src/api-schemas/invites.contract.test.ts +0 -268
  381. package/src/api-schemas/llumiverse.contract.test.ts +0 -179
  382. package/src/api-schemas/mcp-api-key.contract.test.ts +0 -125
  383. package/src/api-schemas/oauth.contract.test.ts +0 -181
  384. package/src/api-schemas/parameters.test.ts +0 -402
  385. package/src/api-schemas/process.contract.test.ts +0 -115
  386. package/src/api-schemas/project.contract.test.ts +0 -472
  387. package/src/api-schemas/pruning-limits.test.ts +0 -189
  388. package/src/api-schemas/quota.contract.test.ts +0 -147
  389. package/src/api-schemas/registry-groups.test.ts +0 -99
  390. package/src/api-schemas/response-pruning.test.ts +0 -260
  391. package/src/api-schemas/store.contract.test.ts +0 -378
  392. package/src/api-schemas/sts.contract.test.ts +0 -112
  393. package/src/api-schemas/user.contract.test.ts +0 -197
  394. package/src/api-schemas/views.contract.test.ts +0 -112
  395. package/src/api-schemas/zeno-response-contracts.test.ts +0 -380
  396. package/src/apps.test.ts +0 -89
  397. package/src/oauth-scopes.test.ts +0 -15
  398. package/src/roles.test.ts +0 -33
  399. package/src/schema-for-extraction.test.ts +0 -191
  400. package/src/store/agent-approval.test.ts +0 -18
  401. package/src/store/content-type-editing.test.ts +0 -17
  402. package/src/store/ms.d.ts +0 -42
  403. package/src/store/schedule.test.ts +0 -59
  404. package/src/store/workflow.test.ts +0 -640
  405. package/src/versions.test.ts +0 -13
@@ -1,138 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import type { z } from 'zod';
3
- import type {
4
- CreateDashboardPayload,
5
- Dashboard,
6
- DashboardDataSource,
7
- DashboardItem,
8
- DashboardStatus,
9
- DashboardVersion,
10
- UpdateDashboardPayload,
11
- } from '../data-platform.js';
12
- import type {
13
- CreateDashboardPayloadSchema,
14
- DashboardDataSourceSchema,
15
- DashboardItemSchema,
16
- DashboardSchema,
17
- DashboardStatusSchema,
18
- DashboardVersionSchema,
19
- UpdateDashboardPayloadSchema,
20
- } from './dashboard.js';
21
- import { ApiSchemaComponents, validateApiRequest, validateApiResponse } from './registry.js';
22
-
23
- type Equals<A, B> = (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2 ? true : false;
24
- function assertType<T extends true>(_ok: T): void {}
25
-
26
- describe('the dashboard public types', () => {
27
- it('derive from the runtime schemas instead of restating them', () => {
28
- assertType<Equals<DashboardStatus, z.infer<typeof DashboardStatusSchema>>>(true);
29
- assertType<Equals<DashboardDataSource, z.infer<typeof DashboardDataSourceSchema>>>(true);
30
- assertType<Equals<DashboardItem, z.infer<typeof DashboardItemSchema>>>(true);
31
- assertType<Equals<Dashboard, z.infer<typeof DashboardSchema>>>(true);
32
- assertType<Equals<DashboardVersion, z.infer<typeof DashboardVersionSchema>>>(true);
33
- assertType<Equals<CreateDashboardPayload, z.infer<typeof CreateDashboardPayloadSchema>>>(true);
34
- assertType<Equals<UpdateDashboardPayload, z.infer<typeof UpdateDashboardPayloadSchema>>>(true);
35
- });
36
-
37
- it('keeps the runtime status values available without importing Zod from the root entry', async () => {
38
- const common = await import('../data-platform.js');
39
- expect(common.DashboardStatus).toEqual({ ACTIVE: 'active', ARCHIVED: 'archived' });
40
- });
41
- });
42
-
43
- describe('dashboard request validation', () => {
44
- const create = {
45
- name: 'Revenue',
46
- dataSource: { kind: 'data_sql', query: 'select * from revenue' },
47
- spec: { mark: 'bar' },
48
- };
49
-
50
- it('accepts the two documented data-source branches', () => {
51
- expect(validateApiRequest('CreateDashboardPayload', create)).toMatchObject({ valid: true });
52
- expect(
53
- validateApiRequest('CreateDashboardPayload', {
54
- ...create,
55
- dataSource: { kind: 'store_es_dsl', dsl: { size: 20 }, result: { type: 'hits' } },
56
- }),
57
- ).toMatchObject({ valid: true });
58
- });
59
-
60
- it('rejects an unknown data-source discriminator and undeclared payload fields', () => {
61
- expect(
62
- validateApiRequest('CreateDashboardPayload', {
63
- ...create,
64
- dataSource: { kind: 'http', url: 'https://example.test/data' },
65
- }).valid,
66
- ).toBe(false);
67
- expect(validateApiRequest('CreateDashboardPayload', { ...create, project: 'ignored-before' }).valid).toBe(
68
- false,
69
- );
70
- });
71
-
72
- it('accepts legacy updates without a revision while rejecting undeclared fields', () => {
73
- expect(validateApiRequest('UpdateDashboardPayload', {}).valid).toBe(true);
74
- expect(validateApiRequest('UpdateDashboardPayload', { summary: 'Legacy update' }).valid).toBe(true);
75
- expect(
76
- validateApiRequest('UpdateDashboardPayload', {
77
- expected_edit_revision: 1,
78
- spec: { mark: 'line' },
79
- }),
80
- ).toMatchObject({
81
- valid: true,
82
- });
83
- expect(
84
- validateApiRequest('UpdateDashboardPayload', { expected_edit_revision: 1, skip_versioning: true }),
85
- ).toMatchObject({ valid: true });
86
- expect(validateApiRequest('UpdateDashboardPayload', { expected_edit_revision: 1, unknown: true }).valid).toBe(
87
- false,
88
- );
89
- });
90
-
91
- it('keeps the two bulk bodies as the free-form string-array map already published', () => {
92
- expect(validateApiRequest('StringArrayMap', { ids: ['one', 'two'] })).toMatchObject({ valid: true });
93
- expect(validateApiRequest('StringArrayMap', { labels: ['one'] })).toMatchObject({ valid: true });
94
- expect(validateApiRequest('StringArrayMap', { ids: 'one' }).valid).toBe(false);
95
- });
96
- });
97
-
98
- describe('dashboard response validation', () => {
99
- const item = {
100
- id: 'dashboard-1',
101
- edit_revision: 1,
102
- name: 'Revenue',
103
- tags: [],
104
- updated_by: 'user:editor',
105
- created_by: 'user:author',
106
- created_at: '2026-08-01T00:00:00.000Z',
107
- updated_at: '2026-08-02T00:00:00.000Z',
108
- store_id: 'store-1',
109
- status: 'active',
110
- panel_count: 0,
111
- query_count: 0,
112
- };
113
-
114
- it('accepts the mapper-produced listing and full response shapes', () => {
115
- expect(validateApiResponse('DashboardItem', item)).toMatchObject({ valid: true });
116
- expect(
117
- validateApiResponse('Dashboard', {
118
- ...item,
119
- query: 'select * from revenue',
120
- spec: { mark: 'bar' },
121
- queries: [],
122
- panels: [],
123
- layout: { columns: 2, cellWidth: 600, cellHeight: 400, padding: 20 },
124
- }),
125
- ).toMatchObject({ valid: true });
126
- });
127
-
128
- it('rejects persistence-only fields instead of allowing a document spread to escape', () => {
129
- expect(validateApiResponse('DashboardItem', { ...item, account: 'account-1' }).valid).toBe(false);
130
- });
131
-
132
- it('registers the complete response closure used by the endpoints', () => {
133
- expect(ApiSchemaComponents).toHaveProperty('DashboardItemArray');
134
- expect(ApiSchemaComponents).toHaveProperty('DashboardVersionItemArray');
135
- expect(ApiSchemaComponents).toHaveProperty('DashboardVersion');
136
- expect(ApiSchemaComponents).toHaveProperty('Dashboard');
137
- });
138
- });
@@ -1,97 +0,0 @@
1
- import { describe, expect, expectTypeOf, it } from 'vitest';
2
- import type {
3
- AlterTableOperation,
4
- DataStore,
5
- DataStoreSchemaResponse,
6
- ImportJob,
7
- ListDataStoreVersionsQuery,
8
- } from '../data-platform.js';
9
- import type {
10
- AlterTableOperationSchema,
11
- DataStoreSchema,
12
- DataStoreSchemaResponseSchema,
13
- ImportJobSchema,
14
- ListDataStoreVersionsQuerySchema,
15
- } from './data-store.js';
16
- import { ApiSchemaComponents, validateApiRequest, validateApiResponse } from './registry.js';
17
-
18
- describe('data-store API contracts', () => {
19
- it('derives the public types from the runtime schemas', () => {
20
- expectTypeOf<DataStore>().toEqualTypeOf<import('zod').z.infer<typeof DataStoreSchema>>();
21
- expectTypeOf<ImportJob>().toEqualTypeOf<import('zod').z.infer<typeof ImportJobSchema>>();
22
- expectTypeOf<AlterTableOperation>().toEqualTypeOf<import('zod').z.infer<typeof AlterTableOperationSchema>>();
23
- expectTypeOf<DataStoreSchemaResponse>().toEqualTypeOf<
24
- import('zod').z.infer<typeof DataStoreSchemaResponseSchema>
25
- >();
26
- expectTypeOf<ListDataStoreVersionsQuery>().toEqualTypeOf<
27
- import('zod').z.infer<typeof ListDataStoreVersionsQuerySchema>
28
- >();
29
- });
30
-
31
- it('accepts a recoverable import ID at the HTTP request boundary', () => {
32
- const input = { mode: 'append', message: 'Import rows', tables: {}, import_id: '6aa400001234567890abcdef' };
33
- expect(validateApiRequest('ImportDataPayload', input).valid).toBe(true);
34
- expect(validateApiRequest('ImportDataPayload', { ...input, import_id: 'invalid' }).valid).toBe(false);
35
- });
36
-
37
- it('rejects undeclared request fields through the published component', () => {
38
- expect(
39
- validateApiRequest('CreateDataStorePayload', {
40
- name: 'analytics',
41
- project: 'ignored-by-the-old-handler',
42
- }).valid,
43
- ).toBe(false);
44
- });
45
-
46
- it('enforces every alter-table discriminator branch', () => {
47
- expect(
48
- validateApiRequest('AlterTablePayload', {
49
- changes: [{ op: 'rename_column', from: 'old_name', to: 'new_name' }],
50
- }).valid,
51
- ).toBe(true);
52
-
53
- expect(
54
- validateApiRequest('AlterTablePayload', {
55
- changes: [{ op: 'rename_column', from: 'old_name', column: 'new_name' }],
56
- }).valid,
57
- ).toBe(false);
58
- });
59
-
60
- it('keeps free-form row and parameter maps open', () => {
61
- expect(
62
- validateApiRequest('QueryPayload', {
63
- sql: 'SELECT * FROM users WHERE tenant = $tenant',
64
- params: { tenant: 'project-1', include_archived: false },
65
- }).valid,
66
- ).toBe(true);
67
- });
68
-
69
- it('requires the renamed store_id field on import-job responses', () => {
70
- const response: ImportJob = {
71
- id: 'job-1',
72
- store_id: 'store-1',
73
- status: 'completed',
74
- tables: ['users'],
75
- mode: 'append',
76
- rows_imported: 2,
77
- started_at: '2026-08-02T00:00:00.000Z',
78
- };
79
- expect(validateApiResponse('ImportJob', response).valid).toBe(true);
80
- expect(validateApiResponse('ImportJob', { ...response, store_id: undefined }).valid).toBe(false);
81
- });
82
-
83
- it('registers the entire data-store reference closure', () => {
84
- for (const name of [
85
- 'DataStore',
86
- 'DataSchema',
87
- 'DataTable',
88
- 'DataColumn',
89
- 'DataStoreSchemaResponse',
90
- 'DataSchemaForAI',
91
- 'ListDataStoreVersionsQuery',
92
- 'GetDataStoreTableQuery',
93
- ]) {
94
- expect(ApiSchemaComponents[name]).toBeDefined();
95
- }
96
- });
97
- });
@@ -1,76 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import type { DocAnalyzeRunStatusResponse, DocumentPrepOptions } from '../store/doc-analyzer.js';
3
- import type { GroundedExtractionRequest } from '../store/grounded-extraction.js';
4
- import type {
5
- RenderMarkdownPayload,
6
- RenderMarkdownStartResponse,
7
- RenderMarkdownStatusQuery,
8
- } from '../store/rendering.js';
9
- import { MarkdownRenditionFormat } from '../store/store.js';
10
- import { WorkflowExecutionStatus } from '../store/workflow.js';
11
- import type {
12
- DocAnalyzeRunStatusResponseSchema,
13
- DocumentPrepOptionsSchema,
14
- GroundedExtractionRequestSchema,
15
- RenderMarkdownPayloadSchema,
16
- RenderMarkdownStartResponseSchema,
17
- RenderMarkdownStatusQuerySchema,
18
- } from './document-processing.js';
19
- import { validateApiRequest, validateApiResponse } from './registry.js';
20
-
21
- type Equals<A, B> = (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2 ? true : false;
22
- function assertType<T extends true>(_value: T): void {}
23
-
24
- describe('rendering and document-processing API contracts', () => {
25
- it('derives the public types from their schemas', () => {
26
- assertType<Equals<RenderMarkdownPayload, typeof RenderMarkdownPayloadSchema._output>>(true);
27
- assertType<Equals<RenderMarkdownStartResponse, typeof RenderMarkdownStartResponseSchema._output>>(true);
28
- assertType<Equals<RenderMarkdownStatusQuery, typeof RenderMarkdownStatusQuerySchema._output>>(true);
29
- assertType<Equals<DocumentPrepOptions, typeof DocumentPrepOptionsSchema._output>>(true);
30
- assertType<Equals<GroundedExtractionRequest, typeof GroundedExtractionRequestSchema._output>>(true);
31
- assertType<Equals<DocAnalyzeRunStatusResponse, typeof DocAnalyzeRunStatusResponseSchema._output>>(true);
32
- });
33
-
34
- it('keeps WorkflowExecutionStatus numeric on the wire', () => {
35
- expect(
36
- validateApiResponse('RenderMarkdownStartResponse', {
37
- workflow_id: 'render:1',
38
- workflow_run_id: 'run-1',
39
- status: WorkflowExecutionStatus.RUNNING,
40
- format: MarkdownRenditionFormat.pdf,
41
- }).valid,
42
- ).toBe(true);
43
- expect(
44
- validateApiResponse('RenderMarkdownStartResponse', {
45
- workflow_id: 'render:1',
46
- workflow_run_id: 'run-1',
47
- status: WorkflowExecutionStatus.TIMED_OUT,
48
- format: MarkdownRenditionFormat.pdf,
49
- }).valid,
50
- ).toBe(true);
51
- expect(
52
- validateApiResponse('RenderMarkdownStartResponse', {
53
- workflow_id: 'render:1',
54
- workflow_run_id: 'run-1',
55
- status: 'RUNNING',
56
- format: MarkdownRenditionFormat.pdf,
57
- }).valid,
58
- ).toBe(false);
59
- });
60
-
61
- it('keeps document prep extensible while closing grounded extraction', () => {
62
- expect(validateApiRequest('DocumentPrepOptions', { custom_processor_flag: true }).valid).toBe(true);
63
- expect(validateApiRequest('GroundedExtractionRequest', { force_ocr: true }).valid).toBe(true);
64
- expect(validateApiRequest('GroundedExtractionRequest', { force_ocr: true, unexpected: true }).valid).toBe(
65
- false,
66
- );
67
- });
68
-
69
- it('enforces the published rendering metadata author array', () => {
70
- const base = { format: MarkdownRenditionFormat.pdf, content: '# Report' };
71
- expect(validateApiRequest('RenderMarkdownPayload', { ...base, metadata: { author: ['Ada'] } }).valid).toBe(
72
- true,
73
- );
74
- expect(validateApiRequest('RenderMarkdownPayload', { ...base, metadata: { author: 'Ada' } }).valid).toBe(false);
75
- });
76
- });
@@ -1,36 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { z } from 'zod';
3
- import { toOpenApiComponents } from './adapter.js';
4
- import { emitJsonSchema } from './emit-json-schema.js';
5
-
6
- describe('explicit union emission', () => {
7
- it('preserves optional explicit unions and nullable schemas', () => {
8
- const schema = z.object({
9
- explicit: z.union([z.string(), z.null()]).optional().describe('Clear with null'),
10
- nullable: z.string().nullable(),
11
- });
12
- const emitted = emitJsonSchema(schema);
13
- expect(emitted.properties).toEqual({
14
- explicit: { anyOf: [{ type: 'string' }, { type: 'null' }], description: 'Clear with null' },
15
- nullable: { anyOf: [{ type: 'string' }, { type: 'null' }] },
16
- });
17
- expect(JSON.stringify(emitted)).not.toContain('x-vertesia-explicit-union');
18
- });
19
-
20
- it('preserves referenced explicit unions inside named definitions', () => {
21
- const value = z.union([z.string(), z.boolean(), z.number(), z.null()]).meta({ id: 'Value' });
22
- const schema = z.object({ value }).meta({ id: 'Holder' });
23
- const components = toOpenApiComponents({ Holder: emitJsonSchema(schema) });
24
- expect(components.Value).toEqual({
25
- anyOf: [{ type: 'string' }, { type: 'boolean' }, { type: 'number' }, { type: 'null' }],
26
- });
27
- expect(JSON.stringify(components)).not.toContain('x-vertesia-explicit-union');
28
- });
29
-
30
- it('retains constraints on union branches', () => {
31
- expect(emitJsonSchema(z.union([z.string().min(2), z.null()])).anyOf).toEqual([
32
- { type: 'string', minLength: 2 },
33
- { type: 'null' },
34
- ]);
35
- });
36
- });
@@ -1,202 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { SupportedProviders } from '../environment.js';
3
- import { ApiSchemaComponents, validateApiRequest, validateApiResponse } from './registry.js';
4
-
5
- /**
6
- * The environment contracts, pinned where converting them changed what the document says or where
7
- * the conversion had a choice to make.
8
- *
9
- * Thirty-six components, of which thirty-two re-emit byte-identically; what is asserted here is the
10
- * four that do not, the two provider vocabularies that have to stay in step, and the secret boundary
11
- * that is the reason the read and write shapes are separate objects.
12
- */
13
-
14
- describe('the provider vocabulary', () => {
15
- /**
16
- * `SupportedProviders` is llumiverse's `Providers` merged with the three studio-only virtual
17
- * providers, and the schema reads its members off that merged object rather than restating them.
18
- * This is the assertion that it still does: a provider added on either side has to reach the
19
- * document without anyone editing a list, which is the whole reason `z.enum()` takes the object.
20
- */
21
- it('publishes every member of the merged provider object, in its order', () => {
22
- expect(enumOf('SupportedProviders')).toEqual(Object.values(SupportedProviders));
23
- });
24
-
25
- it('includes the studio-only virtual providers, which llumiverse does not know about', () => {
26
- expect(enumOf('SupportedProviders')).toEqual(
27
- expect.arrayContaining(['virtual_lb', 'virtual_mediator', 'test']),
28
- );
29
- });
30
-
31
- it('rejects a provider that is neither', () => {
32
- expect(validateApiRequest('ExecutionEnvironmentCreatePayload', { name: 'e', provider: 'openai' }).valid).toBe(
33
- true,
34
- );
35
- expect(
36
- validateApiRequest('ExecutionEnvironmentCreatePayload', { name: 'router', provider: 'openrouter' }).valid,
37
- ).toBe(true);
38
- expect(validateApiRequest('ExecutionEnvironmentCreatePayload', { name: 'e', provider: 'gpt' }).valid).toBe(
39
- false,
40
- );
41
- });
42
- });
43
-
44
- describe('the environment secret boundary', () => {
45
- it('accepts an API key on create', () => {
46
- expect(
47
- validateApiRequest('ExecutionEnvironmentCreatePayload', {
48
- name: 'vertex',
49
- provider: 'vertexai',
50
- apiKey: 'shhh',
51
- }),
52
- ).toMatchObject({ valid: true });
53
- });
54
-
55
- it('publishes apiKey on the read shape, because what comes back is the masked value', () => {
56
- // Unlike the OAuth providers, the read shape does NOT drop the field: `toEnvironmentResponse`
57
- // overwrites it with `apikey_hint` or a masked form of the key, so the property a caller reads
58
- // is a display hint rather than a credential. The response contract has to allow it, or every
59
- // environment read would fail its own check.
60
- const environment = {
61
- id: '68b1779130afe5403a1589ba',
62
- name: 'vertex',
63
- provider: 'vertexai',
64
- apiKey: 'AKIA...3xQf',
65
- apikey_hint: 'AKIA...3xQf',
66
- account: '69d4762f24d3048c99149d0b',
67
- created_by: 'u1',
68
- updated_by: 'u1',
69
- created_at: '2026-01-01T00:00:00.000Z',
70
- updated_at: '2026-01-01T00:00:00.000Z',
71
- };
72
-
73
- expect(validateApiResponse('ExecutionEnvironment', environment)).toMatchObject({ valid: true });
74
- expect(validateApiResponse('ExecutionEnvironment', { ...environment, secret: 'x' }).valid).toBe(false);
75
- });
76
- });
77
-
78
- describe('ExecutionEnvironmentSettings', () => {
79
- /**
80
- * The one component in this closure published OPEN. It carried an index signature, so a setting
81
- * for a provider this build has never heard of round-trips instead of being rejected — which is
82
- * what the settings bag is for, and the reason it is absent from `STRICT_COMPONENTS`.
83
- */
84
- it('accepts a setting it does not declare', () => {
85
- expect(
86
- validateApiRequest('ExecutionEnvironmentUpdatePayload', {
87
- settings: { bucket_access_principal: 'sa@p.iam', some_future_driver_flag: true },
88
- }),
89
- ).toMatchObject({ valid: true });
90
- });
91
-
92
- it('still rejects an undeclared property on the payload around it', () => {
93
- expect(validateApiRequest('ExecutionEnvironmentUpdatePayload', { setttings: {} }).valid).toBe(false);
94
- });
95
- });
96
-
97
- describe('the create and update payloads', () => {
98
- /**
99
- * They used to be `Omit<ExecutionEnvironment, ...>` and `Partial<Omit<...>>`. Both are stated
100
- * where they are named now, from one shared field list — so the assertion that matters is that
101
- * the two still describe the same fields, which the mapped types used to guarantee structurally.
102
- */
103
- it('describe the same fields, one requiring name and provider and the other requiring nothing', () => {
104
- expect(propertiesOf('ExecutionEnvironmentUpdatePayload')).toEqual(
105
- propertiesOf('ExecutionEnvironmentCreatePayload'),
106
- );
107
- expect(requiredOf('ExecutionEnvironmentCreatePayload')).toEqual(['name', 'provider']);
108
- expect(requiredOf('ExecutionEnvironmentUpdatePayload')).toEqual([]);
109
- });
110
-
111
- it('neither accepts a server-owned field', () => {
112
- // `id`, `account` and the audit fields are on the read shape only. A payload carrying one used
113
- // to be silently ignored; the write shapes not listing them is what makes it a 400.
114
- for (const field of ['id', 'account', 'created_by', 'created_at', 'apikey_hint']) {
115
- expect(
116
- validateApiRequest('ExecutionEnvironmentCreatePayload', { name: 'e', provider: 'test', [field]: 'x' })
117
- .valid,
118
- ).toBe(false);
119
- expect(validateApiRequest('ExecutionEnvironmentUpdatePayload', { [field]: 'x' }).valid).toBe(false);
120
- }
121
- });
122
-
123
- it('accepts an empty update body', () => {
124
- expect(validateApiRequest('ExecutionEnvironmentUpdatePayload', {}).valid).toBe(true);
125
- });
126
- });
127
-
128
- describe('the model search query', () => {
129
- /**
130
- * `text` was published `required: true` and is optional now. The interface declared it
131
- * non-optional, but `EnvironmentsApi.listModels(id, payload?)` takes the payload optionally and
132
- * three existing call sites pass nothing — so enforcing the requirement the document stated would
133
- * have 400'd the UI on a parameter the server never wanted.
134
- */
135
- it('takes no required parameter', () => {
136
- // The scanner expands this component into four query parameters, and a property the component
137
- // does not require becomes a parameter the document does not require.
138
- expect(requiredOf('ModelSearchPayload')).toEqual([]);
139
- expect(validateApiRequest('ModelSearchPayload', {}).valid).toBe(true);
140
- });
141
-
142
- it('still rejects a value outside the model-type vocabulary', () => {
143
- expect(validateApiRequest('ModelSearchPayload', { type: 'text' }).valid).toBe(true);
144
- expect(validateApiRequest('ModelSearchPayload', { type: 'spreadsheet' }).valid).toBe(false);
145
- });
146
- });
147
-
148
- describe('the embeddings request', () => {
149
- it('discriminates its four input shapes on type', () => {
150
- expect(ApiSchemaComponents.EmbeddingsApiInput).toMatchObject({
151
- discriminator: {
152
- propertyName: 'type',
153
- mapping: { text: expect.stringContaining('EmbeddingsApiTextInput') },
154
- },
155
- });
156
- });
157
-
158
- it('accepts a text input and refuses one carrying an image source', () => {
159
- const request = (input: unknown) => validateApiRequest('EmbeddingsApiRequest', { inputs: [input] });
160
-
161
- expect(request({ type: 'text', text: 'hello' })).toMatchObject({ valid: true });
162
- expect(request({ type: 'text', text: 'hello', source: { url: 'gs://b/o' } }).valid).toBe(false);
163
- expect(request({ type: 'image', source: { url: 'gs://b/o' } })).toMatchObject({ valid: true });
164
- });
165
-
166
- it('accepts an empty inputs array, which the handler rejects rather than the schema', () => {
167
- // `minItems` is deliberately not published: an empty batch is well-formed and useless, and
168
- // adding the constraint would newly reject a request the document has always described.
169
- expect(validateApiRequest('EmbeddingsApiRequest', { inputs: [] }).valid).toBe(true);
170
- });
171
-
172
- it('accepts the logical project embedding type and rejects unknown types', () => {
173
- expect(
174
- validateApiRequest('EmbeddingsApiRequest', {
175
- embedding_type: 'properties',
176
- inputs: [{ type: 'text', text: '{}' }],
177
- }).valid,
178
- ).toBe(true);
179
- expect(
180
- validateApiRequest('EmbeddingsApiRequest', {
181
- embedding_type: 'audio',
182
- inputs: [{ type: 'audio', source: { url: 'gs://b/o' } }],
183
- }).valid,
184
- ).toBe(false);
185
- });
186
- });
187
-
188
- function enumOf(component: 'SupportedProviders'): string[] {
189
- const emitted = ApiSchemaComponents[component] as { enum?: unknown };
190
- if (!Array.isArray(emitted?.enum)) throw new Error(`${component} is not published as an enum`);
191
- return emitted.enum as string[];
192
- }
193
-
194
- function propertiesOf(component: string): string[] {
195
- const emitted = ApiSchemaComponents[component] as { properties?: Record<string, unknown> };
196
- return Object.keys(emitted?.properties ?? {});
197
- }
198
-
199
- function requiredOf(component: string): string[] {
200
- const emitted = ApiSchemaComponents[component] as { required?: unknown };
201
- return Array.isArray(emitted?.required) ? (emitted.required as string[]) : [];
202
- }