@kindgi/api 0.0.0-bootstrap.0 → 0.1.1

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 (505) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +216 -1
  3. package/dist/adapter-binding.d.ts +177 -0
  4. package/dist/adapter-binding.d.ts.map +1 -0
  5. package/dist/adapter-binding.js +12 -0
  6. package/dist/adapter-binding.js.map +1 -0
  7. package/dist/agent-binding.d.ts +207 -0
  8. package/dist/agent-binding.d.ts.map +1 -0
  9. package/dist/agent-binding.js +4 -0
  10. package/dist/agent-binding.js.map +1 -0
  11. package/dist/app.d.ts +770 -0
  12. package/dist/app.d.ts.map +1 -0
  13. package/dist/app.js +397 -0
  14. package/dist/app.js.map +1 -0
  15. package/dist/capability-binding.d.ts +76 -0
  16. package/dist/capability-binding.d.ts.map +1 -0
  17. package/dist/capability-binding.js +4 -0
  18. package/dist/capability-binding.js.map +1 -0
  19. package/dist/cost-binding.d.ts +175 -0
  20. package/dist/cost-binding.d.ts.map +1 -0
  21. package/dist/cost-binding.js +13 -0
  22. package/dist/cost-binding.js.map +1 -0
  23. package/dist/deployment-binding.d.ts +201 -0
  24. package/dist/deployment-binding.d.ts.map +1 -0
  25. package/dist/deployment-binding.js +4 -0
  26. package/dist/deployment-binding.js.map +1 -0
  27. package/dist/env-binding.d.ts +132 -0
  28. package/dist/env-binding.d.ts.map +1 -0
  29. package/dist/env-binding.js +4 -0
  30. package/dist/env-binding.js.map +1 -0
  31. package/dist/errors.d.ts +37 -0
  32. package/dist/errors.d.ts.map +1 -0
  33. package/dist/errors.js +268 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/eval-run-binding.d.ts +196 -0
  36. package/dist/eval-run-binding.d.ts.map +1 -0
  37. package/dist/eval-run-binding.js +16 -0
  38. package/dist/eval-run-binding.js.map +1 -0
  39. package/dist/eval-run-dispatcher.d.ts +131 -0
  40. package/dist/eval-run-dispatcher.d.ts.map +1 -0
  41. package/dist/eval-run-dispatcher.js +368 -0
  42. package/dist/eval-run-dispatcher.js.map +1 -0
  43. package/dist/eval-suite-binding.d.ts +227 -0
  44. package/dist/eval-suite-binding.d.ts.map +1 -0
  45. package/dist/eval-suite-binding.js +24 -0
  46. package/dist/eval-suite-binding.js.map +1 -0
  47. package/dist/event-bus-binding.d.ts +107 -0
  48. package/dist/event-bus-binding.d.ts.map +1 -0
  49. package/dist/event-bus-binding.js +5 -0
  50. package/dist/event-bus-binding.js.map +1 -0
  51. package/dist/flow-binding.d.ts +194 -0
  52. package/dist/flow-binding.d.ts.map +1 -0
  53. package/dist/flow-binding.js +4 -0
  54. package/dist/flow-binding.js.map +1 -0
  55. package/dist/guardrail-binding.d.ts +138 -0
  56. package/dist/guardrail-binding.d.ts.map +1 -0
  57. package/dist/guardrail-binding.js +4 -0
  58. package/dist/guardrail-binding.js.map +1 -0
  59. package/dist/handler-binding.d.ts +126 -0
  60. package/dist/handler-binding.d.ts.map +1 -0
  61. package/dist/handler-binding.js +4 -0
  62. package/dist/handler-binding.js.map +1 -0
  63. package/dist/hitl-binding.d.ts +115 -0
  64. package/dist/hitl-binding.d.ts.map +1 -0
  65. package/dist/hitl-binding.js +4 -0
  66. package/dist/hitl-binding.js.map +1 -0
  67. package/dist/identity-directory-binding.d.ts +116 -0
  68. package/dist/identity-directory-binding.d.ts.map +1 -0
  69. package/dist/identity-directory-binding.js +4 -0
  70. package/dist/identity-directory-binding.js.map +1 -0
  71. package/dist/identity-provider-binding.d.ts +184 -0
  72. package/dist/identity-provider-binding.d.ts.map +1 -0
  73. package/dist/identity-provider-binding.js +4 -0
  74. package/dist/identity-provider-binding.js.map +1 -0
  75. package/dist/image-registry-binding.d.ts +165 -0
  76. package/dist/image-registry-binding.d.ts.map +1 -0
  77. package/dist/image-registry-binding.js +4 -0
  78. package/dist/image-registry-binding.js.map +1 -0
  79. package/dist/index.d.ts +72 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +26 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/key-management-binding.d.ts +101 -0
  84. package/dist/key-management-binding.d.ts.map +1 -0
  85. package/dist/key-management-binding.js +4 -0
  86. package/dist/key-management-binding.js.map +1 -0
  87. package/dist/mcp-endpoint-binding.d.ts +312 -0
  88. package/dist/mcp-endpoint-binding.d.ts.map +1 -0
  89. package/dist/mcp-endpoint-binding.js +12 -0
  90. package/dist/mcp-endpoint-binding.js.map +1 -0
  91. package/dist/memory-binding.d.ts +209 -0
  92. package/dist/memory-binding.d.ts.map +1 -0
  93. package/dist/memory-binding.js +4 -0
  94. package/dist/memory-binding.js.map +1 -0
  95. package/dist/middleware/auth.d.ts +168 -0
  96. package/dist/middleware/auth.d.ts.map +1 -0
  97. package/dist/middleware/auth.js +247 -0
  98. package/dist/middleware/auth.js.map +1 -0
  99. package/dist/middleware/authorize.d.ts +26 -0
  100. package/dist/middleware/authorize.d.ts.map +1 -0
  101. package/dist/middleware/authorize.js +65 -0
  102. package/dist/middleware/authorize.js.map +1 -0
  103. package/dist/middleware/error-mapper.d.ts +20 -0
  104. package/dist/middleware/error-mapper.d.ts.map +1 -0
  105. package/dist/middleware/error-mapper.js +34 -0
  106. package/dist/middleware/error-mapper.js.map +1 -0
  107. package/dist/middleware/idempotency.d.ts +43 -0
  108. package/dist/middleware/idempotency.d.ts.map +1 -0
  109. package/dist/middleware/idempotency.js +118 -0
  110. package/dist/middleware/idempotency.js.map +1 -0
  111. package/dist/middleware/principal.d.ts +4 -0
  112. package/dist/middleware/principal.d.ts.map +1 -0
  113. package/dist/middleware/principal.js +42 -0
  114. package/dist/middleware/principal.js.map +1 -0
  115. package/dist/middleware/public-run-routes.d.ts +16 -0
  116. package/dist/middleware/public-run-routes.d.ts.map +1 -0
  117. package/dist/middleware/public-run-routes.js +43 -0
  118. package/dist/middleware/public-run-routes.js.map +1 -0
  119. package/dist/middleware/request-id.d.ts +14 -0
  120. package/dist/middleware/request-id.d.ts.map +1 -0
  121. package/dist/middleware/request-id.js +24 -0
  122. package/dist/middleware/request-id.js.map +1 -0
  123. package/dist/middleware/sigv4-verify.d.ts +64 -0
  124. package/dist/middleware/sigv4-verify.d.ts.map +1 -0
  125. package/dist/middleware/sigv4-verify.js +286 -0
  126. package/dist/middleware/sigv4-verify.js.map +1 -0
  127. package/dist/middleware/sigv4.d.ts +25 -0
  128. package/dist/middleware/sigv4.d.ts.map +1 -0
  129. package/dist/middleware/sigv4.js +120 -0
  130. package/dist/middleware/sigv4.js.map +1 -0
  131. package/dist/openapi/generate.d.ts +15 -0
  132. package/dist/openapi/generate.d.ts.map +1 -0
  133. package/dist/openapi/generate.js +241 -0
  134. package/dist/openapi/generate.js.map +1 -0
  135. package/dist/openapi/operations.d.ts +70 -0
  136. package/dist/openapi/operations.d.ts.map +1 -0
  137. package/dist/openapi/operations.js +5050 -0
  138. package/dist/openapi/operations.js.map +1 -0
  139. package/dist/openapi/schemas.d.ts +590 -0
  140. package/dist/openapi/schemas.d.ts.map +1 -0
  141. package/dist/openapi/schemas.js +5820 -0
  142. package/dist/openapi/schemas.js.map +1 -0
  143. package/dist/provenance-binding.d.ts +116 -0
  144. package/dist/provenance-binding.d.ts.map +1 -0
  145. package/dist/provenance-binding.js +31 -0
  146. package/dist/provenance-binding.js.map +1 -0
  147. package/dist/provider-binding.d.ts +174 -0
  148. package/dist/provider-binding.d.ts.map +1 -0
  149. package/dist/provider-binding.js +4 -0
  150. package/dist/provider-binding.js.map +1 -0
  151. package/dist/public-run-token.d.ts +97 -0
  152. package/dist/public-run-token.d.ts.map +1 -0
  153. package/dist/public-run-token.js +167 -0
  154. package/dist/public-run-token.js.map +1 -0
  155. package/dist/retention-binding.d.ts +69 -0
  156. package/dist/retention-binding.d.ts.map +1 -0
  157. package/dist/retention-binding.js +4 -0
  158. package/dist/retention-binding.js.map +1 -0
  159. package/dist/reviewer-binding.d.ts +84 -0
  160. package/dist/reviewer-binding.d.ts.map +1 -0
  161. package/dist/reviewer-binding.js +4 -0
  162. package/dist/reviewer-binding.js.map +1 -0
  163. package/dist/rotation-status-store.d.ts +96 -0
  164. package/dist/rotation-status-store.d.ts.map +1 -0
  165. package/dist/rotation-status-store.js +106 -0
  166. package/dist/rotation-status-store.js.map +1 -0
  167. package/dist/routes/adapters.d.ts +29 -0
  168. package/dist/routes/adapters.d.ts.map +1 -0
  169. package/dist/routes/adapters.js +230 -0
  170. package/dist/routes/adapters.js.map +1 -0
  171. package/dist/routes/agents.d.ts +17 -0
  172. package/dist/routes/agents.d.ts.map +1 -0
  173. package/dist/routes/agents.js +342 -0
  174. package/dist/routes/agents.js.map +1 -0
  175. package/dist/routes/approvals.d.ts +37 -0
  176. package/dist/routes/approvals.d.ts.map +1 -0
  177. package/dist/routes/approvals.js +551 -0
  178. package/dist/routes/approvals.js.map +1 -0
  179. package/dist/routes/artifacts.d.ts +25 -0
  180. package/dist/routes/artifacts.d.ts.map +1 -0
  181. package/dist/routes/artifacts.js +265 -0
  182. package/dist/routes/artifacts.js.map +1 -0
  183. package/dist/routes/audit.d.ts +6 -0
  184. package/dist/routes/audit.d.ts.map +1 -0
  185. package/dist/routes/audit.js +162 -0
  186. package/dist/routes/audit.js.map +1 -0
  187. package/dist/routes/auth.d.ts +47 -0
  188. package/dist/routes/auth.d.ts.map +1 -0
  189. package/dist/routes/auth.js +630 -0
  190. package/dist/routes/auth.js.map +1 -0
  191. package/dist/routes/capabilities.d.ts +14 -0
  192. package/dist/routes/capabilities.d.ts.map +1 -0
  193. package/dist/routes/capabilities.js +62 -0
  194. package/dist/routes/capabilities.js.map +1 -0
  195. package/dist/routes/compliance.d.ts +37 -0
  196. package/dist/routes/compliance.d.ts.map +1 -0
  197. package/dist/routes/compliance.js +321 -0
  198. package/dist/routes/compliance.js.map +1 -0
  199. package/dist/routes/conversations.d.ts +13 -0
  200. package/dist/routes/conversations.d.ts.map +1 -0
  201. package/dist/routes/conversations.js +295 -0
  202. package/dist/routes/conversations.js.map +1 -0
  203. package/dist/routes/cost.d.ts +24 -0
  204. package/dist/routes/cost.d.ts.map +1 -0
  205. package/dist/routes/cost.js +243 -0
  206. package/dist/routes/cost.js.map +1 -0
  207. package/dist/routes/deployments.d.ts +122 -0
  208. package/dist/routes/deployments.d.ts.map +1 -0
  209. package/dist/routes/deployments.js +1036 -0
  210. package/dist/routes/deployments.js.map +1 -0
  211. package/dist/routes/env.d.ts +62 -0
  212. package/dist/routes/env.d.ts.map +1 -0
  213. package/dist/routes/env.js +311 -0
  214. package/dist/routes/env.js.map +1 -0
  215. package/dist/routes/eval-runs.d.ts +28 -0
  216. package/dist/routes/eval-runs.d.ts.map +1 -0
  217. package/dist/routes/eval-runs.js +479 -0
  218. package/dist/routes/eval-runs.js.map +1 -0
  219. package/dist/routes/eval-suites.d.ts +24 -0
  220. package/dist/routes/eval-suites.d.ts.map +1 -0
  221. package/dist/routes/eval-suites.js +381 -0
  222. package/dist/routes/eval-suites.js.map +1 -0
  223. package/dist/routes/event-triggers.d.ts +12 -0
  224. package/dist/routes/event-triggers.d.ts.map +1 -0
  225. package/dist/routes/event-triggers.js +218 -0
  226. package/dist/routes/event-triggers.js.map +1 -0
  227. package/dist/routes/flows.d.ts +23 -0
  228. package/dist/routes/flows.d.ts.map +1 -0
  229. package/dist/routes/flows.js +344 -0
  230. package/dist/routes/flows.js.map +1 -0
  231. package/dist/routes/guardrails.d.ts +33 -0
  232. package/dist/routes/guardrails.d.ts.map +1 -0
  233. package/dist/routes/guardrails.js +236 -0
  234. package/dist/routes/guardrails.js.map +1 -0
  235. package/dist/routes/identity.d.ts +39 -0
  236. package/dist/routes/identity.d.ts.map +1 -0
  237. package/dist/routes/identity.js +138 -0
  238. package/dist/routes/identity.js.map +1 -0
  239. package/dist/routes/mcp.d.ts +23 -0
  240. package/dist/routes/mcp.d.ts.map +1 -0
  241. package/dist/routes/mcp.js +727 -0
  242. package/dist/routes/mcp.js.map +1 -0
  243. package/dist/routes/memory.d.ts +16 -0
  244. package/dist/routes/memory.d.ts.map +1 -0
  245. package/dist/routes/memory.js +353 -0
  246. package/dist/routes/memory.js.map +1 -0
  247. package/dist/routes/observations.d.ts +19 -0
  248. package/dist/routes/observations.d.ts.map +1 -0
  249. package/dist/routes/observations.js +135 -0
  250. package/dist/routes/observations.js.map +1 -0
  251. package/dist/routes/orgs.d.ts +24 -0
  252. package/dist/routes/orgs.d.ts.map +1 -0
  253. package/dist/routes/orgs.js +208 -0
  254. package/dist/routes/orgs.js.map +1 -0
  255. package/dist/routes/pagination.d.ts +18 -0
  256. package/dist/routes/pagination.d.ts.map +1 -0
  257. package/dist/routes/pagination.js +35 -0
  258. package/dist/routes/pagination.js.map +1 -0
  259. package/dist/routes/policies.d.ts +23 -0
  260. package/dist/routes/policies.d.ts.map +1 -0
  261. package/dist/routes/policies.js +314 -0
  262. package/dist/routes/policies.js.map +1 -0
  263. package/dist/routes/projects.d.ts +45 -0
  264. package/dist/routes/projects.d.ts.map +1 -0
  265. package/dist/routes/projects.js +485 -0
  266. package/dist/routes/projects.js.map +1 -0
  267. package/dist/routes/proposals.d.ts +24 -0
  268. package/dist/routes/proposals.d.ts.map +1 -0
  269. package/dist/routes/proposals.js +581 -0
  270. package/dist/routes/proposals.js.map +1 -0
  271. package/dist/routes/provenance.d.ts +34 -0
  272. package/dist/routes/provenance.d.ts.map +1 -0
  273. package/dist/routes/provenance.js +274 -0
  274. package/dist/routes/provenance.js.map +1 -0
  275. package/dist/routes/providers.d.ts +32 -0
  276. package/dist/routes/providers.d.ts.map +1 -0
  277. package/dist/routes/providers.js +490 -0
  278. package/dist/routes/providers.js.map +1 -0
  279. package/dist/routes/public-run-tokens.d.ts +17 -0
  280. package/dist/routes/public-run-tokens.d.ts.map +1 -0
  281. package/dist/routes/public-run-tokens.js +69 -0
  282. package/dist/routes/public-run-tokens.js.map +1 -0
  283. package/dist/routes/retention.d.ts +19 -0
  284. package/dist/routes/retention.d.ts.map +1 -0
  285. package/dist/routes/retention.js +152 -0
  286. package/dist/routes/retention.js.map +1 -0
  287. package/dist/routes/reviewers.d.ts +5 -0
  288. package/dist/routes/reviewers.d.ts.map +1 -0
  289. package/dist/routes/reviewers.js +161 -0
  290. package/dist/routes/reviewers.js.map +1 -0
  291. package/dist/routes/runs.d.ts +34 -0
  292. package/dist/routes/runs.d.ts.map +1 -0
  293. package/dist/routes/runs.js +705 -0
  294. package/dist/routes/runs.js.map +1 -0
  295. package/dist/routes/s3.d.ts +31 -0
  296. package/dist/routes/s3.d.ts.map +1 -0
  297. package/dist/routes/s3.js +433 -0
  298. package/dist/routes/s3.js.map +1 -0
  299. package/dist/routes/schedules.d.ts +20 -0
  300. package/dist/routes/schedules.d.ts.map +1 -0
  301. package/dist/routes/schedules.js +234 -0
  302. package/dist/routes/schedules.js.map +1 -0
  303. package/dist/routes/scope-params.d.ts +57 -0
  304. package/dist/routes/scope-params.d.ts.map +1 -0
  305. package/dist/routes/scope-params.js +105 -0
  306. package/dist/routes/scope-params.js.map +1 -0
  307. package/dist/routes/secret-ref.d.ts +20 -0
  308. package/dist/routes/secret-ref.d.ts.map +1 -0
  309. package/dist/routes/secret-ref.js +42 -0
  310. package/dist/routes/secret-ref.js.map +1 -0
  311. package/dist/routes/secrets.d.ts +53 -0
  312. package/dist/routes/secrets.d.ts.map +1 -0
  313. package/dist/routes/secrets.js +715 -0
  314. package/dist/routes/secrets.js.map +1 -0
  315. package/dist/routes/signing-keys.d.ts +23 -0
  316. package/dist/routes/signing-keys.d.ts.map +1 -0
  317. package/dist/routes/signing-keys.js +212 -0
  318. package/dist/routes/signing-keys.js.map +1 -0
  319. package/dist/routes/sse.d.ts +58 -0
  320. package/dist/routes/sse.d.ts.map +1 -0
  321. package/dist/routes/sse.js +92 -0
  322. package/dist/routes/sse.js.map +1 -0
  323. package/dist/routes/teams.d.ts +30 -0
  324. package/dist/routes/teams.d.ts.map +1 -0
  325. package/dist/routes/teams.js +443 -0
  326. package/dist/routes/teams.js.map +1 -0
  327. package/dist/routes/tenant.d.ts +57 -0
  328. package/dist/routes/tenant.d.ts.map +1 -0
  329. package/dist/routes/tenant.js +352 -0
  330. package/dist/routes/tenant.js.map +1 -0
  331. package/dist/routes/tokens.d.ts +14 -0
  332. package/dist/routes/tokens.d.ts.map +1 -0
  333. package/dist/routes/tokens.js +231 -0
  334. package/dist/routes/tokens.js.map +1 -0
  335. package/dist/routes/tools.d.ts +33 -0
  336. package/dist/routes/tools.d.ts.map +1 -0
  337. package/dist/routes/tools.js +380 -0
  338. package/dist/routes/tools.js.map +1 -0
  339. package/dist/routes/webhook-endpoints.d.ts +10 -0
  340. package/dist/routes/webhook-endpoints.d.ts.map +1 -0
  341. package/dist/routes/webhook-endpoints.js +407 -0
  342. package/dist/routes/webhook-endpoints.js.map +1 -0
  343. package/dist/routes/webhooks.d.ts +21 -0
  344. package/dist/routes/webhooks.d.ts.map +1 -0
  345. package/dist/routes/webhooks.js +228 -0
  346. package/dist/routes/webhooks.js.map +1 -0
  347. package/dist/s3-credential-binding.d.ts +54 -0
  348. package/dist/s3-credential-binding.d.ts.map +1 -0
  349. package/dist/s3-credential-binding.js +4 -0
  350. package/dist/s3-credential-binding.js.map +1 -0
  351. package/dist/secrets-binding.d.ts +281 -0
  352. package/dist/secrets-binding.d.ts.map +1 -0
  353. package/dist/secrets-binding.js +10 -0
  354. package/dist/secrets-binding.js.map +1 -0
  355. package/dist/secrets-provider-binding.d.ts +164 -0
  356. package/dist/secrets-provider-binding.d.ts.map +1 -0
  357. package/dist/secrets-provider-binding.js +4 -0
  358. package/dist/secrets-provider-binding.js.map +1 -0
  359. package/dist/session-store-binding.d.ts +148 -0
  360. package/dist/session-store-binding.d.ts.map +1 -0
  361. package/dist/session-store-binding.js +4 -0
  362. package/dist/session-store-binding.js.map +1 -0
  363. package/dist/signing-key-binding.d.ts +210 -0
  364. package/dist/signing-key-binding.d.ts.map +1 -0
  365. package/dist/signing-key-binding.js +4 -0
  366. package/dist/signing-key-binding.js.map +1 -0
  367. package/dist/state-store-binding.d.ts +53 -0
  368. package/dist/state-store-binding.d.ts.map +1 -0
  369. package/dist/state-store-binding.js +38 -0
  370. package/dist/state-store-binding.js.map +1 -0
  371. package/dist/supervisor-binding.d.ts +526 -0
  372. package/dist/supervisor-binding.d.ts.map +1 -0
  373. package/dist/supervisor-binding.js +4 -0
  374. package/dist/supervisor-binding.js.map +1 -0
  375. package/dist/tenant-host-access.d.ts +41 -0
  376. package/dist/tenant-host-access.d.ts.map +1 -0
  377. package/dist/tenant-host-access.js +42 -0
  378. package/dist/tenant-host-access.js.map +1 -0
  379. package/dist/token-admin.d.ts +99 -0
  380. package/dist/token-admin.d.ts.map +1 -0
  381. package/dist/token-admin.js +4 -0
  382. package/dist/token-admin.js.map +1 -0
  383. package/dist/tool-binding.d.ts +247 -0
  384. package/dist/tool-binding.d.ts.map +1 -0
  385. package/dist/tool-binding.js +4 -0
  386. package/dist/tool-binding.js.map +1 -0
  387. package/dist/trigger-binding.d.ts +13 -0
  388. package/dist/trigger-binding.d.ts.map +1 -0
  389. package/dist/trigger-binding.js +4 -0
  390. package/dist/trigger-binding.js.map +1 -0
  391. package/dist/types.d.ts +71 -0
  392. package/dist/types.d.ts.map +1 -0
  393. package/dist/types.js +4 -0
  394. package/dist/types.js.map +1 -0
  395. package/dist/webhook-endpoint-binding.d.ts +230 -0
  396. package/dist/webhook-endpoint-binding.d.ts.map +1 -0
  397. package/dist/webhook-endpoint-binding.js +12 -0
  398. package/dist/webhook-endpoint-binding.js.map +1 -0
  399. package/dist/xml.d.ts +79 -0
  400. package/dist/xml.d.ts.map +1 -0
  401. package/dist/xml.js +115 -0
  402. package/dist/xml.js.map +1 -0
  403. package/openapi.json +29649 -0
  404. package/package.json +76 -4
  405. package/scripts/emit-openapi.mjs +44 -0
  406. package/src/adapter-binding.ts +204 -0
  407. package/src/agent-binding.ts +231 -0
  408. package/src/app.ts +1286 -0
  409. package/src/capability-binding.ts +83 -0
  410. package/src/cost-binding.ts +213 -0
  411. package/src/deployment-binding.ts +225 -0
  412. package/src/env-binding.ts +140 -0
  413. package/src/errors.ts +295 -0
  414. package/src/eval-run-binding.ts +209 -0
  415. package/src/eval-run-dispatcher.ts +497 -0
  416. package/src/eval-suite-binding.ts +257 -0
  417. package/src/event-bus-binding.ts +127 -0
  418. package/src/flow-binding.ts +213 -0
  419. package/src/guardrail-binding.ts +151 -0
  420. package/src/handler-binding.ts +132 -0
  421. package/src/hitl-binding.ts +172 -0
  422. package/src/identity-directory-binding.ts +128 -0
  423. package/src/identity-provider-binding.ts +203 -0
  424. package/src/image-registry-binding.ts +193 -0
  425. package/src/index.ts +606 -0
  426. package/src/key-management-binding.ts +91 -0
  427. package/src/mcp-endpoint-binding.ts +311 -0
  428. package/src/memory-binding.ts +239 -0
  429. package/src/middleware/auth.ts +437 -0
  430. package/src/middleware/authorize.ts +125 -0
  431. package/src/middleware/error-mapper.ts +40 -0
  432. package/src/middleware/idempotency.ts +160 -0
  433. package/src/middleware/principal.ts +64 -0
  434. package/src/middleware/public-run-routes.ts +50 -0
  435. package/src/middleware/request-id.ts +28 -0
  436. package/src/middleware/sigv4-verify.ts +374 -0
  437. package/src/middleware/sigv4.ts +165 -0
  438. package/src/openapi/generate.ts +307 -0
  439. package/src/openapi/operations.ts +5444 -0
  440. package/src/openapi/schemas.ts +6363 -0
  441. package/src/provenance-binding.ts +169 -0
  442. package/src/provider-binding.ts +196 -0
  443. package/src/public-run-token.ts +263 -0
  444. package/src/retention-binding.ts +78 -0
  445. package/src/reviewer-binding.ts +99 -0
  446. package/src/rotation-status-store.ts +209 -0
  447. package/src/routes/adapters.ts +319 -0
  448. package/src/routes/agents.ts +424 -0
  449. package/src/routes/approvals.ts +759 -0
  450. package/src/routes/artifacts.ts +317 -0
  451. package/src/routes/audit.ts +219 -0
  452. package/src/routes/auth.ts +806 -0
  453. package/src/routes/capabilities.ts +79 -0
  454. package/src/routes/compliance.ts +482 -0
  455. package/src/routes/conversations.ts +369 -0
  456. package/src/routes/cost.ts +327 -0
  457. package/src/routes/deployments.ts +1493 -0
  458. package/src/routes/env.ts +429 -0
  459. package/src/routes/eval-runs.ts +631 -0
  460. package/src/routes/eval-suites.ts +490 -0
  461. package/src/routes/event-triggers.ts +283 -0
  462. package/src/routes/flows.ts +423 -0
  463. package/src/routes/guardrails.ts +320 -0
  464. package/src/routes/identity.ts +203 -0
  465. package/src/routes/mcp.ts +940 -0
  466. package/src/routes/memory.ts +430 -0
  467. package/src/routes/observations.ts +175 -0
  468. package/src/routes/orgs.ts +273 -0
  469. package/src/routes/pagination.ts +51 -0
  470. package/src/routes/policies.ts +413 -0
  471. package/src/routes/projects.ts +634 -0
  472. package/src/routes/proposals.ts +719 -0
  473. package/src/routes/provenance.ts +406 -0
  474. package/src/routes/providers.ts +624 -0
  475. package/src/routes/public-run-tokens.ts +104 -0
  476. package/src/routes/retention.ts +193 -0
  477. package/src/routes/reviewers.ts +209 -0
  478. package/src/routes/runs.ts +892 -0
  479. package/src/routes/s3.ts +519 -0
  480. package/src/routes/schedules.ts +300 -0
  481. package/src/routes/scope-params.ts +133 -0
  482. package/src/routes/secret-ref.ts +52 -0
  483. package/src/routes/secrets.ts +975 -0
  484. package/src/routes/signing-keys.ts +259 -0
  485. package/src/routes/sse.ts +148 -0
  486. package/src/routes/teams.ts +584 -0
  487. package/src/routes/tenant.ts +530 -0
  488. package/src/routes/tokens.ts +285 -0
  489. package/src/routes/tools.ts +491 -0
  490. package/src/routes/webhook-endpoints.ts +534 -0
  491. package/src/routes/webhooks.ts +296 -0
  492. package/src/s3-credential-binding.ts +58 -0
  493. package/src/secrets-binding.ts +308 -0
  494. package/src/secrets-provider-binding.ts +167 -0
  495. package/src/session-store-binding.ts +163 -0
  496. package/src/signing-key-binding.ts +235 -0
  497. package/src/state-store-binding.ts +84 -0
  498. package/src/supervisor-binding.ts +554 -0
  499. package/src/tenant-host-access.ts +62 -0
  500. package/src/token-admin.ts +104 -0
  501. package/src/tool-binding.ts +274 -0
  502. package/src/trigger-binding.ts +38 -0
  503. package/src/types.ts +74 -0
  504. package/src/webhook-endpoint-binding.ts +246 -0
  505. package/src/xml.ts +196 -0
