@kindgi/api 0.1.4 → 0.1.5-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/dist/agent-binding.d.ts +13 -0
  2. package/dist/agent-binding.d.ts.map +1 -1
  3. package/dist/agent-pins.d.ts.map +1 -1
  4. package/dist/agent-pins.js +18 -2
  5. package/dist/agent-pins.js.map +1 -1
  6. package/dist/app.d.ts +110 -17
  7. package/dist/app.d.ts.map +1 -1
  8. package/dist/app.js +163 -35
  9. package/dist/app.js.map +1 -1
  10. package/dist/block-publish.d.ts +56 -0
  11. package/dist/block-publish.d.ts.map +1 -0
  12. package/dist/block-publish.js +132 -0
  13. package/dist/block-publish.js.map +1 -0
  14. package/dist/caller.d.ts +24 -0
  15. package/dist/caller.d.ts.map +1 -0
  16. package/dist/caller.js +47 -0
  17. package/dist/caller.js.map +1 -0
  18. package/dist/capability-binding.d.ts +11 -0
  19. package/dist/capability-binding.d.ts.map +1 -1
  20. package/dist/derive-agent-version.d.ts +7 -0
  21. package/dist/derive-agent-version.d.ts.map +1 -1
  22. package/dist/derive-agent-version.js +4 -0
  23. package/dist/derive-agent-version.js.map +1 -1
  24. package/dist/errors.d.ts.map +1 -1
  25. package/dist/errors.js +73 -7
  26. package/dist/errors.js.map +1 -1
  27. package/dist/eval-case-binding.d.ts +16 -4
  28. package/dist/eval-case-binding.d.ts.map +1 -1
  29. package/dist/eval-run-binding.d.ts +31 -0
  30. package/dist/eval-run-binding.d.ts.map +1 -1
  31. package/dist/eval-run-dispatcher.d.ts +7 -0
  32. package/dist/eval-run-dispatcher.d.ts.map +1 -1
  33. package/dist/eval-run-dispatcher.js.map +1 -1
  34. package/dist/eval-sample.d.ts +11 -0
  35. package/dist/eval-sample.d.ts.map +1 -0
  36. package/dist/eval-sample.js +34 -0
  37. package/dist/eval-sample.js.map +1 -0
  38. package/dist/eval-suite-binding.d.ts +13 -0
  39. package/dist/eval-suite-binding.d.ts.map +1 -1
  40. package/dist/eval-suite-binding.js.map +1 -1
  41. package/dist/flow-binding.d.ts +18 -0
  42. package/dist/flow-binding.d.ts.map +1 -1
  43. package/dist/flow-pins.d.ts.map +1 -1
  44. package/dist/flow-pins.js +18 -2
  45. package/dist/flow-pins.js.map +1 -1
  46. package/dist/gate.d.ts.map +1 -1
  47. package/dist/gate.js +25 -0
  48. package/dist/gate.js.map +1 -1
  49. package/dist/handler-binding.d.ts +32 -0
  50. package/dist/handler-binding.d.ts.map +1 -1
  51. package/dist/hitl-binding.d.ts +23 -0
  52. package/dist/hitl-binding.d.ts.map +1 -1
  53. package/dist/identity-directory-binding.d.ts +82 -4
  54. package/dist/identity-directory-binding.d.ts.map +1 -1
  55. package/dist/identity-provider-binding.d.ts +197 -17
  56. package/dist/identity-provider-binding.d.ts.map +1 -1
  57. package/dist/improvement-pass-binding.d.ts +196 -0
  58. package/dist/improvement-pass-binding.d.ts.map +1 -0
  59. package/dist/improvement-pass-binding.js +9 -0
  60. package/dist/improvement-pass-binding.js.map +1 -0
  61. package/dist/index.d.ts +35 -17
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +11 -3
  64. package/dist/index.js.map +1 -1
  65. package/dist/judged-dispatcher.d.ts +25 -4
  66. package/dist/judged-dispatcher.d.ts.map +1 -1
  67. package/dist/judged-dispatcher.js +43 -6
  68. package/dist/judged-dispatcher.js.map +1 -1
  69. package/dist/judgment-binding.d.ts +25 -1
  70. package/dist/judgment-binding.d.ts.map +1 -1
  71. package/dist/mcp-endpoint-binding.d.ts +7 -0
  72. package/dist/mcp-endpoint-binding.d.ts.map +1 -1
  73. package/dist/memory-binding.d.ts +124 -17
  74. package/dist/memory-binding.d.ts.map +1 -1
  75. package/dist/memory-erasure-binding.d.ts +145 -0
  76. package/dist/memory-erasure-binding.d.ts.map +1 -0
  77. package/dist/memory-erasure-binding.js +4 -0
  78. package/dist/memory-erasure-binding.js.map +1 -0
  79. package/dist/middleware/auth.d.ts +66 -13
  80. package/dist/middleware/auth.d.ts.map +1 -1
  81. package/dist/middleware/auth.js +150 -50
  82. package/dist/middleware/auth.js.map +1 -1
  83. package/dist/middleware/authorize.d.ts +6 -0
  84. package/dist/middleware/authorize.d.ts.map +1 -1
  85. package/dist/middleware/authorize.js +113 -4
  86. package/dist/middleware/authorize.js.map +1 -1
  87. package/dist/middleware/error-mapper.d.ts +5 -0
  88. package/dist/middleware/error-mapper.d.ts.map +1 -1
  89. package/dist/middleware/error-mapper.js +14 -1
  90. package/dist/middleware/error-mapper.js.map +1 -1
  91. package/dist/middleware/idempotency.d.ts +70 -5
  92. package/dist/middleware/idempotency.d.ts.map +1 -1
  93. package/dist/middleware/idempotency.js +174 -41
  94. package/dist/middleware/idempotency.js.map +1 -1
  95. package/dist/middleware/key-project.d.ts +17 -0
  96. package/dist/middleware/key-project.d.ts.map +1 -0
  97. package/dist/middleware/key-project.js +75 -0
  98. package/dist/middleware/key-project.js.map +1 -0
  99. package/dist/middleware/principal.d.ts.map +1 -1
  100. package/dist/middleware/principal.js +9 -5
  101. package/dist/middleware/principal.js.map +1 -1
  102. package/dist/middleware/project-ref.d.ts.map +1 -1
  103. package/dist/middleware/project-ref.js +3 -0
  104. package/dist/middleware/project-ref.js.map +1 -1
  105. package/dist/openapi/generate.d.ts.map +1 -1
  106. package/dist/openapi/generate.js +5 -2
  107. package/dist/openapi/generate.js.map +1 -1
  108. package/dist/openapi/operations.d.ts.map +1 -1
  109. package/dist/openapi/operations.js +918 -139
  110. package/dist/openapi/operations.js.map +1 -1
  111. package/dist/openapi/schemas.d.ts +90 -13
  112. package/dist/openapi/schemas.d.ts.map +1 -1
  113. package/dist/openapi/schemas.js +2081 -359
  114. package/dist/openapi/schemas.js.map +1 -1
  115. package/dist/person-grants-binding.d.ts +77 -0
  116. package/dist/person-grants-binding.d.ts.map +1 -0
  117. package/dist/person-grants-binding.js +4 -0
  118. package/dist/person-grants-binding.js.map +1 -0
  119. package/dist/proposal-service.d.ts +121 -0
  120. package/dist/proposal-service.d.ts.map +1 -0
  121. package/dist/proposal-service.js +447 -0
  122. package/dist/proposal-service.js.map +1 -0
  123. package/dist/proposal-status.d.ts +60 -0
  124. package/dist/proposal-status.d.ts.map +1 -0
  125. package/dist/proposal-status.js +109 -0
  126. package/dist/proposal-status.js.map +1 -0
  127. package/dist/provider-binding.d.ts +10 -0
  128. package/dist/provider-binding.d.ts.map +1 -1
  129. package/dist/publish-refused.d.ts +18 -3
  130. package/dist/publish-refused.d.ts.map +1 -1
  131. package/dist/publish-refused.js +18 -3
  132. package/dist/publish-refused.js.map +1 -1
  133. package/dist/routes/adapters.d.ts +2 -1
  134. package/dist/routes/adapters.d.ts.map +1 -1
  135. package/dist/routes/adapters.js +3 -1
  136. package/dist/routes/adapters.js.map +1 -1
  137. package/dist/routes/agent-releases.d.ts +55 -3
  138. package/dist/routes/agent-releases.d.ts.map +1 -1
  139. package/dist/routes/agent-releases.js +85 -55
  140. package/dist/routes/agent-releases.js.map +1 -1
  141. package/dist/routes/agents.d.ts +12 -1
  142. package/dist/routes/agents.d.ts.map +1 -1
  143. package/dist/routes/agents.js +100 -2
  144. package/dist/routes/agents.js.map +1 -1
  145. package/dist/routes/approvals.d.ts +15 -3
  146. package/dist/routes/approvals.d.ts.map +1 -1
  147. package/dist/routes/approvals.js +133 -122
  148. package/dist/routes/approvals.js.map +1 -1
  149. package/dist/routes/artifacts.d.ts +25 -3
  150. package/dist/routes/artifacts.d.ts.map +1 -1
  151. package/dist/routes/artifacts.js +116 -7
  152. package/dist/routes/artifacts.js.map +1 -1
  153. package/dist/routes/auth.d.ts +25 -1
  154. package/dist/routes/auth.d.ts.map +1 -1
  155. package/dist/routes/auth.js +655 -281
  156. package/dist/routes/auth.js.map +1 -1
  157. package/dist/routes/blocks.d.ts.map +1 -1
  158. package/dist/routes/blocks.js +2 -42
  159. package/dist/routes/blocks.js.map +1 -1
  160. package/dist/routes/capabilities.d.ts +2 -1
  161. package/dist/routes/capabilities.d.ts.map +1 -1
  162. package/dist/routes/capabilities.js +6 -1
  163. package/dist/routes/capabilities.js.map +1 -1
  164. package/dist/routes/compliance.d.ts +9 -10
  165. package/dist/routes/compliance.d.ts.map +1 -1
  166. package/dist/routes/compliance.js +42 -61
  167. package/dist/routes/compliance.js.map +1 -1
  168. package/dist/routes/conversations.d.ts +8 -1
  169. package/dist/routes/conversations.d.ts.map +1 -1
  170. package/dist/routes/conversations.js +87 -8
  171. package/dist/routes/conversations.js.map +1 -1
  172. package/dist/routes/cost.d.ts +7 -1
  173. package/dist/routes/cost.d.ts.map +1 -1
  174. package/dist/routes/cost.js +22 -3
  175. package/dist/routes/cost.js.map +1 -1
  176. package/dist/routes/denied.d.ts +11 -0
  177. package/dist/routes/denied.d.ts.map +1 -0
  178. package/dist/routes/denied.js +17 -0
  179. package/dist/routes/denied.js.map +1 -0
  180. package/dist/routes/deployments.d.ts +2 -1
  181. package/dist/routes/deployments.d.ts.map +1 -1
  182. package/dist/routes/deployments.js +44 -12
  183. package/dist/routes/deployments.js.map +1 -1
  184. package/dist/routes/eval-comparison.d.ts.map +1 -1
  185. package/dist/routes/eval-comparison.js +69 -1
  186. package/dist/routes/eval-comparison.js.map +1 -1
  187. package/dist/routes/eval-overrides.d.ts +18 -0
  188. package/dist/routes/eval-overrides.d.ts.map +1 -0
  189. package/dist/routes/eval-overrides.js +81 -0
  190. package/dist/routes/eval-overrides.js.map +1 -0
  191. package/dist/routes/eval-runs.d.ts +10 -1
  192. package/dist/routes/eval-runs.d.ts.map +1 -1
  193. package/dist/routes/eval-runs.js +63 -7
  194. package/dist/routes/eval-runs.js.map +1 -1
  195. package/dist/routes/eval-suites.d.ts.map +1 -1
  196. package/dist/routes/eval-suites.js +20 -1
  197. package/dist/routes/eval-suites.js.map +1 -1
  198. package/dist/routes/event-triggers.d.ts +5 -1
  199. package/dist/routes/event-triggers.d.ts.map +1 -1
  200. package/dist/routes/event-triggers.js +26 -3
  201. package/dist/routes/event-triggers.js.map +1 -1
  202. package/dist/routes/export-signing-keys.d.ts +12 -0
  203. package/dist/routes/export-signing-keys.d.ts.map +1 -0
  204. package/dist/routes/export-signing-keys.js +24 -0
  205. package/dist/routes/export-signing-keys.js.map +1 -0
  206. package/dist/routes/flows.d.ts.map +1 -1
  207. package/dist/routes/flows.js +9 -1
  208. package/dist/routes/flows.js.map +1 -1
  209. package/dist/routes/gate-policies.d.ts +4 -1
  210. package/dist/routes/gate-policies.d.ts.map +1 -1
  211. package/dist/routes/gate-policies.js +29 -5
  212. package/dist/routes/gate-policies.js.map +1 -1
  213. package/dist/routes/guardrails.d.ts +16 -14
  214. package/dist/routes/guardrails.d.ts.map +1 -1
  215. package/dist/routes/guardrails.js +39 -3
  216. package/dist/routes/guardrails.js.map +1 -1
  217. package/dist/routes/identity.d.ts +20 -4
  218. package/dist/routes/identity.d.ts.map +1 -1
  219. package/dist/routes/identity.js +246 -6
  220. package/dist/routes/identity.js.map +1 -1
  221. package/dist/routes/improvement-passes.d.ts +52 -0
  222. package/dist/routes/improvement-passes.d.ts.map +1 -0
  223. package/dist/routes/improvement-passes.js +449 -0
  224. package/dist/routes/improvement-passes.js.map +1 -0
  225. package/dist/routes/judged-suites.d.ts +50 -0
  226. package/dist/routes/judged-suites.d.ts.map +1 -1
  227. package/dist/routes/judged-suites.js +66 -27
  228. package/dist/routes/judged-suites.js.map +1 -1
  229. package/dist/routes/judgment-context.d.ts +18 -2
  230. package/dist/routes/judgment-context.d.ts.map +1 -1
  231. package/dist/routes/judgment-context.js +63 -5
  232. package/dist/routes/judgment-context.js.map +1 -1
  233. package/dist/routes/judgment-flow-context.d.ts.map +1 -1
  234. package/dist/routes/judgment-flow-context.js +14 -2
  235. package/dist/routes/judgment-flow-context.js.map +1 -1
  236. package/dist/routes/judgments.d.ts.map +1 -1
  237. package/dist/routes/judgments.js +8 -1
  238. package/dist/routes/judgments.js.map +1 -1
  239. package/dist/routes/mcp.d.ts.map +1 -1
  240. package/dist/routes/mcp.js +26 -1
  241. package/dist/routes/mcp.js.map +1 -1
  242. package/dist/routes/memory-access.d.ts +43 -0
  243. package/dist/routes/memory-access.d.ts.map +1 -0
  244. package/dist/routes/memory-access.js +129 -0
  245. package/dist/routes/memory-access.js.map +1 -0
  246. package/dist/routes/memory-erasures.d.ts +25 -0
  247. package/dist/routes/memory-erasures.d.ts.map +1 -0
  248. package/dist/routes/memory-erasures.js +214 -0
  249. package/dist/routes/memory-erasures.js.map +1 -0
  250. package/dist/routes/memory-parse.d.ts +38 -0
  251. package/dist/routes/memory-parse.d.ts.map +1 -0
  252. package/dist/routes/memory-parse.js +199 -0
  253. package/dist/routes/memory-parse.js.map +1 -0
  254. package/dist/routes/memory.d.ts +9 -4
  255. package/dist/routes/memory.d.ts.map +1 -1
  256. package/dist/routes/memory.js +226 -234
  257. package/dist/routes/memory.js.map +1 -1
  258. package/dist/routes/observations.d.ts +4 -1
  259. package/dist/routes/observations.d.ts.map +1 -1
  260. package/dist/routes/observations.js +8 -2
  261. package/dist/routes/observations.js.map +1 -1
  262. package/dist/routes/pagination.d.ts +7 -0
  263. package/dist/routes/pagination.d.ts.map +1 -1
  264. package/dist/routes/pagination.js +10 -0
  265. package/dist/routes/pagination.js.map +1 -1
  266. package/dist/routes/policies.d.ts +2 -1
  267. package/dist/routes/policies.d.ts.map +1 -1
  268. package/dist/routes/policies.js +3 -1
  269. package/dist/routes/policies.js.map +1 -1
  270. package/dist/routes/project-mismatch.d.ts +22 -0
  271. package/dist/routes/project-mismatch.d.ts.map +1 -0
  272. package/dist/routes/project-mismatch.js +34 -0
  273. package/dist/routes/project-mismatch.js.map +1 -0
  274. package/dist/routes/projects.d.ts +15 -4
  275. package/dist/routes/projects.d.ts.map +1 -1
  276. package/dist/routes/projects.js +100 -9
  277. package/dist/routes/projects.js.map +1 -1
  278. package/dist/routes/proposals.d.ts +25 -17
  279. package/dist/routes/proposals.d.ts.map +1 -1
  280. package/dist/routes/proposals.js +340 -507
  281. package/dist/routes/proposals.js.map +1 -1
  282. package/dist/routes/provenance.d.ts +17 -3
  283. package/dist/routes/provenance.d.ts.map +1 -1
  284. package/dist/routes/provenance.js +79 -103
  285. package/dist/routes/provenance.js.map +1 -1
  286. package/dist/routes/providers.d.ts +17 -1
  287. package/dist/routes/providers.d.ts.map +1 -1
  288. package/dist/routes/providers.js +110 -3
  289. package/dist/routes/providers.js.map +1 -1
  290. package/dist/routes/public-run-tokens.d.ts.map +1 -1
  291. package/dist/routes/public-run-tokens.js +3 -0
  292. package/dist/routes/public-run-tokens.js.map +1 -1
  293. package/dist/routes/runs.d.ts +10 -0
  294. package/dist/routes/runs.d.ts.map +1 -1
  295. package/dist/routes/runs.js +92 -42
  296. package/dist/routes/runs.js.map +1 -1
  297. package/dist/routes/schedules.d.ts +21 -13
  298. package/dist/routes/schedules.d.ts.map +1 -1
  299. package/dist/routes/schedules.js +416 -55
  300. package/dist/routes/schedules.js.map +1 -1
  301. package/dist/routes/segments.d.ts +2 -0
  302. package/dist/routes/segments.d.ts.map +1 -1
  303. package/dist/routes/segments.js +5 -0
  304. package/dist/routes/segments.js.map +1 -1
  305. package/dist/routes/service-accounts.d.ts +17 -0
  306. package/dist/routes/service-accounts.d.ts.map +1 -0
  307. package/dist/routes/service-accounts.js +212 -0
  308. package/dist/routes/service-accounts.js.map +1 -0
  309. package/dist/routes/sign-in-options.d.ts +50 -0
  310. package/dist/routes/sign-in-options.d.ts.map +1 -0
  311. package/dist/routes/sign-in-options.js +98 -0
  312. package/dist/routes/sign-in-options.js.map +1 -0
  313. package/dist/routes/signing-keys.d.ts +2 -1
  314. package/dist/routes/signing-keys.d.ts.map +1 -1
  315. package/dist/routes/signing-keys.js +3 -1
  316. package/dist/routes/signing-keys.js.map +1 -1
  317. package/dist/routes/tenant-access.d.ts +13 -0
  318. package/dist/routes/tenant-access.d.ts.map +1 -0
  319. package/dist/routes/tenant-access.js +26 -0
  320. package/dist/routes/tenant-access.js.map +1 -0
  321. package/dist/routes/tenant.d.ts.map +1 -1
  322. package/dist/routes/tenant.js +4 -0
  323. package/dist/routes/tenant.js.map +1 -1
  324. package/dist/routes/token-sign-in.d.ts +36 -0
  325. package/dist/routes/token-sign-in.d.ts.map +1 -0
  326. package/dist/routes/token-sign-in.js +101 -0
  327. package/dist/routes/token-sign-in.js.map +1 -0
  328. package/dist/routes/tokens.d.ts +15 -5
  329. package/dist/routes/tokens.d.ts.map +1 -1
  330. package/dist/routes/tokens.js +162 -43
  331. package/dist/routes/tokens.js.map +1 -1
  332. package/dist/routes/tools.d.ts.map +1 -1
  333. package/dist/routes/tools.js +9 -1
  334. package/dist/routes/tools.js.map +1 -1
  335. package/dist/routes/trigger-access.d.ts +29 -0
  336. package/dist/routes/trigger-access.d.ts.map +1 -0
  337. package/dist/routes/trigger-access.js +33 -0
  338. package/dist/routes/trigger-access.js.map +1 -0
  339. package/dist/routes/webhook-endpoints.d.ts +2 -1
  340. package/dist/routes/webhook-endpoints.d.ts.map +1 -1
  341. package/dist/routes/webhook-endpoints.js +11 -3
  342. package/dist/routes/webhook-endpoints.js.map +1 -1
  343. package/dist/routes/webhooks.d.ts +5 -1
  344. package/dist/routes/webhooks.d.ts.map +1 -1
  345. package/dist/routes/webhooks.js +25 -2
  346. package/dist/routes/webhooks.js.map +1 -1
  347. package/dist/run-failure.d.ts +21 -0
  348. package/dist/run-failure.d.ts.map +1 -0
  349. package/dist/run-failure.js +29 -0
  350. package/dist/run-failure.js.map +1 -0
  351. package/dist/service-account-binding.d.ts +108 -0
  352. package/dist/service-account-binding.d.ts.map +1 -0
  353. package/dist/service-account-binding.js +4 -0
  354. package/dist/service-account-binding.js.map +1 -0
  355. package/dist/session-store-binding.d.ts +61 -13
  356. package/dist/session-store-binding.d.ts.map +1 -1
  357. package/dist/signed-export.d.ts +89 -0
  358. package/dist/signed-export.d.ts.map +1 -0
  359. package/dist/signed-export.js +149 -0
  360. package/dist/signed-export.js.map +1 -0
  361. package/dist/supervisor-binding.d.ts +186 -413
  362. package/dist/supervisor-binding.d.ts.map +1 -1
  363. package/dist/testing/app-bindings.d.ts +33 -0
  364. package/dist/testing/app-bindings.d.ts.map +1 -0
  365. package/dist/testing/app-bindings.js +112 -0
  366. package/dist/testing/app-bindings.js.map +1 -0
  367. package/dist/testing/index.d.ts +11 -0
  368. package/dist/testing/index.d.ts.map +1 -0
  369. package/dist/testing/index.js +13 -0
  370. package/dist/testing/index.js.map +1 -0
  371. package/dist/testing/stub-binding.d.ts +34 -0
  372. package/dist/testing/stub-binding.d.ts.map +1 -0
  373. package/dist/testing/stub-binding.js +42 -0
  374. package/dist/testing/stub-binding.js.map +1 -0
  375. package/dist/testing/trigger-registry.d.ts +21 -0
  376. package/dist/testing/trigger-registry.d.ts.map +1 -0
  377. package/dist/testing/trigger-registry.js +206 -0
  378. package/dist/testing/trigger-registry.js.map +1 -0
  379. package/dist/token-admin.d.ts +46 -8
  380. package/dist/token-admin.d.ts.map +1 -1
  381. package/dist/token-admin.js.map +1 -1
  382. package/dist/tool-binding.d.ts +13 -0
  383. package/dist/tool-binding.d.ts.map +1 -1
  384. package/dist/trigger-binding.d.ts +2 -2
  385. package/dist/trigger-binding.d.ts.map +1 -1
  386. package/dist/trigger-binding.js +1 -1
  387. package/dist/trigger-binding.js.map +1 -1
  388. package/dist/types.d.ts +16 -0
  389. package/dist/types.d.ts.map +1 -1
  390. package/dist/webhook-endpoint-binding.d.ts +19 -3
  391. package/dist/webhook-endpoint-binding.d.ts.map +1 -1
  392. package/dist/webhook-endpoint-binding.js +1 -1
  393. package/dist/webhook-endpoint-binding.js.map +1 -1
  394. package/openapi.json +15385 -8788
  395. package/package.json +26 -22
  396. package/src/agent-binding.ts +14 -0
  397. package/src/agent-pins.ts +18 -2
  398. package/src/app.ts +366 -80
  399. package/src/block-publish.ts +181 -0
  400. package/src/caller.ts +62 -0
  401. package/src/capability-binding.ts +12 -0
  402. package/src/derive-agent-version.ts +9 -1
  403. package/src/errors.ts +73 -7
  404. package/src/eval-case-binding.ts +17 -1
  405. package/src/eval-run-binding.ts +31 -0
  406. package/src/eval-run-dispatcher.ts +7 -0
  407. package/src/eval-sample.ts +42 -0
  408. package/src/eval-suite-binding.ts +14 -0
  409. package/src/flow-binding.ts +19 -0
  410. package/src/flow-pins.ts +18 -2
  411. package/src/gate.ts +26 -0
  412. package/src/handler-binding.ts +36 -1
  413. package/src/hitl-binding.ts +24 -0
  414. package/src/identity-directory-binding.ts +85 -4
  415. package/src/identity-provider-binding.ts +216 -21
  416. package/src/improvement-pass-binding.ts +193 -0
  417. package/src/index.ts +153 -31
  418. package/src/judged-dispatcher.ts +78 -11
  419. package/src/judgment-binding.ts +25 -1
  420. package/src/mcp-endpoint-binding.ts +7 -0
  421. package/src/memory-binding.ts +121 -17
  422. package/src/memory-erasure-binding.ts +156 -0
  423. package/src/middleware/auth.ts +228 -62
  424. package/src/middleware/authorize.ts +139 -3
  425. package/src/middleware/error-mapper.ts +15 -1
  426. package/src/middleware/idempotency.ts +230 -43
  427. package/src/middleware/key-project.ts +86 -0
  428. package/src/middleware/principal.ts +9 -5
  429. package/src/middleware/project-ref.ts +3 -0
  430. package/src/openapi/generate.ts +11 -2
  431. package/src/openapi/operations.ts +1059 -142
  432. package/src/openapi/schemas.ts +2387 -469
  433. package/src/person-grants-binding.ts +76 -0
  434. package/src/proposal-service.ts +640 -0
  435. package/src/proposal-status.ts +176 -0
  436. package/src/provider-binding.ts +10 -0
  437. package/src/publish-refused.ts +38 -9
  438. package/src/routes/adapters.ts +4 -0
  439. package/src/routes/agent-releases.ts +121 -69
  440. package/src/routes/agents.ts +128 -1
  441. package/src/routes/approvals.ts +164 -154
  442. package/src/routes/artifacts.ts +181 -11
  443. package/src/routes/auth.ts +804 -336
  444. package/src/routes/blocks.ts +2 -53
  445. package/src/routes/capabilities.ts +10 -1
  446. package/src/routes/compliance.ts +60 -99
  447. package/src/routes/conversations.ts +101 -7
  448. package/src/routes/cost.ts +32 -3
  449. package/src/routes/denied.ts +28 -0
  450. package/src/routes/deployments.ts +62 -16
  451. package/src/routes/eval-comparison.ts +81 -2
  452. package/src/routes/eval-overrides.ts +108 -0
  453. package/src/routes/eval-runs.ts +86 -6
  454. package/src/routes/eval-suites.ts +25 -1
  455. package/src/routes/event-triggers.ts +27 -3
  456. package/src/routes/export-signing-keys.ts +31 -0
  457. package/src/routes/flows.ts +12 -1
  458. package/src/routes/gate-policies.ts +37 -6
  459. package/src/routes/guardrails.ts +61 -2
  460. package/src/routes/identity.ts +328 -10
  461. package/src/routes/improvement-passes.ts +541 -0
  462. package/src/routes/judged-suites.ts +113 -43
  463. package/src/routes/judgment-context.ts +76 -5
  464. package/src/routes/judgment-flow-context.ts +16 -2
  465. package/src/routes/judgments.ts +17 -3
  466. package/src/routes/mcp.ts +29 -1
  467. package/src/routes/memory-access.ts +179 -0
  468. package/src/routes/memory-erasures.ts +240 -0
  469. package/src/routes/memory-parse.ts +250 -0
  470. package/src/routes/memory.ts +244 -286
  471. package/src/routes/observations.ts +15 -2
  472. package/src/routes/pagination.ts +12 -0
  473. package/src/routes/policies.ts +7 -1
  474. package/src/routes/project-mismatch.ts +56 -0
  475. package/src/routes/projects.ts +107 -13
  476. package/src/routes/proposals.ts +370 -611
  477. package/src/routes/provenance.ts +99 -133
  478. package/src/routes/providers.ts +142 -3
  479. package/src/routes/public-run-tokens.ts +3 -0
  480. package/src/routes/runs.ts +119 -39
  481. package/src/routes/schedules.ts +472 -60
  482. package/src/routes/segments.ts +11 -0
  483. package/src/routes/service-accounts.ts +262 -0
  484. package/src/routes/sign-in-options.ts +168 -0
  485. package/src/routes/signing-keys.ts +7 -1
  486. package/src/routes/tenant-access.ts +37 -0
  487. package/src/routes/tenant.ts +6 -0
  488. package/src/routes/token-sign-in.ts +161 -0
  489. package/src/routes/tokens.ts +172 -46
  490. package/src/routes/tools.ts +12 -1
  491. package/src/routes/trigger-access.ts +72 -0
  492. package/src/routes/webhook-endpoints.ts +15 -3
  493. package/src/routes/webhooks.ts +26 -2
  494. package/src/run-failure.ts +42 -0
  495. package/src/service-account-binding.ts +113 -0
  496. package/src/session-store-binding.ts +65 -13
  497. package/src/signed-export.ts +250 -0
  498. package/src/supervisor-binding.ts +169 -409
  499. package/src/testing/app-bindings.ts +142 -0
  500. package/src/testing/index.ts +21 -0
  501. package/src/testing/stub-binding.ts +53 -0
  502. package/src/testing/trigger-registry.ts +259 -0
  503. package/src/token-admin.ts +40 -8
  504. package/src/tool-binding.ts +14 -0
  505. package/src/trigger-binding.ts +8 -1
  506. package/src/types.ts +16 -0
  507. package/src/webhook-endpoint-binding.ts +18 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-access.d.ts","sourceRoot":"","sources":["../../src/routes/tenant-access.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAI9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,UAAU,GAAG,SAAS,GACjC,iBAAiB,CAAC,MAAM,CAAC,CAQ3B;AAED,oGAAoG;AACpG,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAO/F"}
