@kindgi/api 0.1.4 → 0.1.5

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 (516) hide show
  1. package/dist/agent-binding.d.ts +13 -0
  2. package/dist/agent-binding.d.ts.map +1 -1
  3. package/dist/agent-pins.d.ts.map +1 -1
  4. package/dist/agent-pins.js +18 -2
  5. package/dist/agent-pins.js.map +1 -1
  6. package/dist/app.d.ts +110 -17
  7. package/dist/app.d.ts.map +1 -1
  8. package/dist/app.js +163 -35
  9. package/dist/app.js.map +1 -1
  10. package/dist/block-publish.d.ts +56 -0
  11. package/dist/block-publish.d.ts.map +1 -0
  12. package/dist/block-publish.js +132 -0
  13. package/dist/block-publish.js.map +1 -0
  14. package/dist/caller.d.ts +24 -0
  15. package/dist/caller.d.ts.map +1 -0
  16. package/dist/caller.js +47 -0
  17. package/dist/caller.js.map +1 -0
  18. package/dist/capability-binding.d.ts +11 -0
  19. package/dist/capability-binding.d.ts.map +1 -1
  20. package/dist/cost-binding.d.ts +19 -0
  21. package/dist/cost-binding.d.ts.map +1 -1
  22. package/dist/cost-binding.js.map +1 -1
  23. package/dist/derive-agent-version.d.ts +7 -0
  24. package/dist/derive-agent-version.d.ts.map +1 -1
  25. package/dist/derive-agent-version.js +4 -0
  26. package/dist/derive-agent-version.js.map +1 -1
  27. package/dist/errors.d.ts.map +1 -1
  28. package/dist/errors.js +75 -7
  29. package/dist/errors.js.map +1 -1
  30. package/dist/eval-case-binding.d.ts +16 -4
  31. package/dist/eval-case-binding.d.ts.map +1 -1
  32. package/dist/eval-run-binding.d.ts +31 -0
  33. package/dist/eval-run-binding.d.ts.map +1 -1
  34. package/dist/eval-run-dispatcher.d.ts +7 -0
  35. package/dist/eval-run-dispatcher.d.ts.map +1 -1
  36. package/dist/eval-run-dispatcher.js.map +1 -1
  37. package/dist/eval-sample.d.ts +11 -0
  38. package/dist/eval-sample.d.ts.map +1 -0
  39. package/dist/eval-sample.js +34 -0
  40. package/dist/eval-sample.js.map +1 -0
  41. package/dist/eval-suite-binding.d.ts +13 -0
  42. package/dist/eval-suite-binding.d.ts.map +1 -1
  43. package/dist/eval-suite-binding.js.map +1 -1
  44. package/dist/flow-binding.d.ts +18 -0
  45. package/dist/flow-binding.d.ts.map +1 -1
  46. package/dist/flow-pins.d.ts.map +1 -1
  47. package/dist/flow-pins.js +18 -2
  48. package/dist/flow-pins.js.map +1 -1
  49. package/dist/gate.d.ts.map +1 -1
  50. package/dist/gate.js +25 -0
  51. package/dist/gate.js.map +1 -1
  52. package/dist/handler-binding.d.ts +32 -0
  53. package/dist/handler-binding.d.ts.map +1 -1
  54. package/dist/hitl-binding.d.ts +23 -0
  55. package/dist/hitl-binding.d.ts.map +1 -1
  56. package/dist/identity-directory-binding.d.ts +82 -4
  57. package/dist/identity-directory-binding.d.ts.map +1 -1
  58. package/dist/identity-provider-binding.d.ts +197 -17
  59. package/dist/identity-provider-binding.d.ts.map +1 -1
  60. package/dist/improvement-pass-binding.d.ts +196 -0
  61. package/dist/improvement-pass-binding.d.ts.map +1 -0
  62. package/dist/improvement-pass-binding.js +9 -0
  63. package/dist/improvement-pass-binding.js.map +1 -0
  64. package/dist/index.d.ts +35 -17
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +11 -3
  67. package/dist/index.js.map +1 -1
  68. package/dist/judged-dispatcher.d.ts +25 -4
  69. package/dist/judged-dispatcher.d.ts.map +1 -1
  70. package/dist/judged-dispatcher.js +43 -6
  71. package/dist/judged-dispatcher.js.map +1 -1
  72. package/dist/judgment-binding.d.ts +25 -1
  73. package/dist/judgment-binding.d.ts.map +1 -1
  74. package/dist/mcp-endpoint-binding.d.ts +7 -0
  75. package/dist/mcp-endpoint-binding.d.ts.map +1 -1
  76. package/dist/memory-binding.d.ts +124 -17
  77. package/dist/memory-binding.d.ts.map +1 -1
  78. package/dist/memory-erasure-binding.d.ts +145 -0
  79. package/dist/memory-erasure-binding.d.ts.map +1 -0
  80. package/dist/memory-erasure-binding.js +4 -0
  81. package/dist/memory-erasure-binding.js.map +1 -0
  82. package/dist/middleware/auth.d.ts +66 -13
  83. package/dist/middleware/auth.d.ts.map +1 -1
  84. package/dist/middleware/auth.js +150 -50
  85. package/dist/middleware/auth.js.map +1 -1
  86. package/dist/middleware/authorize.d.ts +9 -0
  87. package/dist/middleware/authorize.d.ts.map +1 -1
  88. package/dist/middleware/authorize.js +122 -4
  89. package/dist/middleware/authorize.js.map +1 -1
  90. package/dist/middleware/error-mapper.d.ts +5 -0
  91. package/dist/middleware/error-mapper.d.ts.map +1 -1
  92. package/dist/middleware/error-mapper.js +14 -1
  93. package/dist/middleware/error-mapper.js.map +1 -1
  94. package/dist/middleware/idempotency.d.ts +70 -5
  95. package/dist/middleware/idempotency.d.ts.map +1 -1
  96. package/dist/middleware/idempotency.js +174 -41
  97. package/dist/middleware/idempotency.js.map +1 -1
  98. package/dist/middleware/key-project.d.ts +17 -0
  99. package/dist/middleware/key-project.d.ts.map +1 -0
  100. package/dist/middleware/key-project.js +75 -0
  101. package/dist/middleware/key-project.js.map +1 -0
  102. package/dist/middleware/principal.d.ts.map +1 -1
  103. package/dist/middleware/principal.js +9 -5
  104. package/dist/middleware/principal.js.map +1 -1
  105. package/dist/middleware/project-ref.d.ts.map +1 -1
  106. package/dist/middleware/project-ref.js +3 -0
  107. package/dist/middleware/project-ref.js.map +1 -1
  108. package/dist/openapi/generate.d.ts.map +1 -1
  109. package/dist/openapi/generate.js +5 -2
  110. package/dist/openapi/generate.js.map +1 -1
  111. package/dist/openapi/operations.d.ts.map +1 -1
  112. package/dist/openapi/operations.js +919 -140
  113. package/dist/openapi/operations.js.map +1 -1
  114. package/dist/openapi/schemas.d.ts +90 -13
  115. package/dist/openapi/schemas.d.ts.map +1 -1
  116. package/dist/openapi/schemas.js +2081 -359
  117. package/dist/openapi/schemas.js.map +1 -1
  118. package/dist/person-grants-binding.d.ts +77 -0
  119. package/dist/person-grants-binding.d.ts.map +1 -0
  120. package/dist/person-grants-binding.js +4 -0
  121. package/dist/person-grants-binding.js.map +1 -0
  122. package/dist/proposal-service.d.ts +121 -0
  123. package/dist/proposal-service.d.ts.map +1 -0
  124. package/dist/proposal-service.js +447 -0
  125. package/dist/proposal-service.js.map +1 -0
  126. package/dist/proposal-status.d.ts +60 -0
  127. package/dist/proposal-status.d.ts.map +1 -0
  128. package/dist/proposal-status.js +109 -0
  129. package/dist/proposal-status.js.map +1 -0
  130. package/dist/provider-binding.d.ts +10 -0
  131. package/dist/provider-binding.d.ts.map +1 -1
  132. package/dist/publish-refused.d.ts +28 -3
  133. package/dist/publish-refused.d.ts.map +1 -1
  134. package/dist/publish-refused.js +24 -3
  135. package/dist/publish-refused.js.map +1 -1
  136. package/dist/routes/adapters.d.ts +2 -1
  137. package/dist/routes/adapters.d.ts.map +1 -1
  138. package/dist/routes/adapters.js +3 -1
  139. package/dist/routes/adapters.js.map +1 -1
  140. package/dist/routes/agent-releases.d.ts +55 -3
  141. package/dist/routes/agent-releases.d.ts.map +1 -1
  142. package/dist/routes/agent-releases.js +85 -55
  143. package/dist/routes/agent-releases.js.map +1 -1
  144. package/dist/routes/agents.d.ts +12 -1
  145. package/dist/routes/agents.d.ts.map +1 -1
  146. package/dist/routes/agents.js +100 -2
  147. package/dist/routes/agents.js.map +1 -1
  148. package/dist/routes/approvals.d.ts +15 -3
  149. package/dist/routes/approvals.d.ts.map +1 -1
  150. package/dist/routes/approvals.js +133 -122
  151. package/dist/routes/approvals.js.map +1 -1
  152. package/dist/routes/artifacts.d.ts +25 -3
  153. package/dist/routes/artifacts.d.ts.map +1 -1
  154. package/dist/routes/artifacts.js +116 -7
  155. package/dist/routes/artifacts.js.map +1 -1
  156. package/dist/routes/auth.d.ts +25 -1
  157. package/dist/routes/auth.d.ts.map +1 -1
  158. package/dist/routes/auth.js +655 -281
  159. package/dist/routes/auth.js.map +1 -1
  160. package/dist/routes/blocks.d.ts.map +1 -1
  161. package/dist/routes/blocks.js +2 -42
  162. package/dist/routes/blocks.js.map +1 -1
  163. package/dist/routes/capabilities.d.ts +2 -1
  164. package/dist/routes/capabilities.d.ts.map +1 -1
  165. package/dist/routes/capabilities.js +6 -1
  166. package/dist/routes/capabilities.js.map +1 -1
  167. package/dist/routes/compliance.d.ts +9 -10
  168. package/dist/routes/compliance.d.ts.map +1 -1
  169. package/dist/routes/compliance.js +42 -61
  170. package/dist/routes/compliance.js.map +1 -1
  171. package/dist/routes/conversations.d.ts +8 -1
  172. package/dist/routes/conversations.d.ts.map +1 -1
  173. package/dist/routes/conversations.js +87 -8
  174. package/dist/routes/conversations.js.map +1 -1
  175. package/dist/routes/cost.d.ts +12 -1
  176. package/dist/routes/cost.d.ts.map +1 -1
  177. package/dist/routes/cost.js +74 -3
  178. package/dist/routes/cost.js.map +1 -1
  179. package/dist/routes/denied.d.ts +11 -0
  180. package/dist/routes/denied.d.ts.map +1 -0
  181. package/dist/routes/denied.js +17 -0
  182. package/dist/routes/denied.js.map +1 -0
  183. package/dist/routes/deployments.d.ts +10 -1
  184. package/dist/routes/deployments.d.ts.map +1 -1
  185. package/dist/routes/deployments.js +171 -13
  186. package/dist/routes/deployments.js.map +1 -1
  187. package/dist/routes/eval-comparison.d.ts.map +1 -1
  188. package/dist/routes/eval-comparison.js +69 -1
  189. package/dist/routes/eval-comparison.js.map +1 -1
  190. package/dist/routes/eval-overrides.d.ts +18 -0
  191. package/dist/routes/eval-overrides.d.ts.map +1 -0
  192. package/dist/routes/eval-overrides.js +81 -0
  193. package/dist/routes/eval-overrides.js.map +1 -0
  194. package/dist/routes/eval-runs.d.ts +10 -1
  195. package/dist/routes/eval-runs.d.ts.map +1 -1
  196. package/dist/routes/eval-runs.js +66 -7
  197. package/dist/routes/eval-runs.js.map +1 -1
  198. package/dist/routes/eval-suites.d.ts.map +1 -1
  199. package/dist/routes/eval-suites.js +28 -2
  200. package/dist/routes/eval-suites.js.map +1 -1
  201. package/dist/routes/event-triggers.d.ts +5 -1
  202. package/dist/routes/event-triggers.d.ts.map +1 -1
  203. package/dist/routes/event-triggers.js +26 -3
  204. package/dist/routes/event-triggers.js.map +1 -1
  205. package/dist/routes/export-signing-keys.d.ts +12 -0
  206. package/dist/routes/export-signing-keys.d.ts.map +1 -0
  207. package/dist/routes/export-signing-keys.js +24 -0
  208. package/dist/routes/export-signing-keys.js.map +1 -0
  209. package/dist/routes/flows.d.ts.map +1 -1
  210. package/dist/routes/flows.js +9 -1
  211. package/dist/routes/flows.js.map +1 -1
  212. package/dist/routes/gate-policies.d.ts +4 -1
  213. package/dist/routes/gate-policies.d.ts.map +1 -1
  214. package/dist/routes/gate-policies.js +29 -5
  215. package/dist/routes/gate-policies.js.map +1 -1
  216. package/dist/routes/guardrails.d.ts +16 -14
  217. package/dist/routes/guardrails.d.ts.map +1 -1
  218. package/dist/routes/guardrails.js +39 -3
  219. package/dist/routes/guardrails.js.map +1 -1
  220. package/dist/routes/identity.d.ts +20 -4
  221. package/dist/routes/identity.d.ts.map +1 -1
  222. package/dist/routes/identity.js +246 -6
  223. package/dist/routes/identity.js.map +1 -1
  224. package/dist/routes/improvement-passes.d.ts +52 -0
  225. package/dist/routes/improvement-passes.d.ts.map +1 -0
  226. package/dist/routes/improvement-passes.js +449 -0
  227. package/dist/routes/improvement-passes.js.map +1 -0
  228. package/dist/routes/judged-suites.d.ts +50 -0
  229. package/dist/routes/judged-suites.d.ts.map +1 -1
  230. package/dist/routes/judged-suites.js +66 -27
  231. package/dist/routes/judged-suites.js.map +1 -1
  232. package/dist/routes/judgment-context.d.ts +18 -2
  233. package/dist/routes/judgment-context.d.ts.map +1 -1
  234. package/dist/routes/judgment-context.js +63 -5
  235. package/dist/routes/judgment-context.js.map +1 -1
  236. package/dist/routes/judgment-flow-context.d.ts.map +1 -1
  237. package/dist/routes/judgment-flow-context.js +14 -2
  238. package/dist/routes/judgment-flow-context.js.map +1 -1
  239. package/dist/routes/judgments.d.ts.map +1 -1
  240. package/dist/routes/judgments.js +8 -1
  241. package/dist/routes/judgments.js.map +1 -1
  242. package/dist/routes/mcp.d.ts.map +1 -1
  243. package/dist/routes/mcp.js +26 -1
  244. package/dist/routes/mcp.js.map +1 -1
  245. package/dist/routes/memory-access.d.ts +43 -0
  246. package/dist/routes/memory-access.d.ts.map +1 -0
  247. package/dist/routes/memory-access.js +114 -0
  248. package/dist/routes/memory-access.js.map +1 -0
  249. package/dist/routes/memory-erasures.d.ts +25 -0
  250. package/dist/routes/memory-erasures.d.ts.map +1 -0
  251. package/dist/routes/memory-erasures.js +214 -0
  252. package/dist/routes/memory-erasures.js.map +1 -0
  253. package/dist/routes/memory-parse.d.ts +38 -0
  254. package/dist/routes/memory-parse.d.ts.map +1 -0
  255. package/dist/routes/memory-parse.js +199 -0
  256. package/dist/routes/memory-parse.js.map +1 -0
  257. package/dist/routes/memory.d.ts +9 -4
  258. package/dist/routes/memory.d.ts.map +1 -1
  259. package/dist/routes/memory.js +226 -234
  260. package/dist/routes/memory.js.map +1 -1
  261. package/dist/routes/observations.d.ts +4 -1
  262. package/dist/routes/observations.d.ts.map +1 -1
  263. package/dist/routes/observations.js +8 -2
  264. package/dist/routes/observations.js.map +1 -1
  265. package/dist/routes/pagination.d.ts +7 -0
  266. package/dist/routes/pagination.d.ts.map +1 -1
  267. package/dist/routes/pagination.js +10 -0
  268. package/dist/routes/pagination.js.map +1 -1
  269. package/dist/routes/policies.d.ts +2 -1
  270. package/dist/routes/policies.d.ts.map +1 -1
  271. package/dist/routes/policies.js +3 -1
  272. package/dist/routes/policies.js.map +1 -1
  273. package/dist/routes/project-mismatch.d.ts +22 -0
  274. package/dist/routes/project-mismatch.d.ts.map +1 -0
  275. package/dist/routes/project-mismatch.js +34 -0
  276. package/dist/routes/project-mismatch.js.map +1 -0
  277. package/dist/routes/projects.d.ts +15 -4
  278. package/dist/routes/projects.d.ts.map +1 -1
  279. package/dist/routes/projects.js +100 -9
  280. package/dist/routes/projects.js.map +1 -1
  281. package/dist/routes/proposals.d.ts +25 -17
  282. package/dist/routes/proposals.d.ts.map +1 -1
  283. package/dist/routes/proposals.js +340 -507
  284. package/dist/routes/proposals.js.map +1 -1
  285. package/dist/routes/provenance.d.ts +17 -3
  286. package/dist/routes/provenance.d.ts.map +1 -1
  287. package/dist/routes/provenance.js +79 -103
  288. package/dist/routes/provenance.js.map +1 -1
  289. package/dist/routes/providers.d.ts +17 -1
  290. package/dist/routes/providers.d.ts.map +1 -1
  291. package/dist/routes/providers.js +110 -3
  292. package/dist/routes/providers.js.map +1 -1
  293. package/dist/routes/public-run-tokens.d.ts.map +1 -1
  294. package/dist/routes/public-run-tokens.js +3 -0
  295. package/dist/routes/public-run-tokens.js.map +1 -1
  296. package/dist/routes/readable-projects.d.ts +26 -0
  297. package/dist/routes/readable-projects.d.ts.map +1 -0
  298. package/dist/routes/readable-projects.js +39 -0
  299. package/dist/routes/readable-projects.js.map +1 -0
  300. package/dist/routes/runs.d.ts +10 -0
  301. package/dist/routes/runs.d.ts.map +1 -1
  302. package/dist/routes/runs.js +92 -42
  303. package/dist/routes/runs.js.map +1 -1
  304. package/dist/routes/schedules.d.ts +21 -13
  305. package/dist/routes/schedules.d.ts.map +1 -1
  306. package/dist/routes/schedules.js +416 -55
  307. package/dist/routes/schedules.js.map +1 -1
  308. package/dist/routes/segments.d.ts +2 -0
  309. package/dist/routes/segments.d.ts.map +1 -1
  310. package/dist/routes/segments.js +5 -0
  311. package/dist/routes/segments.js.map +1 -1
  312. package/dist/routes/service-accounts.d.ts +17 -0
  313. package/dist/routes/service-accounts.d.ts.map +1 -0
  314. package/dist/routes/service-accounts.js +212 -0
  315. package/dist/routes/service-accounts.js.map +1 -0
  316. package/dist/routes/sign-in-options.d.ts +50 -0
  317. package/dist/routes/sign-in-options.d.ts.map +1 -0
  318. package/dist/routes/sign-in-options.js +98 -0
  319. package/dist/routes/sign-in-options.js.map +1 -0
  320. package/dist/routes/signing-keys.d.ts +2 -1
  321. package/dist/routes/signing-keys.d.ts.map +1 -1
  322. package/dist/routes/signing-keys.js +3 -1
  323. package/dist/routes/signing-keys.js.map +1 -1
  324. package/dist/routes/tenant-access.d.ts +13 -0
  325. package/dist/routes/tenant-access.d.ts.map +1 -0
  326. package/dist/routes/tenant-access.js +26 -0
  327. package/dist/routes/tenant-access.js.map +1 -0
  328. package/dist/routes/tenant.d.ts.map +1 -1
  329. package/dist/routes/tenant.js +4 -0
  330. package/dist/routes/tenant.js.map +1 -1
  331. package/dist/routes/token-sign-in.d.ts +36 -0
  332. package/dist/routes/token-sign-in.d.ts.map +1 -0
  333. package/dist/routes/token-sign-in.js +101 -0
  334. package/dist/routes/token-sign-in.js.map +1 -0
  335. package/dist/routes/tokens.d.ts +15 -5
  336. package/dist/routes/tokens.d.ts.map +1 -1
  337. package/dist/routes/tokens.js +162 -43
  338. package/dist/routes/tokens.js.map +1 -1
  339. package/dist/routes/tools.d.ts.map +1 -1
  340. package/dist/routes/tools.js +9 -1
  341. package/dist/routes/tools.js.map +1 -1
  342. package/dist/routes/trigger-access.d.ts +29 -0
  343. package/dist/routes/trigger-access.d.ts.map +1 -0
  344. package/dist/routes/trigger-access.js +33 -0
  345. package/dist/routes/trigger-access.js.map +1 -0
  346. package/dist/routes/webhook-endpoints.d.ts +2 -1
  347. package/dist/routes/webhook-endpoints.d.ts.map +1 -1
  348. package/dist/routes/webhook-endpoints.js +11 -3
  349. package/dist/routes/webhook-endpoints.js.map +1 -1
  350. package/dist/routes/webhooks.d.ts +5 -1
  351. package/dist/routes/webhooks.d.ts.map +1 -1
  352. package/dist/routes/webhooks.js +25 -2
  353. package/dist/routes/webhooks.js.map +1 -1
  354. package/dist/run-failure.d.ts +21 -0
  355. package/dist/run-failure.d.ts.map +1 -0
  356. package/dist/run-failure.js +29 -0
  357. package/dist/run-failure.js.map +1 -0
  358. package/dist/service-account-binding.d.ts +108 -0
  359. package/dist/service-account-binding.d.ts.map +1 -0
  360. package/dist/service-account-binding.js +4 -0
  361. package/dist/service-account-binding.js.map +1 -0
  362. package/dist/session-store-binding.d.ts +61 -13
  363. package/dist/session-store-binding.d.ts.map +1 -1
  364. package/dist/signed-export.d.ts +89 -0
  365. package/dist/signed-export.d.ts.map +1 -0
  366. package/dist/signed-export.js +149 -0
  367. package/dist/signed-export.js.map +1 -0
  368. package/dist/supervisor-binding.d.ts +186 -413
  369. package/dist/supervisor-binding.d.ts.map +1 -1
  370. package/dist/testing/app-bindings.d.ts +33 -0
  371. package/dist/testing/app-bindings.d.ts.map +1 -0
  372. package/dist/testing/app-bindings.js +112 -0
  373. package/dist/testing/app-bindings.js.map +1 -0
  374. package/dist/testing/index.d.ts +11 -0
  375. package/dist/testing/index.d.ts.map +1 -0
  376. package/dist/testing/index.js +13 -0
  377. package/dist/testing/index.js.map +1 -0
  378. package/dist/testing/stub-binding.d.ts +34 -0
  379. package/dist/testing/stub-binding.d.ts.map +1 -0
  380. package/dist/testing/stub-binding.js +42 -0
  381. package/dist/testing/stub-binding.js.map +1 -0
  382. package/dist/testing/trigger-registry.d.ts +21 -0
  383. package/dist/testing/trigger-registry.d.ts.map +1 -0
  384. package/dist/testing/trigger-registry.js +206 -0
  385. package/dist/testing/trigger-registry.js.map +1 -0
  386. package/dist/token-admin.d.ts +46 -8
  387. package/dist/token-admin.d.ts.map +1 -1
  388. package/dist/token-admin.js.map +1 -1
  389. package/dist/tool-binding.d.ts +13 -0
  390. package/dist/tool-binding.d.ts.map +1 -1
  391. package/dist/trigger-binding.d.ts +2 -2
  392. package/dist/trigger-binding.d.ts.map +1 -1
  393. package/dist/trigger-binding.js +1 -1
  394. package/dist/trigger-binding.js.map +1 -1
  395. package/dist/types.d.ts +16 -0
  396. package/dist/types.d.ts.map +1 -1
  397. package/dist/webhook-endpoint-binding.d.ts +19 -3
  398. package/dist/webhook-endpoint-binding.d.ts.map +1 -1
  399. package/dist/webhook-endpoint-binding.js +1 -1
  400. package/dist/webhook-endpoint-binding.js.map +1 -1
  401. package/openapi.json +15387 -8789
  402. package/package.json +26 -22
  403. package/src/agent-binding.ts +14 -0
  404. package/src/agent-pins.ts +18 -2
  405. package/src/app.ts +366 -80
  406. package/src/block-publish.ts +181 -0
  407. package/src/caller.ts +62 -0
  408. package/src/capability-binding.ts +12 -0
  409. package/src/cost-binding.ts +19 -0
  410. package/src/derive-agent-version.ts +9 -1
  411. package/src/errors.ts +75 -7
  412. package/src/eval-case-binding.ts +17 -1
  413. package/src/eval-run-binding.ts +31 -0
  414. package/src/eval-run-dispatcher.ts +7 -0
  415. package/src/eval-sample.ts +42 -0
  416. package/src/eval-suite-binding.ts +14 -0
  417. package/src/flow-binding.ts +19 -0
  418. package/src/flow-pins.ts +18 -2
  419. package/src/gate.ts +26 -0
  420. package/src/handler-binding.ts +36 -1
  421. package/src/hitl-binding.ts +24 -0
  422. package/src/identity-directory-binding.ts +85 -4
  423. package/src/identity-provider-binding.ts +216 -21
  424. package/src/improvement-pass-binding.ts +193 -0
  425. package/src/index.ts +153 -31
  426. package/src/judged-dispatcher.ts +78 -11
  427. package/src/judgment-binding.ts +25 -1
  428. package/src/mcp-endpoint-binding.ts +7 -0
  429. package/src/memory-binding.ts +121 -17
  430. package/src/memory-erasure-binding.ts +156 -0
  431. package/src/middleware/auth.ts +228 -62
  432. package/src/middleware/authorize.ts +155 -3
  433. package/src/middleware/error-mapper.ts +15 -1
  434. package/src/middleware/idempotency.ts +230 -43
  435. package/src/middleware/key-project.ts +86 -0
  436. package/src/middleware/principal.ts +9 -5
  437. package/src/middleware/project-ref.ts +3 -0
  438. package/src/openapi/generate.ts +11 -2
  439. package/src/openapi/operations.ts +1060 -143
  440. package/src/openapi/schemas.ts +2387 -469
  441. package/src/person-grants-binding.ts +76 -0
  442. package/src/proposal-service.ts +640 -0
  443. package/src/proposal-status.ts +176 -0
  444. package/src/provider-binding.ts +10 -0
  445. package/src/publish-refused.ts +56 -9
  446. package/src/routes/adapters.ts +4 -0
  447. package/src/routes/agent-releases.ts +121 -69
  448. package/src/routes/agents.ts +128 -1
  449. package/src/routes/approvals.ts +164 -154
  450. package/src/routes/artifacts.ts +181 -11
  451. package/src/routes/auth.ts +804 -336
  452. package/src/routes/blocks.ts +2 -53
  453. package/src/routes/capabilities.ts +10 -1
  454. package/src/routes/compliance.ts +60 -99
  455. package/src/routes/conversations.ts +101 -7
  456. package/src/routes/cost.ts +110 -4
  457. package/src/routes/denied.ts +28 -0
  458. package/src/routes/deployments.ts +210 -17
  459. package/src/routes/eval-comparison.ts +81 -2
  460. package/src/routes/eval-overrides.ts +108 -0
  461. package/src/routes/eval-runs.ts +89 -6
  462. package/src/routes/eval-suites.ts +32 -2
  463. package/src/routes/event-triggers.ts +27 -3
  464. package/src/routes/export-signing-keys.ts +31 -0
  465. package/src/routes/flows.ts +12 -1
  466. package/src/routes/gate-policies.ts +37 -6
  467. package/src/routes/guardrails.ts +61 -2
  468. package/src/routes/identity.ts +328 -10
  469. package/src/routes/improvement-passes.ts +541 -0
  470. package/src/routes/judged-suites.ts +113 -43
  471. package/src/routes/judgment-context.ts +76 -5
  472. package/src/routes/judgment-flow-context.ts +16 -2
  473. package/src/routes/judgments.ts +17 -3
  474. package/src/routes/mcp.ts +29 -1
  475. package/src/routes/memory-access.ts +160 -0
  476. package/src/routes/memory-erasures.ts +240 -0
  477. package/src/routes/memory-parse.ts +250 -0
  478. package/src/routes/memory.ts +244 -286
  479. package/src/routes/observations.ts +15 -2
  480. package/src/routes/pagination.ts +12 -0
  481. package/src/routes/policies.ts +7 -1
  482. package/src/routes/project-mismatch.ts +56 -0
  483. package/src/routes/projects.ts +107 -13
  484. package/src/routes/proposals.ts +370 -611
  485. package/src/routes/provenance.ts +99 -133
  486. package/src/routes/providers.ts +142 -3
  487. package/src/routes/public-run-tokens.ts +3 -0
  488. package/src/routes/readable-projects.ts +66 -0
  489. package/src/routes/runs.ts +119 -39
  490. package/src/routes/schedules.ts +472 -60
  491. package/src/routes/segments.ts +11 -0
  492. package/src/routes/service-accounts.ts +262 -0
  493. package/src/routes/sign-in-options.ts +168 -0
  494. package/src/routes/signing-keys.ts +7 -1
  495. package/src/routes/tenant-access.ts +37 -0
  496. package/src/routes/tenant.ts +6 -0
  497. package/src/routes/token-sign-in.ts +161 -0
  498. package/src/routes/tokens.ts +172 -46
  499. package/src/routes/tools.ts +12 -1
  500. package/src/routes/trigger-access.ts +72 -0
  501. package/src/routes/webhook-endpoints.ts +15 -3
  502. package/src/routes/webhooks.ts +26 -2
  503. package/src/run-failure.ts +42 -0
  504. package/src/service-account-binding.ts +113 -0
  505. package/src/session-store-binding.ts +65 -13
  506. package/src/signed-export.ts +250 -0
  507. package/src/supervisor-binding.ts +169 -409
  508. package/src/testing/app-bindings.ts +142 -0
  509. package/src/testing/index.ts +21 -0
  510. package/src/testing/stub-binding.ts +53 -0
  511. package/src/testing/trigger-registry.ts +259 -0
  512. package/src/token-admin.ts +40 -8
  513. package/src/tool-binding.ts +14 -0
  514. package/src/trigger-binding.ts +8 -1
  515. package/src/types.ts +16 -0
  516. package/src/webhook-endpoint-binding.ts +18 -3
