@kindgi/api 0.1.4-rc.5 → 0.1.5-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-binding.d.ts +13 -0
- package/dist/agent-binding.d.ts.map +1 -1
- package/dist/agent-pins.d.ts.map +1 -1
- package/dist/agent-pins.js +18 -2
- package/dist/agent-pins.js.map +1 -1
- package/dist/app.d.ts +110 -17
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +163 -35
- package/dist/app.js.map +1 -1
- package/dist/block-publish.d.ts +56 -0
- package/dist/block-publish.d.ts.map +1 -0
- package/dist/block-publish.js +132 -0
- package/dist/block-publish.js.map +1 -0
- package/dist/caller.d.ts +24 -0
- package/dist/caller.d.ts.map +1 -0
- package/dist/caller.js +47 -0
- package/dist/caller.js.map +1 -0
- package/dist/capability-binding.d.ts +11 -0
- package/dist/capability-binding.d.ts.map +1 -1
- package/dist/derive-agent-version.d.ts +7 -0
- package/dist/derive-agent-version.d.ts.map +1 -1
- package/dist/derive-agent-version.js +4 -0
- package/dist/derive-agent-version.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +73 -7
- package/dist/errors.js.map +1 -1
- package/dist/eval-case-binding.d.ts +16 -4
- package/dist/eval-case-binding.d.ts.map +1 -1
- package/dist/eval-run-binding.d.ts +31 -0
- package/dist/eval-run-binding.d.ts.map +1 -1
- package/dist/eval-run-dispatcher.d.ts +7 -0
- package/dist/eval-run-dispatcher.d.ts.map +1 -1
- package/dist/eval-run-dispatcher.js.map +1 -1
- package/dist/eval-sample.d.ts +11 -0
- package/dist/eval-sample.d.ts.map +1 -0
- package/dist/eval-sample.js +34 -0
- package/dist/eval-sample.js.map +1 -0
- package/dist/eval-suite-binding.d.ts +13 -0
- package/dist/eval-suite-binding.d.ts.map +1 -1
- package/dist/eval-suite-binding.js.map +1 -1
- package/dist/flow-binding.d.ts +18 -0
- package/dist/flow-binding.d.ts.map +1 -1
- package/dist/flow-pins.d.ts.map +1 -1
- package/dist/flow-pins.js +18 -2
- package/dist/flow-pins.js.map +1 -1
- package/dist/gate.d.ts.map +1 -1
- package/dist/gate.js +25 -0
- package/dist/gate.js.map +1 -1
- package/dist/handler-binding.d.ts +32 -0
- package/dist/handler-binding.d.ts.map +1 -1
- package/dist/hitl-binding.d.ts +23 -0
- package/dist/hitl-binding.d.ts.map +1 -1
- package/dist/identity-directory-binding.d.ts +82 -4
- package/dist/identity-directory-binding.d.ts.map +1 -1
- package/dist/identity-provider-binding.d.ts +197 -17
- package/dist/identity-provider-binding.d.ts.map +1 -1
- package/dist/improvement-pass-binding.d.ts +196 -0
- package/dist/improvement-pass-binding.d.ts.map +1 -0
- package/dist/improvement-pass-binding.js +9 -0
- package/dist/improvement-pass-binding.js.map +1 -0
- package/dist/index.d.ts +35 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/judged-dispatcher.d.ts +25 -4
- package/dist/judged-dispatcher.d.ts.map +1 -1
- package/dist/judged-dispatcher.js +43 -6
- package/dist/judged-dispatcher.js.map +1 -1
- package/dist/judgment-binding.d.ts +25 -1
- package/dist/judgment-binding.d.ts.map +1 -1
- package/dist/mcp-endpoint-binding.d.ts +7 -0
- package/dist/mcp-endpoint-binding.d.ts.map +1 -1
- package/dist/memory-binding.d.ts +124 -17
- package/dist/memory-binding.d.ts.map +1 -1
- package/dist/memory-erasure-binding.d.ts +145 -0
- package/dist/memory-erasure-binding.d.ts.map +1 -0
- package/dist/memory-erasure-binding.js +4 -0
- package/dist/memory-erasure-binding.js.map +1 -0
- package/dist/middleware/auth.d.ts +66 -13
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +150 -50
- package/dist/middleware/auth.js.map +1 -1
- package/dist/middleware/authorize.d.ts +6 -0
- package/dist/middleware/authorize.d.ts.map +1 -1
- package/dist/middleware/authorize.js +113 -4
- package/dist/middleware/authorize.js.map +1 -1
- package/dist/middleware/error-mapper.d.ts +5 -0
- package/dist/middleware/error-mapper.d.ts.map +1 -1
- package/dist/middleware/error-mapper.js +14 -1
- package/dist/middleware/error-mapper.js.map +1 -1
- package/dist/middleware/idempotency.d.ts +70 -5
- package/dist/middleware/idempotency.d.ts.map +1 -1
- package/dist/middleware/idempotency.js +174 -41
- package/dist/middleware/idempotency.js.map +1 -1
- package/dist/middleware/key-project.d.ts +17 -0
- package/dist/middleware/key-project.d.ts.map +1 -0
- package/dist/middleware/key-project.js +75 -0
- package/dist/middleware/key-project.js.map +1 -0
- package/dist/middleware/principal.d.ts.map +1 -1
- package/dist/middleware/principal.js +9 -5
- package/dist/middleware/principal.js.map +1 -1
- package/dist/middleware/project-ref.d.ts.map +1 -1
- package/dist/middleware/project-ref.js +3 -0
- package/dist/middleware/project-ref.js.map +1 -1
- package/dist/openapi/generate.d.ts.map +1 -1
- package/dist/openapi/generate.js +5 -2
- package/dist/openapi/generate.js.map +1 -1
- package/dist/openapi/operations.d.ts.map +1 -1
- package/dist/openapi/operations.js +918 -139
- package/dist/openapi/operations.js.map +1 -1
- package/dist/openapi/schemas.d.ts +92 -13
- package/dist/openapi/schemas.d.ts.map +1 -1
- package/dist/openapi/schemas.js +2122 -370
- package/dist/openapi/schemas.js.map +1 -1
- package/dist/person-grants-binding.d.ts +77 -0
- package/dist/person-grants-binding.d.ts.map +1 -0
- package/dist/person-grants-binding.js +4 -0
- package/dist/person-grants-binding.js.map +1 -0
- package/dist/proposal-service.d.ts +121 -0
- package/dist/proposal-service.d.ts.map +1 -0
- package/dist/proposal-service.js +447 -0
- package/dist/proposal-service.js.map +1 -0
- package/dist/proposal-status.d.ts +60 -0
- package/dist/proposal-status.d.ts.map +1 -0
- package/dist/proposal-status.js +109 -0
- package/dist/proposal-status.js.map +1 -0
- package/dist/provider-binding.d.ts +10 -0
- package/dist/provider-binding.d.ts.map +1 -1
- package/dist/publish-refused.d.ts +18 -3
- package/dist/publish-refused.d.ts.map +1 -1
- package/dist/publish-refused.js +18 -3
- package/dist/publish-refused.js.map +1 -1
- package/dist/routes/adapters.d.ts +2 -1
- package/dist/routes/adapters.d.ts.map +1 -1
- package/dist/routes/adapters.js +3 -1
- package/dist/routes/adapters.js.map +1 -1
- package/dist/routes/agent-releases.d.ts +55 -3
- package/dist/routes/agent-releases.d.ts.map +1 -1
- package/dist/routes/agent-releases.js +85 -55
- package/dist/routes/agent-releases.js.map +1 -1
- package/dist/routes/agents.d.ts +12 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +100 -2
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/approvals.d.ts +15 -3
- package/dist/routes/approvals.d.ts.map +1 -1
- package/dist/routes/approvals.js +133 -122
- package/dist/routes/approvals.js.map +1 -1
- package/dist/routes/artifacts.d.ts +25 -3
- package/dist/routes/artifacts.d.ts.map +1 -1
- package/dist/routes/artifacts.js +116 -7
- package/dist/routes/artifacts.js.map +1 -1
- package/dist/routes/auth.d.ts +25 -1
- package/dist/routes/auth.d.ts.map +1 -1
- package/dist/routes/auth.js +655 -281
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/blocks.d.ts.map +1 -1
- package/dist/routes/blocks.js +2 -42
- package/dist/routes/blocks.js.map +1 -1
- package/dist/routes/capabilities.d.ts +2 -1
- package/dist/routes/capabilities.d.ts.map +1 -1
- package/dist/routes/capabilities.js +6 -1
- package/dist/routes/capabilities.js.map +1 -1
- package/dist/routes/compliance.d.ts +9 -10
- package/dist/routes/compliance.d.ts.map +1 -1
- package/dist/routes/compliance.js +42 -61
- package/dist/routes/compliance.js.map +1 -1
- package/dist/routes/conversations.d.ts +8 -1
- package/dist/routes/conversations.d.ts.map +1 -1
- package/dist/routes/conversations.js +87 -8
- package/dist/routes/conversations.js.map +1 -1
- package/dist/routes/cost.d.ts +7 -1
- package/dist/routes/cost.d.ts.map +1 -1
- package/dist/routes/cost.js +22 -3
- package/dist/routes/cost.js.map +1 -1
- package/dist/routes/denied.d.ts +11 -0
- package/dist/routes/denied.d.ts.map +1 -0
- package/dist/routes/denied.js +17 -0
- package/dist/routes/denied.js.map +1 -0
- package/dist/routes/deployments.d.ts +2 -1
- package/dist/routes/deployments.d.ts.map +1 -1
- package/dist/routes/deployments.js +44 -12
- package/dist/routes/deployments.js.map +1 -1
- package/dist/routes/eval-comparison.d.ts.map +1 -1
- package/dist/routes/eval-comparison.js +69 -1
- package/dist/routes/eval-comparison.js.map +1 -1
- package/dist/routes/eval-overrides.d.ts +18 -0
- package/dist/routes/eval-overrides.d.ts.map +1 -0
- package/dist/routes/eval-overrides.js +81 -0
- package/dist/routes/eval-overrides.js.map +1 -0
- package/dist/routes/eval-runs.d.ts +10 -1
- package/dist/routes/eval-runs.d.ts.map +1 -1
- package/dist/routes/eval-runs.js +63 -7
- package/dist/routes/eval-runs.js.map +1 -1
- package/dist/routes/eval-suites.d.ts.map +1 -1
- package/dist/routes/eval-suites.js +20 -1
- package/dist/routes/eval-suites.js.map +1 -1
- package/dist/routes/event-triggers.d.ts +5 -1
- package/dist/routes/event-triggers.d.ts.map +1 -1
- package/dist/routes/event-triggers.js +26 -3
- package/dist/routes/event-triggers.js.map +1 -1
- package/dist/routes/export-signing-keys.d.ts +12 -0
- package/dist/routes/export-signing-keys.d.ts.map +1 -0
- package/dist/routes/export-signing-keys.js +24 -0
- package/dist/routes/export-signing-keys.js.map +1 -0
- package/dist/routes/flows.d.ts.map +1 -1
- package/dist/routes/flows.js +9 -1
- package/dist/routes/flows.js.map +1 -1
- package/dist/routes/gate-policies.d.ts +4 -1
- package/dist/routes/gate-policies.d.ts.map +1 -1
- package/dist/routes/gate-policies.js +29 -5
- package/dist/routes/gate-policies.js.map +1 -1
- package/dist/routes/guardrails.d.ts +16 -14
- package/dist/routes/guardrails.d.ts.map +1 -1
- package/dist/routes/guardrails.js +39 -3
- package/dist/routes/guardrails.js.map +1 -1
- package/dist/routes/identity.d.ts +20 -4
- package/dist/routes/identity.d.ts.map +1 -1
- package/dist/routes/identity.js +246 -6
- package/dist/routes/identity.js.map +1 -1
- package/dist/routes/improvement-passes.d.ts +52 -0
- package/dist/routes/improvement-passes.d.ts.map +1 -0
- package/dist/routes/improvement-passes.js +449 -0
- package/dist/routes/improvement-passes.js.map +1 -0
- package/dist/routes/judged-suites.d.ts +50 -0
- package/dist/routes/judged-suites.d.ts.map +1 -1
- package/dist/routes/judged-suites.js +66 -27
- package/dist/routes/judged-suites.js.map +1 -1
- package/dist/routes/judgment-context.d.ts +18 -2
- package/dist/routes/judgment-context.d.ts.map +1 -1
- package/dist/routes/judgment-context.js +63 -5
- package/dist/routes/judgment-context.js.map +1 -1
- package/dist/routes/judgment-flow-context.d.ts.map +1 -1
- package/dist/routes/judgment-flow-context.js +14 -2
- package/dist/routes/judgment-flow-context.js.map +1 -1
- package/dist/routes/judgments.d.ts.map +1 -1
- package/dist/routes/judgments.js +8 -1
- package/dist/routes/judgments.js.map +1 -1
- package/dist/routes/mcp.d.ts.map +1 -1
- package/dist/routes/mcp.js +26 -1
- package/dist/routes/mcp.js.map +1 -1
- package/dist/routes/memory-access.d.ts +43 -0
- package/dist/routes/memory-access.d.ts.map +1 -0
- package/dist/routes/memory-access.js +129 -0
- package/dist/routes/memory-access.js.map +1 -0
- package/dist/routes/memory-erasures.d.ts +25 -0
- package/dist/routes/memory-erasures.d.ts.map +1 -0
- package/dist/routes/memory-erasures.js +214 -0
- package/dist/routes/memory-erasures.js.map +1 -0
- package/dist/routes/memory-parse.d.ts +38 -0
- package/dist/routes/memory-parse.d.ts.map +1 -0
- package/dist/routes/memory-parse.js +199 -0
- package/dist/routes/memory-parse.js.map +1 -0
- package/dist/routes/memory.d.ts +9 -4
- package/dist/routes/memory.d.ts.map +1 -1
- package/dist/routes/memory.js +226 -234
- package/dist/routes/memory.js.map +1 -1
- package/dist/routes/observations.d.ts +4 -1
- package/dist/routes/observations.d.ts.map +1 -1
- package/dist/routes/observations.js +8 -2
- package/dist/routes/observations.js.map +1 -1
- package/dist/routes/pagination.d.ts +7 -0
- package/dist/routes/pagination.d.ts.map +1 -1
- package/dist/routes/pagination.js +10 -0
- package/dist/routes/pagination.js.map +1 -1
- package/dist/routes/policies.d.ts +2 -1
- package/dist/routes/policies.d.ts.map +1 -1
- package/dist/routes/policies.js +3 -1
- package/dist/routes/policies.js.map +1 -1
- package/dist/routes/project-mismatch.d.ts +22 -0
- package/dist/routes/project-mismatch.d.ts.map +1 -0
- package/dist/routes/project-mismatch.js +34 -0
- package/dist/routes/project-mismatch.js.map +1 -0
- package/dist/routes/projects.d.ts +15 -4
- package/dist/routes/projects.d.ts.map +1 -1
- package/dist/routes/projects.js +100 -9
- package/dist/routes/projects.js.map +1 -1
- package/dist/routes/proposals.d.ts +25 -17
- package/dist/routes/proposals.d.ts.map +1 -1
- package/dist/routes/proposals.js +340 -507
- package/dist/routes/proposals.js.map +1 -1
- package/dist/routes/provenance.d.ts +17 -3
- package/dist/routes/provenance.d.ts.map +1 -1
- package/dist/routes/provenance.js +79 -103
- package/dist/routes/provenance.js.map +1 -1
- package/dist/routes/providers.d.ts +17 -1
- package/dist/routes/providers.d.ts.map +1 -1
- package/dist/routes/providers.js +188 -8
- package/dist/routes/providers.js.map +1 -1
- package/dist/routes/public-run-tokens.d.ts.map +1 -1
- package/dist/routes/public-run-tokens.js +3 -0
- package/dist/routes/public-run-tokens.js.map +1 -1
- package/dist/routes/runs.d.ts +10 -0
- package/dist/routes/runs.d.ts.map +1 -1
- package/dist/routes/runs.js +92 -42
- package/dist/routes/runs.js.map +1 -1
- package/dist/routes/schedules.d.ts +21 -13
- package/dist/routes/schedules.d.ts.map +1 -1
- package/dist/routes/schedules.js +416 -55
- package/dist/routes/schedules.js.map +1 -1
- package/dist/routes/segments.d.ts +2 -0
- package/dist/routes/segments.d.ts.map +1 -1
- package/dist/routes/segments.js +5 -0
- package/dist/routes/segments.js.map +1 -1
- package/dist/routes/service-accounts.d.ts +17 -0
- package/dist/routes/service-accounts.d.ts.map +1 -0
- package/dist/routes/service-accounts.js +212 -0
- package/dist/routes/service-accounts.js.map +1 -0
- package/dist/routes/sign-in-options.d.ts +50 -0
- package/dist/routes/sign-in-options.d.ts.map +1 -0
- package/dist/routes/sign-in-options.js +98 -0
- package/dist/routes/sign-in-options.js.map +1 -0
- package/dist/routes/signing-keys.d.ts +2 -1
- package/dist/routes/signing-keys.d.ts.map +1 -1
- package/dist/routes/signing-keys.js +3 -1
- package/dist/routes/signing-keys.js.map +1 -1
- package/dist/routes/tenant-access.d.ts +13 -0
- package/dist/routes/tenant-access.d.ts.map +1 -0
- package/dist/routes/tenant-access.js +26 -0
- package/dist/routes/tenant-access.js.map +1 -0
- package/dist/routes/tenant.d.ts.map +1 -1
- package/dist/routes/tenant.js +4 -0
- package/dist/routes/tenant.js.map +1 -1
- package/dist/routes/token-sign-in.d.ts +36 -0
- package/dist/routes/token-sign-in.d.ts.map +1 -0
- package/dist/routes/token-sign-in.js +101 -0
- package/dist/routes/token-sign-in.js.map +1 -0
- package/dist/routes/tokens.d.ts +15 -5
- package/dist/routes/tokens.d.ts.map +1 -1
- package/dist/routes/tokens.js +162 -43
- package/dist/routes/tokens.js.map +1 -1
- package/dist/routes/tools.d.ts.map +1 -1
- package/dist/routes/tools.js +9 -1
- package/dist/routes/tools.js.map +1 -1
- package/dist/routes/trigger-access.d.ts +29 -0
- package/dist/routes/trigger-access.d.ts.map +1 -0
- package/dist/routes/trigger-access.js +33 -0
- package/dist/routes/trigger-access.js.map +1 -0
- package/dist/routes/webhook-endpoints.d.ts +2 -1
- package/dist/routes/webhook-endpoints.d.ts.map +1 -1
- package/dist/routes/webhook-endpoints.js +11 -3
- package/dist/routes/webhook-endpoints.js.map +1 -1
- package/dist/routes/webhooks.d.ts +5 -1
- package/dist/routes/webhooks.d.ts.map +1 -1
- package/dist/routes/webhooks.js +25 -2
- package/dist/routes/webhooks.js.map +1 -1
- package/dist/run-failure.d.ts +21 -0
- package/dist/run-failure.d.ts.map +1 -0
- package/dist/run-failure.js +29 -0
- package/dist/run-failure.js.map +1 -0
- package/dist/service-account-binding.d.ts +108 -0
- package/dist/service-account-binding.d.ts.map +1 -0
- package/dist/service-account-binding.js +4 -0
- package/dist/service-account-binding.js.map +1 -0
- package/dist/session-store-binding.d.ts +61 -13
- package/dist/session-store-binding.d.ts.map +1 -1
- package/dist/signed-export.d.ts +89 -0
- package/dist/signed-export.d.ts.map +1 -0
- package/dist/signed-export.js +149 -0
- package/dist/signed-export.js.map +1 -0
- package/dist/supervisor-binding.d.ts +186 -413
- package/dist/supervisor-binding.d.ts.map +1 -1
- package/dist/testing/app-bindings.d.ts +33 -0
- package/dist/testing/app-bindings.d.ts.map +1 -0
- package/dist/testing/app-bindings.js +112 -0
- package/dist/testing/app-bindings.js.map +1 -0
- package/dist/testing/index.d.ts +11 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +13 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/stub-binding.d.ts +34 -0
- package/dist/testing/stub-binding.d.ts.map +1 -0
- package/dist/testing/stub-binding.js +42 -0
- package/dist/testing/stub-binding.js.map +1 -0
- package/dist/testing/trigger-registry.d.ts +21 -0
- package/dist/testing/trigger-registry.d.ts.map +1 -0
- package/dist/testing/trigger-registry.js +206 -0
- package/dist/testing/trigger-registry.js.map +1 -0
- package/dist/token-admin.d.ts +46 -8
- package/dist/token-admin.d.ts.map +1 -1
- package/dist/token-admin.js.map +1 -1
- package/dist/tool-binding.d.ts +13 -0
- package/dist/tool-binding.d.ts.map +1 -1
- package/dist/trigger-binding.d.ts +2 -2
- package/dist/trigger-binding.d.ts.map +1 -1
- package/dist/trigger-binding.js +1 -1
- package/dist/trigger-binding.js.map +1 -1
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/webhook-endpoint-binding.d.ts +19 -3
- package/dist/webhook-endpoint-binding.d.ts.map +1 -1
- package/dist/webhook-endpoint-binding.js +1 -1
- package/dist/webhook-endpoint-binding.js.map +1 -1
- package/openapi.json +15286 -8653
- package/package.json +26 -22
- package/src/agent-binding.ts +14 -0
- package/src/agent-pins.ts +18 -2
- package/src/app.ts +366 -80
- package/src/block-publish.ts +181 -0
- package/src/caller.ts +62 -0
- package/src/capability-binding.ts +12 -0
- package/src/derive-agent-version.ts +9 -1
- package/src/errors.ts +73 -7
- package/src/eval-case-binding.ts +17 -1
- package/src/eval-run-binding.ts +31 -0
- package/src/eval-run-dispatcher.ts +7 -0
- package/src/eval-sample.ts +42 -0
- package/src/eval-suite-binding.ts +14 -0
- package/src/flow-binding.ts +19 -0
- package/src/flow-pins.ts +18 -2
- package/src/gate.ts +26 -0
- package/src/handler-binding.ts +36 -1
- package/src/hitl-binding.ts +24 -0
- package/src/identity-directory-binding.ts +85 -4
- package/src/identity-provider-binding.ts +216 -21
- package/src/improvement-pass-binding.ts +193 -0
- package/src/index.ts +153 -31
- package/src/judged-dispatcher.ts +78 -11
- package/src/judgment-binding.ts +25 -1
- package/src/mcp-endpoint-binding.ts +7 -0
- package/src/memory-binding.ts +121 -17
- package/src/memory-erasure-binding.ts +156 -0
- package/src/middleware/auth.ts +228 -62
- package/src/middleware/authorize.ts +139 -3
- package/src/middleware/error-mapper.ts +15 -1
- package/src/middleware/idempotency.ts +230 -43
- package/src/middleware/key-project.ts +86 -0
- package/src/middleware/principal.ts +9 -5
- package/src/middleware/project-ref.ts +3 -0
- package/src/openapi/generate.ts +11 -2
- package/src/openapi/operations.ts +1059 -142
- package/src/openapi/schemas.ts +2438 -485
- package/src/person-grants-binding.ts +76 -0
- package/src/proposal-service.ts +640 -0
- package/src/proposal-status.ts +176 -0
- package/src/provider-binding.ts +10 -0
- package/src/publish-refused.ts +38 -9
- package/src/routes/adapters.ts +4 -0
- package/src/routes/agent-releases.ts +121 -69
- package/src/routes/agents.ts +128 -1
- package/src/routes/approvals.ts +164 -154
- package/src/routes/artifacts.ts +181 -11
- package/src/routes/auth.ts +804 -336
- package/src/routes/blocks.ts +2 -53
- package/src/routes/capabilities.ts +10 -1
- package/src/routes/compliance.ts +60 -99
- package/src/routes/conversations.ts +101 -7
- package/src/routes/cost.ts +32 -3
- package/src/routes/denied.ts +28 -0
- package/src/routes/deployments.ts +62 -16
- package/src/routes/eval-comparison.ts +81 -2
- package/src/routes/eval-overrides.ts +108 -0
- package/src/routes/eval-runs.ts +86 -6
- package/src/routes/eval-suites.ts +25 -1
- package/src/routes/event-triggers.ts +27 -3
- package/src/routes/export-signing-keys.ts +31 -0
- package/src/routes/flows.ts +12 -1
- package/src/routes/gate-policies.ts +37 -6
- package/src/routes/guardrails.ts +61 -2
- package/src/routes/identity.ts +328 -10
- package/src/routes/improvement-passes.ts +541 -0
- package/src/routes/judged-suites.ts +113 -43
- package/src/routes/judgment-context.ts +76 -5
- package/src/routes/judgment-flow-context.ts +16 -2
- package/src/routes/judgments.ts +17 -3
- package/src/routes/mcp.ts +29 -1
- package/src/routes/memory-access.ts +179 -0
- package/src/routes/memory-erasures.ts +240 -0
- package/src/routes/memory-parse.ts +250 -0
- package/src/routes/memory.ts +244 -286
- package/src/routes/observations.ts +15 -2
- package/src/routes/pagination.ts +12 -0
- package/src/routes/policies.ts +7 -1
- package/src/routes/project-mismatch.ts +56 -0
- package/src/routes/projects.ts +107 -13
- package/src/routes/proposals.ts +370 -611
- package/src/routes/provenance.ts +99 -133
- package/src/routes/providers.ts +223 -8
- package/src/routes/public-run-tokens.ts +3 -0
- package/src/routes/runs.ts +119 -39
- package/src/routes/schedules.ts +472 -60
- package/src/routes/segments.ts +11 -0
- package/src/routes/service-accounts.ts +262 -0
- package/src/routes/sign-in-options.ts +168 -0
- package/src/routes/signing-keys.ts +7 -1
- package/src/routes/tenant-access.ts +37 -0
- package/src/routes/tenant.ts +6 -0
- package/src/routes/token-sign-in.ts +161 -0
- package/src/routes/tokens.ts +172 -46
- package/src/routes/tools.ts +12 -1
- package/src/routes/trigger-access.ts +72 -0
- package/src/routes/webhook-endpoints.ts +15 -3
- package/src/routes/webhooks.ts +26 -2
- package/src/run-failure.ts +42 -0
- package/src/service-account-binding.ts +113 -0
- package/src/session-store-binding.ts +65 -13
- package/src/signed-export.ts +250 -0
- package/src/supervisor-binding.ts +169 -409
- package/src/testing/app-bindings.ts +142 -0
- package/src/testing/index.ts +21 -0
- package/src/testing/stub-binding.ts +53 -0
- package/src/testing/trigger-registry.ts +259 -0
- package/src/token-admin.ts +40 -8
- package/src/tool-binding.ts +14 -0
- package/src/trigger-binding.ts +8 -1
- package/src/types.ts +16 -0
- package/src/webhook-endpoint-binding.ts +18 -3
package/src/app.ts
CHANGED
|
@@ -10,7 +10,8 @@ import type { AuditEventBinding } from '@kindgi/audit-events';
|
|
|
10
10
|
import type { AuthzCheckBinding } from '@kindgi/authz';
|
|
11
11
|
import type { AdapterFactoryRegistry } from '@kindgi/capabilities';
|
|
12
12
|
import type { ComplianceEvidenceGenerator, LoadedClassifier } from '@kindgi/compliance';
|
|
13
|
-
import
|
|
13
|
+
import { exportSignerFromSigningKeyBinding } from '@kindgi/crypto';
|
|
14
|
+
import type { ExportSigningBinding, SigningKeyBinding } from '@kindgi/crypto';
|
|
14
15
|
import type { TenantHierarchyBinding } from '@kindgi/platform';
|
|
15
16
|
import type {
|
|
16
17
|
OrgBinding,
|
|
@@ -48,11 +49,18 @@ import type {
|
|
|
48
49
|
RefreshTokenFn,
|
|
49
50
|
} from './identity-provider-binding.js';
|
|
50
51
|
import type { ImageRegistryBinding } from './image-registry-binding.js';
|
|
52
|
+
import type { ImprovementPassBinding } from './improvement-pass-binding.js';
|
|
51
53
|
import type { JudgmentRegistryBinding } from './judgment-binding.js';
|
|
52
54
|
import type { AgentReleaseBindings } from './live-version-binding.js';
|
|
53
55
|
import type { MCPClientProbeBinding, MCPEndpointRegistryBinding } from './mcp-endpoint-binding.js';
|
|
54
56
|
import type { MemoryBinding } from './memory-binding.js';
|
|
55
|
-
import
|
|
57
|
+
import type { MemoryErasureBinding } from './memory-erasure-binding.js';
|
|
58
|
+
import {
|
|
59
|
+
SESSION_COOKIE_NAME,
|
|
60
|
+
type SessionCookieOptions,
|
|
61
|
+
type TokenResolver,
|
|
62
|
+
bearerAuthMiddleware,
|
|
63
|
+
} from './middleware/auth.js';
|
|
56
64
|
import { type Authorizer, createAuthorizer } from './middleware/authorize.js';
|
|
57
65
|
import { mapThrownError } from './middleware/error-mapper.js';
|
|
58
66
|
import {
|
|
@@ -60,6 +68,7 @@ import {
|
|
|
60
68
|
createInMemoryIdempotencyStore,
|
|
61
69
|
idempotencyMiddleware,
|
|
62
70
|
} from './middleware/idempotency.js';
|
|
71
|
+
import { refuseOtherProjectForKey } from './middleware/key-project.js';
|
|
63
72
|
import { principalMiddleware } from './middleware/principal.js';
|
|
64
73
|
import { PROJECT_REF_ROUTES, refuseBadProjectId } from './middleware/project-ref.js';
|
|
65
74
|
import { publicRunCorsMiddleware, publicRunRouteMatcher } from './middleware/public-run-routes.js';
|
|
@@ -67,6 +76,7 @@ import { requestIdMiddleware } from './middleware/request-id.js';
|
|
|
67
76
|
import { requestLogMiddleware } from './middleware/request-log.js';
|
|
68
77
|
import { sigv4Middleware } from './middleware/sigv4.js';
|
|
69
78
|
import { type GenerateOptions, generateOpenApiDocument } from './openapi/generate.js';
|
|
79
|
+
import type { PersonGrantsBinding } from './person-grants-binding.js';
|
|
70
80
|
import type { ProvenanceBinding } from './provenance-binding.js';
|
|
71
81
|
import type { ProviderRegistryBinding } from './provider-binding.js';
|
|
72
82
|
import {
|
|
@@ -85,7 +95,7 @@ import { agentsRouter } from './routes/agents.js';
|
|
|
85
95
|
import { approvalsRouter } from './routes/approvals.js';
|
|
86
96
|
import { artifactsRouter } from './routes/artifacts.js';
|
|
87
97
|
import { auditRouter } from './routes/audit.js';
|
|
88
|
-
import { authRouters } from './routes/auth.js';
|
|
98
|
+
import { authRouters, logoutHandler } from './routes/auth.js';
|
|
89
99
|
import { blocksRouter } from './routes/blocks.js';
|
|
90
100
|
import { capabilitiesRouter } from './routes/capabilities.js';
|
|
91
101
|
import { complianceRouter } from './routes/compliance.js';
|
|
@@ -96,13 +106,16 @@ import { envRouter } from './routes/env.js';
|
|
|
96
106
|
import { evalRunsRouters } from './routes/eval-runs.js';
|
|
97
107
|
import { evalSuitesRouter } from './routes/eval-suites.js';
|
|
98
108
|
import { eventTriggersRouter } from './routes/event-triggers.js';
|
|
109
|
+
import { exportSigningKeysRouter } from './routes/export-signing-keys.js';
|
|
99
110
|
import { flowsRouter } from './routes/flows.js';
|
|
100
111
|
import { gatePoliciesRouter } from './routes/gate-policies.js';
|
|
101
112
|
import { guardrailsRouter } from './routes/guardrails.js';
|
|
102
113
|
import { identityRouter } from './routes/identity.js';
|
|
114
|
+
import { improvementPassesRouter, mountImproveRoute } from './routes/improvement-passes.js';
|
|
103
115
|
import { judgedSuitesRouter } from './routes/judged-suites.js';
|
|
104
116
|
import { judgeClassesRouter, judgmentsRouter } from './routes/judgments.js';
|
|
105
117
|
import { mcpRouter } from './routes/mcp.js';
|
|
118
|
+
import { memoryErasuresRouter } from './routes/memory-erasures.js';
|
|
106
119
|
import { memoryRouter } from './routes/memory.js';
|
|
107
120
|
import { observationsRouter } from './routes/observations.js';
|
|
108
121
|
import { orgsRouter } from './routes/orgs.js';
|
|
@@ -118,15 +131,19 @@ import { runsRouter } from './routes/runs.js';
|
|
|
118
131
|
import { s3Router } from './routes/s3.js';
|
|
119
132
|
import { schedulesRouter } from './routes/schedules.js';
|
|
120
133
|
import { secretsRouter } from './routes/secrets.js';
|
|
134
|
+
import { serviceAccountsRouter } from './routes/service-accounts.js';
|
|
135
|
+
import { type SignInOptionsRateLimit, signInOptionsRouter } from './routes/sign-in-options.js';
|
|
121
136
|
import { signingKeysRouter } from './routes/signing-keys.js';
|
|
122
137
|
import { teamsRouter } from './routes/teams.js';
|
|
123
138
|
import { tenantRouter } from './routes/tenant.js';
|
|
139
|
+
import { tokenSignInRouter } from './routes/token-sign-in.js';
|
|
124
140
|
import { tokensRouter } from './routes/tokens.js';
|
|
125
141
|
import { toolsRouter } from './routes/tools.js';
|
|
126
142
|
import { webhookEndpointsRouter } from './routes/webhook-endpoints.js';
|
|
127
143
|
import { webhooksRouter } from './routes/webhooks.js';
|
|
128
144
|
import type { S3CredentialBinding } from './s3-credential-binding.js';
|
|
129
145
|
import type { SecretBinding } from './secrets-binding.js';
|
|
146
|
+
import type { ServiceAccountBinding } from './service-account-binding.js';
|
|
130
147
|
import type { SessionStoreBinding } from './session-store-binding.js';
|
|
131
148
|
import type { SigningKeyBinding as SigningKeyRegistryBinding } from './signing-key-binding.js';
|
|
132
149
|
import { type OauthStateStore, createInMemoryOauthStateStore } from './state-store-binding.js';
|
|
@@ -134,7 +151,7 @@ import type { SupervisorBinding } from './supervisor-binding.js';
|
|
|
134
151
|
import type { TenantHostAccess } from './tenant-host-access.js';
|
|
135
152
|
import type { TokenAdmin } from './token-admin.js';
|
|
136
153
|
import type { ToolRegistryBinding } from './tool-binding.js';
|
|
137
|
-
import type
|
|
154
|
+
import { TRIGGER_KINDS, type TriggerKind, type TriggerRegistryBinding } from './trigger-binding.js';
|
|
138
155
|
import type { AppEnv } from './types.js';
|
|
139
156
|
import type { WebhookEndpointBinding } from './webhook-endpoint-binding.js';
|
|
140
157
|
|
|
@@ -285,6 +302,19 @@ export interface CreateAppInput {
|
|
|
285
302
|
* keys out-of-band (e.g. via a separate admin console).
|
|
286
303
|
*/
|
|
287
304
|
readonly tokenAdmin?: TokenAdmin;
|
|
305
|
+
/**
|
|
306
|
+
* Optional. When present, mounts `/v1/service-accounts` (tenant admins):
|
|
307
|
+
* create with grants, list, get, grant, ungrant, unregister. Keys for an
|
|
308
|
+
* account are minted at `POST /v1/tokens` with `for`.
|
|
309
|
+
*/
|
|
310
|
+
readonly serviceAccountBinding?: ServiceAccountBinding;
|
|
311
|
+
/**
|
|
312
|
+
* Optional. A person's grants under `/v1/identity/users/:userId`:
|
|
313
|
+
* `GET grants` (tenant admins, or the person) and `POST grant|ungrant`
|
|
314
|
+
* (tenant admin; tenant admins only). Without it they answer
|
|
315
|
+
* `501 person-grants-unsupported`. Needs `identityDirectory`.
|
|
316
|
+
*/
|
|
317
|
+
readonly personGrants?: PersonGrantsBinding;
|
|
288
318
|
/**
|
|
289
319
|
* Optional. When present, mounts the HITL surface:
|
|
290
320
|
* - `GET /v1/approvals` (list, role-scoped)
|
|
@@ -379,6 +409,13 @@ export interface CreateAppInput {
|
|
|
379
409
|
* cache-invalidation concern as `onToolWrite` / `onProviderWrite`.
|
|
380
410
|
*/
|
|
381
411
|
readonly onGuardrailWrite?: import('./routes/guardrails.js').GuardrailWriteHook;
|
|
412
|
+
/**
|
|
413
|
+
* Checks a guardrail being registered (`POST /v1/guardrails`) against
|
|
414
|
+
* the `configSchema` of the check it names; a problem refuses it with
|
|
415
|
+
* `422 guardrail-config-invalid`. A runtime passes it with the pack
|
|
416
|
+
* checks' schemas from their deployments. Absent: no check.
|
|
417
|
+
*/
|
|
418
|
+
readonly checkGuardrailConfig?: import('./routes/guardrails.js').GuardrailConfigCheck;
|
|
382
419
|
/**
|
|
383
420
|
* Optional. When present, mounts the retention surface
|
|
384
421
|
* (`/v1/retention/scheduled`, `/v1/retention/sweep`,
|
|
@@ -395,6 +432,13 @@ export interface CreateAppInput {
|
|
|
395
432
|
* the memory subsystem runtime + their embedding registry.
|
|
396
433
|
*/
|
|
397
434
|
readonly memory?: MemoryBinding;
|
|
435
|
+
/**
|
|
436
|
+
* Optional. When present, mounts erasing a person's words
|
|
437
|
+
* (`/v1/memory/erasures`: create, get, list, export, replay), for a
|
|
438
|
+
* tenant admin only. The Kindgi runtime supplies an implementation over
|
|
439
|
+
* its erasure jobs and ledger.
|
|
440
|
+
*/
|
|
441
|
+
readonly memoryErasures?: MemoryErasureBinding;
|
|
398
442
|
/**
|
|
399
443
|
* Optional. When present, mounts the supervisor proposals surface
|
|
400
444
|
* (`/v1/proposals` list/get/draft, plus lifecycle actions
|
|
@@ -409,17 +453,31 @@ export interface CreateAppInput {
|
|
|
409
453
|
*/
|
|
410
454
|
readonly supervisor?: SupervisorBinding;
|
|
411
455
|
/**
|
|
412
|
-
* Optional.
|
|
413
|
-
*
|
|
414
|
-
*
|
|
415
|
-
*
|
|
416
|
-
|
|
417
|
-
|
|
456
|
+
* Optional. Improvement passes (`POST /v1/proposals/improve`,
|
|
457
|
+
* `/v1/improvement-passes`): the runtime's search for better settings
|
|
458
|
+
* values, written as an improvement proposal. Without it, both answer
|
|
459
|
+
* `501 improve-unsupported`. Mounted with `/v1/proposals`.
|
|
460
|
+
*/
|
|
461
|
+
readonly improvementPasses?: ImprovementPassBinding;
|
|
462
|
+
/**
|
|
463
|
+
* Optional. The key the deployment signs its exports with: an
|
|
464
|
+
* approval's audit bundle (`POST /v1/approvals/:approvalId/audit-bundle`),
|
|
465
|
+
* a run's provenance (`POST /v1/provenance/:runId/export`) and
|
|
466
|
+
* compliance evidence (`POST /v1/compliance/evidence/export`). Its
|
|
467
|
+
* public keys are `GET /v1/export-signing-keys`. Each signed export is
|
|
468
|
+
* recorded as an `export-signed` audit event when `auditEvents` is
|
|
469
|
+
* given.
|
|
418
470
|
*
|
|
419
|
-
*
|
|
420
|
-
*
|
|
421
|
-
*
|
|
422
|
-
* `@kindgi/crypto
|
|
471
|
+
* Without it (and without `signingKey`), the three exports answer
|
|
472
|
+
* `404 signing-not-configured`; the read routes stay mounted. The API
|
|
473
|
+
* doesn't own key material: a deployment plugs a file key
|
|
474
|
+
* (`createEd25519ExportSigner` in `@kindgi/crypto`) or a KMS-backed
|
|
475
|
+
* binding.
|
|
476
|
+
*/
|
|
477
|
+
readonly exportSigning?: ExportSigningBinding;
|
|
478
|
+
/**
|
|
479
|
+
* @deprecated Use `exportSigning`. Still read, as its Ed25519 keys
|
|
480
|
+
* (`exportSignerFromSigningKeyBinding`), when `exportSigning` isn't given.
|
|
423
481
|
*/
|
|
424
482
|
readonly signingKey?: SigningKeyBinding;
|
|
425
483
|
/**
|
|
@@ -442,6 +500,11 @@ export interface CreateAppInput {
|
|
|
442
500
|
* production.
|
|
443
501
|
*/
|
|
444
502
|
readonly blobStorage?: BlobStorageBinding;
|
|
503
|
+
/**
|
|
504
|
+
* The most bytes one artifact upload may carry (`POST /v1/artifacts`);
|
|
505
|
+
* more is `413 artifact-too-large`. Default 100 MB.
|
|
506
|
+
*/
|
|
507
|
+
readonly artifactMaxBytes?: number;
|
|
445
508
|
/**
|
|
446
509
|
* Optional. When present, mounts the read-only capabilities catalog
|
|
447
510
|
* surface (`/v1/capabilities` list, `/v1/capabilities/:capabilityId`
|
|
@@ -557,6 +620,13 @@ export interface CreateAppInput {
|
|
|
557
620
|
* want bespoke persistence substitute their own binding.
|
|
558
621
|
*/
|
|
559
622
|
readonly triggerRegistry?: TriggerRegistryBinding;
|
|
623
|
+
/**
|
|
624
|
+
* The trigger kinds whose admin surface mounts with `triggerRegistry`:
|
|
625
|
+
* `cron` → `/v1/schedules`, `event` → `/v1/event-triggers`, `webhook` →
|
|
626
|
+
* `/v1/webhooks`. Absent: all three. A runtime that fires only some kinds
|
|
627
|
+
* lists those, so nobody registers a trigger that would never fire.
|
|
628
|
+
*/
|
|
629
|
+
readonly triggerKinds?: readonly TriggerKind[];
|
|
560
630
|
/**
|
|
561
631
|
* Optional. When present, mounts the outbound webhook surface at
|
|
562
632
|
* `/v1/webhook-endpoints/*`: endpoints the platform sends signed
|
|
@@ -677,8 +747,10 @@ export interface CreateAppInput {
|
|
|
677
747
|
*/
|
|
678
748
|
readonly session?: SessionConfig;
|
|
679
749
|
/**
|
|
680
|
-
* Optional. When present alongside `sessionStore
|
|
681
|
-
*
|
|
750
|
+
* Optional. When present alongside `sessionStore`, mounts the
|
|
751
|
+
* identity-provider catalog, refresh and logout at `/v1/auth/*`; with
|
|
752
|
+
* `exchangeCode` too, also this package's own OAuth flow
|
|
753
|
+
* (`/login/:providerId` and the callback).
|
|
682
754
|
*
|
|
683
755
|
* Deployments register their OAuth/OIDC providers at boot (or via
|
|
684
756
|
* `POST /v1/auth/providers`); the framework does NOT bake in a
|
|
@@ -686,8 +758,11 @@ export interface CreateAppInput {
|
|
|
686
758
|
*/
|
|
687
759
|
readonly identityProvider?: IdentityProviderBinding;
|
|
688
760
|
/**
|
|
689
|
-
*
|
|
690
|
-
* `POST /v1/auth/
|
|
761
|
+
* Optional: the deployment's own code exchange. With it (and
|
|
762
|
+
* `identityProvider` + `sessionStore`), `POST /v1/auth/login/:providerId`
|
|
763
|
+
* and `POST /v1/auth/callback/:providerId` mount; a deployment whose
|
|
764
|
+
* sign-in runs elsewhere (a browser flow of its own) leaves it out.
|
|
765
|
+
* Called by `POST /v1/auth/callback/:providerId` to exchange the authorization
|
|
691
766
|
* code for provider tokens + userinfo. Deployments implementing
|
|
692
767
|
* `IdentityProviderBinding` typically pair it with their own
|
|
693
768
|
* `exchangeCode` that speaks OAuth 2.0 + PKCE against the provider's
|
|
@@ -711,6 +786,21 @@ export interface CreateAppInput {
|
|
|
711
786
|
* login. Mirror of the `idempotencyStore` caller-plugged pattern.
|
|
712
787
|
*/
|
|
713
788
|
readonly oauthStateStore?: OauthStateStore;
|
|
789
|
+
/**
|
|
790
|
+
* The rate limit on `GET /v1/auth/sign-in-options` (unauthenticated):
|
|
791
|
+
* requests per client per window, and how to tell clients apart.
|
|
792
|
+
* Default: 30 a minute, per nearest (rightmost) `X-Forwarded-For` hop.
|
|
793
|
+
*/
|
|
794
|
+
readonly signInOptionsRateLimit?: SignInOptionsRateLimit;
|
|
795
|
+
/**
|
|
796
|
+
* The emailed sign-in link, when the deployment offers it (it serves the
|
|
797
|
+
* link itself): sign-in options say so, with the captcha's site key.
|
|
798
|
+
*/
|
|
799
|
+
readonly signInEmailLink?: {
|
|
800
|
+
readonly captchaSiteKey?: string;
|
|
801
|
+
/** Whether the link is offered for an email's domain. Absent: every domain. */
|
|
802
|
+
readonly allowedFor?: (emailDomain: string) => Promise<boolean>;
|
|
803
|
+
};
|
|
714
804
|
/**
|
|
715
805
|
* Optional. Signed-deployment ledger — the audit anchor for every
|
|
716
806
|
* `POST /v1/deployments` landing. Caller-plugged per the pattern
|
|
@@ -875,6 +965,21 @@ export interface SessionConfig {
|
|
|
875
965
|
* but coarser inactivity enforcement.
|
|
876
966
|
*/
|
|
877
967
|
readonly touchThrottle?: number;
|
|
968
|
+
/**
|
|
969
|
+
* Browser sessions in a cookie: the middleware reads the session token
|
|
970
|
+
* from it when a request has no `Authorization` header, and refuses a
|
|
971
|
+
* cookie-authenticated unsafe request whose `Origin` isn't allowed
|
|
972
|
+
* (403 `csrf-origin-mismatch`). Absent → session tokens come only in
|
|
973
|
+
* the `Authorization` header.
|
|
974
|
+
*/
|
|
975
|
+
readonly cookie?: SessionCookieOptions;
|
|
976
|
+
/**
|
|
977
|
+
* Whether a person may sign in to the console with an API token
|
|
978
|
+
* (`POST /v1/auth/token-sign-in`): a person's full key is exchanged once
|
|
979
|
+
* for a browser session in `cookie`. Needs `cookie` and a session store.
|
|
980
|
+
* Absent or `false`: the route answers 403 `token-sign-in-off`.
|
|
981
|
+
*/
|
|
982
|
+
readonly tokenSignIn?: boolean;
|
|
878
983
|
}
|
|
879
984
|
|
|
880
985
|
/**
|
|
@@ -894,10 +999,34 @@ export interface ScalarDocsConfig {
|
|
|
894
999
|
readonly theme?: string;
|
|
895
1000
|
}
|
|
896
1001
|
|
|
1002
|
+
/** A token sign-in's session lifetime when `SessionConfig.ttl` is unset: 12 hours. */
|
|
1003
|
+
const DEFAULT_TOKEN_SIGN_IN_TTL_MS = 12 * 60 * 60 * 1000;
|
|
1004
|
+
|
|
897
1005
|
export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
1006
|
+
// A cookie session's value is the token the store minted. A store that
|
|
1007
|
+
// can't resolve its own tokens would put the session id there instead,
|
|
1008
|
+
// and the id is no secret (whoami and the audit trail show it).
|
|
1009
|
+
if (
|
|
1010
|
+
input.session?.cookie !== undefined &&
|
|
1011
|
+
input.sessionStore !== undefined &&
|
|
1012
|
+
input.sessionStore.resolveToken === undefined
|
|
1013
|
+
) {
|
|
1014
|
+
throw new Error(
|
|
1015
|
+
'Cookie sessions need a session store that resolves its own tokens (`resolveToken`): without it, the session id would be the credential.',
|
|
1016
|
+
);
|
|
1017
|
+
}
|
|
898
1018
|
const app = new Hono<AppEnv>();
|
|
899
1019
|
|
|
900
1020
|
const runBinding = input.kernelBinding.run;
|
|
1021
|
+
const exportSigning =
|
|
1022
|
+
input.exportSigning ??
|
|
1023
|
+
(input.signingKey !== undefined
|
|
1024
|
+
? exportSignerFromSigningKeyBinding(input.signingKey)
|
|
1025
|
+
: undefined);
|
|
1026
|
+
const exportOptions = {
|
|
1027
|
+
...(exportSigning !== undefined && { exportSigning }),
|
|
1028
|
+
...(input.auditEvents !== undefined && { auditEvents: input.auditEvents }),
|
|
1029
|
+
};
|
|
901
1030
|
|
|
902
1031
|
// ---------- global middleware ----------
|
|
903
1032
|
app.use('*', requestIdMiddleware());
|
|
@@ -971,6 +1100,7 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
971
1100
|
...(sessionCfg?.touchThrottle !== undefined && {
|
|
972
1101
|
touchThrottleMs: sessionCfg.touchThrottle,
|
|
973
1102
|
}),
|
|
1103
|
+
...(sessionCfg?.cookie !== undefined && { sessionCookie: sessionCfg.cookie }),
|
|
974
1104
|
}),
|
|
975
1105
|
);
|
|
976
1106
|
// Principal construction — runs after bearer so it can read the
|
|
@@ -984,6 +1114,8 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
984
1114
|
if (tenantId !== undefined) c.set('log', c.get('log').child({ tenantId }));
|
|
985
1115
|
await next();
|
|
986
1116
|
});
|
|
1117
|
+
// A key limited to a project names no other one.
|
|
1118
|
+
v1.use('*', refuseOtherProjectForKey());
|
|
987
1119
|
const authorizer: Authorizer | undefined =
|
|
988
1120
|
input.authz !== undefined ? createAuthorizer(input.authz.authzCheckBinding) : undefined;
|
|
989
1121
|
|
|
@@ -1001,6 +1133,15 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
1001
1133
|
runBinding,
|
|
1002
1134
|
{
|
|
1003
1135
|
...(input.eventBus !== undefined && { eventBus: input.eventBus }),
|
|
1136
|
+
...(input.agentRegistry !== undefined &&
|
|
1137
|
+
input.flowRegistry !== undefined && {
|
|
1138
|
+
targetExists: async (tenantId, target) =>
|
|
1139
|
+
target.kind === 'agent'
|
|
1140
|
+
? (await input.agentRegistry?.get({ tenantId, agentId: target.id as never })) !==
|
|
1141
|
+
null
|
|
1142
|
+
: (await input.flowRegistry?.get({ tenantId, flowId: target.id as never })) !==
|
|
1143
|
+
null,
|
|
1144
|
+
}),
|
|
1004
1145
|
...(publicRunTokenLimits !== undefined && {
|
|
1005
1146
|
publicRunTokens: {
|
|
1006
1147
|
mint: (tenantId, runIds) =>
|
|
@@ -1013,7 +1154,7 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
1013
1154
|
);
|
|
1014
1155
|
v1.route(
|
|
1015
1156
|
'/conversations',
|
|
1016
|
-
conversationsRouter(input.conversationBinding, runBinding, input.projectBinding),
|
|
1157
|
+
conversationsRouter(input.conversationBinding, runBinding, input.projectBinding, authorizer),
|
|
1017
1158
|
);
|
|
1018
1159
|
if (publicRunTokenLimits !== undefined) {
|
|
1019
1160
|
v1.route(
|
|
@@ -1028,6 +1169,9 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
1028
1169
|
if (input.tokenAdmin !== undefined) {
|
|
1029
1170
|
v1.route('/tokens', tokensRouter(input.tokenAdmin, authorizer));
|
|
1030
1171
|
}
|
|
1172
|
+
if (input.serviceAccountBinding !== undefined) {
|
|
1173
|
+
v1.route('/service-accounts', serviceAccountsRouter(input.serviceAccountBinding, authorizer));
|
|
1174
|
+
}
|
|
1031
1175
|
// Mount the reviewer roster sub-resource BEFORE the approvals router
|
|
1032
1176
|
// so `/v1/approvals/reviewers/*` resolves here rather than being
|
|
1033
1177
|
// captured by the `:approvalId` param on the approvals router.
|
|
@@ -1043,7 +1187,7 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
1043
1187
|
input.hitlBinding,
|
|
1044
1188
|
runBinding,
|
|
1045
1189
|
{
|
|
1046
|
-
...
|
|
1190
|
+
...exportOptions,
|
|
1047
1191
|
// Inline resume after approval-complete drives
|
|
1048
1192
|
// completeToken. Passing the runHandler here means the route
|
|
1049
1193
|
// calls `runHandler.resumeRun(...)` synchronously in the same
|
|
@@ -1051,11 +1195,12 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
1051
1195
|
// new state (running / completed / re-suspended).
|
|
1052
1196
|
runHandler: input.runHandler,
|
|
1053
1197
|
},
|
|
1198
|
+
authorizer,
|
|
1054
1199
|
),
|
|
1055
1200
|
);
|
|
1056
1201
|
}
|
|
1057
1202
|
if (input.enableObservations === true && input.supervisor !== undefined) {
|
|
1058
|
-
v1.route('/observations', observationsRouter(input.supervisor));
|
|
1203
|
+
v1.route('/observations', observationsRouter(input.supervisor, authorizer));
|
|
1059
1204
|
}
|
|
1060
1205
|
if (input.agentRegistry !== undefined) {
|
|
1061
1206
|
v1.route(
|
|
@@ -1070,6 +1215,17 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
1070
1215
|
...(input.evalRunBinding !== undefined && { evalRuns: input.evalRunBinding }),
|
|
1071
1216
|
...(input.projectBinding !== undefined && { projects: input.projectBinding }),
|
|
1072
1217
|
},
|
|
1218
|
+
{
|
|
1219
|
+
...(input.memory?.semanticSearch !== undefined && {
|
|
1220
|
+
semanticSearch: input.memory.semanticSearch,
|
|
1221
|
+
}),
|
|
1222
|
+
...(input.memory?.agentRemember !== undefined && {
|
|
1223
|
+
remember: input.memory.agentRemember,
|
|
1224
|
+
}),
|
|
1225
|
+
...(input.memory?.conversationRecall !== undefined && {
|
|
1226
|
+
conversationRecall: input.memory.conversationRecall,
|
|
1227
|
+
}),
|
|
1228
|
+
},
|
|
1073
1229
|
),
|
|
1074
1230
|
);
|
|
1075
1231
|
}
|
|
@@ -1098,24 +1254,72 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
1098
1254
|
if (input.guardrailRegistry !== undefined) {
|
|
1099
1255
|
v1.route(
|
|
1100
1256
|
'/guardrails',
|
|
1101
|
-
guardrailsRouter(
|
|
1257
|
+
guardrailsRouter(
|
|
1258
|
+
input.guardrailRegistry,
|
|
1259
|
+
authorizer,
|
|
1260
|
+
input.onGuardrailWrite,
|
|
1261
|
+
input.checkGuardrailConfig,
|
|
1262
|
+
),
|
|
1102
1263
|
);
|
|
1103
1264
|
}
|
|
1104
1265
|
if (input.retention !== undefined) {
|
|
1105
1266
|
v1.route('/retention', retentionRouter(input.retention, authorizer));
|
|
1106
1267
|
}
|
|
1268
|
+
// Before `/memory`, so its routes answer first.
|
|
1269
|
+
if (input.memoryErasures !== undefined) {
|
|
1270
|
+
v1.route('/memory/erasures', memoryErasuresRouter(input.memoryErasures, authorizer));
|
|
1271
|
+
}
|
|
1107
1272
|
if (input.memory !== undefined) {
|
|
1108
|
-
v1.route(
|
|
1273
|
+
v1.route(
|
|
1274
|
+
'/memory',
|
|
1275
|
+
memoryRouter(input.memory, {
|
|
1276
|
+
...(authorizer !== undefined && { authorizer }),
|
|
1277
|
+
...(input.projectBinding !== undefined && { projects: input.projectBinding }),
|
|
1278
|
+
}),
|
|
1279
|
+
);
|
|
1109
1280
|
}
|
|
1110
|
-
if (
|
|
1111
|
-
|
|
1281
|
+
if (
|
|
1282
|
+
input.supervisor !== undefined &&
|
|
1283
|
+
input.agentRegistry !== undefined &&
|
|
1284
|
+
input.blockRegistry !== undefined &&
|
|
1285
|
+
input.evalRunBinding !== undefined &&
|
|
1286
|
+
input.agentReleases !== undefined
|
|
1287
|
+
) {
|
|
1288
|
+
const improveDeps = {
|
|
1289
|
+
...(input.improvementPasses !== undefined && { passes: input.improvementPasses }),
|
|
1290
|
+
agents: input.agentRegistry,
|
|
1291
|
+
blocks: input.blockRegistry,
|
|
1292
|
+
releases: input.agentReleases,
|
|
1293
|
+
};
|
|
1294
|
+
v1.route(
|
|
1295
|
+
'/proposals',
|
|
1296
|
+
proposalsRouter(
|
|
1297
|
+
input.supervisor,
|
|
1298
|
+
{
|
|
1299
|
+
agents: input.agentRegistry,
|
|
1300
|
+
blocks: input.blockRegistry,
|
|
1301
|
+
evalRuns: input.evalRunBinding,
|
|
1302
|
+
releases: input.agentReleases,
|
|
1303
|
+
...(input.projectBinding !== undefined && { projects: input.projectBinding }),
|
|
1304
|
+
},
|
|
1305
|
+
authorizer,
|
|
1306
|
+
(r) => mountImproveRoute(r, improveDeps, authorizer),
|
|
1307
|
+
),
|
|
1308
|
+
);
|
|
1309
|
+
v1.route('/improvement-passes', improvementPassesRouter(input.improvementPasses, authorizer));
|
|
1112
1310
|
}
|
|
1311
|
+
v1.route('/export-signing-keys', exportSigningKeysRouter(exportSigning));
|
|
1113
1312
|
v1.route(
|
|
1114
1313
|
'/provenance',
|
|
1115
|
-
provenanceRouter(
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1314
|
+
provenanceRouter(
|
|
1315
|
+
input.provenanceBinding,
|
|
1316
|
+
{
|
|
1317
|
+
conversationBinding: input.conversationBinding,
|
|
1318
|
+
runBinding,
|
|
1319
|
+
...exportOptions,
|
|
1320
|
+
},
|
|
1321
|
+
authorizer,
|
|
1322
|
+
),
|
|
1119
1323
|
);
|
|
1120
1324
|
if (
|
|
1121
1325
|
input.auditEvents !== undefined &&
|
|
@@ -1124,22 +1328,40 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
1124
1328
|
) {
|
|
1125
1329
|
v1.route(
|
|
1126
1330
|
'/compliance',
|
|
1127
|
-
complianceRouter(
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1331
|
+
complianceRouter(
|
|
1332
|
+
{
|
|
1333
|
+
auditEvents: input.auditEvents,
|
|
1334
|
+
classifier: input.complianceClassifier,
|
|
1335
|
+
...(exportSigning !== undefined && { exportSigning }),
|
|
1336
|
+
},
|
|
1337
|
+
authorizer,
|
|
1338
|
+
),
|
|
1133
1339
|
);
|
|
1134
1340
|
}
|
|
1135
1341
|
if (input.blobStorage !== undefined) {
|
|
1136
|
-
v1.route(
|
|
1342
|
+
v1.route(
|
|
1343
|
+
'/artifacts',
|
|
1344
|
+
artifactsRouter(input.blobStorage, {
|
|
1345
|
+
runBinding,
|
|
1346
|
+
...(input.projectBinding !== undefined && { projectBinding: input.projectBinding }),
|
|
1347
|
+
...(authorizer !== undefined && { authorizer }),
|
|
1348
|
+
...(input.artifactMaxBytes !== undefined && { maxBytes: input.artifactMaxBytes }),
|
|
1349
|
+
}),
|
|
1350
|
+
);
|
|
1137
1351
|
}
|
|
1138
1352
|
if (input.capabilityRegistry !== undefined) {
|
|
1139
|
-
v1.route('/capabilities', capabilitiesRouter(input.capabilityRegistry));
|
|
1353
|
+
v1.route('/capabilities', capabilitiesRouter(input.capabilityRegistry, authorizer));
|
|
1140
1354
|
}
|
|
1141
1355
|
if (input.providerRegistry !== undefined) {
|
|
1142
|
-
v1.route(
|
|
1356
|
+
v1.route(
|
|
1357
|
+
'/providers',
|
|
1358
|
+
providersRouter(
|
|
1359
|
+
input.providerRegistry,
|
|
1360
|
+
input.onProviderWrite,
|
|
1361
|
+
input.adapterFactories,
|
|
1362
|
+
authorizer,
|
|
1363
|
+
),
|
|
1364
|
+
);
|
|
1143
1365
|
}
|
|
1144
1366
|
if (input.mcpEndpointRegistry !== undefined) {
|
|
1145
1367
|
v1.route(
|
|
@@ -1159,28 +1381,43 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
1159
1381
|
...(input.identityDirectory !== undefined && { directory: input.identityDirectory }),
|
|
1160
1382
|
...(input.sessionStore !== undefined && { sessionStore: input.sessionStore }),
|
|
1161
1383
|
...(input.reviewerBinding !== undefined && { reviewerBinding: input.reviewerBinding }),
|
|
1384
|
+
...(authorizer !== undefined && { authorizer }),
|
|
1385
|
+
...(input.personGrants !== undefined && { personGrants: input.personGrants }),
|
|
1162
1386
|
}),
|
|
1163
1387
|
);
|
|
1164
1388
|
if (input.cost !== undefined) {
|
|
1165
|
-
v1.route('/cost', costRouter(input.cost));
|
|
1389
|
+
v1.route('/cost', costRouter(input.cost, authorizer));
|
|
1166
1390
|
}
|
|
1167
1391
|
if (input.adapterRegistry !== undefined) {
|
|
1168
|
-
v1.route(
|
|
1392
|
+
v1.route(
|
|
1393
|
+
'/adapters',
|
|
1394
|
+
adaptersRouter(input.adapterRegistry, input.adapterFactories, authorizer),
|
|
1395
|
+
);
|
|
1169
1396
|
}
|
|
1170
1397
|
// Trigger admin surfaces. Three sibling routers over the same
|
|
1171
1398
|
// `TriggerRegistryBinding` — each pins its own kind. There is no
|
|
1172
1399
|
// external webhook receiver route here (it would need
|
|
1173
1400
|
// unauthenticated tenant resolution).
|
|
1174
1401
|
if (input.triggerRegistry !== undefined) {
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1402
|
+
const kinds = new Set<TriggerKind>(input.triggerKinds ?? TRIGGER_KINDS);
|
|
1403
|
+
if (kinds.has('cron')) {
|
|
1404
|
+
v1.route(
|
|
1405
|
+
'/schedules',
|
|
1406
|
+
schedulesRouter(input.triggerRegistry, authorizer, input.projectBinding),
|
|
1407
|
+
);
|
|
1408
|
+
}
|
|
1409
|
+
if (kinds.has('event')) {
|
|
1410
|
+
v1.route('/event-triggers', eventTriggersRouter(input.triggerRegistry, authorizer));
|
|
1411
|
+
}
|
|
1412
|
+
if (kinds.has('webhook')) {
|
|
1413
|
+
v1.route('/webhooks', webhooksRouter(input.triggerRegistry, authorizer));
|
|
1414
|
+
}
|
|
1178
1415
|
}
|
|
1179
1416
|
if (input.webhookEndpoints !== undefined) {
|
|
1180
|
-
v1.route('/webhook-endpoints', webhookEndpointsRouter(input.webhookEndpoints));
|
|
1417
|
+
v1.route('/webhook-endpoints', webhookEndpointsRouter(input.webhookEndpoints, authorizer));
|
|
1181
1418
|
}
|
|
1182
1419
|
if (input.policyRegistry !== undefined) {
|
|
1183
|
-
v1.route('/policies', policiesRouter(input.policyRegistry));
|
|
1420
|
+
v1.route('/policies', policiesRouter(input.policyRegistry, authorizer));
|
|
1184
1421
|
}
|
|
1185
1422
|
if (input.evalSuiteRegistry !== undefined) {
|
|
1186
1423
|
v1.route('/eval-suites', evalSuitesRouter(input.evalSuiteRegistry, authorizer));
|
|
@@ -1243,6 +1480,7 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
1243
1480
|
input.projectMembershipBinding,
|
|
1244
1481
|
tenantHierarchyBinding,
|
|
1245
1482
|
authorizer,
|
|
1483
|
+
input.identityDirectory,
|
|
1246
1484
|
),
|
|
1247
1485
|
);
|
|
1248
1486
|
}
|
|
@@ -1294,7 +1532,7 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
1294
1532
|
// Mounted on its own: a deployment can trust keys before it accepts
|
|
1295
1533
|
// deployments.
|
|
1296
1534
|
if (input.signingKeyRegistry !== undefined) {
|
|
1297
|
-
v1.route('/signing-keys', signingKeysRouter(input.signingKeyRegistry));
|
|
1535
|
+
v1.route('/signing-keys', signingKeysRouter(input.signingKeyRegistry, authorizer));
|
|
1298
1536
|
}
|
|
1299
1537
|
if (
|
|
1300
1538
|
input.deploymentRegistry !== undefined &&
|
|
@@ -1303,33 +1541,36 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
1303
1541
|
) {
|
|
1304
1542
|
v1.route(
|
|
1305
1543
|
'/deployments',
|
|
1306
|
-
deploymentsRouter(
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1544
|
+
deploymentsRouter(
|
|
1545
|
+
{
|
|
1546
|
+
deploymentRegistry: input.deploymentRegistry,
|
|
1547
|
+
signingKeyRegistry: input.signingKeyRegistry,
|
|
1548
|
+
imageRegistry: input.imageRegistry,
|
|
1549
|
+
...(input.toolRegistry !== undefined && { toolRegistry: input.toolRegistry }),
|
|
1550
|
+
...(input.blockRegistry !== undefined && { blockRegistry: input.blockRegistry }),
|
|
1551
|
+
...(input.guardrailRegistry !== undefined && {
|
|
1552
|
+
guardrailRegistry: input.guardrailRegistry,
|
|
1553
|
+
}),
|
|
1554
|
+
...(input.agentRegistry !== undefined && { agentRegistry: input.agentRegistry }),
|
|
1555
|
+
...(input.flowRegistry !== undefined && { flowRegistry: input.flowRegistry }),
|
|
1556
|
+
...(input.agentReleases !== undefined && { liveVersions: input.agentReleases.live }),
|
|
1557
|
+
// The deployments router's agents publish loop resolves the
|
|
1558
|
+
// Default project through this binding. Optional at wiring so
|
|
1559
|
+
// app compositions without a project binding still boot; the loop
|
|
1560
|
+
// fails fast at runtime if agents are in the deployment index
|
|
1561
|
+
// but the binding is absent.
|
|
1562
|
+
...(input.projectBinding !== undefined && { projectBinding: input.projectBinding }),
|
|
1563
|
+
// POST /v1/deployments/:deploymentId/secrets needs the
|
|
1564
|
+
// secretsBinding. Absent binding → the route answers 500 with an
|
|
1565
|
+
// operator-actionable message.
|
|
1566
|
+
...(input.secretsBinding !== undefined && { secretsBinding: input.secretsBinding }),
|
|
1567
|
+
// A deploy registers tools and guardrails: the same cache hooks
|
|
1568
|
+
// `POST /v1/tools` / `POST /v1/guardrails` call.
|
|
1569
|
+
...(input.onToolWrite !== undefined && { onToolWrite: input.onToolWrite }),
|
|
1570
|
+
...(input.onGuardrailWrite !== undefined && { onGuardrailWrite: input.onGuardrailWrite }),
|
|
1571
|
+
},
|
|
1572
|
+
authorizer,
|
|
1573
|
+
),
|
|
1333
1574
|
);
|
|
1334
1575
|
}
|
|
1335
1576
|
if (input.evalRunBinding !== undefined) {
|
|
@@ -1348,6 +1589,10 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
1348
1589
|
...(input.toolRegistry !== undefined && { tools: input.toolRegistry }),
|
|
1349
1590
|
}
|
|
1350
1591
|
: undefined,
|
|
1592
|
+
input.agentRegistry !== undefined && input.blockRegistry !== undefined
|
|
1593
|
+
? { agents: input.agentRegistry, blocks: input.blockRegistry }
|
|
1594
|
+
: undefined,
|
|
1595
|
+
authorizer,
|
|
1351
1596
|
);
|
|
1352
1597
|
v1.route('/eval-suites', evalRuns.start);
|
|
1353
1598
|
v1.route('/eval-runs', evalRuns.readback);
|
|
@@ -1360,24 +1605,65 @@ export function createApp(input: CreateAppInput): Hono<AppEnv> {
|
|
|
1360
1605
|
// reach it), and the callback sub-router mounts OUTSIDE the bearer
|
|
1361
1606
|
// chain at `/v1/auth/callback/*` because the redirect from the
|
|
1362
1607
|
// provider carries no framework token yet.
|
|
1363
|
-
if (
|
|
1364
|
-
input.sessionStore !== undefined &&
|
|
1365
|
-
input.identityProvider !== undefined &&
|
|
1366
|
-
input.exchangeCode !== undefined
|
|
1367
|
-
) {
|
|
1608
|
+
if (input.sessionStore !== undefined && input.identityProvider !== undefined) {
|
|
1368
1609
|
const routers = authRouters({
|
|
1369
1610
|
sessionStore: input.sessionStore,
|
|
1370
1611
|
identityProvider: input.identityProvider,
|
|
1371
|
-
exchangeCode: input.exchangeCode,
|
|
1612
|
+
...(input.exchangeCode !== undefined && { exchangeCode: input.exchangeCode }),
|
|
1372
1613
|
...(input.refreshToken !== undefined && { refreshToken: input.refreshToken }),
|
|
1373
1614
|
stateStore: input.oauthStateStore ?? createInMemoryOauthStateStore(),
|
|
1615
|
+
...(authorizer !== undefined && { authorizer }),
|
|
1616
|
+
...(input.auditEvents !== undefined && { auditEvents: input.auditEvents }),
|
|
1374
1617
|
});
|
|
1375
1618
|
v1.route('/auth', routers.authed);
|
|
1376
1619
|
// Callback mounts on the parent `app` under /v1/auth/callback so it
|
|
1377
1620
|
// bypasses the bearer chain. The v1 router's use('*', bearer) has
|
|
1378
1621
|
// already been installed above, so we mount at the parent scope.
|
|
1379
|
-
|
|
1622
|
+
// Only the deployment's own code exchange serves it.
|
|
1623
|
+
if (input.exchangeCode !== undefined) app.route('/v1/auth/callback', routers.callback);
|
|
1624
|
+
}
|
|
1625
|
+
// How a person can sign in, before anyone is: outside the bearer chain
|
|
1626
|
+
// too (mounted ahead of `/v1`, like the callback). Always mounted, so the
|
|
1627
|
+
// console and `kindgi doctor` get a definite answer even when there is no
|
|
1628
|
+
// way in at all: the case an operator most needs to hear about.
|
|
1629
|
+
const cookieSessions = input.sessionStore !== undefined && input.session?.cookie !== undefined;
|
|
1630
|
+
const tokenSignIn = cookieSessions && input.session?.tokenSignIn === true;
|
|
1631
|
+
app.route(
|
|
1632
|
+
'/v1/auth/sign-in-options',
|
|
1633
|
+
signInOptionsRouter({
|
|
1634
|
+
...(input.identityProvider !== undefined && { identityProvider: input.identityProvider }),
|
|
1635
|
+
tokenSignIn,
|
|
1636
|
+
...(input.signInOptionsRateLimit !== undefined && {
|
|
1637
|
+
rateLimit: input.signInOptionsRateLimit,
|
|
1638
|
+
}),
|
|
1639
|
+
...(input.signInEmailLink !== undefined && { emailLink: input.signInEmailLink }),
|
|
1640
|
+
}),
|
|
1641
|
+
);
|
|
1642
|
+
// Browser sessions need a way out even without identity providers
|
|
1643
|
+
// (which bring their own `/auth` routes, logout included).
|
|
1644
|
+
if (cookieSessions && input.identityProvider === undefined && input.sessionStore !== undefined) {
|
|
1645
|
+
v1.post('/auth/logout', logoutHandler(input.sessionStore, input.auditEvents));
|
|
1380
1646
|
}
|
|
1647
|
+
// A person signs in to the console with an API token: inside the bearer
|
|
1648
|
+
// chain (the token arrives in `Authorization`). Always mounted: without
|
|
1649
|
+
// browser sessions, or unless the deployment allows it, it refuses with
|
|
1650
|
+
// 403 token-sign-in-off.
|
|
1651
|
+
v1.route(
|
|
1652
|
+
'/auth/token-sign-in',
|
|
1653
|
+
tokenSignInRouter(
|
|
1654
|
+
input.sessionStore !== undefined &&
|
|
1655
|
+
input.session?.cookie !== undefined &&
|
|
1656
|
+
input.session.tokenSignIn === true
|
|
1657
|
+
? {
|
|
1658
|
+
enabled: true,
|
|
1659
|
+
sessionStore: input.sessionStore,
|
|
1660
|
+
ttlMs: input.session.ttl ?? DEFAULT_TOKEN_SIGN_IN_TTL_MS,
|
|
1661
|
+
cookieName: input.session.cookie.name ?? SESSION_COOKIE_NAME,
|
|
1662
|
+
...(input.auditEvents !== undefined && { auditEvents: input.auditEvents }),
|
|
1663
|
+
}
|
|
1664
|
+
: { enabled: false },
|
|
1665
|
+
),
|
|
1666
|
+
);
|
|
1381
1667
|
app.route('/v1', v1);
|
|
1382
1668
|
|
|
1383
1669
|
// ---------- S3-compat surface (/s3/*, SigV4 auth) ----------
|