@@ -0,0 +1,26 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { ref } from '@kindgi/authz';
4
+ /**
5
+ * Access to a tenant-wide resource (providers, policies, adapters, …):
6
+ * reading it needs `read` on the tenant, anything else `admin`. The
7
+ * authorization model gives a tenant no `write`, so a tenant-wide change
8
+ * is an admin's. Without an authorizer, nothing is checked (as before).
9
+ */
10
+ export function tenantResourceAccess(authorizer) {
11
+ return async (c, next) => {
12
+ if (authorizer === undefined)
13
+ return next();
14
+ const reading = c.req.method === 'GET' || c.req.method === 'HEAD';
15
+ return authorizer.authorize(reading ? 'read' : 'admin', (ctx) => ref('tenant', ctx.get('tenantId')))(c, next);
16
+ };
17
+ }
18
+ /** Access to a tenant setting every call of which is an admin's (webhook endpoints, compliance). */
19
+ export function tenantAdminAccess(authorizer) {
20
+ return async (c, next) => {
21
+ if (authorizer === undefined)
22
+ return next();
23
+ return authorizer.authorize('admin', (ctx) => ref('tenant', ctx.get('tenantId')))(c, next);
24
+ };
25
+ }
26
+ //# sourceMappingURL=tenant-access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-access.js","sourceRoot":"","sources":["../../src/routes/tenant-access.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAIjC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAKpC;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAkC;IAElC,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,IAAI,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC;QAClE,OAAO,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAC9D,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAsB,CAAC,CACxD,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,iBAAiB,CAAC,UAAkC;IAClE,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,IAAI,EAAE,CAAC;QAC5C,OAAO,UAAU,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAC3C,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAsB,CAAC,CACxD,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACb,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["../../src/routes/tenant.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,KAAK,EAAS,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAItE,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,mBAAmB,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;CAClC;AAwED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,CA0WvE"}
1
+ {"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["../../src/routes/tenant.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,KAAK,EAAS,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAItE,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,mBAAmB,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;CAClC;AAwED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,CAgXvE"}
@@ -56,6 +56,10 @@ export function tenantRouter(options) {
56
56
  // token) get 403 rather than the tenant metadata.
57
57
  if (authorizer !== undefined) {
58
58
  r.use('*', authorizer.authorize('read', (c) => ref('tenant', c.get('tenantId'))));
59
+ // Changing the config writes the tenant's secrets and env: `admin`
60
+ // on the tenant (T243 A), as every tenant-wide write.
61
+ const admin = authorizer.authorize('admin', (c) => ref('tenant', c.get('tenantId')));
62
+ r.use('/config', async (c, next) => (c.req.method === 'PATCH' ? admin(c, next) : next()));
59
63
  }
60
64
  // ---------- GET / ----------
61
65
  r.get('/', async (c) => {
@@ -1 +1 @@
1
- {"version":3,"file":"tenant.js","sourceRoot":"","sources":["../../src/routes/tenant.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tenant.js","sourceRoot":"","sources":["../../src/routes/tenant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { Hono } from 'hono';
2
+ import type { AuditEventBinding } from '@kindgi/audit-events';
3
+ import type { SessionStoreBinding } from '../session-store-binding.js';
4
+ import type { AppEnv } from '../types.js';
5
+ /**
6
+ * `POST /v1/auth/token-sign-in`: a person signs in to the console with an
7
+ * API token. The token comes once, in `Authorization`, and is exchanged for
8
+ * a browser session in the session cookie (HttpOnly, the same as a sign-in
9
+ * with an identity provider), so the browser never keeps it.
10
+ *
11
+ * Only a person's **full** key opens a session. A service account's key is
12
+ * for machines, and a narrowed key (a `member` role, or one project) would
13
+ * be widened to the person's full grants by a session: both are refused,
14
+ * 403 `token-sign-in-not-allowed`. The session acts as the key did: it
15
+ * carries the key's scopes (a deployment without an authorizer reads tenant
16
+ * admin from them; a key's scopes never change after it's minted). It never
17
+ * outlives the key: it ends when the key expires, and, with a store that has
18
+ * `revokeByProvider`, when the key is revoked (its `providerId` is
19
+ * `api-token:<tokenId>`).
20
+ * Refusals are audited (`sign-in-refused`), as is each sign-in.
21
+ */
22
+ export type TokenSignInRouteOptions =
23
+ /** The deployment doesn't allow it, or has no browser sessions: 403 `token-sign-in-off`. */
24
+ {
25
+ readonly enabled: false;
26
+ } | {
27
+ readonly enabled: true;
28
+ readonly sessionStore: SessionStoreBinding;
29
+ /** The session's lifetime, in milliseconds. */
30
+ readonly ttlMs: number;
31
+ readonly cookieName: string;
32
+ /** `signed-in` events, best effort. */
33
+ readonly auditEvents?: AuditEventBinding;
34
+ };
35
+ export declare function tokenSignInRouter(options: TokenSignInRouteOptions): Hono<AppEnv>;
36
+ //# sourceMappingURL=token-sign-in.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-sign-in.d.ts","sourceRoot":"","sources":["../../src/routes/token-sign-in.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,KAAK,EAAc,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAM1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,uBAAuB;AACjC,4FAA4F;AAC1F;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAA;CAAE,GAC3B;IACE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAC3C,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAC;CAC1C,CAAC;AAEN,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC,CAiHhF"}
@@ -0,0 +1,101 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { randomUUID } from 'node:crypto';
4
+ import { Hono } from 'hono';
5
+ import { setCookie } from 'hono/cookie';
6
+ import { statusFor, toWireError } from '../errors.js';
7
+ import { encodeSessionToken } from '../middleware/auth.js';
8
+ import { withholdFromReplay } from '../middleware/idempotency.js';
9
+ export function tokenSignInRouter(options) {
10
+ const r = new Hono();
11
+ r.post('/', async (c) => {
12
+ const requestId = c.get('requestId');
13
+ /** An audit event, best effort: a failure is logged, never the answer. */
14
+ const auditEvents = options.enabled ? options.auditEvents : undefined;
15
+ const audit = async (event) => {
16
+ if (auditEvents === undefined)
17
+ return;
18
+ try {
19
+ const appended = await auditEvents.append([
20
+ { ...event, id: randomUUID(), timestamp: new Date().toISOString() },
21
+ ]);
22
+ if (appended.kind === 'err') {
23
+ c.get('log').warn(`${event.kind} audit event failed: ${appended.error.message}`);
24
+ }
25
+ }
26
+ catch (cause) {
27
+ c.get('log').warn(`${event.kind} audit event failed: ${cause instanceof Error ? cause.message : String(cause)}`);
28
+ }
29
+ };
30
+ const refuse = async (code, message) => {
31
+ const userId = c.get('userId');
32
+ const serviceAccountId = c.get('serviceAccountId');
33
+ await audit({
34
+ tenantId: c.get('tenantId'),
35
+ kind: 'sign-in-refused',
36
+ actor: serviceAccountId !== undefined
37
+ ? `service_account:${serviceAccountId}`
38
+ : userId !== undefined
39
+ ? `user:${userId}`
40
+ : 'system',
41
+ outcome: 'denied',
42
+ payload: { v: 1, doc: { method: 'api-token', reason: code } },
43
+ });
44
+ c.status(statusFor(code));
45
+ return c.json(toWireError({ code, message }, requestId));
46
+ };
47
+ if (!options.enabled) {
48
+ return refuse('token-sign-in-off', "This deployment doesn't allow signing in to the console with an API token. Sign in with your organization's identity provider, or ask whoever runs Kindgi to allow it.");
49
+ }
50
+ if (c.get('sessionId') !== undefined) {
51
+ return refuse('token-sign-in-needs-an-api-token', 'You are already signed in with a session: token sign-in takes an API token in the Authorization header.');
52
+ }
53
+ const tenantId = c.get('tenantId');
54
+ const userId = c.get('userId');
55
+ if (c.get('serviceAccountId') !== undefined || userId === undefined) {
56
+ return refuse('token-sign-in-not-allowed', "Only a person's API key can open a console session; a service account's key is for machines.");
57
+ }
58
+ if (c.get('tokenRole') === 'member' || c.get('tokenProjectId') !== undefined) {
59
+ return refuse('token-sign-in-not-allowed', "A narrowed key (a member role, or one project) can't open a console session: the session would carry all of your permissions. Use a full key, or sign in with your identity provider.");
60
+ }
61
+ const keyExpiresAt = c.get('tokenExpiresAt');
62
+ const expires = Math.min(Date.now() + options.ttlMs, keyExpiresAt === undefined ? Number.POSITIVE_INFINITY : keyExpiresAt.getTime());
63
+ const tokenId = c.get('tokenId');
64
+ const created = await options.sessionStore.create({
65
+ tenantId,
66
+ userId,
67
+ providerId: tokenId === undefined ? 'api-token' : `api-token:${tokenId}`,
68
+ expiresAt: new Date(expires).toISOString(),
69
+ // What the key may do, so the session acts as it did: with authz off,
70
+ // an admin key's `tenant-admin` is how the server and console know.
71
+ scopes: [...(c.get('scopes') ?? [])],
72
+ });
73
+ setCookie(c, options.cookieName, created.token ?? encodeSessionToken(created.sessionId), {
74
+ httpOnly: true,
75
+ secure: true,
76
+ sameSite: 'Lax',
77
+ path: '/',
78
+ maxAge: Math.max(0, Math.floor((expires - Date.now()) / 1000)),
79
+ });
80
+ await audit({
81
+ tenantId,
82
+ kind: 'signed-in',
83
+ actor: `user:${userId}`,
84
+ outcome: 'succeeded',
85
+ payload: {
86
+ v: 1,
87
+ doc: {
88
+ method: 'api-token',
89
+ sessionId: created.sessionId,
90
+ ...(tokenId !== undefined && { tokenId }),
91
+ },
92
+ },
93
+ });
94
+ // The session is in the cookie, which a stored answer doesn't keep: a
95
+ // repeat with the same Idempotency-Key is refused, not "signed in".
96
+ withholdFromReplay(c);
97
+ return c.json({ userId, expiresAt: new Date(expires).toISOString() });
98
+ });
99
+ return r;
100
+ }
101
+ //# sourceMappingURL=token-sign-in.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-sign-in.js","sourceRoot":"","sources":["../../src/routes/token-sign-in.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,22 @@ import type { Authorizer } from '../middleware/authorize.js';
3
3
  import { type TokenAdmin } from '../token-admin.js';
4
4
  import type { AppEnv } from '../types.js';
5
5
  /**
6
- * API keys: mint, list, read, revoke. Every route is tenant-admin only:
7
- * `admin` on the tenant when authorization is on, otherwise the
8
- * `tenant-admin` scope on the caller's token.
6
+ * API keys: mint, list, read, revoke. A key acts for one principal (a
7
+ * person or a service account) with that principal's grants; its role is
8
+ * a ceiling under them and its project a narrowing.
9
9
  *
10
- * A caller can only give a new key what it holds itself: every
11
- * capability it grants must be one of its own.
10
+ * - **Your own keys:** a person, or a service account's key, may mint,
11
+ * list, read and revoke the keys that act for them.
12
+ * - **Someone else's:** only a tenant admin (`admin` on the tenant when
13
+ * authorization is on, otherwise the `tenant-admin` scope) mints keys
14
+ * for another principal, and sees and revokes every key. A tenant admin
15
+ * whose token names no principal mints, as before principals, keys
16
+ * that are their own service account.
17
+ * - **What a new key may hold:** an `admin` key needs a tenant admin
18
+ * minting it (and, for someone else, a principal that is one: the store
19
+ * refuses `role-exceeds-principal`). Every capability granted must be
20
+ * one the minter holds. A minter narrowed to a project mints only keys
21
+ * narrowed to the same project.
12
22
  */
13
23
  export declare function tokensRouter(admin: TokenAdmin, authorizer?: Authorizer): Hono<AppEnv>;
14
24
  //# sourceMappingURL=tokens.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/routes/tokens.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAM5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CA8FrF"}
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/routes/tokens.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAO5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAIL,KAAK,UAAU,EAEhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CA4GrF"}
@@ -1,21 +1,32 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  // Copyright (C) 2026 Kindgi Inc.
3
3
  import { Hono } from 'hono';
4
- import { ref } from '@kindgi/authz';
4
+ import { callerPrincipal, callerRef, isTenantAdmin, principalToWire } from '../caller.js';
5
5
  import { statusFor, toWireError } from '../errors.js';
6
+ import { withholdFromReplay } from '../middleware/idempotency.js';
6
7
  import { API_TOKEN_ROLES, } from '../token-admin.js';
7
8
  import { clampLimit, decodeCursor, encodeCursor } from './pagination.js';
8
9
  /**
9
- * API keys: mint, list, read, revoke. Every route is tenant-admin only:
10
- * `admin` on the tenant when authorization is on, otherwise the
11
- * `tenant-admin` scope on the caller's token.
10
+ * API keys: mint, list, read, revoke. A key acts for one principal (a
11
+ * person or a service account) with that principal's grants; its role is
12
+ * a ceiling under them and its project a narrowing.
12
13
  *
13
- * A caller can only give a new key what it holds itself: every
14
- * capability it grants must be one of its own.
14
+ * - **Your own keys:** a person, or a service account's key, may mint,
15
+ * list, read and revoke the keys that act for them.
16
+ * - **Someone else's:** only a tenant admin (`admin` on the tenant when
17
+ * authorization is on, otherwise the `tenant-admin` scope) mints keys
18
+ * for another principal, and sees and revokes every key. A tenant admin
19
+ * whose token names no principal mints, as before principals, keys
20
+ * that are their own service account.
21
+ * - **What a new key may hold:** an `admin` key needs a tenant admin
22
+ * minting it (and, for someone else, a principal that is one: the store
23
+ * refuses `role-exceeds-principal`). Every capability granted must be
24
+ * one the minter holds. A minter narrowed to a project mints only keys
25
+ * narrowed to the same project.
15
26
  */
16
27
  export function tokensRouter(admin, authorizer) {
17
28
  const r = new Hono();
18
- r.use('/*', requireTenantAdmin(authorizer));
29
+ r.use('/*', requireOwnerOrAdmin(authorizer));
19
30
  // ---------- POST / (mint) ----------
20
31
  r.post('/', async (c) => {
21
32
  const requestId = c.get('requestId');
@@ -26,17 +37,15 @@ export function tokensRouter(admin, authorizer) {
26
37
  const parsed = parseMintBody(body.value);
27
38
  if (parsed.kind === 'err')
28
39
  return fail(c, parsed.error, requestId);
29
- const held = new Set(c.get('capabilities') ?? []);
30
- const notHeld = parsed.value.capabilities.filter((cap) => !held.has(cap));
31
- if (notHeld.length > 0) {
32
- return fail(c, {
33
- code: 'permission-denied',
34
- message: `A key can only be given capabilities its minter holds; you don't hold: ${notHeld.join(', ')}`,
35
- }, requestId);
36
- }
40
+ const owner = keyOwner(c);
41
+ const principal = parsed.value.for ?? owner;
42
+ const refused = await mintRefusal(c, authorizer, owner, principal, parsed.value);
43
+ if (refused !== undefined)
44
+ return fail(c, refused, requestId);
37
45
  const createdBy = callerRef(c);
38
46
  const minted = await admin.mint({
39
47
  tenantId,
48
+ ...(principal !== undefined && { principal }),
40
49
  role: parsed.value.role,
41
50
  capabilities: parsed.value.capabilities,
42
51
  ...(parsed.value.label !== undefined && { label: parsed.value.label }),
@@ -44,6 +53,11 @@ export function tokensRouter(admin, authorizer) {
44
53
  ...(parsed.value.projectId !== undefined && { projectId: parsed.value.projectId }),
45
54
  ...(createdBy !== undefined && { createdBy }),
46
55
  });
56
+ if (!('token' in minted)) {
57
+ return fail(c, { code: minted.kind, message: minted.message }, requestId);
58
+ }
59
+ // The key's secret is shown once: an Idempotency-Key repeat doesn't get it.
60
+ withholdFromReplay(c);
47
61
  c.status(201);
48
62
  return c.json({ ...toWire(minted.record), token: minted.token });
49
63
  });
@@ -61,7 +75,17 @@ export function tokensRouter(admin, authorizer) {
61
75
  }
62
76
  after = { createdAt: new Date(decoded.createdAt), tokenId: decoded.id };
63
77
  }
64
- const records = await admin.list({ tenantId, limit: limit + 1, ...(after && { after }) });
78
+ const filter = parsePrincipalQuery(c.req.query('principal'));
79
+ if (filter.kind === 'err')
80
+ return fail(c, filter.error, requestId);
81
+ // An admin sees every key (or one principal's); anyone else, their own.
82
+ const principal = (await isTenantAdmin(c, authorizer)) ? filter.value : keyOwner(c);
83
+ const records = await admin.list({
84
+ tenantId,
85
+ limit: limit + 1,
86
+ ...(principal !== undefined && { principal }),
87
+ ...(after && { after }),
88
+ });
65
89
  const hasMore = records.length > limit;
66
90
  const page = hasMore ? records.slice(0, limit) : records;
67
91
  const last = page[page.length - 1];
@@ -80,9 +104,8 @@ export function tokensRouter(admin, authorizer) {
80
104
  // ---------- GET /:tokenId ----------
81
105
  r.get('/:tokenId', async (c) => {
82
106
  const requestId = c.get('requestId');
83
- const tenantId = c.get('tenantId');
84
107
  const tokenId = c.req.param('tokenId');
85
- const record = await admin.get({ tenantId, tokenId });
108
+ const record = await visibleKey(c, admin, authorizer, tokenId);
86
109
  if (record === undefined)
87
110
  return notFound(c, tokenId, requestId);
88
111
  return c.json(toWire(record));
@@ -92,42 +115,95 @@ export function tokensRouter(admin, authorizer) {
92
115
  const requestId = c.get('requestId');
93
116
  const tenantId = c.get('tenantId');
94
117
  const tokenId = c.req.param('tokenId');
95
- const outcome = await admin.revoke({ tenantId, tokenId });
118
+ // Someone else's key reads as missing, as it does for `get`.
119
+ if ((await visibleKey(c, admin, authorizer, tokenId)) === undefined) {
120
+ return notFound(c, tokenId, requestId);
121
+ }
122
+ const revokedBy = callerRef(c);
123
+ const outcome = await admin.revoke({
124
+ tenantId,
125
+ tokenId,
126
+ ...(revokedBy !== undefined && { revokedBy }),
127
+ });
96
128
  if (outcome.kind === 'not-found')
97
129
  return notFound(c, tokenId, requestId);
98
130
  return c.json({ tokenId: tokenId, revoked: true });
99
131
  });
100
132
  return r;
101
133
  }
102
- function requireTenantAdmin(authorizer) {
103
- if (authorizer !== undefined) {
104
- return async (c, next) => {
105
- const tenantId = c.get('tenantId');
106
- const mw = authorizer.authorize('admin', async () => ref('tenant', tenantId));
107
- return mw(c, next);
108
- };
109
- }
134
+ /** A caller with keys of their own, or a tenant admin. */
135
+ function requireOwnerOrAdmin(authorizer) {
110
136
  return async (c, next) => {
111
- if (!(c.get('scopes') ?? []).includes('tenant-admin')) {
137
+ if (keyOwner(c) === undefined && !(await isTenantAdmin(c, authorizer))) {
112
138
  return fail(c, { code: 'permission-denied', message: 'Managing API keys needs a tenant admin' }, c.get('requestId'));
113
139
  }
114
140
  await next();
115
141
  return;
116
142
  };
117
143
  }
118
- /** The caller as a principal reference: `user:<id>` or `service_account:<tokenId>`. */
119
- function callerRef(c) {
120
- const userId = c.get('userId');
121
- if (userId !== undefined)
122
- return `user:${userId}`;
123
- const tokenId = c.get('tokenId');
124
- if (tokenId !== undefined)
125
- return `service_account:${tokenId}`;
144
+ /**
145
+ * Whom the caller's own keys act for: the person, or the service account
146
+ * the caller's key acts for. A token naming neither (a key from before
147
+ * principals, a static token) has no keys of its own.
148
+ */
149
+ function keyOwner(c) {
150
+ const caller = callerPrincipal(c);
151
+ if (caller?.kind === 'service-account' && c.get('serviceAccountId') === undefined) {
152
+ return undefined;
153
+ }
154
+ return caller;
155
+ }
156
+ function samePrincipal(a, b) {
157
+ if (b === undefined)
158
+ return false;
159
+ if (a.kind === 'user')
160
+ return b.kind === 'user' && b.userId === a.userId;
161
+ return b.kind === 'service-account' && b.serviceAccountId === a.serviceAccountId;
162
+ }
163
+ /** Why the route refuses this mint before the store sees it, if it does. */
164
+ async function mintRefusal(c, authorizer, owner, principal, body) {
165
+ const forSomeoneElse = principal !== undefined && !samePrincipal(principal, owner);
166
+ if ((forSomeoneElse || body.role === 'admin') && !(await isTenantAdmin(c, authorizer))) {
167
+ return {
168
+ code: 'permission-denied',
169
+ message: forSomeoneElse
170
+ ? 'Only a tenant admin mints keys for someone else'
171
+ : 'Only a tenant admin mints an admin key',
172
+ };
173
+ }
174
+ const held = new Set(c.get('capabilities') ?? []);
175
+ const notHeld = body.capabilities.filter((cap) => !held.has(cap));
176
+ if (notHeld.length > 0) {
177
+ return {
178
+ code: 'permission-denied',
179
+ message: `A key can only be given capabilities its minter holds; you don't hold: ${notHeld.join(', ')}`,
180
+ };
181
+ }
182
+ const narrowedTo = c.get('tokenProjectId');
183
+ if (narrowedTo !== undefined && body.projectId !== narrowedTo) {
184
+ return {
185
+ code: 'key-project-mismatch',
186
+ message: `Your key is limited to project ${narrowedTo}: a key it mints must be limited to it too`,
187
+ };
188
+ }
126
189
  return undefined;
127
190
  }
191
+ /** A key the caller may see: any, for a tenant admin; otherwise only their own. */
192
+ async function visibleKey(c, admin, authorizer, tokenId) {
193
+ const tenantId = c.get('tenantId');
194
+ const record = await admin.get({ tenantId, tokenId });
195
+ if (record === undefined)
196
+ return undefined;
197
+ if (await isTenantAdmin(c, authorizer))
198
+ return record;
199
+ return record.principal !== undefined && samePrincipal(record.principal, keyOwner(c))
200
+ ? record
201
+ : undefined;
202
+ }
128
203
  function toWire(record) {
129
204
  return {
130
205
  tokenId: record.tokenId,
206
+ ...(record.principal !== undefined && { principal: principalToWire(record.principal) }),
131
207
  role: record.role,
132
208
  capabilities: record.capabilities,
133
209
  ...(record.label !== undefined && { label: record.label }),
@@ -181,19 +257,24 @@ function parseMintBody(body) {
181
257
  const capabilities = parseCapabilities(b.capabilities);
182
258
  if (capabilities.kind === 'err')
183
259
  return capabilities;
184
- const out = { role: role.value, capabilities: capabilities.value };
260
+ const principal = parseFor(b.for);
261
+ if (principal.kind === 'err')
262
+ return principal;
263
+ const out = {
264
+ ...(principal.value !== undefined && { for: principal.value }),
265
+ role: role.value,
266
+ capabilities: capabilities.value,
267
+ };
185
268
  if (b.label !== undefined) {
186
269
  if (typeof b.label !== 'string')
187
270
  return badInput('`label` must be a string');
188
271
  out.label = b.label;
189
272
  }
190
273
  if (b.expiresAt !== undefined) {
191
- if (typeof b.expiresAt !== 'string')
192
- return badInput('`expiresAt` must be an ISO date string');
193
- const parsed = new Date(b.expiresAt);
194
- if (Number.isNaN(parsed.getTime()))
195
- return badInput('`expiresAt` is not a valid ISO date');
196
- out.expiresAt = parsed;
274
+ const expiresAt = parseExpiresAt(b.expiresAt);
275
+ if (expiresAt.kind === 'err')
276
+ return expiresAt;
277
+ out.expiresAt = expiresAt.value;
197
278
  }
198
279
  if (b.projectId !== undefined) {
199
280
  if (typeof b.projectId !== 'string') {
@@ -203,6 +284,15 @@ function parseMintBody(body) {
203
284
  }
204
285
  return { kind: 'ok', value: out };
205
286
  }
287
+ /** `expiresAt`: an ISO date string. */
288
+ function parseExpiresAt(raw) {
289
+ if (typeof raw !== 'string')
290
+ return badInput('`expiresAt` must be an ISO date string');
291
+ const parsed = new Date(raw);
292
+ if (Number.isNaN(parsed.getTime()))
293
+ return badInput('`expiresAt` is not a valid ISO date');
294
+ return { kind: 'ok', value: parsed };
295
+ }
206
296
  /** `role`: `admin` | `member`; `member` when absent (least privilege). */
207
297
  function parseRole(raw) {
208
298
  if (raw === undefined)
@@ -228,4 +318,33 @@ function parseCapabilities(raw) {
228
318
  }
229
319
  return { kind: 'ok', value: out };
230
320
  }
321
+ /** `for`, when present: whom the key acts for. */
322
+ function parseFor(raw) {
323
+ return raw === undefined ? { kind: 'ok', value: undefined } : parsePrincipalBody(raw);
324
+ }
325
+ /** `for`: `{kind: 'user' | 'service-account', id}`. */
326
+ function parsePrincipalBody(raw) {
327
+ const b = (raw ?? {});
328
+ if (typeof b.id !== 'string' || b.id.length === 0) {
329
+ return badInput('`for.id` must be the id of a person or a service account');
330
+ }
331
+ if (b.kind === 'user')
332
+ return { kind: 'ok', value: { kind: 'user', userId: b.id } };
333
+ if (b.kind === 'service-account') {
334
+ return { kind: 'ok', value: { kind: 'service-account', serviceAccountId: b.id } };
335
+ }
336
+ return badInput("`for.kind` must be 'user' or 'service-account'");
337
+ }
338
+ /** `?principal=user:<id>` or `?principal=service-account:<id>`: one principal's keys (admins). */
339
+ function parsePrincipalQuery(raw) {
340
+ if (raw === undefined || raw === '')
341
+ return { kind: 'ok', value: undefined };
342
+ const colon = raw.indexOf(':');
343
+ const kind = raw.slice(0, colon);
344
+ const id = raw.slice(colon + 1);
345
+ if (colon <= 0 || id === '') {
346
+ return badInput('`principal` is `user:<id>` or `service-account:<id>`');
347
+ }
348
+ return parsePrincipalBody({ kind, id });
349
+ }
231
350
  //# sourceMappingURL=tokens.js.map