@@ -0,0 +1,145 @@
1
+ import type { TenantId } from '@kindgi/types';
2
+ /**
3
+ * Caller-plugged surface for erasing a person's words
4
+ * (`/v1/memory/erasures`). The API package validates, authorizes (a
5
+ * tenant admin only) and shapes the wire; the binding runs the erasure:
6
+ * memory facts, conversations, the runs that served them, and what they
7
+ * left in provenance, as the deployment's runtime knows its stores. An
8
+ * erasure runs in the background; `create` answers once it's recorded.
9
+ *
10
+ * A completed erasure keeps no identifier: what's left is its ledger row
11
+ * (the selector's kind, a keyed hash of it, who, when, how much), which
12
+ * an operator exports off-box and replays after restoring a backup.
13
+ */
14
+ export interface MemoryErasureBinding {
15
+ create(input: {
16
+ readonly tenantId: TenantId;
17
+ readonly selector: MemoryErasureSelector;
18
+ /** `user:<id>` or `service:<id>`: who asked. */
19
+ readonly requestedBy: string;
20
+ }): Promise<CreateMemoryErasureOutcome>;
21
+ get(tenantId: TenantId, id: string): Promise<MemoryErasure | undefined>;
22
+ /** Newest first. `undefined` when the cursor isn't one this binding issued. */
23
+ list(tenantId: TenantId, page: {
24
+ readonly limit: number;
25
+ readonly cursor?: string;
26
+ }): Promise<{
27
+ readonly data: readonly MemoryErasure[];
28
+ readonly nextCursor?: string;
29
+ } | undefined>;
30
+ /** The whole ledger, content-free, oldest first. */
31
+ exportLedger(tenantId: TenantId): Promise<readonly MemoryErasureLedgerEntry[]>;
32
+ /**
33
+ * Try an unfinished erasure again now; with `force`, stop waiting for a
34
+ * run in a flow that serves other people (it's cancelled). A finished
35
+ * one comes back as it is; `undefined` when there's no such erasure.
36
+ */
37
+ resume(tenantId: TenantId, id: string, options: {
38
+ readonly force?: boolean;
39
+ }): Promise<MemoryErasure | undefined>;
40
+ /** After a backup restore: restore the ledger and run its erasures again. */
41
+ replay(tenantId: TenantId, entries: readonly MemoryErasureLedgerEntry[]): Promise<ReplayMemoryErasuresResult>;
42
+ }
43
+ /**
44
+ * Whose words to erase: one fact, a person (an app's end user
45
+ * `participant`, or an `external` subject facts name), or one
46
+ * conversation. Erasing a Kindgi user isn't offered.
47
+ */
48
+ export type MemoryErasureSelector = {
49
+ readonly factId: string;
50
+ } | {
51
+ readonly subject: {
52
+ readonly kind: 'participant' | 'external';
53
+ readonly id: string;
54
+ };
55
+ } | {
56
+ readonly conversationId: string;
57
+ };
58
+ export type MemoryErasureSelectorKind = 'fact' | 'participant' | 'external' | 'conversation';
59
+ /**
60
+ * `waiting-on-run`: a turn of the person's sits in a flow that serves
61
+ * other people; the erasure waits for it (`waitingOn`) until its
62
+ * deadline, then cancels it. `resume` with `force` stops the wait.
63
+ */
64
+ export type MemoryErasureStatus = 'pending' | 'running' | 'waiting-on-run' | 'completed' | 'failed';
65
+ export interface MemoryErasure {
66
+ readonly id: string;
67
+ readonly selectorKind: MemoryErasureSelectorKind;
68
+ /** Only while it runs: a completed or failed erasure keeps no identifier. */
69
+ readonly selector?: MemoryErasureSelector;
70
+ readonly status: MemoryErasureStatus;
71
+ /**
72
+ * Where a running erasure is: `seed`, `expand`, `settle` (the person's
73
+ * unfinished runs end, or it waits for them, before anything is
74
+ * cleared), `erase`, then `done`.
75
+ */
76
+ readonly phase: 'seed' | 'expand' | 'settle' | 'erase' | 'done';
77
+ readonly requestedBy: string;
78
+ /** A replay after a backup restore can find this person again (a keyed hash was kept). */
79
+ readonly matchable: boolean;
80
+ /** What each store cleared or deleted, by store. */
81
+ readonly counts: Readonly<Record<string, number>>;
82
+ /** Failed attempts so far. */
83
+ readonly attempts: number;
84
+ /** The last failure's code, or why it's waiting (`not-yet:<reason>`). Never content. */
85
+ readonly lastError?: string;
86
+ /** The run it waits (or waited) for, and until when; kept as the record of the wait. */
87
+ readonly waitingOn?: {
88
+ readonly runId: string;
89
+ readonly until?: string;
90
+ };
91
+ /** A tenant admin said not to wait. */
92
+ readonly forced?: true;
93
+ /**
94
+ * Runs of the person's kept appearing, round after round: the erasure
95
+ * went on to erase after its last round rather than wait any longer.
96
+ */
97
+ readonly settleRoundsCapped?: true;
98
+ readonly createdAt: string;
99
+ readonly startedAt?: string;
100
+ readonly completedAt?: string;
101
+ readonly replayedAt?: string;
102
+ }
103
+ /** One ledger row, as exported off-box and given back to a replay. Content-free. */
104
+ export interface MemoryErasureLedgerEntry {
105
+ readonly id: string;
106
+ readonly selectorKind: MemoryErasureSelectorKind;
107
+ /** HMAC-SHA256 (hex) of the selector under the tenant's ledger key; absent without one. */
108
+ readonly selectorHmac?: string;
109
+ /** Which ledger key made `selectorHmac`. */
110
+ readonly keyId?: string;
111
+ readonly requestedBy: string;
112
+ readonly status: MemoryErasureStatus;
113
+ readonly createdAt: string;
114
+ readonly completedAt?: string;
115
+ }
116
+ export interface MemoryErasureWarning {
117
+ /** `erasure-unmatchable`: no ledger key, so a replay after a restore can't find this person. */
118
+ readonly code: 'erasure-unmatchable';
119
+ readonly message: string;
120
+ }
121
+ export type CreateMemoryErasureOutcome = {
122
+ readonly kind: 'created';
123
+ readonly erasure: MemoryErasure;
124
+ readonly warnings: readonly MemoryErasureWarning[];
125
+ } | {
126
+ readonly kind: 'refused';
127
+ /** Legal hold on a fact it reaches: nothing started. */
128
+ readonly refusal: {
129
+ readonly code: 'legal-hold';
130
+ readonly message: string;
131
+ readonly factIds?: readonly string[];
132
+ };
133
+ };
134
+ export interface ReplayMemoryErasuresResult {
135
+ /** Matched to an id in the tenant again: run again. */
136
+ readonly replayed: readonly string[];
137
+ /** Put back in the ledger; nothing in the tenant matches (nothing to erase). */
138
+ readonly restored: readonly string[];
139
+ /** No keyed hash, or a key this deployment doesn't hold. */
140
+ readonly unmatched: readonly {
141
+ readonly id: string;
142
+ readonly reason: 'no-keyed-hash' | 'unknown-key';
143
+ }[];
144
+ }
145
+ //# sourceMappingURL=memory-erasure-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-erasure-binding.d.ts","sourceRoot":"","sources":["../src/memory-erasure-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-erasure-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-erasure-binding.js","sourceRoot":"","sources":["../src/memory-erasure-binding.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC"}
@@ -39,11 +39,27 @@ export interface TokenResolution {
39
39
  */
40
40
  readonly userId?: UserId;
41
41
  /**
42
- * The id of a durable API key (`POST /v1/tokens`). The caller is then
43
- * the key's service account (`service_account:<tokenId>`), not a user;
44
- * the middleware surfaces it as `c.get('tokenId')`.
42
+ * The id of a durable API key (`POST /v1/tokens`), surfaced as
43
+ * `c.get('tokenId')`. The caller is the key's principal: `userId` for a
44
+ * person's key, `serviceAccountId` for a service account's. A key with
45
+ * neither (a store built before principals) is its own service account,
46
+ * `service_account:<tokenId>`.
45
47
  */
46
48
  readonly tokenId?: ApiTokenId;
49
+ /** The service account an API key acts for (`service_account:<id>`). */
50
+ readonly serviceAccountId?: string;
51
+ /**
52
+ * An API key's role: the most it may do, under its principal's grants.
53
+ * A `member` key is refused tenant-admin actions even when its principal
54
+ * is an admin.
55
+ */
56
+ readonly tokenRole?: 'admin' | 'member';
57
+ /**
58
+ * The project an API key is narrowed to. A request naming another
59
+ * project is refused (`key-project-mismatch`), and so is an `admin`
60
+ * action on the tenant.
61
+ */
62
+ readonly tokenProjectId?: string;
47
63
  /**
48
64
  * Optional session id. Populated by the session-token verifier path
49
65
  * (`kgi_sk_*` tokens) so `/v1/identity/whoami` and `/v1/auth/logout`
@@ -103,10 +119,41 @@ export interface TokenResolution {
103
119
  */
104
120
  export declare const SESSION_TOKEN_PREFIX: "kgi_sk_";
105
121
  /**
106
- * Compose the on-wire session token from a `SessionId`. Session tokens
107
- * are opaque to clients — the shape below is a framework convention,
108
- * not part of the wire contract. Do NOT parse it in downstream code
109
- * outside the middleware.
122
+ * The cookie a browser carries its session token in, when the deployment
123
+ * turns cookie sessions on (`SessionConfig.cookie`). `__Host-`: Secure,
124
+ * Path=/, no Domain, so it's sent only to the origin that set it.
125
+ */
126
+ export declare const SESSION_COOKIE_NAME: "__Host-kindgi_session";
127
+ /**
128
+ * Cookie sessions: where the middleware reads a browser's session token
129
+ * when the request has no `Authorization` header.
130
+ */
131
+ export interface SessionCookieOptions {
132
+ /** The cookie's name. Default `SESSION_COOKIE_NAME`. */
133
+ readonly name?: string;
134
+ /**
135
+ * The origins a cookie-authenticated request may come from (the
136
+ * console's origin, e.g. `https://kindgi.example.com`). An unsafe method
137
+ * (anything but GET, HEAD and OPTIONS) authenticated by the cookie must
138
+ * carry one of them in `Origin`, else 403 `csrf-origin-mismatch`; so
139
+ * must a request with no `Origin` at all. Bearer requests are unaffected.
140
+ */
141
+ readonly allowedOrigins: readonly string[];
142
+ /**
143
+ * Also accept an `Origin` naming the host the request was sent to (its
144
+ * `Host`, or `X-Forwarded-Host` behind a proxy that sets it): the
145
+ * console served from the runtime itself, wherever it's reached. For a
146
+ * deployment that doesn't know its public URL. A cross-site page can't
147
+ * forge `Origin`, nor add `X-Forwarded-Host` without a CORS preflight.
148
+ */
149
+ readonly sameOrigin?: boolean;
150
+ }
151
+ /**
152
+ * The older session token, `kgi_sk_<sessionId>`, for a session store
153
+ * without `resolveToken`. A store with it mints its own token
154
+ * (`SessionCreateOutput.token`), and the routes hand that out instead.
155
+ * Session tokens are opaque to clients: never parse one outside the
156
+ * middleware or the store that minted it.
110
157
  */
111
158
  export declare function encodeSessionToken(sessionId: SessionId): string;
112
159
  /**
@@ -135,6 +182,12 @@ export interface BearerAuthMiddlewareOptions {
135
182
  * fewer writes but coarser inactivity enforcement. Defaults to 60s.
136
183
  */
137
184
  readonly touchThrottleMs?: number;
185
+ /**
186
+ * Read a session token from a cookie when the request carries no
187
+ * `Authorization` header (browser sessions). Only `kgi_sk_` tokens are
188
+ * taken from it, and only with a `sessionStore`.
189
+ */
190
+ readonly sessionCookie?: SessionCookieOptions;
138
191
  /**
139
192
  * Accept public run tokens (`kgi_pt_…`), verified against
140
193
  * `signingKey`, on the routes `isAllowed` admits (every other route
@@ -151,9 +204,9 @@ export interface BearerAuthMiddlewareOptions {
151
204
  * handlers.
152
205
  *
153
206
  * Two token flavors are accepted:
154
- * - `kgi_sk_<sessionId>` — framework-issued OAuth session tokens.
155
- * Verified via `sessionStore.get`; expiration + revocation are pulled
156
- * from the session row.
207
+ * - `kgi_sk_…` — session tokens. Verified by the session store
208
+ * (`resolveToken`, or `get` for an older store); expiration +
209
+ * revocation are pulled from the session row.
157
210
  * - anything else — caller-plugged static bearer tokens. Verified via
158
211
  * `resolveToken`. Byte-shape-identical with the session-less contract.
159
212
  */
@@ -161,9 +214,9 @@ export declare function bearerAuthMiddleware(resolve: TokenResolver, options?: B
161
214
  /**
162
215
  * Sentinel `tenantId` value the middleware passes to
163
216
  * `SessionStoreBinding.get` when it needs to look up a session by its
164
- * id without knowing the tenant in advance. Session-store adapters
165
- * MUST honor this by skipping the tenant filter — the tenant is not
166
- * known until the session row has been read.
217
+ * id without knowing the tenant in advance: only for a store without
218
+ * `resolveToken`. Such stores MUST honor it by skipping the tenant
219
+ * filter (the tenant is not known until the session row has been read).
167
220
  */
168
221
  export declare const MULTI_TENANT_LOOKUP: TenantId;
169
222
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +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;;;;;;;;OAQG;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"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAW,iBAAiB,EAAQ,MAAM,MAAM,CAAC;AAG7D,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;;;;;;;;OAQG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;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;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAG,uBAAgC,CAAC;AAEpE;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAID;;;;;;GAMG;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,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAC9C;;;;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,CA2LnB;AAuHD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAA0D,QAAQ,CAAC"}
@@ -1,5 +1,6 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  // Copyright (C) 2026 Kindgi Inc.
3
+ import { getCookie } from 'hono/cookie';
3
4
  import { statusFor, toWireError } from '../errors.js';
4
5
  import { PUBLIC_RUN_TOKEN_PREFIX, verifyPublicRunToken } from '../public-run-token.js';
5
6
  /**
@@ -11,10 +12,18 @@ import { PUBLIC_RUN_TOKEN_PREFIX, verifyPublicRunToken } from '../public-run-tok
11
12
  */
12
13
  export const SESSION_TOKEN_PREFIX = 'kgi_sk_';
13
14
  /**
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.
15
+ * The cookie a browser carries its session token in, when the deployment
16
+ * turns cookie sessions on (`SessionConfig.cookie`). `__Host-`: Secure,
17
+ * Path=/, no Domain, so it's sent only to the origin that set it.
18
+ */
19
+ export const SESSION_COOKIE_NAME = '__Host-kindgi_session';
20
+ const SAFE_METHODS = new Set(['GET', 'HEAD', 'OPTIONS']);
21
+ /**
22
+ * The older session token, `kgi_sk_<sessionId>`, for a session store
23
+ * without `resolveToken`. A store with it mints its own token
24
+ * (`SessionCreateOutput.token`), and the routes hand that out instead.
25
+ * Session tokens are opaque to clients: never parse one outside the
26
+ * middleware or the store that minted it.
18
27
  */
19
28
  export function encodeSessionToken(sessionId) {
20
29
  return `${SESSION_TOKEN_PREFIX}${sessionId}`;
@@ -26,9 +35,9 @@ const DEFAULT_TOUCH_THROTTLE_MS = 60_000;
26
35
  * handlers.
27
36
  *
28
37
  * 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.
38
+ * - `kgi_sk_…` — session tokens. Verified by the session store
39
+ * (`resolveToken`, or `get` for an older store); expiration +
40
+ * revocation are pulled from the session row.
32
41
  * - anything else — caller-plugged static bearer tokens. Verified via
33
42
  * `resolveToken`. Byte-shape-identical with the session-less contract.
34
43
  */
@@ -40,26 +49,8 @@ export function bearerAuthMiddleware(resolve, options = {}) {
40
49
  // bucket is bounded by the number of active sessions the process
41
50
  // has recently observed.
42
51
  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
- }
52
+ // Everything after the token is found: the header's or the cookie's.
53
+ const authenticate = async (c, next, token, requestId) => {
63
54
  if (token.startsWith(PUBLIC_RUN_TOKEN_PREFIX)) {
64
55
  return authenticatePublicRunToken(c, next, token, requestId, options.publicRunTokens);
65
56
  }
@@ -125,6 +116,18 @@ export function bearerAuthMiddleware(resolve, options = {}) {
125
116
  if (resolution.tokenId !== undefined) {
126
117
  c.set('tokenId', resolution.tokenId);
127
118
  }
119
+ if (resolution.serviceAccountId !== undefined) {
120
+ c.set('serviceAccountId', resolution.serviceAccountId);
121
+ }
122
+ if (resolution.tokenRole !== undefined) {
123
+ c.set('tokenRole', resolution.tokenRole);
124
+ }
125
+ if (resolution.tokenProjectId !== undefined) {
126
+ c.set('tokenProjectId', resolution.tokenProjectId);
127
+ }
128
+ if (resolution.expiresAt !== undefined && !isSessionToken) {
129
+ c.set('tokenExpiresAt', resolution.expiresAt);
130
+ }
128
131
  if (resolution.sessionId !== undefined) {
129
132
  c.set('sessionId', resolution.sessionId);
130
133
  }
@@ -163,6 +166,36 @@ export function bearerAuthMiddleware(resolve, options = {}) {
163
166
  await next();
164
167
  return;
165
168
  };
169
+ return async (c, next) => {
170
+ const requestId = c.get('requestId');
171
+ const header = c.req.header('authorization');
172
+ if (header === undefined || header.length === 0) {
173
+ const fromCookie = sessionCookieToken(c, sessionStore, options.sessionCookie);
174
+ if (fromCookie !== undefined) {
175
+ const refusal = csrfRefusal(c, options.sessionCookie, requestId);
176
+ if (refusal !== undefined)
177
+ return refusal;
178
+ c.set('sessionCookieName', options.sessionCookie?.name ?? SESSION_COOKIE_NAME);
179
+ return authenticate(c, next, fromCookie, requestId);
180
+ }
181
+ const body = toWireError({ code: 'auth-missing', message: 'Authorization header is required' }, requestId);
182
+ return c.json(body, statusFor('auth-missing'));
183
+ }
184
+ const match = /^Bearer\s+(.+)$/i.exec(header);
185
+ if (match === null) {
186
+ const body = toWireError({
187
+ code: 'auth-missing',
188
+ message: 'Authorization header must be "Bearer <token>"',
189
+ }, requestId);
190
+ return c.json(body, statusFor('auth-missing'));
191
+ }
192
+ const token = match[1]?.trim() ?? '';
193
+ if (token.length === 0) {
194
+ const body = toWireError({ code: 'auth-missing', message: 'Bearer token is empty' }, requestId);
195
+ return c.json(body, statusFor('auth-missing'));
196
+ }
197
+ return authenticate(c, next, token, requestId);
198
+ };
166
199
  }
167
200
  /**
168
201
  * Session-token verification path. Distinct from `TokenResolver` because
@@ -170,29 +203,17 @@ export function bearerAuthMiddleware(resolve, options = {}) {
170
203
  * scopes + expiration + revocation) that the store returns natively —
171
204
  * we don't want to squeeze that shape through the resolver contract.
172
205
  *
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.
206
+ * A store with `resolveToken` gets the whole token: it reads the tenant
207
+ * from it, looks only in that tenant and compares a hash, so nothing is
208
+ * read across tenants before the token is authenticated. The session it
209
+ * returns is authoritative for `tenantId`.
179
210
  *
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.
211
+ * A store without it gets the older lookup: the token's remainder is the
212
+ * session id, read with `get({ tenantId: MULTI_TENANT_LOOKUP, sessionId })`,
213
+ * which such stores must honor by skipping the tenant filter.
186
214
  */
187
215
  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
- });
216
+ const session = await findSession(sessionStore, token);
196
217
  if (session === null)
197
218
  return null;
198
219
  return {
@@ -209,12 +230,84 @@ async function resolveSessionToken(sessionStore, token) {
209
230
  }),
210
231
  };
