@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,209 @@
1
+ import { Ajv2020 } from 'ajv/dist/2020.js';
2
+ import { describe, expect, it } from 'vitest';
3
+ import {
4
+ type ACECreatePayload,
5
+ type ACEUpdatePayload,
6
+ type AccessControlEntry,
7
+ AccessControlPrincipalType,
8
+ AccessControlResourceType,
9
+ Permission,
10
+ } from '../access-control.js';
11
+ import type { RoleDefinition, SystemRoleDefinition } from '../roles/types.js';
12
+ import type {
13
+ AccessControlEntryArrayFromSchema,
14
+ RoleDefinitionArrayFromSchema,
15
+ SystemRoleDefinitionArrayFromSchema,
16
+ } from './access-control.js';
17
+ import type { JsonObject } from './adapter.js';
18
+ import { ApiSchemaComponents, apiComponentRef, validateApiRequest, validateApiResponse } from './registry.js';
19
+
20
+ /** Exact type identity — `extends` in both directions is too weak (any/unknown slip through). */
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>(_ok: T): void {}
23
+
24
+ function compile(name: string) {
25
+ const ajv = new Ajv2020({ strictSchema: false, allErrors: true });
26
+ ajv.addSchema({ $id: 'vertesia://openapi', components: { schemas: ApiSchemaComponents } });
27
+ return ajv.compile({ $ref: `vertesia://openapi${apiComponentRef(name as never)}` });
28
+ }
29
+
30
+ const VALID_ACE = {
31
+ id: 'ace1',
32
+ role: 'owner',
33
+ resource_type: AccessControlResourceType.account,
34
+ resource: '68b1779130afe5403a1589ba',
35
+ principal_type: AccessControlPrincipalType.user,
36
+ principal: '68b1779130afe5403a1589bb',
37
+ };
38
+
39
+ const VALID_ROLE = { name: 'owner', permissions: ['account:admin'], domain: 'system' };
40
+
41
+ describe('gate 1 — the schema is the single source of truth for the public access-control types', () => {
42
+ it('publishes the exact schema-derived type, not a hand-written twin', () => {
43
+ assertType<Equals<AccessControlEntryArrayFromSchema, AccessControlEntry[]>>(true);
44
+ assertType<Equals<RoleDefinitionArrayFromSchema, RoleDefinition[]>>(true);
45
+ assertType<Equals<SystemRoleDefinitionArrayFromSchema, SystemRoleDefinition[]>>(true);
46
+ expect(true).toBe(true);
47
+ });
48
+
49
+ it('derives both ACE payloads from the entry rather than restating ten fields', () => {
50
+ // `ACECreatePayload extends Omit<AccessControlEntry, 'created_at' | 'updated_at' | 'id'>` is
51
+ // what the hand-written type said; `.omit()` is the literal translation, and the right
52
+ // operator when the derived shape is almost everything.
53
+ assertType<Equals<ACECreatePayload['role'], AccessControlEntry['role']>>(true);
54
+ assertType<Equals<ACECreatePayload['conditions'], AccessControlEntry['conditions']>>(true);
55
+ assertType<Equals<ACEUpdatePayload['role'], string | undefined>>(true);
56
+ // The three server-owned fields are what the omit leaves behind.
57
+ assertType<Equals<Extract<keyof ACECreatePayload, 'id' | 'created_at' | 'updated_at'>, never>>(true);
58
+ expect(true).toBe(true);
59
+ });
60
+
61
+ it('narrows permissions on the system role view without restating the shape', () => {
62
+ // `.extend()` overriding one property, which is what `interface SystemRoleDefinition extends
63
+ // RoleDefinition` did. Overriding keeps the property's position, so the published order holds.
64
+ assertType<Equals<SystemRoleDefinition['name'], RoleDefinition['name']>>(true);
65
+ assertType<Equals<SystemRoleDefinition['domain'], RoleDefinition['domain']>>(true);
66
+ assertType<Equals<RoleDefinition['permissions'], string[]>>(true);
67
+ // `SystemRoleDefinition['permissions']` is `Permission[]` — asserted by assignment in both
68
+ // directions rather than by `Equals`, which distinguishes an enum type from the union of its
69
+ // members even though tsc reports them under the same name.
70
+ const fromEnum: SystemRoleDefinition['permissions'] = [Permission.account_admin];
71
+ const toEnum: Permission[] = fromEnum;
72
+ // And it is genuinely narrower than the base component: an ABAC role name is a valid
73
+ // `RoleDefinition` permission and not a valid system one.
74
+ const abac: RoleDefinition['permissions'] = ['content:reader'];
75
+ // @ts-expect-error 'content:reader' is not a Permission
76
+ const rejected: SystemRoleDefinition['permissions'] = abac;
77
+ expect([toEnum, rejected]).toEqual([['account:admin'], ['content:reader']]);
78
+ });
79
+ });
80
+
81
+ describe('gate 2 — the published components match the closure the types come from', () => {
82
+ it('keeps the enums as shared components rather than inlining them per property', () => {
83
+ // A named component becomes ONE reusable Java/Go enum; an inline copy becomes an anonymous
84
+ // type per property. These names are already in the published document, so keeping them is
85
+ // also what avoids a breaking rename for everyone generating from it.
86
+ const props = ApiSchemaComponents.AccessControlEntry.properties as Record<string, JsonObject>;
87
+ expect(props.resource_type).toEqual({ $ref: '#/components/schemas/AccessControlResourceType' });
88
+ expect(props.principal_type).toEqual({ $ref: '#/components/schemas/AccessControlPrincipalType' });
89
+ expect(ApiSchemaComponents.AccessControlResourceType.enum).toContain('content_set');
90
+ expect(ApiSchemaComponents.Permission.enum).toContain('account:admin');
91
+ });
92
+
93
+ it('closes AceConditions, which the display-name fields would otherwise slip through', () => {
94
+ // Listed in STRICT_COMPONENTS by name: it is a hoisted component, so the parent entry's
95
+ // strict policy does not reach it.
96
+ expect(ApiSchemaComponents.AceConditions.additionalProperties).toBe(false);
97
+ expect(Object.keys(ApiSchemaComponents.AceConditions.properties as JsonObject)).toEqual([
98
+ 'principal_props',
99
+ 'resource_props',
100
+ 'scope',
101
+ ]);
102
+ });
103
+
104
+ it('publishes PropertyConditions as the map it is', () => {
105
+ // It used to be a `$ref` to a synthesized `PropertyConditionValueMap` — an artifact of
106
+ // deriving a `Record<>` alias through a second alias. The indirection is gone; the value
107
+ // schema is still its own component so the "deliberately unconstrained" statement has one
108
+ // place to live.
109
+ expect(ApiSchemaComponents.PropertyConditions.additionalProperties).toEqual({
110
+ $ref: '#/components/schemas/PropertyConditionValue',
111
+ });
112
+ expect(Object.keys(ApiSchemaComponents)).not.toContain('PropertyConditionValueMap');
113
+ });
114
+
115
+ it('leaves the ACE timestamps as plain strings', () => {
116
+ // Deliberately NOT tightened to `format: date-time` the way User and UserGroup were:
117
+ // `expires_at` shares the declaration and is written straight from a payload, so a stored
118
+ // value AJV would now reject is a real possibility rather than a hypothetical one.
119
+ const props = ApiSchemaComponents.AccessControlEntry.properties as Record<string, JsonObject>;
120
+ expect(props.created_at).toEqual({ type: 'string' });
121
+ expect(props.expires_at).toEqual({ type: 'string' });
122
+ });
123
+ });
124
+
125
+ describe('gate 3 — AJV validates the same canonical objects that are published', () => {
126
+ it('accepts a minimal entry and rejects a missing required field', () => {
127
+ const validate = compile('AccessControlEntry');
128
+ expect(validate(VALID_ACE)).toBe(true);
129
+ const { principal: _dropped, ...incomplete } = VALID_ACE;
130
+ expect(validate(incomplete)).toBe(false);
131
+ });
132
+
133
+ it('rejects the display names the sub-document holds but the contract does not declare', () => {
134
+ const validate = compile('AccessControlEntry');
135
+ expect(validate({ ...VALID_ACE, conditions: { principal_props: { team: 'eng' } } })).toBe(true);
136
+ expect(validate({ ...VALID_ACE, conditions: { principal_name: 'Engineering staff' } })).toBe(false);
137
+ expect(validate({ ...VALID_ACE, conditions: { resource_name: 'Confidential docs' } })).toBe(false);
138
+ });
139
+
140
+ it('rejects the internal fields a serialized document would have leaked', () => {
141
+ const validate = compile('AccessControlEntry');
142
+ expect(validate({ ...VALID_ACE, _id: 'deadbeef' })).toBe(false);
143
+ expect(validate({ ...VALID_ACE, type: 'legacy' })).toBe(false);
144
+ });
145
+
146
+ it('accepts any condition value, which is the point of leaving it unconstrained', () => {
147
+ const validate = compile('AccessControlEntry');
148
+ for (const value of [5, 'engineering', { $gte: 5 }, ['us-east'], '$principal.access_level', null]) {
149
+ expect(validate({ ...VALID_ACE, conditions: { resource_props: { key: value } } })).toBe(true);
150
+ }
151
+ });
152
+
153
+ it('requires the five identifying fields on a create payload and none on an update', () => {
154
+ const create = compile('ACECreatePayload');
155
+ const { id: _id, ...payload } = VALID_ACE;
156
+ expect(create(payload)).toBe(true);
157
+ // `id` and the timestamps are server-owned; the closed payload rejects them outright.
158
+ expect(create(VALID_ACE)).toBe(false);
159
+ expect(create({ role: 'owner' })).toBe(false);
160
+
161
+ const update = compile('ACEUpdatePayload');
162
+ expect(update({})).toBe(true);
163
+ expect(update({ role: 'reader' })).toBe(true);
164
+ expect(update({ rogue_field: 1 })).toBe(false);
165
+ });
166
+
167
+ it('constrains a system role to the Permission enum and a plain role to any string', () => {
168
+ expect(compile('RoleDefinition')(VALID_ROLE)).toBe(true);
169
+ expect(compile('RoleDefinition')({ ...VALID_ROLE, permissions: ['content:reader'] })).toBe(true);
170
+ expect(compile('SystemRoleDefinition')(VALID_ROLE)).toBe(true);
171
+ // 'content:reader' is an ABAC role name, not a Permission — which is exactly the distinction
172
+ // the two components exist to draw.
173
+ expect(compile('SystemRoleDefinition')({ ...VALID_ROLE, permissions: ['content:reader'] })).toBe(false);
174
+ expect(compile('RoleDefinition')({ ...VALID_ROLE, domain: 'billing' })).toBe(false);
175
+ });
176
+ });
177
+
178
+ describe('gate 4 — runtime enforcement uses the published components', () => {
179
+ it('checks every member of a listing against the same entry component', () => {
180
+ expect(validateApiResponse('AccessControlEntryArray', [VALID_ACE, VALID_ACE]).valid).toBe(true);
181
+ expect(validateApiResponse('AccessControlEntryArray', []).valid).toBe(true);
182
+ // One entry still carrying its display name is what the unmapped listing would have produced.
183
+ const leaked = { ...VALID_ACE, conditions: { principal_name: 'Everyone' } };
184
+ expect(validateApiResponse('AccessControlEntryArray', [VALID_ACE, leaked]).valid).toBe(false);
185
+ });
186
+
187
+ it('rejects an undeclared update field without removing it', () => {
188
+ const payload: Record<string, unknown> = { role: 'reader', rogue_field: 42 };
189
+ const result = validateApiRequest('ACEUpdatePayload', payload);
190
+ expect(result.valid).toBe(false);
191
+ expect(payload.rogue_field).toBe(42);
192
+ });
193
+
194
+ it('hands back the component type on the valid branch', () => {
195
+ const result = validateApiResponse('AccessControlEntry', VALID_ACE);
196
+ expect(result.valid).toBe(true);
197
+ if (result.valid) {
198
+ assertType<Equals<typeof result.data, AccessControlEntry>>(true);
199
+ }
200
+ });
201
+
202
+ it('checks the role listings against their own components', () => {
203
+ expect(validateApiResponse('RoleDefinitionArray', [VALID_ROLE]).valid).toBe(true);
204
+ expect(validateApiResponse('SystemRoleDefinitionArray', [VALID_ROLE]).valid).toBe(true);
205
+ expect(validateApiResponse('RoleDefinitionArray', [{ ...VALID_ROLE, domain: 'system', extra: 1 }]).valid).toBe(
206
+ false,
207
+ );
208
+ });
209
+ });
@@ -0,0 +1,208 @@
1
+ import { z } from 'zod';
2
+ // From the values module, never from `../access-control.js` or `../roles/types.js`: both derive
3
+ // their public types from the schemas below, so importing them here would invert the dependency.
4
+ import {
5
+ AbacScopes,
6
+ AccessControlPrincipalType,
7
+ AccessControlResourceType,
8
+ Permission,
9
+ RoleDomains,
10
+ } from '../access-control-values.js';
11
+
12
+ /**
13
+ * Runtime API schemas for IAM roles and access-control entries.
14
+ */
15
+
16
+ /**
17
+ * The permission vocabulary, hoisted so `SystemRoleDefinition` publishes one reusable enum rather
18
+ * than an inline copy per property.
19
+ */
20
+ export const PermissionSchema = z.enum(Permission).meta({ id: 'Permission' });
21
+
22
+ export const AccessControlResourceTypeSchema = z.enum(AccessControlResourceType).meta({
23
+ id: 'AccessControlResourceType',
24
+ });
25
+
26
+ export const AccessControlPrincipalTypeSchema = z.enum(AccessControlPrincipalType).meta({
27
+ id: 'AccessControlPrincipalType',
28
+ });
29
+
30
+ export const AbacScopeSchema = z.enum(AbacScopes).meta({ id: 'AbacScope' });
31
+
32
+ export const RoleDomainSchema = z.enum(RoleDomains).meta({
33
+ id: 'RoleDomain',
34
+ description:
35
+ 'Logical grouping of roles by the service area that owns them. One domain may declare roles ' +
36
+ 'applicable to multiple scopes (e.g. the `content` domain owns roles applicable to both `document` ' +
37
+ 'and `collection` scopes). The `system` domain owns the built-in foundational roles (currently ' +
38
+ 'exposed as `SystemRoles`) — registered first so domain partitions cannot shadow them.',
39
+ });
40
+
41
+ /**
42
+ * Deliberately unconstrained, and hoisted so the constraint's ABSENCE is stated in one place. A
43
+ * condition value is compared by the token and content-security evaluators, which accept literals,
44
+ * operator objects (`{ $gte: 5 }`) and `$principal.` cross-references — a union no schema could
45
+ * usefully close without freezing that vocabulary into the public contract.
46
+ */
47
+ export const PropertyConditionValueSchema = z.unknown().meta({
48
+ id: 'PropertyConditionValue',
49
+ description: 'A single condition value. Resolved and evaluated dynamically by token/content security code.',
50
+ });
51
+
52
+ export const PropertyConditionsSchema = z
53
+ .record(z.string(), PropertyConditionValueSchema)
54
+ .meta({ id: 'PropertyConditions' });
55
+
56
+ /**
57
+ * Closed, and that matters here: the SERVER stores two more fields inside `conditions` —
58
+ * `principal_name` and `resource_name` — which this component has never declared. They are display
59
+ * names held there until `principal`/`resource` migrate from ObjectId to string, and the handlers
60
+ * copy them back into `principal`/`resource` on the way out. Every response that also serialized the
61
+ * raw sub-document was therefore violating its own schema; the mappers now build `conditions`
62
+ * explicitly, so the value still reaches the client — in the field the contract declares.
63
+ */
64
+ export const AceConditionsSchema = z
65
+ .object({
66
+ principal_props: PropertyConditionsSchema.meta({
67
+ description: 'Property conditions matched against user/group properties at token time (PrincipalSet).',
68
+ }).optional(),
69
+ resource_props: PropertyConditionsSchema.meta({
70
+ description: 'Property conditions matched against object properties at query time (ResourceSet).',
71
+ }).optional(),
72
+ scope: AbacScopeSchema.meta({
73
+ description:
74
+ "Kind of object the `resource_props` matches. Used to disambiguate which partition's roles " +
75
+ 'apply (e.g. content roles vs task roles) and to form the JWT `content_security` key prefix ' +
76
+ "(`{scope}:{verb}`). Absent → `'document'` (default; emits bare `read`/`write`/`delete` keys " +
77
+ 'for backward compatibility).',
78
+ }).optional(),
79
+ })
80
+ .meta({
81
+ id: 'AceConditions',
82
+ description:
83
+ 'Conditions attached to an ACE for dynamic matching.\n' +
84
+ '- `principal_props`: matched against user/group properties at token time (PrincipalSet).\n' +
85
+ '- `resource_props`: matched against object properties at query time (ResourceSet).',
86
+ });
87
+
88
+ /**
89
+ * The access control entry as it crosses the wire.
90
+ *
91
+ * `resource` and `principal` are strings here and ObjectIds in Mongo — except for the dynamic
92
+ * (`principal_set` / `content_set`) entries, where the stored ObjectId is meaningless and the handler
93
+ * substitutes the display name out of `conditions`. That substitution is the reason these endpoints
94
+ * need a mapper rather than a serialized document: no cast can express "this field is a different
95
+ * value depending on another field".
96
+ *
97
+ * The timestamps are plain strings rather than `format: date-time`, which is what the document
98
+ * already publishes. Unlike `User` and `UserGroup` this is NOT safe to tighten in passing: `expires_at`
99
+ * shares the declaration and is written from an unvalidated payload, so an existing caller could have
100
+ * stored a value AJV would now reject.
101
+ */
102
+ export const AccessControlEntrySchema = z
103
+ .object({
104
+ role: z.string().meta({
105
+ description:
106
+ 'Role name. Typed as `string` because role names now span multiple partitions: `SystemRoles` ' +
107
+ "enum values for system-domain roles, and bare strings for ABAC-domain roles (e.g. `'content:reader'`, " +
108
+ "`'content:writer'`, `'content:manager'`). Mongoose schema validates the value against the " +
109
+ 'registered role catalog via `getAllRoleNames()`.',
110
+ }),
111
+ resource_type: AccessControlResourceTypeSchema,
112
+ resource: z.string(),
113
+ principal_type: AccessControlPrincipalTypeSchema,
114
+ principal: z.string(),
115
+ account: z
116
+ .string()
117
+ .meta({ description: 'Account scope — required for principal_set/content_set ACEs.' })
118
+ .optional(),
119
+ project: z
120
+ .string()
121
+ .meta({ description: 'Project scope — narrows a principal_set/content_set ACE to a single project.' })
122
+ .optional(),
123
+ conditions: AceConditionsSchema.meta({
124
+ description: 'Dynamic matching conditions for principal_set/content_set ACEs.',
125
+ }).optional(),
126
+ tags: z.array(z.string()).optional(),
127
+ expires_at: z.string().optional(),
128
+ created_at: z.string().optional(),
129
+ updated_at: z.string().optional(),
130
+ id: z.string(),
131
+ })
132
+ .meta({ id: 'AccessControlEntry' });
133
+
134
+ export const AccessControlEntryArraySchema = z.array(AccessControlEntrySchema).meta({ id: 'AccessControlEntryArray' });
135
+
136
+ /**
137
+ * Create and update payloads, picked from the entry rather than restated.
138
+ *
139
+ * `ACECreatePayload extends Omit<AccessControlEntry, 'created_at' | 'updated_at' | 'id'>` is what the
140
+ * hand-written types said, so `.omit()` is the literal translation — and the right operator here for
141
+ * the reason the guidance gives: the derived shape is almost everything. `ACEUpdatePayload` was
142
+ * `Partial<ACECreatePayload>`, which `.partial()` reproduces exactly.
143
+ */
144
+ export const ACECreatePayloadSchema = AccessControlEntrySchema.omit({
145
+ created_at: true,
146
+ updated_at: true,
147
+ id: true,
148
+ }).meta({ id: 'ACECreatePayload' });
149
+
150
+ export const ACEUpdatePayloadSchema = ACECreatePayloadSchema.partial().meta({ id: 'ACEUpdatePayload' });
151
+
152
+ /**
153
+ * The role catalog. Both shapes are static — computed from the in-process role registry, never read
154
+ * from Mongo — so these two slots carry no persistence boundary at all.
155
+ */
156
+ export const RoleDefinitionSchema = z
157
+ .object({
158
+ name: z.string(),
159
+ permissions: z.array(z.string()),
160
+ domain: RoleDomainSchema,
161
+ })
162
+ .meta({
163
+ id: 'RoleDefinition',
164
+ description:
165
+ 'Wire shape of a role returned by the IAM `/roles` endpoint.\n\n' +
166
+ 'Permissions are typed `string[]` because role names span multiple partitions (system, content, ' +
167
+ 'future tasks/etc.) and each partition has its own vocabulary. For the tightly-typed system-only ' +
168
+ 'view (with `permissions: Permission[]`) use `SystemRoleDefinition` and the `/roles/system` endpoint.\n\n' +
169
+ "NOTE: this interface is intentionally non-generic. The OpenAPI generator doesn't handle TypeScript " +
170
+ 'generics cleanly in array response types and produces a degenerate `RoleDefinitionArray` schema. ' +
171
+ 'Keeping the wire shapes concrete avoids that. `SystemRoleDefinition` extends and narrows ' +
172
+ '`permissions` to `Permission[]`.',
173
+ });
174
+
175
+ export const RoleDefinitionArraySchema = z.array(RoleDefinitionSchema).meta({ id: 'RoleDefinitionArray' });
176
+
177
+ /**
178
+ * `.extend()` and not a second object: `SystemRoleDefinition extends RoleDefinition` narrowing
179
+ * `permissions`, expressed as the override it is. Overriding a property keeps its position, so the
180
+ * published property order is unchanged.
181
+ */
182
+ export const SystemRoleDefinitionSchema = RoleDefinitionSchema.extend({
183
+ permissions: z.array(PermissionSchema),
184
+ }).meta({
185
+ id: 'SystemRoleDefinition',
186
+ description:
187
+ 'Tightly-typed view of a system-domain role: permissions are central `Permission` enum values. ' +
188
+ "Returned by `client.iam.roles.listSystem()` and by the server's `/roles/system` endpoint.",
189
+ });
190
+
191
+ export const SystemRoleDefinitionArraySchema = z
192
+ .array(SystemRoleDefinitionSchema)
193
+ .meta({ id: 'SystemRoleDefinitionArray' });
194
+
195
+ /**
196
+ * The public access-control types, inferred rather than written. `../access-control.ts` and
197
+ * `../roles/types.ts` re-export these under their public names.
198
+ */
199
+ export type PropertyConditionsFromSchema = z.infer<typeof PropertyConditionsSchema>;
200
+ export type AceConditionsFromSchema = z.infer<typeof AceConditionsSchema>;
201
+ export type AccessControlEntryFromSchema = z.infer<typeof AccessControlEntrySchema>;
202
+ export type AccessControlEntryArrayFromSchema = z.infer<typeof AccessControlEntryArraySchema>;
203
+ export type ACECreatePayloadFromSchema = z.infer<typeof ACECreatePayloadSchema>;
204
+ export type ACEUpdatePayloadFromSchema = z.infer<typeof ACEUpdatePayloadSchema>;
205
+ export type RoleDefinitionFromSchema = z.infer<typeof RoleDefinitionSchema>;
206
+ export type RoleDefinitionArrayFromSchema = z.infer<typeof RoleDefinitionArraySchema>;
207
+ export type SystemRoleDefinitionFromSchema = z.infer<typeof SystemRoleDefinitionSchema>;
208
+ export type SystemRoleDefinitionArrayFromSchema = z.infer<typeof SystemRoleDefinitionArraySchema>;