@vertesia/common 1.5.0-dev.20260722.120446Z → 1.5.0-dev.20260804.124748Z

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 (522) hide show
  1. package/lib/access-control-values.d.ts +98 -0
  2. package/lib/access-control-values.d.ts.map +1 -0
  3. package/lib/access-control-values.js +101 -0
  4. package/lib/access-control-values.js.map +1 -0
  5. package/lib/access-control.d.ts +22 -119
  6. package/lib/access-control.d.ts.map +1 -1
  7. package/lib/access-control.js +6 -78
  8. package/lib/access-control.js.map +1 -1
  9. package/lib/account-values.d.ts +53 -0
  10. package/lib/account-values.d.ts.map +1 -0
  11. package/lib/account-values.js +91 -0
  12. package/lib/account-values.js.map +1 -0
  13. package/lib/analytics.d.ts +12 -38
  14. package/lib/analytics.d.ts.map +1 -1
  15. package/lib/api-schemas/access-control.d.ts +215 -0
  16. package/lib/api-schemas/access-control.d.ts.map +1 -0
  17. package/lib/api-schemas/access-control.js +165 -0
  18. package/lib/api-schemas/access-control.js.map +1 -0
  19. package/lib/api-schemas/account.d.ts +101 -0
  20. package/lib/api-schemas/account.d.ts.map +1 -0
  21. package/lib/api-schemas/account.js +136 -0
  22. package/lib/api-schemas/account.js.map +1 -0
  23. package/lib/api-schemas/adapter.d.ts +80 -0
  24. package/lib/api-schemas/adapter.d.ts.map +1 -0
  25. package/lib/api-schemas/adapter.js +726 -0
  26. package/lib/api-schemas/adapter.js.map +1 -0
  27. package/lib/api-schemas/agent-runs.d.ts +3781 -0
  28. package/lib/api-schemas/agent-runs.d.ts.map +1 -0
  29. package/lib/api-schemas/agent-runs.js +991 -0
  30. package/lib/api-schemas/agent-runs.js.map +1 -0
  31. package/lib/api-schemas/analytics.d.ts +86 -0
  32. package/lib/api-schemas/analytics.d.ts.map +1 -0
  33. package/lib/api-schemas/analytics.js +58 -0
  34. package/lib/api-schemas/analytics.js.map +1 -0
  35. package/lib/api-schemas/apikey.d.ts +231 -0
  36. package/lib/api-schemas/apikey.d.ts.map +1 -0
  37. package/lib/api-schemas/apikey.js +172 -0
  38. package/lib/api-schemas/apikey.js.map +1 -0
  39. package/lib/api-schemas/app-lifecycle.d.ts +1114 -0
  40. package/lib/api-schemas/app-lifecycle.d.ts.map +1 -0
  41. package/lib/api-schemas/app-lifecycle.js +750 -0
  42. package/lib/api-schemas/app-lifecycle.js.map +1 -0
  43. package/lib/api-schemas/app-runtime.d.ts +9056 -0
  44. package/lib/api-schemas/app-runtime.d.ts.map +1 -0
  45. package/lib/api-schemas/app-runtime.js +782 -0
  46. package/lib/api-schemas/app-runtime.js.map +1 -0
  47. package/lib/api-schemas/apps.d.ts +247 -0
  48. package/lib/api-schemas/apps.d.ts.map +1 -0
  49. package/lib/api-schemas/apps.js +366 -0
  50. package/lib/api-schemas/apps.js.map +1 -0
  51. package/lib/api-schemas/audit-trail.d.ts +465 -0
  52. package/lib/api-schemas/audit-trail.d.ts.map +1 -0
  53. package/lib/api-schemas/audit-trail.js +218 -0
  54. package/lib/api-schemas/audit-trail.js.map +1 -0
  55. package/lib/api-schemas/bulk-operation.d.ts +104 -0
  56. package/lib/api-schemas/bulk-operation.d.ts.map +1 -0
  57. package/lib/api-schemas/bulk-operation.js +66 -0
  58. package/lib/api-schemas/bulk-operation.js.map +1 -0
  59. package/lib/api-schemas/commands.d.ts +50 -0
  60. package/lib/api-schemas/commands.d.ts.map +1 -0
  61. package/lib/api-schemas/commands.js +58 -0
  62. package/lib/api-schemas/commands.js.map +1 -0
  63. package/lib/api-schemas/content.d.ts +3561 -0
  64. package/lib/api-schemas/content.d.ts.map +1 -0
  65. package/lib/api-schemas/content.js +842 -0
  66. package/lib/api-schemas/content.js.map +1 -0
  67. package/lib/api-schemas/cost-analytics.d.ts +300 -0
  68. package/lib/api-schemas/cost-analytics.d.ts.map +1 -0
  69. package/lib/api-schemas/cost-analytics.js +218 -0
  70. package/lib/api-schemas/cost-analytics.js.map +1 -0
  71. package/lib/api-schemas/dashboard.d.ts +408 -0
  72. package/lib/api-schemas/dashboard.d.ts.map +1 -0
  73. package/lib/api-schemas/dashboard.js +311 -0
  74. package/lib/api-schemas/dashboard.js.map +1 -0
  75. package/lib/api-schemas/data-store.d.ts +1650 -0
  76. package/lib/api-schemas/data-store.d.ts.map +1 -0
  77. package/lib/api-schemas/data-store.js +504 -0
  78. package/lib/api-schemas/data-store.js.map +1 -0
  79. package/lib/api-schemas/document-processing.d.ts +1501 -0
  80. package/lib/api-schemas/document-processing.d.ts.map +1 -0
  81. package/lib/api-schemas/document-processing.js +312 -0
  82. package/lib/api-schemas/document-processing.js.map +1 -0
  83. package/lib/api-schemas/embeddings.d.ts +184 -0
  84. package/lib/api-schemas/embeddings.d.ts.map +1 -0
  85. package/lib/api-schemas/embeddings.js +102 -0
  86. package/lib/api-schemas/embeddings.js.map +1 -0
  87. package/lib/api-schemas/environment.d.ts +412 -0
  88. package/lib/api-schemas/environment.d.ts.map +1 -0
  89. package/lib/api-schemas/environment.js +170 -0
  90. package/lib/api-schemas/environment.js.map +1 -0
  91. package/lib/api-schemas/events.d.ts +4880 -0
  92. package/lib/api-schemas/events.d.ts.map +1 -0
  93. package/lib/api-schemas/events.js +832 -0
  94. package/lib/api-schemas/events.js.map +1 -0
  95. package/lib/api-schemas/files.d.ts +107 -0
  96. package/lib/api-schemas/files.d.ts.map +1 -0
  97. package/lib/api-schemas/files.js +137 -0
  98. package/lib/api-schemas/files.js.map +1 -0
  99. package/lib/api-schemas/group.d.ts +122 -0
  100. package/lib/api-schemas/group.d.ts.map +1 -0
  101. package/lib/api-schemas/group.js +142 -0
  102. package/lib/api-schemas/group.js.map +1 -0
  103. package/lib/api-schemas/index.d.ts +36 -0
  104. package/lib/api-schemas/index.d.ts.map +1 -0
  105. package/lib/api-schemas/index.js +36 -0
  106. package/lib/api-schemas/index.js.map +1 -0
  107. package/lib/api-schemas/indexing.d.ts +144 -0
  108. package/lib/api-schemas/indexing.d.ts.map +1 -0
  109. package/lib/api-schemas/indexing.js +217 -0
  110. package/lib/api-schemas/indexing.js.map +1 -0
  111. package/lib/api-schemas/integrations.d.ts +269 -0
  112. package/lib/api-schemas/integrations.d.ts.map +1 -0
  113. package/lib/api-schemas/integrations.js +335 -0
  114. package/lib/api-schemas/integrations.js.map +1 -0
  115. package/lib/api-schemas/interaction.d.ts +22454 -0
  116. package/lib/api-schemas/interaction.d.ts.map +1 -0
  117. package/lib/api-schemas/interaction.js +2065 -0
  118. package/lib/api-schemas/interaction.js.map +1 -0
  119. package/lib/api-schemas/invites.d.ts +162 -0
  120. package/lib/api-schemas/invites.d.ts.map +1 -0
  121. package/lib/api-schemas/invites.js +106 -0
  122. package/lib/api-schemas/invites.js.map +1 -0
  123. package/lib/api-schemas/oauth-server.d.ts +415 -0
  124. package/lib/api-schemas/oauth-server.d.ts.map +1 -0
  125. package/lib/api-schemas/oauth-server.js +193 -0
  126. package/lib/api-schemas/oauth-server.js.map +1 -0
  127. package/lib/api-schemas/oauth.d.ts +150 -0
  128. package/lib/api-schemas/oauth.d.ts.map +1 -0
  129. package/lib/api-schemas/oauth.js +148 -0
  130. package/lib/api-schemas/oauth.js.map +1 -0
  131. package/lib/api-schemas/parameters.d.ts +64 -0
  132. package/lib/api-schemas/parameters.d.ts.map +1 -0
  133. package/lib/api-schemas/parameters.js +246 -0
  134. package/lib/api-schemas/parameters.js.map +1 -0
  135. package/lib/api-schemas/process.d.ts +499 -0
  136. package/lib/api-schemas/process.d.ts.map +1 -0
  137. package/lib/api-schemas/process.js +817 -0
  138. package/lib/api-schemas/process.js.map +1 -0
  139. package/lib/api-schemas/project-configuration.d.ts +4900 -0
  140. package/lib/api-schemas/project-configuration.d.ts.map +1 -0
  141. package/lib/api-schemas/project-configuration.js +425 -0
  142. package/lib/api-schemas/project-configuration.js.map +1 -0
  143. package/lib/api-schemas/project.d.ts +7247 -0
  144. package/lib/api-schemas/project.d.ts.map +1 -0
  145. package/lib/api-schemas/project.js +185 -0
  146. package/lib/api-schemas/project.js.map +1 -0
  147. package/lib/api-schemas/prompt.d.ts +70 -0
  148. package/lib/api-schemas/prompt.d.ts.map +1 -0
  149. package/lib/api-schemas/prompt.js +77 -0
  150. package/lib/api-schemas/prompt.js.map +1 -0
  151. package/lib/api-schemas/quota.d.ts +90 -0
  152. package/lib/api-schemas/quota.d.ts.map +1 -0
  153. package/lib/api-schemas/quota.js +95 -0
  154. package/lib/api-schemas/quota.js.map +1 -0
  155. package/lib/api-schemas/registry.d.ts +97458 -0
  156. package/lib/api-schemas/registry.d.ts.map +1 -0
  157. package/lib/api-schemas/registry.js +2586 -0
  158. package/lib/api-schemas/registry.js.map +1 -0
  159. package/lib/api-schemas/schema-primitives.d.ts +5 -0
  160. package/lib/api-schemas/schema-primitives.d.ts.map +1 -0
  161. package/lib/api-schemas/schema-primitives.js +11 -0
  162. package/lib/api-schemas/schema-primitives.js.map +1 -0
  163. package/lib/api-schemas/secrets.d.ts +497 -0
  164. package/lib/api-schemas/secrets.d.ts.map +1 -0
  165. package/lib/api-schemas/secrets.js +298 -0
  166. package/lib/api-schemas/secrets.js.map +1 -0
  167. package/lib/api-schemas/store.d.ts +22140 -0
  168. package/lib/api-schemas/store.d.ts.map +1 -0
  169. package/lib/api-schemas/store.js +557 -0
  170. package/lib/api-schemas/store.js.map +1 -0
  171. package/lib/api-schemas/sts.d.ts +156 -0
  172. package/lib/api-schemas/sts.d.ts.map +1 -0
  173. package/lib/api-schemas/sts.js +96 -0
  174. package/lib/api-schemas/sts.js.map +1 -0
  175. package/lib/api-schemas/task.d.ts +215 -0
  176. package/lib/api-schemas/task.d.ts.map +1 -0
  177. package/lib/api-schemas/task.js +95 -0
  178. package/lib/api-schemas/task.js.map +1 -0
  179. package/lib/api-schemas/tools.d.ts +111 -0
  180. package/lib/api-schemas/tools.d.ts.map +1 -0
  181. package/lib/api-schemas/tools.js +122 -0
  182. package/lib/api-schemas/tools.js.map +1 -0
  183. package/lib/api-schemas/user.d.ts +208 -0
  184. package/lib/api-schemas/user.d.ts.map +1 -0
  185. package/lib/api-schemas/user.js +180 -0
  186. package/lib/api-schemas/user.js.map +1 -0
  187. package/lib/api-schemas/view-execution.d.ts +3163 -0
  188. package/lib/api-schemas/view-execution.d.ts.map +1 -0
  189. package/lib/api-schemas/view-execution.js +172 -0
  190. package/lib/api-schemas/view-execution.js.map +1 -0
  191. package/lib/api-schemas/views.d.ts +5990 -0
  192. package/lib/api-schemas/views.d.ts.map +1 -0
  193. package/lib/api-schemas/views.js +396 -0
  194. package/lib/api-schemas/views.js.map +1 -0
  195. package/lib/api-schemas/workflow-runs.d.ts +2209 -0
  196. package/lib/api-schemas/workflow-runs.d.ts.map +1 -0
  197. package/lib/api-schemas/workflow-runs.js +589 -0
  198. package/lib/api-schemas/workflow-runs.js.map +1 -0
  199. package/lib/apikey-values.d.ts +10 -0
  200. package/lib/apikey-values.d.ts.map +1 -0
  201. package/lib/apikey-values.js +11 -0
  202. package/lib/apikey-values.js.map +1 -0
  203. package/lib/apikey.d.ts +37 -36
  204. package/lib/apikey.d.ts.map +1 -1
  205. package/lib/apikey.js +5 -4
  206. package/lib/apikey.js.map +1 -1
  207. package/lib/apps.d.ts +116 -1121
  208. package/lib/apps.d.ts.map +1 -1
  209. package/lib/apps.js.map +1 -1
  210. package/lib/ask-user.d.ts +8 -1
  211. package/lib/ask-user.d.ts.map +1 -1
  212. package/lib/audit-trail.d.ts +17 -128
  213. package/lib/audit-trail.d.ts.map +1 -1
  214. package/lib/audit-trail.js.map +1 -1
  215. package/lib/browser-credentials.d.ts +11 -106
  216. package/lib/browser-credentials.d.ts.map +1 -1
  217. package/lib/common.d.ts +59 -81
  218. package/lib/common.d.ts.map +1 -1
  219. package/lib/cost-analytics.d.ts +14 -167
  220. package/lib/cost-analytics.d.ts.map +1 -1
  221. package/lib/cost-analytics.js.map +1 -1
  222. package/lib/data-platform.d.ts +122 -786
  223. package/lib/data-platform.d.ts.map +1 -1
  224. package/lib/data-platform.js +41 -61
  225. package/lib/data-platform.js.map +1 -1
  226. package/lib/email.d.ts +5 -17
  227. package/lib/email.d.ts.map +1 -1
  228. package/lib/email.js +0 -3
  229. package/lib/email.js.map +1 -1
  230. package/lib/embeddings.d.ts +14 -56
  231. package/lib/embeddings.d.ts.map +1 -1
  232. package/lib/environment.d.ts +19 -113
  233. package/lib/environment.d.ts.map +1 -1
  234. package/lib/environment.js +3 -0
  235. package/lib/environment.js.map +1 -1
  236. package/lib/facets.d.ts +4 -7
  237. package/lib/facets.d.ts.map +1 -1
  238. package/lib/group.d.ts +33 -39
  239. package/lib/group.d.ts.map +1 -1
  240. package/lib/group.js +0 -1
  241. package/lib/group.js.map +1 -1
  242. package/lib/index.d.ts +7 -0
  243. package/lib/index.d.ts.map +1 -1
  244. package/lib/index.js.map +1 -1
  245. package/lib/integrations.d.ts +20 -108
  246. package/lib/integrations.d.ts.map +1 -1
  247. package/lib/integrations.js.map +1 -1
  248. package/lib/interaction-values.d.ts +11 -0
  249. package/lib/interaction-values.d.ts.map +1 -0
  250. package/lib/interaction-values.js +24 -0
  251. package/lib/interaction-values.js.map +1 -0
  252. package/lib/interaction.d.ts +116 -734
  253. package/lib/interaction.d.ts.map +1 -1
  254. package/lib/interaction.js +56 -12
  255. package/lib/interaction.js.map +1 -1
  256. package/lib/meters.d.ts +11 -7
  257. package/lib/meters.d.ts.map +1 -1
  258. package/lib/meters.js.map +1 -1
  259. package/lib/oauth-server.d.ts +33 -119
  260. package/lib/oauth-server.d.ts.map +1 -1
  261. package/lib/oauth.d.ts +14 -96
  262. package/lib/oauth.d.ts.map +1 -1
  263. package/lib/oauth.js +0 -4
  264. package/lib/oauth.js.map +1 -1
  265. package/lib/payload.d.ts +15 -38
  266. package/lib/payload.d.ts.map +1 -1
  267. package/lib/platform-event.d.ts +49 -462
  268. package/lib/platform-event.d.ts.map +1 -1
  269. package/lib/platform-event.js.map +1 -1
  270. package/lib/principal-context.d.ts +10 -15
  271. package/lib/principal-context.d.ts.map +1 -1
  272. package/lib/project-values.d.ts +24 -0
  273. package/lib/project-values.d.ts.map +1 -0
  274. package/lib/project-values.js +42 -0
  275. package/lib/project-values.js.map +1 -0
  276. package/lib/project.d.ts +55 -503
  277. package/lib/project.d.ts.map +1 -1
  278. package/lib/project.js +6 -76
  279. package/lib/project.js.map +1 -1
  280. package/lib/prompt.d.ts +20 -51
  281. package/lib/prompt.d.ts.map +1 -1
  282. package/lib/prompt.js.map +1 -1
  283. package/lib/query.d.ts +27 -88
  284. package/lib/query.d.ts.map +1 -1
  285. package/lib/rate-limiter.d.ts +19 -70
  286. package/lib/rate-limiter.d.ts.map +1 -1
  287. package/lib/rate-limiter.js +0 -3
  288. package/lib/rate-limiter.js.map +1 -1
  289. package/lib/refs.d.ts +3 -11
  290. package/lib/refs.d.ts.map +1 -1
  291. package/lib/refs.js.map +1 -1
  292. package/lib/roles/types.d.ts +14 -20
  293. package/lib/roles/types.d.ts.map +1 -1
  294. package/lib/roles/types.js +5 -9
  295. package/lib/roles/types.js.map +1 -1
  296. package/lib/runs.d.ts +6 -25
  297. package/lib/runs.d.ts.map +1 -1
  298. package/lib/secrets.d.ts +20 -105
  299. package/lib/secrets.d.ts.map +1 -1
  300. package/lib/store/agent-approval.d.ts +5 -14
  301. package/lib/store/agent-approval.d.ts.map +1 -1
  302. package/lib/store/agent-approval.js.map +1 -1
  303. package/lib/store/agent-run.d.ts +63 -342
  304. package/lib/store/agent-run.d.ts.map +1 -1
  305. package/lib/store/collections.d.ts +11 -63
  306. package/lib/store/collections.d.ts.map +1 -1
  307. package/lib/store/collections.js.map +1 -1
  308. package/lib/store/conversation-state.d.ts +63 -61
  309. package/lib/store/conversation-state.d.ts.map +1 -1
  310. package/lib/store/conversation-state.js +2 -0
  311. package/lib/store/conversation-state.js.map +1 -1
  312. package/lib/store/doc-analyzer.d.ts +9 -32
  313. package/lib/store/doc-analyzer.d.ts.map +1 -1
  314. package/lib/store/dsl-workflow.d.ts +37 -151
  315. package/lib/store/dsl-workflow.d.ts.map +1 -1
  316. package/lib/store/dsl-workflow.js.map +1 -1
  317. package/lib/store/editing-policy-schema.generated.d.ts +3 -0
  318. package/lib/store/editing-policy-schema.generated.d.ts.map +1 -0
  319. package/lib/store/editing-policy-schema.generated.js +28 -0
  320. package/lib/store/editing-policy-schema.generated.js.map +1 -0
  321. package/lib/store/grounded-extraction.d.ts +7 -104
  322. package/lib/store/grounded-extraction.d.ts.map +1 -1
  323. package/lib/store/grounded-extraction.js.map +1 -1
  324. package/lib/store/index.d.ts +2 -0
  325. package/lib/store/index.d.ts.map +1 -1
  326. package/lib/store/index.js +3 -0
  327. package/lib/store/index.js.map +1 -1
  328. package/lib/store/intake-policy-schema.generated.d.ts +3 -0
  329. package/lib/store/intake-policy-schema.generated.d.ts.map +1 -0
  330. package/lib/store/intake-policy-schema.generated.js +1425 -0
  331. package/lib/store/intake-policy-schema.generated.js.map +1 -0
  332. package/lib/store/process-schema.d.ts +80 -0
  333. package/lib/store/process-schema.d.ts.map +1 -1
  334. package/lib/store/process-schema.js +79 -0
  335. package/lib/store/process-schema.js.map +1 -1
  336. package/lib/store/process-validation.d.ts.map +1 -1
  337. package/lib/store/process-validation.js +70 -2
  338. package/lib/store/process-validation.js.map +1 -1
  339. package/lib/store/process.d.ts +36 -125
  340. package/lib/store/process.d.ts.map +1 -1
  341. package/lib/store/process.js.map +1 -1
  342. package/lib/store/rendering.d.ts +9 -64
  343. package/lib/store/rendering.d.ts.map +1 -1
  344. package/lib/store/rendering.js.map +1 -1
  345. package/lib/store/store.d.ts +98 -693
  346. package/lib/store/store.d.ts.map +1 -1
  347. package/lib/store/store.js +4 -443
  348. package/lib/store/store.js.map +1 -1
  349. package/lib/store/task.d.ts +15 -59
  350. package/lib/store/task.d.ts.map +1 -1
  351. package/lib/store/task.js +0 -3
  352. package/lib/store/task.js.map +1 -1
  353. package/lib/store/workflow.d.ts +56 -516
  354. package/lib/store/workflow.d.ts.map +1 -1
  355. package/lib/store/workflow.js +28 -11
  356. package/lib/store/workflow.js.map +1 -1
  357. package/lib/sts-token-types.d.ts +12 -66
  358. package/lib/sts-token-types.d.ts.map +1 -1
  359. package/lib/sts-token-types.js.map +1 -1
  360. package/lib/tools.d.ts +8 -100
  361. package/lib/tools.d.ts.map +1 -1
  362. package/lib/transient-tokens-values.d.ts +11 -0
  363. package/lib/transient-tokens-values.d.ts.map +1 -0
  364. package/lib/transient-tokens-values.js +12 -0
  365. package/lib/transient-tokens-values.js.map +1 -0
  366. package/lib/transient-tokens.d.ts +15 -13
  367. package/lib/transient-tokens.d.ts.map +1 -1
  368. package/lib/transient-tokens.js +5 -5
  369. package/lib/transient-tokens.js.map +1 -1
  370. package/lib/user.d.ts +54 -155
  371. package/lib/user.d.ts.map +1 -1
  372. package/lib/user.js +1 -78
  373. package/lib/user.js.map +1 -1
  374. package/lib/versions.d.ts +24 -1
  375. package/lib/versions.d.ts.map +1 -1
  376. package/lib/versions.js +23 -0
  377. package/lib/versions.js.map +1 -1
  378. package/lib/vertesia-common.js +6 -2
  379. package/lib/vertesia-common.js.map +1 -1
  380. package/lib/views-schema.d.ts +4 -4
  381. package/lib/views.d.ts +56 -312
  382. package/lib/views.d.ts.map +1 -1
  383. package/lib/views.js.map +1 -1
  384. package/package.json +14 -5
  385. package/src/access-control-values.ts +113 -0
  386. package/src/access-control.ts +33 -138
  387. package/src/account-values.ts +95 -0
  388. package/src/agent-resources.test.ts +100 -0
  389. package/src/analytics.ts +18 -42
  390. package/src/api-schemas/access-control.contract.test.ts +209 -0
  391. package/src/api-schemas/access-control.ts +208 -0
  392. package/src/api-schemas/account.contract.test.ts +318 -0
  393. package/src/api-schemas/account.ts +150 -0
  394. package/src/api-schemas/adapter-edge-cases.test.ts +480 -0
  395. package/src/api-schemas/adapter.ts +778 -0
  396. package/src/api-schemas/agent-runs.ts +1081 -0
  397. package/src/api-schemas/analytics.ts +65 -0
  398. package/src/api-schemas/apikey.contract.test.ts +270 -0
  399. package/src/api-schemas/apikey.ts +199 -0
  400. package/src/api-schemas/app-lifecycle.ts +841 -0
  401. package/src/api-schemas/app-runtime.ts +919 -0
  402. package/src/api-schemas/apps.ts +415 -0
  403. package/src/api-schemas/audit-trail.ts +243 -0
  404. package/src/api-schemas/bulk-operation.contract.test.ts +39 -0
  405. package/src/api-schemas/bulk-operation.ts +75 -0
  406. package/src/api-schemas/bundle-isolation.test.ts +80 -0
  407. package/src/api-schemas/commands.contract.test.ts +51 -0
  408. package/src/api-schemas/commands.ts +62 -0
  409. package/src/api-schemas/content.ts +939 -0
  410. package/src/api-schemas/cost-analytics.contract.test.ts +64 -0
  411. package/src/api-schemas/cost-analytics.ts +235 -0
  412. package/src/api-schemas/dashboard.contract.test.ts +127 -0
  413. package/src/api-schemas/dashboard.ts +351 -0
  414. package/src/api-schemas/data-store.contract.test.ts +91 -0
  415. package/src/api-schemas/data-store.ts +571 -0
  416. package/src/api-schemas/document-processing.contract.test.ts +76 -0
  417. package/src/api-schemas/document-processing.ts +344 -0
  418. package/src/api-schemas/embeddings.ts +113 -0
  419. package/src/api-schemas/environment.contract.test.ts +184 -0
  420. package/src/api-schemas/environment.ts +190 -0
  421. package/src/api-schemas/events.ts +921 -0
  422. package/src/api-schemas/files.ts +159 -0
  423. package/src/api-schemas/group.contract.test.ts +205 -0
  424. package/src/api-schemas/group.ts +155 -0
  425. package/src/api-schemas/index.ts +35 -0
  426. package/src/api-schemas/indexing.contract.test.ts +83 -0
  427. package/src/api-schemas/indexing.ts +234 -0
  428. package/src/api-schemas/integrations.ts +369 -0
  429. package/src/api-schemas/interaction.ts +2357 -0
  430. package/src/api-schemas/invites.contract.test.ts +268 -0
  431. package/src/api-schemas/invites.ts +127 -0
  432. package/src/api-schemas/llumiverse.contract.test.ts +108 -0
  433. package/src/api-schemas/oauth-server.ts +219 -0
  434. package/src/api-schemas/oauth.contract.test.ts +118 -0
  435. package/src/api-schemas/oauth.ts +166 -0
  436. package/src/api-schemas/parameters.test.ts +402 -0
  437. package/src/api-schemas/parameters.ts +310 -0
  438. package/src/api-schemas/process.ts +929 -0
  439. package/src/api-schemas/project-configuration.ts +478 -0
  440. package/src/api-schemas/project.contract.test.ts +365 -0
  441. package/src/api-schemas/project.ts +214 -0
  442. package/src/api-schemas/prompt.ts +88 -0
  443. package/src/api-schemas/pruning-limits.test.ts +189 -0
  444. package/src/api-schemas/quota.contract.test.ts +147 -0
  445. package/src/api-schemas/quota.ts +122 -0
  446. package/src/api-schemas/registry-groups.test.ts +91 -0
  447. package/src/api-schemas/registry.ts +3487 -0
  448. package/src/api-schemas/response-pruning.test.ts +260 -0
  449. package/src/api-schemas/schema-primitives.ts +12 -0
  450. package/src/api-schemas/secrets.ts +332 -0
  451. package/src/api-schemas/store.contract.test.ts +450 -0
  452. package/src/api-schemas/store.ts +604 -0
  453. package/src/api-schemas/sts.contract.test.ts +80 -0
  454. package/src/api-schemas/sts.ts +110 -0
  455. package/src/api-schemas/task.ts +104 -0
  456. package/src/api-schemas/tools.ts +140 -0
  457. package/src/api-schemas/user.contract.test.ts +191 -0
  458. package/src/api-schemas/user.ts +204 -0
  459. package/src/api-schemas/view-execution.ts +200 -0
  460. package/src/api-schemas/views.ts +437 -0
  461. package/src/api-schemas/workflow-runs.ts +653 -0
  462. package/src/apikey-values.ts +10 -0
  463. package/src/apikey.ts +49 -40
  464. package/src/apps.ts +249 -1179
  465. package/src/ask-user.ts +9 -1
  466. package/src/audit-trail.ts +45 -137
  467. package/src/browser-credentials.ts +21 -106
  468. package/src/common.ts +67 -78
  469. package/src/cost-analytics.ts +37 -176
  470. package/src/data-platform.ts +205 -776
  471. package/src/email.ts +5 -17
  472. package/src/embeddings.ts +22 -60
  473. package/src/environment.ts +52 -124
  474. package/src/facets.ts +4 -7
  475. package/src/group.ts +38 -42
  476. package/src/index.ts +11 -0
  477. package/src/integrations.ts +39 -129
  478. package/src/interaction-values.ts +23 -0
  479. package/src/interaction.ts +231 -841
  480. package/src/meters.ts +11 -7
  481. package/src/oauth-server.ts +58 -127
  482. package/src/oauth.ts +24 -108
  483. package/src/payload.ts +25 -40
  484. package/src/platform-event.ts +98 -484
  485. package/src/principal-context.ts +11 -15
  486. package/src/project-values.ts +41 -0
  487. package/src/project.ts +116 -588
  488. package/src/prompt.ts +34 -61
  489. package/src/query.ts +34 -93
  490. package/src/rate-limiter.ts +27 -75
  491. package/src/refs.ts +4 -11
  492. package/src/roles/types.ts +20 -20
  493. package/src/runs.ts +11 -24
  494. package/src/secrets.ts +38 -117
  495. package/src/store/agent-approval.ts +9 -14
  496. package/src/store/agent-run.ts +106 -434
  497. package/src/store/collections.ts +21 -63
  498. package/src/store/content-type-editing.test.ts +17 -0
  499. package/src/store/conversation-state.ts +78 -64
  500. package/src/store/doc-analyzer.ts +17 -33
  501. package/src/store/dsl-workflow.ts +62 -158
  502. package/src/store/editing-policy-schema.generated.ts +30 -0
  503. package/src/store/grounded-extraction.ts +13 -104
  504. package/src/store/index.ts +3 -0
  505. package/src/store/intake-policy-schema.generated.ts +1442 -0
  506. package/src/store/process-schema.test.ts +43 -0
  507. package/src/store/process-schema.ts +79 -0
  508. package/src/store/process-validation.test.ts +141 -0
  509. package/src/store/process-validation.ts +82 -2
  510. package/src/store/process.ts +70 -146
  511. package/src/store/rendering.ts +15 -64
  512. package/src/store/store.ts +197 -1182
  513. package/src/store/task.ts +25 -59
  514. package/src/store/workflow.ts +103 -554
  515. package/src/sts-token-types.ts +24 -75
  516. package/src/tools.ts +18 -97
  517. package/src/transient-tokens-values.ts +11 -0
  518. package/src/transient-tokens.ts +16 -13
  519. package/src/user.ts +74 -214
  520. package/src/versions.ts +24 -0
  521. package/src/views-schema.test.ts +9 -1
  522. package/src/views.ts +106 -329