211
232
  }
233
+ /**
234
+ * The session token in the request's cookie, when cookie sessions are on
235
+ * and the cookie holds a session token; `undefined` otherwise (an API
236
+ * key or any other token is never taken from a cookie).
237
+ */
238
+ function sessionCookieToken(c, sessionStore, cookie) {
239
+ if (cookie === undefined || sessionStore === undefined)
240
+ return undefined;
241
+ const value = getCookie(c, cookie.name ?? SESSION_COOKIE_NAME)?.trim();
242
+ if (value === undefined || !value.startsWith(SESSION_TOKEN_PREFIX))
243
+ return undefined;
244
+ return value;
245
+ }
246
+ /**
247
+ * A cookie-authenticated unsafe request must come from an allowed origin:
248
+ * a browser always sends `Origin` on such requests, and a cross-site page
249
+ * can't forge it. A missing `Origin` is refused too.
250
+ */
251
+ function csrfRefusal(c, cookie, requestId) {
252
+ if (SAFE_METHODS.has(c.req.method))
253
+ return undefined;
254
+ const origin = c.req.header('origin');
255
+ if (origin !== undefined && cookie.allowedOrigins.includes(origin))
256
+ return undefined;
257
+ if (origin !== undefined && cookie.sameOrigin === true && isSameHost(c, origin))
258
+ return undefined;
259
+ const body = toWireError({
260
+ code: 'csrf-origin-mismatch',
261
+ message: origin === undefined
262
+ ? 'A request signed in by the session cookie must say where it comes from (Origin)'
263
+ : `A request signed in by the session cookie can't come from ${origin}`,
264
+ }, requestId);
265
+ return c.json(body, statusFor('csrf-origin-mismatch'));
266
+ }
267
+ /**
268
+ * Whether `origin` names the host this request was sent to, over https (or
269
+ * plain http on loopback, for local development). The session cookie is
270
+ * `__Host-` and Secure, so a browser holding it is on https: a plain-http
271
+ * page on the same host (an on-path attacker's) is not the same origin.
272
+ */
273
+ function isSameHost(c, origin) {
274
+ let host;
275
+ try {
276
+ const url = new URL(origin);
277
+ if (url.protocol !== 'https:' && !(url.protocol === 'http:' && isLoopback(url.hostname))) {
278
+ return false;
279
+ }
280
+ host = url.host;
281
+ }
282
+ catch {
283
+ return false;
284
+ }
285
+ // The request's own URL carries its Host (the Node server builds it from it).
286
+ const sentTo = [
287
+ new URL(c.req.url).host,
288
+ c.req.header('host'),
289
+ c.req.header('x-forwarded-host')?.split(',')[0]?.trim(),
290
+ ];
291
+ return sentTo.some((h) => h !== undefined && h !== '' && h.toLowerCase() === host.toLowerCase());
292
+ }
293
+ async function findSession(sessionStore, token) {
294
+ if (sessionStore.resolveToken !== undefined) {
295
+ return sessionStore.resolveToken({ token });
296
+ }
297
+ const sessionIdStr = token.slice(SESSION_TOKEN_PREFIX.length);
298
+ if (sessionIdStr.length === 0)
299
+ return null;
300
+ return sessionStore.get({
301
+ tenantId: MULTI_TENANT_LOOKUP,
302
+ sessionId: sessionIdStr,
303
+ });
304
+ }
212
305
  /**
213
306
  * Sentinel `tenantId` value the middleware passes to
214
307
  * `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.
308
+ * id without knowing the tenant in advance: only for a store without
309
+ * `resolveToken`. Such stores MUST honor it by skipping the tenant
310
+ * filter (the tenant is not known until the session row has been read).
218
311
  */