@@ -0,0 +1,234 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { Hono } from 'hono';
4
+ import { statusFor, toWireError } from '../errors.js';
5
+ import { clampLimit } from './pagination.js';
6
+ /**
7
+ * Schedules — cron-kind triggers.
8
+ *
9
+ * Seven routes, all soft-delete-shaped per framework convention:
10
+ * - POST /v1/schedules (register)
11
+ * - GET /v1/schedules (list, cursor-paginated)
12
+ * - GET /v1/schedules/:triggerId (get)
13
+ * - PATCH /v1/schedules/:triggerId (update cron/label/flowVersion)
14
+ * - POST /v1/schedules/:triggerId/pause
15
+ * - POST /v1/schedules/:triggerId/resume
16
+ * - POST /v1/schedules/:triggerId/unregister (tombstone — GC per policy)
17
+ *
18
+ * The `triggerId` URL param is the trigger's id; the response body
19
+ * aliases it as `scheduleId` for a friendlier client surface.
20
+ */
21
+ export function schedulesRouter(binding) {
22
+ const r = new Hono();
23
+ // ---------- POST / (register) ----------
24
+ r.post('/', async (c) => {
25
+ const requestId = c.get('requestId');
26
+ const tenantId = c.get('tenantId');
27
+ const parsed = await parseJsonObject(c, requestId);
28
+ if (parsed.kind === 'err')
29
+ return parsed.response;
30
+ const body = parsed.value;
31
+ const flowId = requireString(body, 'flowId');
32
+ const flowVersion = requireString(body, 'flowVersion');
33
+ const cronExpression = requireString(body.config, 'config.cronExpression');
34
+ if (flowId.kind === 'err')
35
+ return bad(c, requestId, flowId.message);
36
+ if (flowVersion.kind === 'err')
37
+ return bad(c, requestId, flowVersion.message);
38
+ if (cronExpression.kind === 'err')
39
+ return bad(c, requestId, cronExpression.message);
40
+ const rawConfig = (body.config ?? {});
41
+ const registerInput = {
42
+ kind: 'cron',
43
+ tenantId,
44
+ flowId: flowId.value,
45
+ flowVersion: flowVersion.value,
46
+ config: {
47
+ cronExpression: cronExpression.value,
48
+ ...(typeof rawConfig.timezone === 'string' && { timezone: rawConfig.timezone }),
49
+ ...('input' in rawConfig && { input: rawConfig.input }),
50
+ },
51
+ ...(typeof body.label === 'string' && body.label.length > 0 && { label: body.label }),
52
+ };
53
+ const result = await binding.register(registerInput);
54
+ if (result.kind === 'err') {
55
+ c.status(statusFor(result.error.code));
56
+ return c.json(toWireError({ code: result.error.code, message: result.error.message }, requestId));
57
+ }
58
+ c.status(201);
59
+ return c.json(serializeSchedule(result.value));
60
+ });
61
+ // ---------- GET / (list) ----------
62
+ r.get('/', async (c) => {
63
+ const tenantId = c.get('tenantId');
64
+ const limit = clampLimit(c.req.query('limit'));
65
+ const cursorRaw = c.req.query('cursor');
66
+ const statusRaw = c.req.query('status');
67
+ let statusFilter;
68
+ if (statusRaw === 'active' || statusRaw === 'paused')
69
+ statusFilter = statusRaw;
70
+ const page = await binding.list({
71
+ tenantId,
72
+ kind: 'cron',
73
+ limit,
74
+ ...(cursorRaw !== undefined && cursorRaw.length > 0 && { cursor: cursorRaw }),
75
+ ...(statusFilter !== undefined && { status: statusFilter }),
76
+ });
77
+ return c.json({
78
+ data: page.data.map((row) => serializeSchedule(row)),
79
+ hasMore: page.nextCursor !== undefined,
80
+ ...(page.nextCursor !== undefined && { nextCursor: page.nextCursor }),
81
+ });
82
+ });
83
+ // ---------- GET /:triggerId (get) ----------
84
+ r.get('/:triggerId', async (c) => {
85
+ const requestId = c.get('requestId');
86
+ const tenantId = c.get('tenantId');
87
+ const triggerId = c.req.param('triggerId');
88
+ const rec = await binding.get({ tenantId, triggerId });
89
+ if (rec === null || rec.kind !== 'cron')
90
+ return notFound(c, requestId, triggerId);
91
+ return c.json(serializeSchedule(rec));
92
+ });
93
+ // ---------- PATCH /:triggerId (update) ----------
94
+ r.patch('/:triggerId', async (c) => {
95
+ const requestId = c.get('requestId');
96
+ const tenantId = c.get('tenantId');
97
+ const triggerId = c.req.param('triggerId');
98
+ const parsed = await parseJsonObject(c, requestId);
99
+ if (parsed.kind === 'err')
100
+ return parsed.response;
101
+ const body = parsed.value;
102
+ const patchConfig = body.config;
103
+ const cfg = {};
104
+ if (patchConfig !== undefined) {
105
+ if (typeof patchConfig.cronExpression === 'string')
106
+ cfg.cronExpression = patchConfig.cronExpression;
107
+ if (typeof patchConfig.timezone === 'string')
108
+ cfg.timezone = patchConfig.timezone;
109
+ if ('input' in patchConfig)
110
+ cfg.input = patchConfig.input;
111
+ }
112
+ const updateInput = {
113
+ kind: 'cron',
114
+ tenantId,
115
+ triggerId,
116
+ ...(Object.keys(cfg).length > 0 && { config: cfg }),
117
+ ...('label' in body && { label: body.label === null ? null : body.label }),
118
+ ...(typeof body.flowVersion === 'string' && { flowVersion: body.flowVersion }),
119
+ };
120
+ const result = await binding.update(updateInput);
121
+ if (result.kind === 'err') {
122
+ c.status(statusFor(result.error.code));
123
+ return c.json(toWireError({
124
+ code: result.error.code,
125
+ message: result.error.message,
126
+ triggerId: triggerId,
127
+ }, requestId));
128
+ }
129
+ return c.json(serializeSchedule(result.value));
130
+ });
131
+ // ---------- POST /:triggerId/pause ----------
132
+ r.post('/:triggerId/pause', async (c) => {
133
+ const requestId = c.get('requestId');
134
+ const tenantId = c.get('tenantId');
135
+ const triggerId = c.req.param('triggerId');
136
+ const result = await binding.pause({ tenantId, triggerId });
137
+ if (result.kind === 'err')
138
+ return lifecycleError(c, requestId, result.error, triggerId);
139
+ return c.json(serializeSchedule(result.value));
140
+ });
141
+ // ---------- POST /:triggerId/resume ----------
142
+ r.post('/:triggerId/resume', async (c) => {
143
+ const requestId = c.get('requestId');
144
+ const tenantId = c.get('tenantId');
145
+ const triggerId = c.req.param('triggerId');
146
+ const result = await binding.resume({ tenantId, triggerId });
147
+ if (result.kind === 'err')
148
+ return lifecycleError(c, requestId, result.error, triggerId);
149
+ return c.json(serializeSchedule(result.value));
150
+ });
151
+ // ---------- POST /:triggerId/unregister (soft delete) ----------
152
+ r.post('/:triggerId/unregister', async (c) => {
153
+ const tenantId = c.get('tenantId');
154
+ const triggerId = c.req.param('triggerId');
155
+ const outcome = await binding.unregister({ tenantId, triggerId });
156
+ return c.json({
157
+ scheduleId: triggerId,
158
+ unregistered: outcome.unregistered,
159
+ });
160
+ });
161
+ return r;
162
+ }
163
+ // -----------------------------------------------------------------------
164
+ // Shared helpers (co-located to keep each router self-contained).
165
+ // -----------------------------------------------------------------------
166
+ function serializeSchedule(r) {
167
+ return {
168
+ scheduleId: r.triggerId,
169
+ triggerId: r.triggerId,
170
+ flowId: r.flowId,
171
+ flowVersion: r.flowVersion,
172
+ cronExpression: r.config.cronExpression,
173
+ ...(r.config.timezone !== undefined && { timezone: r.config.timezone }),
174
+ ...(r.config.input !== undefined && { input: r.config.input }),
175
+ label: r.label,
176
+ status: r.status,
177
+ nextFireAt: r.nextFireAt,
178
+ lastFiredAt: r.lastFiredAt,
179
+ createdAt: r.createdAt,
180
+ updatedAt: r.updatedAt,
181
+ };
182
+ }
183
+ async function parseJsonObject(c, requestId) {
184
+ let body;
185
+ try {
186
+ body = await c.req.json();
187
+ }
188
+ catch {
189
+ c.status(statusFor('bad-input'));
190
+ return {
191
+ kind: 'err',
192
+ response: c.json(toWireError({ code: 'bad-input', message: 'Request body must be valid JSON' }, requestId)),
193
+ };
194
+ }
195
+ if (body === null || typeof body !== 'object' || Array.isArray(body)) {
196
+ c.status(statusFor('bad-input'));
197
+ return {
198
+ kind: 'err',
199
+ response: c.json(toWireError({ code: 'bad-input', message: 'Request body must be a JSON object' }, requestId)),
200
+ };
201
+ }
202
+ return { kind: 'ok', value: body };
203
+ }
204
+ function requireString(obj, path) {
205
+ const parts = path.split('.');
206
+ let cur = obj;
207
+ for (const part of parts) {
208
+ if (cur === null || typeof cur !== 'object') {
209
+ return { kind: 'err', message: `\`${path}\` is required` };
210
+ }
211
+ cur = cur[part];
212
+ }
213
+ if (typeof cur !== 'string' || cur.length === 0) {
214
+ return { kind: 'err', message: `\`${path}\` is required` };
215
+ }
216
+ return { kind: 'ok', value: cur };
217
+ }
218
+ function bad(c, requestId, message) {
219
+ c.status(statusFor('bad-input'));
220
+ return c.json(toWireError({ code: 'bad-input', message }, requestId));
221
+ }
222
+ function notFound(c, requestId, triggerId) {
223
+ c.status(statusFor('trigger-not-found'));
224
+ return c.json(toWireError({
225
+ code: 'trigger-not-found',
226
+ message: `No trigger with id "${triggerId}"`,
227
+ triggerId: triggerId,
228
+ }, requestId));
229
+ }
230
+ function lifecycleError(c, requestId, error, triggerId) {
231
+ c.status(statusFor(error.code));
232
+ return c.json(toWireError({ code: error.code, message: error.message, triggerId: triggerId }, requestId));
233
+ }
234
+ //# sourceMappingURL=schedules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedules.js","sourceRoot":"","sources":["../../src/routes/schedules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { type ResourceRef } from '@kindgi/authz';
2
+ import type { Scope } from '@kindgi/platform';
3
+ import type { TenantId } from '@kindgi/types';
4
+ /**
5
+ * The authorization resource for a request scope: the project or org it
6
+ * names, else the tenant. A route's authorization middleware derives the
7
+ * scope with the same parser as its handler and passes the result here, so
8
+ * the scope that is checked is the scope that is acted on. An absent or
9
+ * unparseable scope checks the tenant, the strictest resource; the handler
10
+ * then rejects the request.
11
+ */
12
+ export declare function scopeResourceRef(scope: Scope | undefined, tenantId: TenantId): ResourceRef;
13
+ /** {@link scopeResourceRef} for the `?scopeKind` + `?scopeId` query parameters. */
14
+ export declare function queryScopeResourceRef(query: QuerySource, session: {
15
+ readonly tenantId: TenantId;
16
+ }): ResourceRef;
17
+ /**
18
+ * Outcome of parsing the `?scopeKind + ?scopeId + ?inherit` triplet.
19
+ * `ok` carries the decoded `Scope` (undefined if no scope params were
20
+ * supplied) plus the parsed `inherit` boolean (undefined if elided —
21
+ * caller leaves the binding to apply its own default).
22
+ */
23
+ export type ParseScopeParamsOutcome = {
24
+ readonly kind: 'ok';
25
+ readonly scope?: Scope;
26
+ readonly inherit?: boolean;
27
+ } | {
28
+ readonly kind: 'err';
29
+ readonly message: string;
30
+ };
31
+ type QuerySource = Record<string, string> | ((name: string) => string | undefined);
32
+ /**
33
+ * Parse the `?scopeKind + ?scopeId + ?inherit` triplet. The wire shape
34
+ * is a discriminated triplet by design — human-readable, curl / browser
35
+ * / access-log auditable for regulated verticals.
36
+ *
37
+ * Cross-field validation (all return 400 `scope-invalid`):
38
+ * - `scopeKind === 'tenant' && scopeId !== undefined` → err (tenant carries no id).
39
+ * - `scopeKind in {'org','project'} && scopeId === undefined` → err (missing id).
40
+ * - `scopeKind === undefined && scopeId !== undefined` → err (orphan id).
41
+ * - `inherit` — accepts literal 'true' / 'false' strings; anything else → err.
42
+ *
43
+ * `tenantId` for the decoded Scope always comes from the session —
44
+ * cross-tenant scopes are denied by policy.
45
+ *
46
+ * `inherit` is load-bearing for policy/config-scoped bindings
47
+ * (e.g. MCP endpoints, secrets, env values) — controls the
48
+ * upward-hierarchy walk. For content-scoped bindings the flag is a
49
+ * documented no-op; the route passes it through so the binding-side
50
+ * field-passthrough shape stays uniform across the scope-aware
51
+ * bindings.
52
+ */
53
+ export declare function parseScopeParams(query: QuerySource, session: {
54
+ readonly tenantId: TenantId;
55
+ }): ParseScopeParamsOutcome;
56
+ export {};
57
+ //# sourceMappingURL=scope-params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-params.d.ts","sourceRoot":"","sources":["../../src/routes/scope-params.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAO,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAoB,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEhE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAI1F;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GACvC,WAAW,CAGb;AAED;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAC/B;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3E;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,CAAC;AAEnF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GACvC,uBAAuB,CAkEzB"}
@@ -0,0 +1,105 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { ref } from '@kindgi/authz';
4
+ /**
5
+ * The authorization resource for a request scope: the project or org it
6
+ * names, else the tenant. A route's authorization middleware derives the
7
+ * scope with the same parser as its handler and passes the result here, so
8
+ * the scope that is checked is the scope that is acted on. An absent or
9
+ * unparseable scope checks the tenant, the strictest resource; the handler
10
+ * then rejects the request.
11
+ */
12
+ export function scopeResourceRef(scope, tenantId) {
13
+ if (scope?.kind === 'project')
14
+ return ref('project', scope.projectId);
15
+ if (scope?.kind === 'org')
16
+ return ref('org', scope.orgId);
17
+ return ref('tenant', tenantId);
18
+ }
19
+ /** {@link scopeResourceRef} for the `?scopeKind` + `?scopeId` query parameters. */
20
+ export function queryScopeResourceRef(query, session) {
21
+ const parsed = parseScopeParams(query, session);
22
+ return scopeResourceRef(parsed.kind === 'ok' ? parsed.scope : undefined, session.tenantId);
23
+ }
24
+ /**
25
+ * Parse the `?scopeKind + ?scopeId + ?inherit` triplet. The wire shape
26
+ * is a discriminated triplet by design — human-readable, curl / browser
27
+ * / access-log auditable for regulated verticals.
28
+ *
29
+ * Cross-field validation (all return 400 `scope-invalid`):
30
+ * - `scopeKind === 'tenant' && scopeId !== undefined` → err (tenant carries no id).
31
+ * - `scopeKind in {'org','project'} && scopeId === undefined` → err (missing id).
32
+ * - `scopeKind === undefined && scopeId !== undefined` → err (orphan id).
33
+ * - `inherit` — accepts literal 'true' / 'false' strings; anything else → err.
34
+ *
35
+ * `tenantId` for the decoded Scope always comes from the session —
36
+ * cross-tenant scopes are denied by policy.
37
+ *
38
+ * `inherit` is load-bearing for policy/config-scoped bindings
39
+ * (e.g. MCP endpoints, secrets, env values) — controls the
40
+ * upward-hierarchy walk. For content-scoped bindings the flag is a
41
+ * documented no-op; the route passes it through so the binding-side
42
+ * field-passthrough shape stays uniform across the scope-aware
43
+ * bindings.
44
+ */
45
+ export function parseScopeParams(query, session) {
46
+ const get = typeof query === 'function' ? query : (n) => query[n];
47
+ const scopeKindRaw = get('scopeKind');
48
+ const scopeIdRaw = get('scopeId');
49
+ const inheritRaw = get('inherit');
50
+ // ---- inherit ----
51
+ let inherit;
52
+ if (inheritRaw !== undefined && inheritRaw.length > 0) {
53
+ if (inheritRaw === 'true')
54
+ inherit = true;
55
+ else if (inheritRaw === 'false')
56
+ inherit = false;
57
+ else {
58
+ return {
59
+ kind: 'err',
60
+ message: `scope query parameters malformed: inherit must be 'true' or 'false', got "${inheritRaw}"`,
61
+ };
62
+ }
63
+ }
64
+ // ---- scope triplet ----
65
+ if (scopeKindRaw === undefined || scopeKindRaw.length === 0) {
66
+ if (scopeIdRaw !== undefined && scopeIdRaw.length > 0) {
67
+ return {
68
+ kind: 'err',
69
+ message: `scope query parameters malformed: scopeId="${scopeIdRaw}" requires scopeKind`,
70
+ };
71
+ }
72
+ return { kind: 'ok', ...(inherit !== undefined && { inherit }) };
73
+ }
74
+ if (scopeKindRaw !== 'tenant' && scopeKindRaw !== 'org' && scopeKindRaw !== 'project') {
75
+ return {
76
+ kind: 'err',
77
+ message: `scope query parameters malformed: scopeKind must be one of 'tenant' | 'org' | 'project', got "${scopeKindRaw}"`,
78
+ };
79
+ }
80
+ if (scopeKindRaw === 'tenant') {
81
+ if (scopeIdRaw !== undefined && scopeIdRaw.length > 0) {
82
+ return {
83
+ kind: 'err',
84
+ message: `scope query parameters malformed: scopeKind='tenant' takes no scopeId (tenant is implicit from the session)`,
85
+ };
86
+ }
87
+ return {
88
+ kind: 'ok',
89
+ scope: { kind: 'tenant', tenantId: session.tenantId },
90
+ ...(inherit !== undefined && { inherit }),
91
+ };
92
+ }
93
+ // 'org' | 'project' — both require scopeId
94
+ if (scopeIdRaw === undefined || scopeIdRaw.length === 0) {
95
+ return {
96
+ kind: 'err',
97
+ message: `scope query parameters malformed: scopeKind='${scopeKindRaw}' requires scopeId`,
98
+ };
99
+ }
100
+ const scope = scopeKindRaw === 'org'
101
+ ? { kind: 'org', tenantId: session.tenantId, orgId: scopeIdRaw }
102
+ : { kind: 'project', tenantId: session.tenantId, projectId: scopeIdRaw };
103
+ return { kind: 'ok', scope, ...(inherit !== undefined && { inherit }) };
104
+ }
105
+ //# sourceMappingURL=scope-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-params.js","sourceRoot":"","sources":["../../src/routes/scope-params.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type EnvName } from '@kindgi/types';
2
+ /** The longest secret name a `secretRef` can carry. */
3
+ export declare const MAX_SECRET_NAME_LENGTH = 256;
4
+ /**
5
+ * `{ envName, name }`: a secret by name in the deployment's secrets
6
+ * store, resolved at the owner's scope. The shape webhooks, MCP
7
+ * endpoints and providers share. `field` names it in messages.
8
+ */
9
+ export declare function parseSecretRef(raw: unknown, field?: string): {
10
+ readonly kind: 'ok';
11
+ readonly value: {
12
+ readonly envName: EnvName;
13
+ readonly name: string;
14
+ };
15
+ } | {
16
+ readonly kind: 'err';
17
+ readonly message: string;
18
+ readonly unknownField?: string;
19
+ };
20
+ //# sourceMappingURL=secret-ref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-ref.d.ts","sourceRoot":"","sources":["../../src/routes/secret-ref.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAe,MAAM,eAAe,CAAC;AAE1D,uDAAuD;AACvD,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAI1C;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,EACZ,KAAK,SAAc,GAEjB;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC7F;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CA+BrF"}
@@ -0,0 +1,42 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { makeEnvName } from '@kindgi/types';
4
+ /** The longest secret name a `secretRef` can carry. */
5
+ export const MAX_SECRET_NAME_LENGTH = 256;
6
+ const SECRET_REF_FIELDS = new Set(['envName', 'name']);
7
+ /**
8
+ * `{ envName, name }`: a secret by name in the deployment's secrets
9
+ * store, resolved at the owner's scope. The shape webhooks, MCP
10
+ * endpoints and providers share. `field` names it in messages.
11
+ */
12
+ export function parseSecretRef(raw, field = 'secretRef') {
13
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) {
14
+ return { kind: 'err', message: `\`${field}\` must be an object \`{ envName, name }\`` };
15
+ }
16
+ const ref = raw;
17
+ const unknown = Object.keys(ref).find((key) => !SECRET_REF_FIELDS.has(key));
18
+ if (unknown !== undefined) {
19
+ return {
20
+ kind: 'err',
21
+ message: `Unknown field \`${field}.${unknown}\``,
22
+ unknownField: `${field}.${unknown}`,
23
+ };
24
+ }
25
+ const envName = typeof ref.envName === 'string' ? makeEnvName(ref.envName) : null;
26
+ if (envName === null) {
27
+ return {
28
+ kind: 'err',
29
+ message: `\`${field}.envName\` must be a lowercase name (letters, digits, hyphens)`,
30
+ };
31
+ }
32
+ if (typeof ref.name !== 'string' ||
33
+ ref.name.length === 0 ||
34
+ ref.name.length > MAX_SECRET_NAME_LENGTH) {
35
+ return {
36
+ kind: 'err',
37
+ message: `\`${field}.name\` must be a non-empty string of at most ${MAX_SECRET_NAME_LENGTH} characters`,
38
+ };
39
+ }
40
+ return { kind: 'ok', value: { envName, name: ref.name } };
41
+ }
42
+ //# sourceMappingURL=secret-ref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-ref.js","sourceRoot":"","sources":["../../src/routes/secret-ref.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC,OAAO,EAAgB,WAAW,EAAE,MAAM,eAAe,CAAC;AAE1D,uDAAuD;AACvD,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AAEvD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAY,EACZ,KAAK,GAAG,WAAW;IAInB,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,KAAK,4CAA4C,EAAE,CAAC;IAC1F,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5E,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,mBAAmB,KAAK,IAAI,OAAO,IAAI;YAChD,YAAY,EAAE,GAAG,KAAK,IAAI,OAAO,EAAE;SACpC,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClF,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,KAAK,KAAK,gEAAgE;SACpF,CAAC;IACJ,CAAC;IACD,IACE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QACrB,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,sBAAsB,EACxC,CAAC;QACD,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,KAAK,KAAK,iDAAiD,sBAAsB,aAAa;SACxG,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { Hono } from 'hono';
2
+ import type { Authorizer } from '../middleware/authorize.js';
3
+ import type { RotationStatusStore } from '../rotation-status-store.js';
4
+ import type { SecretBinding } from '../secrets-binding.js';
5
+ import type { AppEnv } from '../types.js';
6
+ /**
7
+ * `/v1/secrets/*` — HTTP surface for `SecretBinding`. Nine endpoints
8
+ * covering the full
9
+ * lifecycle: list / get / set / rotate (sync + async) / rotation-status
10
+ * poll / rotation-status SSE / revoke / version list / version get.
11
+ *
12
+ * Wire-safety:
13
+ * - `value` NEVER returns from list / get / getVersion / listVersions.
14
+ * - Within `/v1/secrets`, plaintext is accepted only by `POST /`
15
+ * (`value`, `secrets:write` capability) and `POST /:name/rotate`
16
+ * (optional `newValue`, `secrets:rotate` capability).
17
+ * - Async rotation returns 202 with `{ rotationId, statusUrl,
18
+ * eventsUrl }`; sync rotation returns 201 with the outcome inline.
19
+ *
20
+ * Capability gates:
21
+ * - `secrets:write` → POST /
22
+ * - `secrets:rotate` → POST /:name/rotate
23
+ * - `secrets:revoke` → DELETE /:name (soft)
24
+ * - `secrets:revoke:hard` → DELETE /:name?hard=true
25
+ * - `secrets:reveal` → not used by these routes; there is no HTTP
26
+ * `resolve` path.
27
+ *
28
+ * SSE:
29
+ * - `GET /:name/rotations/:rotationId/events` streams
30
+ * `event: rotation-update\ndata: <json>\n\n` frames on each status
31
+ * change. An `event: ping` heartbeat (empty data) every 15s keeps
32
+ * proxies from timing the stream out; the stream closes on terminal
33
+ * state.
34
+ */
35
+ export interface SecretsRouterOptions {
36
+ readonly secretsBinding: SecretBinding;
37
+ readonly rotationStatusStore: RotationStatusStore;
38
+ /**
39
+ * Overrideable SSE heartbeat interval. Default 15_000 ms; tests
40
+ * pass a low value to keep suites fast.
41
+ */
42
+ readonly sseHeartbeatMs?: number;
43
+ /**
44
+ * Optional fine-grained authorizer. When present, gates every route
45
+ * on `admin` on the request's `scope` (query for GET/DELETE, body for
46
+ * create, body or query for rotate). Reads are STRICT: strict-read means `admin from scope`
47
+ * or explicit `reader` grant — cascade via the scope tuple written
48
+ * by `secretsBinding.set` on fresh create.
49
+ */
50
+ readonly authorizer?: Authorizer;
51
+ }
52
+ export declare function secretsRouter(options: SecretsRouterOptions): Hono<AppEnv>;
53
+ //# sourceMappingURL=secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/routes/secrets.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAO5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAkB,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,KAAK,EACV,aAAa,EAId,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAK1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAClD;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;CAClC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,CA4uBzE"}