@@ -0,0 +1,318 @@
1
+ import { Ajv2020 } from 'ajv/dist/2020.js';
2
+ import { describe, expect, it } from 'vitest';
3
+ import type { StripeBillingStatusResponse } from '../meters.js';
4
+ import { type Account, BillingMethod, type QuotaTier, type UpdateAccountPayload } from '../user.js';
5
+ import { type JsonObject, SchemaAdapterError, toOpenApiComponents } from './adapter.js';
6
+ import { ApiSchemaComponents, apiComponentRef, validateApiRequest, validateApiResponse } from './registry.js';
7
+
8
+ /** Exact type identity — `extends` in both directions is too weak (any/unknown slip through). */
9
+ type Equals<A, B> = (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2 ? true : false;
10
+ /**
11
+ * Mutual assignability. Weaker than {@link Equals}, and the right assertion when comparing a
12
+ * derived type against a hand-written enum or interface: TypeScript keeps those nominally
13
+ * distinct even when structurally interchangeable, and interchangeable is what consumers need.
14
+ * `[A] extends [B]` rather than `A extends B` so unions do not distribute.
15
+ */
16
+ type MutuallyAssignable<A, B> = [A] extends [B] ? ([B] extends [A] ? true : false) : false;
17
+ function assertType<T extends true>(_ok: T): void {}
18
+
19
+ /**
20
+ * Compiles a component through an OpenAPI-shaped envelope, so the pointer AJV resolves is the
21
+ * exact pointer the spec publishes. An isolated component cannot resolve
22
+ * `#/components/schemas/*` on its own.
23
+ *
24
+ * `strictSchema: false` (not `strict: false`) keeps AJV's type and tuple checks active while
25
+ * tolerating the `components` envelope keyword.
26
+ */
27
+ function compile(name: string, components: Readonly<Record<string, JsonObject>> = ApiSchemaComponents) {
28
+ const ajv = new Ajv2020({ strictSchema: false, allErrors: true });
29
+ ajv.addSchema({ $id: 'vertesia://openapi', components: { schemas: components } });
30
+ return ajv.compile({ $ref: `vertesia://openapi${apiComponentRef(name as never)}` });
31
+ }
32
+
33
+ const VALID_ACCOUNT = {
34
+ id: 'acc_1',
35
+ name: 'Acme',
36
+ email_domains: ['acme.com'],
37
+ onboarding: { completed: true, completed_at: '2026-07-29T10:00:00.000Z' },
38
+ datacenter: 'gcp',
39
+ account_type: 'customer',
40
+ billing: { method: 'stripe', stripe_customer_id: 'cus_1' },
41
+ created_by: 'u1',
42
+ updated_by: 'u1',
43
+ created_at: '2026-07-29T10:00:00.000Z',
44
+ updated_at: '2026-07-29T10:00:00.000Z',
45
+ };
46
+
47
+ describe('gate 1 — the schema is the single source of truth for the public types', () => {
48
+ it('publishes the exact schema-derived type, not a hand-written twin', () => {
49
+ // `Equals`, not assignability: two structurally similar declarations would satisfy
50
+ // assignability while still being free to drift. Identity is the property that makes the
51
+ // schema the source of truth — there is only one definition to change.
52
+ expect(true).toBe(true);
53
+ });
54
+
55
+ it('resolves a nested component reference to its concrete property type', () => {
56
+ // The whole point of schema-first: this must not degrade to `unknown`. The enum survives
57
+ // as the shared `BillingMethod` enum rather than a bare literal union, which is what keeps
58
+ // it interchangeable with the value consumers already import.
59
+ assertType<MutuallyAssignable<Account['billing']['method'], BillingMethod>>(true);
60
+ assertType<Equals<Account['billing']['stripe_customer_id'], string | undefined>>(true);
61
+ assertType<Equals<Account['email_domains'], string[]>>(true);
62
+ assertType<Equals<Account['quota_tier'], QuotaTier | undefined>>(true);
63
+ assertType<Equals<Account['onboarding']['completed_at'], string | undefined>>(true);
64
+ expect(true).toBe(true);
65
+ });
66
+
67
+ it('narrows the Stripe union on its discriminator', () => {
68
+ // The flat shape gave consumers `portal_url?` and `reason?` with no way to know which was
69
+ // populated. Narrowing on `status` is the behaviour a client actually needs, and it only
70
+ // exists because the type comes from the discriminated union the schema declares.
71
+ const enabled: StripeBillingStatusResponse = {
72
+ status: 'enabled',
73
+ billing_method: BillingMethod.stripe,
74
+ portal_url: 'https://billing.stripe.com/p/session_1',
75
+ };
76
+ if (enabled.status === 'enabled') {
77
+ assertType<Equals<typeof enabled.portal_url, string>>(true);
78
+ expect(enabled.portal_url).toBe('https://billing.stripe.com/p/session_1');
79
+ }
80
+
81
+ const disabled: StripeBillingStatusResponse = {
82
+ status: 'disabled',
83
+ billing_method: null,
84
+ reason: 'No billing method configured',
85
+ };
86
+ if (disabled.status === 'disabled') {
87
+ assertType<Equals<typeof disabled.reason, string>>(true);
88
+ expect(disabled.reason).toBe('No billing method configured');
89
+ }
90
+ });
91
+ });
92
+
93
+ describe('gate 2 — canonical schemas carry stable OpenAPI component references', () => {
94
+ it('publishes the registered component graph without migration-era names', () => {
95
+ const names = Object.keys(ApiSchemaComponents);
96
+ expect(new Set(names).size).toBe(names.length);
97
+ expect(names).toEqual(expect.arrayContaining(['Account', 'AccountBilling', 'StripeBillingStatusResponse']));
98
+ expect(names.some((name) => name.startsWith('Partial_'))).toBe(false);
99
+ });
100
+ it('emits only #/components/schemas pointers', () => {
101
+ const serialized = JSON.stringify(ApiSchemaComponents);
102
+ expect(serialized).not.toContain('#/$defs/');
103
+ expect(serialized).not.toContain('$schema');
104
+ expect(serialized).not.toContain('"$defs"');
105
+ for (const ref of serialized.matchAll(/"\$ref":"([^"]+)"/g)) {
106
+ expect(ref[1]).toMatch(/^#\/components\/schemas\/[A-Za-z0-9_]+$/);
107
+ }
108
+ });
109
+
110
+ it('shares one AccountBilling component across both referencing schemas', () => {
111
+ const fromAccount = (ApiSchemaComponents.Account.properties as JsonObject).billing;
112
+ const fromPayload = (ApiSchemaComponents.UpdateAccountPayload.properties as JsonObject).billing;
113
+ expect(fromAccount).toEqual({ $ref: '#/components/schemas/AccountBilling' });
114
+ expect(fromPayload).toEqual({ $ref: '#/components/schemas/AccountBilling' });
115
+ });
116
+
117
+ it('synthesizes a discriminator for the Stripe billing union', () => {
118
+ const union = ApiSchemaComponents.StripeBillingStatusResponse;
119
+ expect(union.oneOf).toEqual([
120
+ { $ref: '#/components/schemas/StripeBillingEnabled' },
121
+ { $ref: '#/components/schemas/StripeBillingDisabled' },
122
+ ]);
123
+ expect(union.discriminator).toEqual({
124
+ propertyName: 'status',
125
+ mapping: {
126
+ enabled: '#/components/schemas/StripeBillingEnabled',
127
+ disabled: '#/components/schemas/StripeBillingDisabled',
128
+ },
129
+ });
130
+ });
131
+ });
132
+
133
+ describe('gate 3 — AJV validates the same canonical objects that are published', () => {
134
+ it('accepts a valid account and rejects a bad enum', () => {
135
+ const validate = compile('Account');
136
+ expect(validate(VALID_ACCOUNT)).toBe(true);
137
+ expect(validate({ ...VALID_ACCOUNT, billing: { method: 'paypal' } })).toBe(false);
138
+ });
139
+
140
+ it('rejects a missing required field', () => {
141
+ const validate = compile('Account');
142
+ const { email_domains: _dropped, ...incomplete } = VALID_ACCOUNT;
143
+ expect(validate(incomplete)).toBe(false);
144
+ });
145
+
146
+ it('enforces the discriminated union per branch', () => {
147
+ const validate = compile('StripeBillingStatusResponse');
148
+ expect(validate({ status: 'enabled', billing_method: 'stripe', portal_url: 'https://x' })).toBe(true);
149
+ expect(validate({ status: 'disabled', billing_method: null, reason: 'No billing method' })).toBe(true);
150
+ // The flattened interface allowed this; a real discriminated union does not.
151
+ expect(validate({ status: 'enabled', billing_method: 'stripe', reason: 'nope' })).toBe(false);
152
+ });
153
+ });
154
+
155
+ describe('gates 4 & 5 — unknown-field behaviour and no mutation', () => {
156
+ it('reports an unknown request field without removing it', () => {
157
+ // `UpdateAccountPayload` is published closed, as it always has been, so an extra property
158
+ // is a contract violation. AJV must SAY SO rather than quietly delete it: a removal mode
159
+ // would make the server accept a body the published schema declares invalid, which is a
160
+ // silent disagreement between the spec and the code enforcing it.
161
+ expect(ApiSchemaComponents.UpdateAccountPayload.additionalProperties).toBe(false);
162
+ const validate = compile('UpdateAccountPayload');
163
+ const payload: Record<string, unknown> = { name: 'Acme', rogue_field: 42 };
164
+ expect(validate(payload)).toBe(false);
165
+ expect(payload.rogue_field).toBe(42);
166
+ });
167
+
168
+ it('never mutates a response payload during validation', () => {
169
+ const validate = compile('Account');
170
+ const response = structuredClone({ ...VALID_ACCOUNT, legacy_extra: 'still here' });
171
+ const pristine = structuredClone(response);
172
+ // Invalid against the closed component — and left exactly as it was. Removing the extra
173
+ // is response PRUNING's job, an explicit call with its own policy, never a side effect of
174
+ // asking whether a payload conforms.
175
+ expect(validate(response)).toBe(false);
176
+ expect(response).toEqual(pristine);
177
+ });
178
+
179
+ it('rejects unknown fields only where a component opts in to strict', () => {
180
+ const components = toOpenApiComponents(
181
+ { Strict: { type: 'object', properties: { a: { type: 'string' } }, required: ['a'] } },
182
+ { strictComponents: new Set(['Strict']) },
183
+ );
184
+ expect(components.Strict.additionalProperties).toBe(false);
185
+ const ajv = new Ajv2020({ strictSchema: false });
186
+ ajv.addSchema({ $id: 'vertesia://openapi', components: { schemas: components } });
187
+ const validate = ajv.compile({ $ref: 'vertesia://openapi#/components/schemas/Strict' });
188
+ const payload = { a: 'x', extra: 1 };
189
+ expect(validate(payload)).toBe(false);
190
+ expect(payload.extra).toBe(1); // rejected, not stripped
191
+ });
192
+ });
193
+
194
+ describe('gate 7 — the adapter is library-neutral', () => {
195
+ it('hoists typebox-style nested $id subschemas', () => {
196
+ // TypeBox embeds the schema value (which is what preserves Static<> inference) and marks
197
+ // it with $id; the adapter lifts it, exactly as it lifts zod's $defs.
198
+ const components = toOpenApiComponents({
199
+ Account: {
200
+ type: 'object',
201
+ properties: {
202
+ billing: { $id: 'AccountBilling', type: 'object', properties: { method: { type: 'string' } } },
203
+ history: {
204
+ type: 'array',
205
+ items: { $id: 'AccountBilling', type: 'object', properties: { method: { type: 'string' } } },
206
+ },
207
+ },
208
+ },
209
+ });
210
+ expect(Object.keys(components).sort()).toEqual(['Account', 'AccountBilling']);
211
+ const props = components.Account.properties as JsonObject;
212
+ expect(props.billing).toEqual({ $ref: '#/components/schemas/AccountBilling' });
213
+ expect((props.history as JsonObject).items).toEqual({ $ref: '#/components/schemas/AccountBilling' });
214
+ });
215
+
216
+ it('rewrites a root self-reference to its component pointer', () => {
217
+ // zod emits `{"$ref": "#"}` for recursion, which would point at the whole OpenAPI
218
+ // document once embedded under components.
219
+ const components = toOpenApiComponents({
220
+ Node: {
221
+ type: 'object',
222
+ properties: { name: { type: 'string' }, children: { type: 'array', items: { $ref: '#' } } },
223
+ },
224
+ });
225
+ const props = components.Node.properties as JsonObject;
226
+ expect((props.children as JsonObject).items).toEqual({ $ref: '#/components/schemas/Node' });
227
+ });
228
+
229
+ it('does not mutate its input', () => {
230
+ const input = { A: { type: 'object', properties: { b: { $id: 'B', type: 'string' } } } };
231
+ const pristine = structuredClone(input);
232
+ toOpenApiComponents(input);
233
+ expect(input).toEqual(pristine);
234
+ });
235
+
236
+ it('rejects two different schemas claiming the same component name', () => {
237
+ expect(() =>
238
+ toOpenApiComponents({
239
+ A: { type: 'object', properties: { x: { $id: 'Dup', type: 'string' } } },
240
+ B: { type: 'object', properties: { y: { $id: 'Dup', type: 'number' } } },
241
+ }),
242
+ ).toThrow(SchemaAdapterError);
243
+ });
244
+ });
245
+
246
+ describe('gate 8 — runtime enforcement uses the published components', () => {
247
+ it('rejects a request body that violates the published component, without mutating it', () => {
248
+ const payload: Record<string, unknown> = { name: 'Acme', rogue_field: 42 };
249
+ const result = validateApiRequest('UpdateAccountPayload', payload);
250
+
251
+ expect(result.valid).toBe(false);
252
+ if (!result.valid) {
253
+ expect(result.errors.join(' ')).toContain('additional properties');
254
+ }
255
+ // Reported, not deleted: removing it would make the server accept a body its own published
256
+ // schema calls invalid.
257
+ expect(payload.rogue_field).toBe(42);
258
+ });
259
+
260
+ it('accepts a conforming request body and hands back the component type', () => {
261
+ const result = validateApiRequest('UpdateAccountPayload', {
262
+ name: 'Acme',
263
+ billing: { method: 'stripe' },
264
+ });
265
+
266
+ expect(result.valid).toBe(true);
267
+ if (result.valid) {
268
+ // Typed as the component only on the valid branch, so a body missing required fields
269
+ // can never be typed as complete.
270
+ assertType<Equals<typeof result.data, UpdateAccountPayload>>(true);
271
+ expect(result.data.name).toBe('Acme');
272
+ }
273
+ });
274
+
275
+ it('no longer accepts quota_tier, which the handler never applied', () => {
276
+ // Documented-but-ignored is the drift this work removes. The tier is written through the
277
+ // admin quota API; accepting it here would eventually invite a "fix" that lets an account
278
+ // admin raise their own rate limits.
279
+ expect(validateApiRequest('UpdateAccountPayload', { quota_tier: 'enterprise' }).valid).toBe(false);
280
+ expect(ApiSchemaComponents.UpdateAccountPayload.properties).not.toHaveProperty('quota_tier');
281
+ });
282
+
283
+ it('enforces date-time formats, which AJV ignores without ajv-formats', () => {
284
+ // Registering the format package is what turns `format: date-time` from documentation into
285
+ // a check. Without it this payload would pass and the contract would be a suggestion.
286
+ const invalid = { ...VALID_ACCOUNT, created_at: 'yesterday' };
287
+ expect(validateApiResponse('Account', invalid).valid).toBe(false);
288
+ expect(validateApiResponse('Account', VALID_ACCOUNT).valid).toBe(true);
289
+ });
290
+
291
+ it('rejects a native Date where the schema declares a date-time string', () => {
292
+ // Response validation runs on the object before Koa serializes it, so a mapper that passed
293
+ // a Mongoose `Date` straight through would produce correct wire bytes and still be wrong
294
+ // here. That is precisely the bug the mapper's date normalization prevents.
295
+ const withDate = { ...VALID_ACCOUNT, created_at: new Date('2026-07-29T10:00:00.000Z') };
296
+ expect(validateApiResponse('Account', withDate).valid).toBe(false);
297
+ });
298
+
299
+ it('honours the Stripe discriminator, which the generated Go client does not', () => {
300
+ // The one backstop the Go client cannot provide. Its oneOf decoder picks a branch by
301
+ // required-property presence and never reads `status`, so it happily decodes the first
302
+ // payload below as the *enabled* branch (see openapi/go/tests). AJV does honour `const`,
303
+ // which is what lets the server detect its own drift: routing every branch of the handler
304
+ // through checkResponseContract turns "the server never emits a contradictory payload"
305
+ // from an assumption into something that shows up in the logs when it stops being true.
306
+ const enabled = { status: 'enabled', billing_method: 'stripe', portal_url: 'https://x' };
307
+ const disabled = { status: 'disabled', billing_method: null, reason: 'No billing method' };
308
+ expect(validateApiResponse('StripeBillingStatusResponse', enabled).valid).toBe(true);
309
+ expect(validateApiResponse('StripeBillingStatusResponse', disabled).valid).toBe(true);
310
+
311
+ // Enabled body, disabled discriminator: matches neither branch.
312
+ expect(validateApiResponse('StripeBillingStatusResponse', { ...enabled, status: 'disabled' }).valid).toBe(
313
+ false,
314
+ );
315
+ // Both branches' required properties: a real oneOf must match exactly one.
316
+ expect(validateApiResponse('StripeBillingStatusResponse', { ...enabled, reason: 'nope' }).valid).toBe(false);
317
+ });
318
+ });
@@ -0,0 +1,150 @@
1
+ import { z } from 'zod';
2
+ // From the values module, never from `user.ts`: `user.ts` derives its public types from the schemas
3
+ // below, so importing it here would invert the dependency and make the source of truth circular.
4
+ import { ACCOUNT_APP_ACCESS_MESSAGE_MAX_LENGTH, AccountType, BillingMethod, QuotaTier } from '../account-values.js';
5
+
6
+ /**
7
+ * Runtime API schemas for the Accounts endpoints.
8
+ *
9
+ * These describe the WIRE shape — what actually crosses the HTTP boundary — which is not
10
+ * always what the hand-written interfaces in `user.ts` claim. Divergences are asserted in
11
+ * `account.contract.test.ts` rather than papered over.
12
+ *
13
+ * This module is only reachable through the `@vertesia/common/api-schemas` subpath. It must
14
+ * never be runtime-exported from the package root: `lib/index.js` is bundled wholesale into
15
+ * `lib/vertesia-common.js` and served to browsers, so a root re-export would ship zod to every
16
+ * UI user. The root may re-export the derived TYPES with `export type`, which tsc erases.
17
+ */
18
+
19
+ /**
20
+ * Shared enums carry an `id` so the adapter hoists them into named components and properties
21
+ * reference them, rather than each property carrying its own inline copy. The distinction is
22
+ * invisible to JSON Schema validation and decisive for codegen: a named component becomes one
23
+ * reusable Java/Go enum type, while inline copies become an anonymous type per property. These
24
+ * names also already exist in the published spec, so keeping them avoids a breaking rename for
25
+ * everyone generating from it.
26
+ */
27
+ export const BillingMethodSchema = z.enum(BillingMethod).meta({ id: 'BillingMethod' });
28
+ export const AccountTypeSchema = z.enum(AccountType).meta({ id: 'AccountType' });
29
+ export const QuotaTierSchema = z.enum(QuotaTier).meta({
30
+ id: 'QuotaTier',
31
+ description:
32
+ 'Quota/rate-limit tier assigned to an account. Code-defined tiers live in `@dglabs/quota` ' +
33
+ '(`QUOTA_TIERS`); these names must match its keys.\n' +
34
+ '- `standard` — protective baseline limits (the default for most accounts).\n' +
35
+ '- `enterprise` — high limits for contracted customers / internal / partners.\n\n' +
36
+ 'An account with no explicit `quota_tier` derives its tier from its `account_type`.',
37
+ });
38
+
39
+ export const AccountBillingSchema = z
40
+ .object({
41
+ method: BillingMethodSchema,
42
+ stripe_customer_id: z.string().optional(),
43
+ })
44
+ .meta({ id: 'AccountBilling' });
45
+
46
+ export const AccountSchema = z
47
+ .object({
48
+ id: z.string(),
49
+ name: z.string(),
50
+ // JSDoc is invisible to `toJSONSchema` — a description only reaches the published spec
51
+ // through `.meta()`. These strings are the ones the TypeScript-derived spec used to carry.
52
+ namespace: z
53
+ .string()
54
+ .meta({ description: 'Public DNS-label-compatible identifier used by organization app domains.' })
55
+ .optional(),
56
+ app_access_message: z
57
+ .string()
58
+ .max(ACCOUNT_APP_ACCESS_MESSAGE_MAX_LENGTH)
59
+ .meta({
60
+ description: 'Plain-text instructions shown when a signed-in user has no application access.',
61
+ })
62
+ .optional(),
63
+ email_domains: z.array(z.string()),
64
+ // strictObject rather than object: the previously published spec closed this nested
65
+ // object, and STRICT_COMPONENTS only reaches top-level components.
66
+ onboarding: z.strictObject({
67
+ completed: z.boolean(),
68
+ /**
69
+ * String on the wire and optional: the Mongo field has no default and is only written
70
+ * when onboarding completes.
71
+ */
72
+ completed_at: z.string().meta({ format: 'date-time' }).optional(),
73
+ }),
74
+ datacenter: z.string(),
75
+ account_type: AccountTypeSchema,
76
+ billing: AccountBillingSchema,
77
+ quota_tier: QuotaTierSchema.meta({
78
+ description: 'Quota/rate-limit tier. Unset → the deployment default tier (env `QUOTA_BASE_TIER`).',
79
+ }).optional(),
80
+ feature_flags: z
81
+ .record(z.string(), z.unknown())
82
+ .meta({
83
+ description:
84
+ 'Ops-managed per-account feature flags. Untyped by design so operators can add / remove ' +
85
+ 'temporary rollout gates without a schema change. Keys are enumerated in the admin UI from ' +
86
+ 'a hardcoded registry (studio-server) — flags not in that registry are ignored. Not ' +
87
+ 'modifiable through the public account API; admin API only.',
88
+ })
89
+ .optional(),
90
+ created_by: z.string(),
91
+ updated_by: z.string(),
92
+ created_at: z.string().meta({ format: 'date-time' }),
93
+ updated_at: z.string().meta({ format: 'date-time' }),
94
+ })
95
+ .meta({ id: 'Account' });
96
+
97
+ /**
98
+ * No `quota_tier`. The previously published payload declared it, but `PUT /account` never applied
99
+ * it — the field is written only through the admin quota API. Documenting a field the handler
100
+ * ignores is the drift this work exists to remove, and once request validation enforces the
101
+ * schema, a client sending it gets an honest 400 instead of silence. It also closes the door on a
102
+ * future "fix" that would let an account admin raise their own rate-limit tier through the public
103
+ * API.
104
+ */
105
+ export const UpdateAccountPayloadSchema = z
106
+ .object({
107
+ name: z.string().optional(),
108
+ app_access_message: z.string().max(ACCOUNT_APP_ACCESS_MESSAGE_MAX_LENGTH).optional(),
109
+ email_domains: z.array(z.string()).optional(),
110
+ billing: AccountBillingSchema.optional(),
111
+ })
112
+ .meta({ id: 'UpdateAccountPayload' });
113
+
114
+ /**
115
+ * Stripe billing status, modelled as a real discriminated union.
116
+ *
117
+ * The hand-written `StripeBillingStatusResponse` in `meters.ts` flattens this into one object
118
+ * with `portal_url?` and `reason?` both optional, so a generated Java/Go client gets two
119
+ * unrelated optionals and no way to know which is populated. The server only ever sets
120
+ * `portal_url` when enabled and `reason` when disabled.
121
+ */
122
+ export const StripeBillingEnabledSchema = z
123
+ .object({
124
+ status: z.literal('enabled'),
125
+ /**
126
+ * Only ever `stripe`. The handler returns the enabled branch exclusively after checking
127
+ * `account.billing.method === BillingMethod.stripe`, so widening this to the full enum
128
+ * would describe states the server cannot produce.
129
+ */
130
+ billing_method: z.literal(BillingMethod.stripe),
131
+ portal_url: z.string(),
132
+ })
133
+ .meta({ id: 'StripeBillingEnabled' });
134
+
135
+ export const StripeBillingDisabledSchema = z
136
+ .object({
137
+ status: z.literal('disabled'),
138
+ billing_method: BillingMethodSchema.nullable(),
139
+ reason: z.string(),
140
+ })
141
+ .meta({ id: 'StripeBillingDisabled' });
142
+
143
+ export const StripeBillingStatusResponseSchema = z
144
+ .discriminatedUnion('status', [StripeBillingEnabledSchema, StripeBillingDisabledSchema])
145
+ .meta({ id: 'StripeBillingStatusResponse' });
146
+
147
+ export type AccountBillingFromSchema = z.infer<typeof AccountBillingSchema>;
148
+ export type AccountFromSchema = z.infer<typeof AccountSchema>;
149
+ export type UpdateAccountPayloadFromSchema = z.infer<typeof UpdateAccountPayloadSchema>;
150
+ export type StripeBillingStatusResponseFromSchema = z.infer<typeof StripeBillingStatusResponseSchema>;