219
312
  export const MULTI_TENANT_LOOKUP = '__kindgi_session_multi_tenant_lookup__';
220
313
  /**
@@ -244,4 +337,11 @@ async function authenticatePublicRunToken(c, next, token, requestId, config) {
244
337
  await next();
245
338
  return undefined;
246
339
  }
340
+ /** `localhost`, `127.0.0.0/8` or `::1`. */
341
+ function isLoopback(hostname) {
342
+ return (hostname === 'localhost' ||
343
+ hostname === '[::1]' ||
344
+ hostname === '::1' ||
345
+ /^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(hostname));
346
+ }
247
347
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,15 @@ export interface Authorizer {
21
21
  * what they'd be allowed to touch.
22
22
  */
23
23
  readonly filterByCan: <T>(c: Context<AppEnv>, action: Action, items: readonly T[], refFn: (item: T) => ResourceRef) => Promise<T[]>;
24
+ /**
25
+ * The ids of every object of `type` the caller may `action`
26
+ * (`AuthzCheckBinding.listObjects`), within its API key's limits as
27
+ * `filterByCan` holds them: a key limited to a project lists no project
28
+ * but its own, and other types as a check decides them (it still reads
29
+ * the orgs its user reads); `undefined` when the binding can't list, so
30
+ * the caller falls back to `filterByCan`.
31
+ */
32
+ readonly listObjects?: (c: Context<AppEnv>, action: Action, type: ResourceRef['type']) => Promise<readonly string[] | undefined>;
24
33
  }
25
34
  export declare function createAuthorizer(binding: AuthzCheckBinding): Authorizer;
26
35
  //# sourceMappingURL=authorize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"authorize.d.ts","sourceRoot":"","sources":["../../src/middleware/authorize.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAEvD,OAAO,EACL,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EAEb,KAAK,WAAW,EAEjB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAExF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,KAAK,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/F,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9F,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjG;;;;;;;;OAQG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EACtB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,WAAW,KAC5B,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CA+EvE"}
1
+ {"version":3,"file":"authorize.d.ts","sourceRoot":"","sources":["../../src/middleware/authorize.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAEvD,OAAO,EACL,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EAIb,KAAK,WAAW,EAEjB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAExF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,KAAK,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/F,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9F,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjG;;;;;;;;OAQG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EACtB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,WAAW,KAC5B,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAClB;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,CACrB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,KACtB,OAAO,CAAC,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;CAC7C;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAgJvE"}