@kindgi/api 0.0.0-bootstrap.0 → 0.1.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 (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 +396 -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 +264 -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 +13 -0
  104. package/dist/middleware/error-mapper.d.ts.map +1 -0
  105. package/dist/middleware/error-mapper.js +32 -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 +5051 -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 +773 -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 +29659 -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 +1285 -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 +291 -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 +37 -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 +5445 -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 +981 -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,209 @@
1
+ import type { Fact, MemoryScope, Retention } from '@kindgi/memory';
2
+ import type { Scope as PlatformScope } from '@kindgi/platform';
3
+ import type { Cursor, FactId, TenantId } from '@kindgi/types';
4
+ /**
5
+ * Caller-plugged surface for the memory resource. Same shape as
6
+ * `AgentRegistryBinding` / `ToolRegistryBinding` / `GuardrailRegistryBinding`:
7
+ * the API package does NOT own memory persistence or retrieval logic.
8
+ * Deployments plug in a binding that wraps the memory subsystem (the
9
+ * Kindgi runtime provides one) together with their own
10
+ * `EmbeddingProviderRegistry` and per-type retrieval policies.
11
+ *
12
+ * Every method is tenant-scoped: callers pass `tenantId` explicitly so
13
+ * multi-tenant deployments can partition storage without exposing the
14
+ * scoping inside the API package.
15
+ *
16
+ * Cursors are opaque — the binding chooses its encoding (page number,
17
+ * ISO timestamp, `id@version`, whatever). The API layer only validates
18
+ * that a cursor round-trips as a string; it never inspects the payload.
19
+ *
20
+ * Supersession, not delete: facts are append-only. `supersedeFact`
21
+ * writes a new revision that supersedes the target; the historical row
22
+ * remains readable until retention sweeps it. There is no hard delete;
23
+ * the retention sweep handles physical removal.
24
+ */
25
+ export interface MemoryBinding {
26
+ /**
27
+ * Cursor-paginated list of facts under the tenant. Filters:
28
+ * - `type` — exact fact-type match.
29
+ * - `scope` — partial-match filter (see `Scope` in the memory subsystem).
30
+ *
31
+ * Sort order is binding-defined — for example, the latest version
32
+ * per `(type, id)` sorted by `createdAt desc`.
33
+ */
34
+ listFacts(input: MemoryListFactsInput): Promise<MemoryFactPage>;
35
+ /**
36
+ * The fact with the given id, or `null` if unknown. Latest version
37
+ * by default; bindings MAY accept a `version` in the input to select
38
+ * a specific historical revision (not exposed on the route today).
39
+ * The route surfaces `null` as `404 fact-not-found`.
40
+ */
41
+ getFact(input: MemoryGetFactInput): Promise<Fact | null>;
42
+ /**
43
+ * Persist a new fact. The binding validates the write against its
44
+ * retrieval-policy registry (populates keyword / semantic indexes
45
+ * per type) and its embedding registry (for semantic-indexed types).
46
+ *
47
+ * When the fact type declares semantic indexing but no embedding
48
+ * provider is bound, the binding MUST return an `err` result — the
49
+ * route maps that to `400 bad-input`.
50
+ */
51
+ writeFact(input: MemoryWriteFactInput): Promise<MemoryWriteFactOutcome>;
52
+ /**
53
+ * Mark a fact as superseded. The binding writes a superseding
54
+ * revision (or flags the row, depending on its runtime semantics).
55
+ * Idempotent — superseding an already-superseded fact returns
56
+ * `{ superseded: true }` without error. When the fact id is unknown,
57
+ * returns `{ superseded: false }` and the route flips that to `404`.
58
+ */
59
+ supersedeFact(input: MemorySupersedeFactInput): Promise<MemorySupersedeFactOutcome>;
60
+ /**
61
+ * Cross-history retrieval. The `intent` mirrors the shape agents use
62
+ * for declarative retrieval (`packages/agents/src/retrieval.ts`):
63
+ *
64
+ * - `mode: 'list'` — plain scoped list, no query needed.
65
+ * - `mode: 'keyword'` — full-text keyword search.
66
+ * - `mode: 'semantic'` — vector cosine similarity. Requires an
67
+ * embedding registry in the binding; if absent, the binding
68
+ * MUST return `{ kind: 'embedding-unavailable' }` so the route
69
+ * can respond `400 bad-input`.
70
+ * - `mode: 'both'` — keyword + semantic union, dedup by fact id.
71
+ *
72
+ * Semantic modes MAY accept `embeddingModel` on the intent to select
73
+ * a specific registered provider; omit to fall back to the sole one.
74
+ */
75
+ retrieve(input: MemoryRetrieveInput): Promise<MemoryRetrieveOutcome>;
76
+ }
77
+ export interface MemoryListFactsInput {
78
+ readonly tenantId: TenantId;
79
+ readonly limit: number;
80
+ readonly cursor?: Cursor;
81
+ /** Exact match on `Fact.type`. Undefined = no type filter. */
82
+ readonly type?: string;
83
+ /**
84
+ * Partial `MemoryScope` filter from the memory subsystem — the
85
+ * flat-struct memory scope (tenantId + optional userId / orgId /
86
+ * projectId / threadId / sessionId). Every provided key must match.
87
+ */
88
+ readonly scope?: Partial<MemoryScope>;
89
+ /**
90
+ * Narrow the list to a specific scope using the platform-wide
91
+ * discriminated `Scope` primitive from `@kindgi/platform`.
92
+ * Absent = no scope narrow (return every row in the tenant the
93
+ * caller can see — admin/audit default).
94
+ *
95
+ * Content-scoped semantics (this binding — memory facts attribute
96
+ * to the project via `Scope.projectId`):
97
+ * - `{ kind: 'project', projectId }` — rows in that project.
98
+ * - `{ kind: 'org', orgId }` — rows in every project belonging to
99
+ * that org.
100
+ * - `{ kind: 'tenant', tenantId }` — every row in the tenant.
101
+ *
102
+ * Content rows always belong to a project, so `inherit` has no
103
+ * effect here.
104
+ *
105
+ * The `scope` field above and `platformScope` are additive filters —
106
+ * pass either, or both (AND-composed).
107
+ */
108
+ readonly platformScope?: PlatformScope;
109
+ /**
110
+ * `false` = literal-at-this-scope only (admin/audit view).
111
+ * `true` (default) = inheritance walk (user-facing view).
112
+ * No-op for content-scoped bindings (rows only exist at
113
+ * project-level — there is no upward hierarchy to walk). Kept for
114
+ * uniformity: scope-aware bindings share one filter shape.
115
+ */
116
+ readonly inherit?: boolean;
117
+ }
118
+ export interface MemoryFactPage {
119
+ readonly data: readonly Fact[];
120
+ readonly nextCursor?: Cursor;
121
+ }
122
+ export interface MemoryGetFactInput {
123
+ readonly tenantId: TenantId;
124
+ readonly factId: FactId;
125
+ }
126
+ export interface MemoryWriteFactInput {
127
+ /**
128
+ * The caller's tenant (from the token) — the tenant the fact is written
129
+ * to. The route rejects a `scope.tenantId` that differs from it, and an
130
+ * implementation must write under `tenantId`, never a tenant taken
131
+ * from `scope`.
132
+ */
133
+ readonly tenantId: TenantId;
134
+ readonly type: string;
135
+ readonly scope: MemoryScope;
136
+ readonly content: unknown;
137
+ readonly retention?: Retention;
138
+ readonly contentHash?: string;
139
+ }
140
+ export type MemoryWriteFactOutcome = {
141
+ readonly kind: 'ok';
142
+ readonly fact: Fact;
143
+ } | {
144
+ /**
145
+ * The type declared semantic indexing but the binding has no
146
+ * embedding registry (or the registry resolves no provider).
147
+ * Route maps to `400 bad-input`.
148
+ */
149
+ readonly kind: 'embedding-unavailable';
150
+ readonly message: string;
151
+ } | {
152
+ /** Any other write failure — persistence error, invalid content, etc. */
153
+ readonly kind: 'error';
154
+ readonly code: string;
155
+ readonly message: string;
156
+ };
157
+ export interface MemorySupersedeFactInput {
158
+ readonly tenantId: TenantId;
159
+ readonly factId: FactId;
160
+ }
161
+ export interface MemorySupersedeFactOutcome {
162
+ readonly superseded: boolean;
163
+ }
164
+ /**
165
+ * Retrieval intent shape used on the wire. Mirrors the agent-side
166
+ * `RetrievalIntent` in `packages/agents/src/types.ts` but widened to
167
+ * accept explicit filters + limits — the agent path derives filters
168
+ * from `Conversation` context, while the direct-HTTP path takes them
169
+ * verbatim from the request body.
170
+ */
171
+ export interface MemoryRetrieveIntent {
172
+ readonly mode: 'list' | 'keyword' | 'semantic' | 'both';
173
+ /**
174
+ * Freeform text query. Required for `keyword` / `semantic` / `both`;
175
+ * ignored for `list`.
176
+ */
177
+ readonly query?: string;
178
+ /**
179
+ * Fact type filter. Passed through to the binding as a single-type
180
+ * lookup; multi-type queries call `retrieve` per type today.
181
+ */
182
+ readonly type?: string;
183
+ /** Partial scope predicate. */
184
+ readonly scope?: Partial<MemoryScope>;
185
+ readonly limit?: number;
186
+ /** Selects a specific embedding provider registered on the binding. */
187
+ readonly embeddingModel?: string;
188
+ }
189
+ export interface MemoryRetrieveInput {
190
+ readonly tenantId: TenantId;
191
+ readonly intent: MemoryRetrieveIntent;
192
+ }
193
+ export interface MemoryRetrievalHit {
194
+ readonly fact: Fact;
195
+ readonly score?: number;
196
+ }
197
+ export type MemoryRetrieveOutcome = {
198
+ readonly kind: 'ok';
199
+ readonly results: readonly MemoryRetrievalHit[];
200
+ } | {
201
+ /** Semantic mode requested but no embedding provider bound. */
202
+ readonly kind: 'embedding-unavailable';
203
+ readonly message: string;
204
+ } | {
205
+ readonly kind: 'error';
206
+ readonly code: string;
207
+ readonly message: string;
208
+ };
209
+ //# sourceMappingURL=memory-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-binding.d.ts","sourceRoot":"","sources":["../src/memory-binding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ export {};
4
+ //# sourceMappingURL=memory-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-binding.js","sourceRoot":"","sources":["../src/memory-binding.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC"}
@@ -0,0 +1,168 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { ReviewerRole } from '@kindgi/authz';
3
+ import type { ApiTokenId, SessionId, TenantId, UserId } from '@kindgi/types';
4
+ import type { SigningKeyBinding } from '@kindgi/crypto';
5
+ import type { SessionStoreBinding } from '../session-store-binding.js';
6
+ /**
7
+ * Resolve an API token → tenant identity. For static bearer tokens this
8
+ * is a caller-injected function: the platform's actual token store (auth
9
+ * service, database, …) plugs in. Signature stays stable across
10
+ * implementations.
11
+ *
12
+ * Return `null` for missing / expired / revoked tokens; the middleware
13
+ * translates to 401 with a specific error code.
14
+ */
15
+ export type TokenResolver = (token: string) => Promise<TokenResolution | null>;
16
+ export interface TokenResolution {
17
+ readonly tenantId: TenantId;
18
+ /**
19
+ * Optional expiration; if set and in the past, the middleware treats
20
+ * as expired even if the resolver returned a value.
21
+ */
22
+ readonly expiresAt?: Date;
23
+ /** Optional revocation marker; `true` → 401 auth-revoked. */
24
+ readonly revoked?: boolean;
25
+ /**
26
+ * Optional reviewer role granted to this token. When present, the
27
+ * middleware surfaces it as `c.get('reviewerRole')` and approvals
28
+ * routes gate visibility / decisions on the `standard < senior < admin`
29
+ * hierarchy. Absent for tokens that were never provisioned with a
30
+ * reviewer role — such tokens can still hit `/v1/runs` etc., but any
31
+ * approvals route returns `403 permission-denied`.
32
+ */
33
+ readonly reviewerRole?: ReviewerRole;
34
+ /**
35
+ * Optional user identity behind the token. Approvals routes forward
36
+ * this to a `ReviewerBinding` to translate `UserId → ReviewerId`
37
+ * before calling `hitl.submitReview` (which needs the reviewer id).
38
+ */
39
+ readonly userId?: UserId;
40
+ /**
41
+ * The id of a durable API key (`POST /v1/tokens`). The caller is then
42
+ * the key's service account (`service_account:<tokenId>`), not a user;
43
+ * the middleware surfaces it as `c.get('tokenId')`.
44
+ */
45
+ readonly tokenId?: ApiTokenId;
46
+ /**
47
+ * Optional session id. Populated by the session-token verifier path
48
+ * (`kgi_sk_*` tokens) so `/v1/identity/whoami` and `/v1/auth/logout`
49
+ * can introspect / revoke the caller's own session without a second
50
+ * lookup. Absent for static bearer tokens.
51
+ */
52
+ readonly sessionId?: SessionId;
53
+ /**
54
+ * Optional identity-provider id that authenticated the caller. Only
55
+ * populated by session-token verification.
56
+ */
57
+ readonly providerId?: string;
58
+ /**
59
+ * Optional OAuth scopes granted to the session. Only populated by
60
+ * session-token verification.
61
+ */
62
+ readonly scopes?: readonly string[];
63
+ /**
64
+ * Optional last-observed-activity timestamp. Populated by
65
+ * `resolveSessionToken` when the session-store adapter carries
66
+ * `lastActiveAt` on the row. Used by the middleware to enforce the
67
+ * `inactivityTimeoutMs` policy. Absent → inactivity check is
68
+ * skipped.
69
+ */
70
+ readonly lastActiveAt?: Date;
71
+ /**
72
+ * Optional flag set by `resolveSessionToken` when the session was
73
+ * revoked specifically via rotation (`POST /v1/auth/refresh`). The
74
+ * middleware maps this to `401 refresh-token-invalid` instead of
75
+ * the generic `401 auth-revoked`, matching OAuth 2.1 BCP refresh-
76
+ * token-reuse semantics.
77
+ */
78
+ readonly rotated?: boolean;
79
+ /**
80
+ * Optional framework capabilities granted to the bearer. Route
81
+ * handlers gate write / reveal ops on
82
+ * specific capability strings (`env:write`, `secrets:write`,
83
+ * `secrets:rotate`, `secrets:revoke`, `secrets:revoke:hard`,
84
+ * `secrets:reveal`, `kindgi:system`). Callers that plug their
85
+ * own resolver populate this list from their token store; deployments
86
+ * without capability data leave it absent — routes that require a
87
+ * capability then return 403 `permission-denied`.
88
+ *
89
+ * Kindgi's stance: fail-closed on writes when the capability is
90
+ * unset (a token without an explicit `secrets:write` claim cannot
91
+ * mutate the secrets store). Deployments that want any authenticated
92
+ * bearer to be able to write grant the capability on every token.
93
+ */
94
+ readonly capabilities?: readonly string[];
95
+ }
96
+ /**
97
+ * Session-token prefix. Framework-issued opaque tokens minted by
98
+ * `POST /v1/auth/callback/:providerId` carry this prefix so the auth
99
+ * middleware can route them to the session store instead of the caller-
100
+ * plugged `TokenResolver`. Distinct prefix means a static bearer token
101
+ * and a session token can coexist byte-shape-identical on the wire.
102
+ */
103
+ export declare const SESSION_TOKEN_PREFIX: "kgi_sk_";
104
+ /**
105
+ * Compose the on-wire session token from a `SessionId`. Session tokens
106
+ * are opaque to clients — the shape below is a framework convention,
107
+ * not part of the wire contract. Do NOT parse it in downstream code
108
+ * outside the middleware.
109
+ */
110
+ export declare function encodeSessionToken(sessionId: SessionId): string;
111
+ /**
112
+ * Optional wiring for the session-token flavor. Provided to the
113
+ * middleware via `bearerAuthMiddleware(resolveToken, { sessionStore })`
114
+ * when the deployment mounts `SessionStoreBinding`. Absent → session-
115
+ * shape tokens fall through to `TokenResolver` (which will typically
116
+ * `null` them → 401 auth-missing) so a deployment without a session
117
+ * store still behaves consistently.
118
+ */
119
+ export interface BearerAuthMiddlewareOptions {
120
+ readonly sessionStore?: SessionStoreBinding;
121
+ /**
122
+ * Inactivity timeout — sessions whose `lastActiveAt` is older than
123
+ * `Date.now() - inactivityTimeoutMs` are rejected with 401
124
+ * `session-inactive`. Absent → inactivity enforcement disabled
125
+ * (only absolute TTL applies).
126
+ *
127
+ * Sensible default: 4 hours (`4 * 60 * 60 * 1000`). Deployments
128
+ * customize via `CreateAppInput.session.inactivityTimeout`.
129
+ */
130
+ readonly inactivityTimeoutMs?: number;
131
+ /**
132
+ * How often (per session) the middleware should call
133
+ * `sessionStore.touch` to bump `lastActiveAt`. Higher throttle ⇒
134
+ * fewer writes but coarser inactivity enforcement. Defaults to 60s.
135
+ */
136
+ readonly touchThrottleMs?: number;
137
+ /**
138
+ * Accept public run tokens (`kgi_pt_…`), verified against
139
+ * `signingKey`, on the routes `isAllowed` admits (every other route
140
+ * answers 403). Absent → such tokens are not recognized (401).
141
+ */
142
+ readonly publicRunTokens?: {
143
+ readonly signingKey: SigningKeyBinding;
144
+ readonly isAllowed: (method: string, path: string) => boolean;
145
+ };
146
+ }
147
+ /**
148
+ * Bearer-token middleware. Fails 401 on missing / malformed / expired /
149
+ * revoked. On success, sets `c.set('tenantId', tenantId)` for downstream
150
+ * handlers.
151
+ *
152
+ * Two token flavors are accepted:
153
+ * - `kgi_sk_<sessionId>` — framework-issued OAuth session tokens.
154
+ * Verified via `sessionStore.get`; expiration + revocation are pulled
155
+ * from the session row.
156
+ * - anything else — caller-plugged static bearer tokens. Verified via
157
+ * `resolveToken`. Byte-shape-identical with the session-less contract.
158
+ */
159
+ export declare function bearerAuthMiddleware(resolve: TokenResolver, options?: BearerAuthMiddlewareOptions): MiddlewareHandler;
160
+ /**
161
+ * Sentinel `tenantId` value the middleware passes to
162
+ * `SessionStoreBinding.get` when it needs to look up a session by its
163
+ * id without knowing the tenant in advance. Session-store adapters
164
+ * MUST honor this by skipping the tenant filter — the tenant is not
165
+ * known until the session row has been read.
166
+ */
167
+ export declare const MULTI_TENANT_LOOKUP: TenantId;
168
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAW,iBAAiB,EAAQ,MAAM,MAAM,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAIxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;AAE/E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAG,SAAkB,CAAC;AAEvD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAE/D;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC;IAC5C;;;;;;;;OAQG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE;QACzB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;QACvC,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;KAC/D,CAAC;CACH;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,2BAAgC,GACxC,iBAAiB,CA+JnB;AAiDD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAA0D,QAAQ,CAAC"}
@@ -0,0 +1,247 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { statusFor, toWireError } from '../errors.js';
4
+ import { PUBLIC_RUN_TOKEN_PREFIX, verifyPublicRunToken } from '../public-run-token.js';
5
+ /**
6
+ * Session-token prefix. Framework-issued opaque tokens minted by
7
+ * `POST /v1/auth/callback/:providerId` carry this prefix so the auth
8
+ * middleware can route them to the session store instead of the caller-
9
+ * plugged `TokenResolver`. Distinct prefix means a static bearer token
10
+ * and a session token can coexist byte-shape-identical on the wire.
11
+ */
12
+ export const SESSION_TOKEN_PREFIX = 'kgi_sk_';
13
+ /**
14
+ * Compose the on-wire session token from a `SessionId`. Session tokens
15
+ * are opaque to clients — the shape below is a framework convention,
16
+ * not part of the wire contract. Do NOT parse it in downstream code
17
+ * outside the middleware.
18
+ */
19
+ export function encodeSessionToken(sessionId) {
20
+ return `${SESSION_TOKEN_PREFIX}${sessionId}`;
21
+ }
22
+ const DEFAULT_TOUCH_THROTTLE_MS = 60_000;
23
+ /**
24
+ * Bearer-token middleware. Fails 401 on missing / malformed / expired /
25
+ * revoked. On success, sets `c.set('tenantId', tenantId)` for downstream
26
+ * handlers.
27
+ *
28
+ * Two token flavors are accepted:
29
+ * - `kgi_sk_<sessionId>` — framework-issued OAuth session tokens.
30
+ * Verified via `sessionStore.get`; expiration + revocation are pulled
31
+ * from the session row.
32
+ * - anything else — caller-plugged static bearer tokens. Verified via
33
+ * `resolveToken`. Byte-shape-identical with the session-less contract.
34
+ */
35
+ export function bearerAuthMiddleware(resolve, options = {}) {
36
+ const { sessionStore, inactivityTimeoutMs } = options;
37
+ const touchThrottleMs = options.touchThrottleMs ?? DEFAULT_TOUCH_THROTTLE_MS;
38
+ // Per-process throttle bucket: session id → last touch millis.
39
+ // A shared Map is fine — session ids are opaque strings and the
40
+ // bucket is bounded by the number of active sessions the process
41
+ // has recently observed.
42
+ const touchBucket = new Map();
43
+ return async (c, next) => {
44
+ const requestId = c.get('requestId');
45
+ const header = c.req.header('authorization');
46
+ if (header === undefined || header.length === 0) {
47
+ const body = toWireError({ code: 'auth-missing', message: 'Authorization header is required' }, requestId);
48
+ return c.json(body, statusFor('auth-missing'));
49
+ }
50
+ const match = /^Bearer\s+(.+)$/i.exec(header);
51
+ if (match === null) {
52
+ const body = toWireError({
53
+ code: 'auth-missing',
54
+ message: 'Authorization header must be "Bearer <token>"',
55
+ }, requestId);
56
+ return c.json(body, statusFor('auth-missing'));
57
+ }
58
+ const token = match[1]?.trim() ?? '';
59
+ if (token.length === 0) {
60
+ const body = toWireError({ code: 'auth-missing', message: 'Bearer token is empty' }, requestId);
61
+ return c.json(body, statusFor('auth-missing'));
62
+ }
63
+ if (token.startsWith(PUBLIC_RUN_TOKEN_PREFIX)) {
64
+ return authenticatePublicRunToken(c, next, token, requestId, options.publicRunTokens);
65
+ }
66
+ const isSessionToken = sessionStore !== undefined && token.startsWith(SESSION_TOKEN_PREFIX);
67
+ const resolution = isSessionToken
68
+ ? await resolveSessionToken(sessionStore, token)
69
+ : await resolve(token);
70
+ if (resolution === null) {
71
+ const body = toWireError({ code: 'auth-missing', message: 'Bearer token is not recognized' }, requestId);
72
+ return c.json(body, statusFor('auth-missing'));
73
+ }
74
+ if (resolution.revoked === true) {
75
+ // Rotated sessions surface as `refresh-token-invalid` — OAuth 2.1
76
+ // BCP reuse detection. The old session token is no longer valid,
77
+ // but the semantic distinction from an explicit revoke matters
78
+ // to compliant clients (they retry with the fresh token instead
79
+ // of prompting the user to re-authenticate).
80
+ if (resolution.rotated === true) {
81
+ const body = toWireError({
82
+ code: 'refresh-token-invalid',
83
+ message: 'Session token was rotated — retry with the fresh token from the last refresh',
84
+ }, requestId);
85
+ return c.json(body, statusFor('refresh-token-invalid'));
86
+ }
87
+ const body = toWireError({ code: 'auth-revoked', message: 'Bearer token has been revoked' }, requestId);
88
+ return c.json(body, statusFor('auth-revoked'));
89
+ }
90
+ if (resolution.expiresAt !== undefined && resolution.expiresAt.getTime() < Date.now()) {
91
+ // Session tokens report `session-expired` so callers can
92
+ // distinguish absolute session TTL from bearer-token expiry.
93
+ const expiredCode = isSessionToken ? 'session-expired' : 'auth-expired';
94
+ const expiredMsg = isSessionToken
95
+ ? 'Session has expired (absolute TTL reached)'
96
+ : 'Bearer token has expired';
97
+ const body = toWireError({ code: expiredCode, message: expiredMsg }, requestId);
98
+ return c.json(body, statusFor(expiredCode));
99
+ }
100
+ // Inactivity timeout enforcement. Only applies when the deployment
101
+ // opted in via `inactivityTimeoutMs` AND the token is a session
102
+ // token AND the store populated `lastActiveAt`. Skipping the check
103
+ // preserves the default contract for deployments that don't wire
104
+ // the config.
105
+ if (isSessionToken &&
106
+ inactivityTimeoutMs !== undefined &&
107
+ inactivityTimeoutMs > 0 &&
108
+ resolution.lastActiveAt !== undefined) {
109
+ const cutoff = Date.now() - inactivityTimeoutMs;
110
+ if (resolution.lastActiveAt.getTime() < cutoff) {
111
+ const body = toWireError({
112
+ code: 'session-inactive',
113
+ message: 'Session has been idle beyond the inactivity timeout',
114
+ }, requestId);
115
+ return c.json(body, statusFor('session-inactive'));
116
+ }
117
+ }
118
+ c.set('tenantId', resolution.tenantId);
119
+ if (resolution.reviewerRole !== undefined) {
120
+ c.set('reviewerRole', resolution.reviewerRole);
121
+ }
122
+ if (resolution.userId !== undefined) {
123
+ c.set('userId', resolution.userId);
124
+ }
125
+ if (resolution.tokenId !== undefined) {
126
+ c.set('tokenId', resolution.tokenId);
127
+ }
128
+ if (resolution.sessionId !== undefined) {
129
+ c.set('sessionId', resolution.sessionId);
130
+ }
131
+ if (resolution.providerId !== undefined) {
132
+ c.set('providerId', resolution.providerId);
133
+ }
134
+ if (resolution.scopes !== undefined) {
135
+ c.set('scopes', resolution.scopes);
136
+ }
137
+ if (resolution.capabilities !== undefined) {
138
+ c.set('capabilities', resolution.capabilities);
139
+ }
140
+ // Bump `lastActiveAt` (throttled) so the inactivity timeout has
141
+ // a fresh signal to compare against. Only meaningful for session
142
+ // tokens with a wired `touch()`; bearer tokens are skipped.
143
+ if (isSessionToken && sessionStore?.touch !== undefined && resolution.sessionId !== undefined) {
144
+ const sid = resolution.sessionId;
145
+ const last = touchBucket.get(sid) ?? 0;
146
+ const now = Date.now();
147
+ if (now - last >= touchThrottleMs) {
148
+ touchBucket.set(sid, now);
149
+ // Fire-and-forget; we don't want the write path to hold the
150
+ // request. Adapter errors surface via observability, not the
151
+ // hot path (the next check catches a genuinely stale row).
152
+ void sessionStore
153
+ .touch({
154
+ tenantId: resolution.tenantId,
155
+ sessionId: resolution.sessionId,
156
+ at: new Date(now),
157
+ })
158
+ .catch(() => {
159
+ // Best-effort — the next request retries.
160
+ });
161
+ }
162
+ }
163
+ await next();
164
+ return;
165
+ };
166
+ }
167
+ /**
168
+ * Session-token verification path. Distinct from `TokenResolver` because
169
+ * a session carries structured OAuth context (userId + providerId +
170
+ * scopes + expiration + revocation) that the store returns natively —
171
+ * we don't want to squeeze that shape through the resolver contract.
172
+ *
173
+ * Session-token tenant scoping: the stored session is the source of
174
+ * truth for `tenantId`. We look up ACROSS tenants here — the resolved
175
+ * `tenantId` is whatever the session was written under, so everything
176
+ * downstream is scoped to that tenant only. A stolen session token still
177
+ * can't cross tenants because the session it points to belongs to
178
+ * exactly one tenant.
179
+ *
180
+ * Since `SessionStoreBinding.get` requires `tenantId`, the lookup is:
181
+ * extract `sessionId` from the token, then call
182
+ * `sessionStore.get({ tenantId: MULTI_TENANT_LOOKUP, sessionId })`.
183
+ * Session-store implementations MUST recognize the `MULTI_TENANT_LOOKUP`
184
+ * sentinel and skip the tenant filter; the `tenantId` on the stored
185
+ * session is authoritative.
186
+ */
187
+ async function resolveSessionToken(sessionStore, token) {
188
+ const sessionIdStr = token.slice(SESSION_TOKEN_PREFIX.length);
189
+ if (sessionIdStr.length === 0)
190
+ return null;
191
+ const sessionId = sessionIdStr;
192
+ const session = await sessionStore.get({
193
+ tenantId: MULTI_TENANT_LOOKUP,
194
+ sessionId,
195
+ });
196
+ if (session === null)
197
+ return null;
198
+ return {
199
+ tenantId: session.tenantId,
200
+ userId: session.userId,
201
+ sessionId: session.id,
202
+ providerId: session.providerId,
203
+ scopes: session.scopes,
204
+ expiresAt: new Date(session.expiresAt),
205
+ revoked: session.revokedAt !== undefined,
206
+ ...(session.rotatedAt !== undefined && { rotated: true }),
207
+ ...(session.lastActiveAt !== undefined && {
208
+ lastActiveAt: new Date(session.lastActiveAt),
209
+ }),
210
+ };
211
+ }
212
+ /**
213
+ * Sentinel `tenantId` value the middleware passes to
214
+ * `SessionStoreBinding.get` when it needs to look up a session by its
215
+ * id without knowing the tenant in advance. Session-store adapters
216
+ * MUST honor this by skipping the tenant filter — the tenant is not
217
+ * known until the session row has been read.
218
+ */
219
+ export const MULTI_TENANT_LOOKUP = '__kindgi_session_multi_tenant_lookup__';
220
+ /**
221
+ * A public run token: verify it, admit only the routes it may use, and
222
+ * mark the request so the progress routes check it against the runs
223
+ * it names.
224
+ */
225
+ async function authenticatePublicRunToken(c, next, token, requestId, config) {
226
+ const verified = config === undefined
227
+ ? { kind: 'err', reason: 'unknown-key' }
228
+ : verifyPublicRunToken(token, { signingKey: config.signingKey });
229
+ if (verified.kind === 'err') {
230
+ const expired = verified.reason === 'expired';
231
+ const code = expired ? 'auth-expired' : 'auth-missing';
232
+ const message = expired ? 'Public run token has expired' : 'Bearer token is not recognized';
233
+ return c.json(toWireError({ code, message }, requestId), statusFor(code));
234
+ }
235
+ if (config === undefined || !config.isAllowed(c.req.method, c.req.path)) {
236
+ return c.json(toWireError({
237
+ code: 'permission-denied',
238
+ message: 'A public run token can only follow the runs it names: GET /v1/runs/{runId}/progress and GET /v1/runs/{runId}/progress/stream',
239
+ }, requestId), statusFor('permission-denied'));
240
+ }
241
+ c.set('tenantId', verified.claims.tenantId);
242
+ c.set('tokenKind', 'public-run');
243
+ c.set('publicRunIds', verified.claims.runIds);
244
+ await next();
245
+ return undefined;
246
+ }
247
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}