@kindgi/api 0.0.0-bootstrap.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +216 -1
- package/dist/adapter-binding.d.ts +177 -0
- package/dist/adapter-binding.d.ts.map +1 -0
- package/dist/adapter-binding.js +12 -0
- package/dist/adapter-binding.js.map +1 -0
- package/dist/agent-binding.d.ts +207 -0
- package/dist/agent-binding.d.ts.map +1 -0
- package/dist/agent-binding.js +4 -0
- package/dist/agent-binding.js.map +1 -0
- package/dist/app.d.ts +770 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +397 -0
- package/dist/app.js.map +1 -0
- package/dist/capability-binding.d.ts +76 -0
- package/dist/capability-binding.d.ts.map +1 -0
- package/dist/capability-binding.js +4 -0
- package/dist/capability-binding.js.map +1 -0
- package/dist/cost-binding.d.ts +175 -0
- package/dist/cost-binding.d.ts.map +1 -0
- package/dist/cost-binding.js +13 -0
- package/dist/cost-binding.js.map +1 -0
- package/dist/deployment-binding.d.ts +201 -0
- package/dist/deployment-binding.d.ts.map +1 -0
- package/dist/deployment-binding.js +4 -0
- package/dist/deployment-binding.js.map +1 -0
- package/dist/env-binding.d.ts +132 -0
- package/dist/env-binding.d.ts.map +1 -0
- package/dist/env-binding.js +4 -0
- package/dist/env-binding.js.map +1 -0
- package/dist/errors.d.ts +37 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +268 -0
- package/dist/errors.js.map +1 -0
- package/dist/eval-run-binding.d.ts +196 -0
- package/dist/eval-run-binding.d.ts.map +1 -0
- package/dist/eval-run-binding.js +16 -0
- package/dist/eval-run-binding.js.map +1 -0
- package/dist/eval-run-dispatcher.d.ts +131 -0
- package/dist/eval-run-dispatcher.d.ts.map +1 -0
- package/dist/eval-run-dispatcher.js +368 -0
- package/dist/eval-run-dispatcher.js.map +1 -0
- package/dist/eval-suite-binding.d.ts +227 -0
- package/dist/eval-suite-binding.d.ts.map +1 -0
- package/dist/eval-suite-binding.js +24 -0
- package/dist/eval-suite-binding.js.map +1 -0
- package/dist/event-bus-binding.d.ts +107 -0
- package/dist/event-bus-binding.d.ts.map +1 -0
- package/dist/event-bus-binding.js +5 -0
- package/dist/event-bus-binding.js.map +1 -0
- package/dist/flow-binding.d.ts +194 -0
- package/dist/flow-binding.d.ts.map +1 -0
- package/dist/flow-binding.js +4 -0
- package/dist/flow-binding.js.map +1 -0
- package/dist/guardrail-binding.d.ts +138 -0
- package/dist/guardrail-binding.d.ts.map +1 -0
- package/dist/guardrail-binding.js +4 -0
- package/dist/guardrail-binding.js.map +1 -0
- package/dist/handler-binding.d.ts +126 -0
- package/dist/handler-binding.d.ts.map +1 -0
- package/dist/handler-binding.js +4 -0
- package/dist/handler-binding.js.map +1 -0
- package/dist/hitl-binding.d.ts +115 -0
- package/dist/hitl-binding.d.ts.map +1 -0
- package/dist/hitl-binding.js +4 -0
- package/dist/hitl-binding.js.map +1 -0
- package/dist/identity-directory-binding.d.ts +116 -0
- package/dist/identity-directory-binding.d.ts.map +1 -0
- package/dist/identity-directory-binding.js +4 -0
- package/dist/identity-directory-binding.js.map +1 -0
- package/dist/identity-provider-binding.d.ts +184 -0
- package/dist/identity-provider-binding.d.ts.map +1 -0
- package/dist/identity-provider-binding.js +4 -0
- package/dist/identity-provider-binding.js.map +1 -0
- package/dist/image-registry-binding.d.ts +165 -0
- package/dist/image-registry-binding.d.ts.map +1 -0
- package/dist/image-registry-binding.js +4 -0
- package/dist/image-registry-binding.js.map +1 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/key-management-binding.d.ts +101 -0
- package/dist/key-management-binding.d.ts.map +1 -0
- package/dist/key-management-binding.js +4 -0
- package/dist/key-management-binding.js.map +1 -0
- package/dist/mcp-endpoint-binding.d.ts +312 -0
- package/dist/mcp-endpoint-binding.d.ts.map +1 -0
- package/dist/mcp-endpoint-binding.js +12 -0
- package/dist/mcp-endpoint-binding.js.map +1 -0
- package/dist/memory-binding.d.ts +209 -0
- package/dist/memory-binding.d.ts.map +1 -0
- package/dist/memory-binding.js +4 -0
- package/dist/memory-binding.js.map +1 -0
- package/dist/middleware/auth.d.ts +168 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +247 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/authorize.d.ts +26 -0
- package/dist/middleware/authorize.d.ts.map +1 -0
- package/dist/middleware/authorize.js +65 -0
- package/dist/middleware/authorize.js.map +1 -0
- package/dist/middleware/error-mapper.d.ts +20 -0
- package/dist/middleware/error-mapper.d.ts.map +1 -0
- package/dist/middleware/error-mapper.js +34 -0
- package/dist/middleware/error-mapper.js.map +1 -0
- package/dist/middleware/idempotency.d.ts +43 -0
- package/dist/middleware/idempotency.d.ts.map +1 -0
- package/dist/middleware/idempotency.js +118 -0
- package/dist/middleware/idempotency.js.map +1 -0
- package/dist/middleware/principal.d.ts +4 -0
- package/dist/middleware/principal.d.ts.map +1 -0
- package/dist/middleware/principal.js +42 -0
- package/dist/middleware/principal.js.map +1 -0
- package/dist/middleware/public-run-routes.d.ts +16 -0
- package/dist/middleware/public-run-routes.d.ts.map +1 -0
- package/dist/middleware/public-run-routes.js +43 -0
- package/dist/middleware/public-run-routes.js.map +1 -0
- package/dist/middleware/request-id.d.ts +14 -0
- package/dist/middleware/request-id.d.ts.map +1 -0
- package/dist/middleware/request-id.js +24 -0
- package/dist/middleware/request-id.js.map +1 -0
- package/dist/middleware/sigv4-verify.d.ts +64 -0
- package/dist/middleware/sigv4-verify.d.ts.map +1 -0
- package/dist/middleware/sigv4-verify.js +286 -0
- package/dist/middleware/sigv4-verify.js.map +1 -0
- package/dist/middleware/sigv4.d.ts +25 -0
- package/dist/middleware/sigv4.d.ts.map +1 -0
- package/dist/middleware/sigv4.js +120 -0
- package/dist/middleware/sigv4.js.map +1 -0
- package/dist/openapi/generate.d.ts +15 -0
- package/dist/openapi/generate.d.ts.map +1 -0
- package/dist/openapi/generate.js +241 -0
- package/dist/openapi/generate.js.map +1 -0
- package/dist/openapi/operations.d.ts +70 -0
- package/dist/openapi/operations.d.ts.map +1 -0
- package/dist/openapi/operations.js +5050 -0
- package/dist/openapi/operations.js.map +1 -0
- package/dist/openapi/schemas.d.ts +590 -0
- package/dist/openapi/schemas.d.ts.map +1 -0
- package/dist/openapi/schemas.js +5820 -0
- package/dist/openapi/schemas.js.map +1 -0
- package/dist/provenance-binding.d.ts +116 -0
- package/dist/provenance-binding.d.ts.map +1 -0
- package/dist/provenance-binding.js +31 -0
- package/dist/provenance-binding.js.map +1 -0
- package/dist/provider-binding.d.ts +174 -0
- package/dist/provider-binding.d.ts.map +1 -0
- package/dist/provider-binding.js +4 -0
- package/dist/provider-binding.js.map +1 -0
- package/dist/public-run-token.d.ts +97 -0
- package/dist/public-run-token.d.ts.map +1 -0
- package/dist/public-run-token.js +167 -0
- package/dist/public-run-token.js.map +1 -0
- package/dist/retention-binding.d.ts +69 -0
- package/dist/retention-binding.d.ts.map +1 -0
- package/dist/retention-binding.js +4 -0
- package/dist/retention-binding.js.map +1 -0
- package/dist/reviewer-binding.d.ts +84 -0
- package/dist/reviewer-binding.d.ts.map +1 -0
- package/dist/reviewer-binding.js +4 -0
- package/dist/reviewer-binding.js.map +1 -0
- package/dist/rotation-status-store.d.ts +96 -0
- package/dist/rotation-status-store.d.ts.map +1 -0
- package/dist/rotation-status-store.js +106 -0
- package/dist/rotation-status-store.js.map +1 -0
- package/dist/routes/adapters.d.ts +29 -0
- package/dist/routes/adapters.d.ts.map +1 -0
- package/dist/routes/adapters.js +230 -0
- package/dist/routes/adapters.js.map +1 -0
- package/dist/routes/agents.d.ts +17 -0
- package/dist/routes/agents.d.ts.map +1 -0
- package/dist/routes/agents.js +342 -0
- package/dist/routes/agents.js.map +1 -0
- package/dist/routes/approvals.d.ts +37 -0
- package/dist/routes/approvals.d.ts.map +1 -0
- package/dist/routes/approvals.js +551 -0
- package/dist/routes/approvals.js.map +1 -0
- package/dist/routes/artifacts.d.ts +25 -0
- package/dist/routes/artifacts.d.ts.map +1 -0
- package/dist/routes/artifacts.js +265 -0
- package/dist/routes/artifacts.js.map +1 -0
- package/dist/routes/audit.d.ts +6 -0
- package/dist/routes/audit.d.ts.map +1 -0
- package/dist/routes/audit.js +162 -0
- package/dist/routes/audit.js.map +1 -0
- package/dist/routes/auth.d.ts +47 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/auth.js +630 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/capabilities.d.ts +14 -0
- package/dist/routes/capabilities.d.ts.map +1 -0
- package/dist/routes/capabilities.js +62 -0
- package/dist/routes/capabilities.js.map +1 -0
- package/dist/routes/compliance.d.ts +37 -0
- package/dist/routes/compliance.d.ts.map +1 -0
- package/dist/routes/compliance.js +321 -0
- package/dist/routes/compliance.js.map +1 -0
- package/dist/routes/conversations.d.ts +13 -0
- package/dist/routes/conversations.d.ts.map +1 -0
- package/dist/routes/conversations.js +295 -0
- package/dist/routes/conversations.js.map +1 -0
- package/dist/routes/cost.d.ts +24 -0
- package/dist/routes/cost.d.ts.map +1 -0
- package/dist/routes/cost.js +243 -0
- package/dist/routes/cost.js.map +1 -0
- package/dist/routes/deployments.d.ts +122 -0
- package/dist/routes/deployments.d.ts.map +1 -0
- package/dist/routes/deployments.js +1036 -0
- package/dist/routes/deployments.js.map +1 -0
- package/dist/routes/env.d.ts +62 -0
- package/dist/routes/env.d.ts.map +1 -0
- package/dist/routes/env.js +311 -0
- package/dist/routes/env.js.map +1 -0
- package/dist/routes/eval-runs.d.ts +28 -0
- package/dist/routes/eval-runs.d.ts.map +1 -0
- package/dist/routes/eval-runs.js +479 -0
- package/dist/routes/eval-runs.js.map +1 -0
- package/dist/routes/eval-suites.d.ts +24 -0
- package/dist/routes/eval-suites.d.ts.map +1 -0
- package/dist/routes/eval-suites.js +381 -0
- package/dist/routes/eval-suites.js.map +1 -0
- package/dist/routes/event-triggers.d.ts +12 -0
- package/dist/routes/event-triggers.d.ts.map +1 -0
- package/dist/routes/event-triggers.js +218 -0
- package/dist/routes/event-triggers.js.map +1 -0
- package/dist/routes/flows.d.ts +23 -0
- package/dist/routes/flows.d.ts.map +1 -0
- package/dist/routes/flows.js +344 -0
- package/dist/routes/flows.js.map +1 -0
- package/dist/routes/guardrails.d.ts +33 -0
- package/dist/routes/guardrails.d.ts.map +1 -0
- package/dist/routes/guardrails.js +236 -0
- package/dist/routes/guardrails.js.map +1 -0
- package/dist/routes/identity.d.ts +39 -0
- package/dist/routes/identity.d.ts.map +1 -0
- package/dist/routes/identity.js +138 -0
- package/dist/routes/identity.js.map +1 -0
- package/dist/routes/mcp.d.ts +23 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +727 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/memory.d.ts +16 -0
- package/dist/routes/memory.d.ts.map +1 -0
- package/dist/routes/memory.js +353 -0
- package/dist/routes/memory.js.map +1 -0
- package/dist/routes/observations.d.ts +19 -0
- package/dist/routes/observations.d.ts.map +1 -0
- package/dist/routes/observations.js +135 -0
- package/dist/routes/observations.js.map +1 -0
- package/dist/routes/orgs.d.ts +24 -0
- package/dist/routes/orgs.d.ts.map +1 -0
- package/dist/routes/orgs.js +208 -0
- package/dist/routes/orgs.js.map +1 -0
- package/dist/routes/pagination.d.ts +18 -0
- package/dist/routes/pagination.d.ts.map +1 -0
- package/dist/routes/pagination.js +35 -0
- package/dist/routes/pagination.js.map +1 -0
- package/dist/routes/policies.d.ts +23 -0
- package/dist/routes/policies.d.ts.map +1 -0
- package/dist/routes/policies.js +314 -0
- package/dist/routes/policies.js.map +1 -0
- package/dist/routes/projects.d.ts +45 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/routes/projects.js +485 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/proposals.d.ts +24 -0
- package/dist/routes/proposals.d.ts.map +1 -0
- package/dist/routes/proposals.js +581 -0
- package/dist/routes/proposals.js.map +1 -0
- package/dist/routes/provenance.d.ts +34 -0
- package/dist/routes/provenance.d.ts.map +1 -0
- package/dist/routes/provenance.js +274 -0
- package/dist/routes/provenance.js.map +1 -0
- package/dist/routes/providers.d.ts +32 -0
- package/dist/routes/providers.d.ts.map +1 -0
- package/dist/routes/providers.js +490 -0
- package/dist/routes/providers.js.map +1 -0
- package/dist/routes/public-run-tokens.d.ts +17 -0
- package/dist/routes/public-run-tokens.d.ts.map +1 -0
- package/dist/routes/public-run-tokens.js +69 -0
- package/dist/routes/public-run-tokens.js.map +1 -0
- package/dist/routes/retention.d.ts +19 -0
- package/dist/routes/retention.d.ts.map +1 -0
- package/dist/routes/retention.js +152 -0
- package/dist/routes/retention.js.map +1 -0
- package/dist/routes/reviewers.d.ts +5 -0
- package/dist/routes/reviewers.d.ts.map +1 -0
- package/dist/routes/reviewers.js +161 -0
- package/dist/routes/reviewers.js.map +1 -0
- package/dist/routes/runs.d.ts +34 -0
- package/dist/routes/runs.d.ts.map +1 -0
- package/dist/routes/runs.js +705 -0
- package/dist/routes/runs.js.map +1 -0
- package/dist/routes/s3.d.ts +31 -0
- package/dist/routes/s3.d.ts.map +1 -0
- package/dist/routes/s3.js +433 -0
- package/dist/routes/s3.js.map +1 -0
- package/dist/routes/schedules.d.ts +20 -0
- package/dist/routes/schedules.d.ts.map +1 -0
- package/dist/routes/schedules.js +234 -0
- package/dist/routes/schedules.js.map +1 -0
- package/dist/routes/scope-params.d.ts +57 -0
- package/dist/routes/scope-params.d.ts.map +1 -0
- package/dist/routes/scope-params.js +105 -0
- package/dist/routes/scope-params.js.map +1 -0
- package/dist/routes/secret-ref.d.ts +20 -0
- package/dist/routes/secret-ref.d.ts.map +1 -0
- package/dist/routes/secret-ref.js +42 -0
- package/dist/routes/secret-ref.js.map +1 -0
- package/dist/routes/secrets.d.ts +53 -0
- package/dist/routes/secrets.d.ts.map +1 -0
- package/dist/routes/secrets.js +715 -0
- package/dist/routes/secrets.js.map +1 -0
- package/dist/routes/signing-keys.d.ts +23 -0
- package/dist/routes/signing-keys.d.ts.map +1 -0
- package/dist/routes/signing-keys.js +212 -0
- package/dist/routes/signing-keys.js.map +1 -0
- package/dist/routes/sse.d.ts +58 -0
- package/dist/routes/sse.d.ts.map +1 -0
- package/dist/routes/sse.js +92 -0
- package/dist/routes/sse.js.map +1 -0
- package/dist/routes/teams.d.ts +30 -0
- package/dist/routes/teams.d.ts.map +1 -0
- package/dist/routes/teams.js +443 -0
- package/dist/routes/teams.js.map +1 -0
- package/dist/routes/tenant.d.ts +57 -0
- package/dist/routes/tenant.d.ts.map +1 -0
- package/dist/routes/tenant.js +352 -0
- package/dist/routes/tenant.js.map +1 -0
- package/dist/routes/tokens.d.ts +14 -0
- package/dist/routes/tokens.d.ts.map +1 -0
- package/dist/routes/tokens.js +231 -0
- package/dist/routes/tokens.js.map +1 -0
- package/dist/routes/tools.d.ts +33 -0
- package/dist/routes/tools.d.ts.map +1 -0
- package/dist/routes/tools.js +380 -0
- package/dist/routes/tools.js.map +1 -0
- package/dist/routes/webhook-endpoints.d.ts +10 -0
- package/dist/routes/webhook-endpoints.d.ts.map +1 -0
- package/dist/routes/webhook-endpoints.js +407 -0
- package/dist/routes/webhook-endpoints.js.map +1 -0
- package/dist/routes/webhooks.d.ts +21 -0
- package/dist/routes/webhooks.d.ts.map +1 -0
- package/dist/routes/webhooks.js +228 -0
- package/dist/routes/webhooks.js.map +1 -0
- package/dist/s3-credential-binding.d.ts +54 -0
- package/dist/s3-credential-binding.d.ts.map +1 -0
- package/dist/s3-credential-binding.js +4 -0
- package/dist/s3-credential-binding.js.map +1 -0
- package/dist/secrets-binding.d.ts +281 -0
- package/dist/secrets-binding.d.ts.map +1 -0
- package/dist/secrets-binding.js +10 -0
- package/dist/secrets-binding.js.map +1 -0
- package/dist/secrets-provider-binding.d.ts +164 -0
- package/dist/secrets-provider-binding.d.ts.map +1 -0
- package/dist/secrets-provider-binding.js +4 -0
- package/dist/secrets-provider-binding.js.map +1 -0
- package/dist/session-store-binding.d.ts +148 -0
- package/dist/session-store-binding.d.ts.map +1 -0
- package/dist/session-store-binding.js +4 -0
- package/dist/session-store-binding.js.map +1 -0
- package/dist/signing-key-binding.d.ts +210 -0
- package/dist/signing-key-binding.d.ts.map +1 -0
- package/dist/signing-key-binding.js +4 -0
- package/dist/signing-key-binding.js.map +1 -0
- package/dist/state-store-binding.d.ts +53 -0
- package/dist/state-store-binding.d.ts.map +1 -0
- package/dist/state-store-binding.js +38 -0
- package/dist/state-store-binding.js.map +1 -0
- package/dist/supervisor-binding.d.ts +526 -0
- package/dist/supervisor-binding.d.ts.map +1 -0
- package/dist/supervisor-binding.js +4 -0
- package/dist/supervisor-binding.js.map +1 -0
- package/dist/tenant-host-access.d.ts +41 -0
- package/dist/tenant-host-access.d.ts.map +1 -0
- package/dist/tenant-host-access.js +42 -0
- package/dist/tenant-host-access.js.map +1 -0
- package/dist/token-admin.d.ts +99 -0
- package/dist/token-admin.d.ts.map +1 -0
- package/dist/token-admin.js +4 -0
- package/dist/token-admin.js.map +1 -0
- package/dist/tool-binding.d.ts +247 -0
- package/dist/tool-binding.d.ts.map +1 -0
- package/dist/tool-binding.js +4 -0
- package/dist/tool-binding.js.map +1 -0
- package/dist/trigger-binding.d.ts +13 -0
- package/dist/trigger-binding.d.ts.map +1 -0
- package/dist/trigger-binding.js +4 -0
- package/dist/trigger-binding.js.map +1 -0
- package/dist/types.d.ts +71 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/webhook-endpoint-binding.d.ts +230 -0
- package/dist/webhook-endpoint-binding.d.ts.map +1 -0
- package/dist/webhook-endpoint-binding.js +12 -0
- package/dist/webhook-endpoint-binding.js.map +1 -0
- package/dist/xml.d.ts +79 -0
- package/dist/xml.d.ts.map +1 -0
- package/dist/xml.js +115 -0
- package/dist/xml.js.map +1 -0
- package/openapi.json +29649 -0
- package/package.json +76 -4
- package/scripts/emit-openapi.mjs +44 -0
- package/src/adapter-binding.ts +204 -0
- package/src/agent-binding.ts +231 -0
- package/src/app.ts +1286 -0
- package/src/capability-binding.ts +83 -0
- package/src/cost-binding.ts +213 -0
- package/src/deployment-binding.ts +225 -0
- package/src/env-binding.ts +140 -0
- package/src/errors.ts +295 -0
- package/src/eval-run-binding.ts +209 -0
- package/src/eval-run-dispatcher.ts +497 -0
- package/src/eval-suite-binding.ts +257 -0
- package/src/event-bus-binding.ts +127 -0
- package/src/flow-binding.ts +213 -0
- package/src/guardrail-binding.ts +151 -0
- package/src/handler-binding.ts +132 -0
- package/src/hitl-binding.ts +172 -0
- package/src/identity-directory-binding.ts +128 -0
- package/src/identity-provider-binding.ts +203 -0
- package/src/image-registry-binding.ts +193 -0
- package/src/index.ts +606 -0
- package/src/key-management-binding.ts +91 -0
- package/src/mcp-endpoint-binding.ts +311 -0
- package/src/memory-binding.ts +239 -0
- package/src/middleware/auth.ts +437 -0
- package/src/middleware/authorize.ts +125 -0
- package/src/middleware/error-mapper.ts +40 -0
- package/src/middleware/idempotency.ts +160 -0
- package/src/middleware/principal.ts +64 -0
- package/src/middleware/public-run-routes.ts +50 -0
- package/src/middleware/request-id.ts +28 -0
- package/src/middleware/sigv4-verify.ts +374 -0
- package/src/middleware/sigv4.ts +165 -0
- package/src/openapi/generate.ts +307 -0
- package/src/openapi/operations.ts +5444 -0
- package/src/openapi/schemas.ts +6363 -0
- package/src/provenance-binding.ts +169 -0
- package/src/provider-binding.ts +196 -0
- package/src/public-run-token.ts +263 -0
- package/src/retention-binding.ts +78 -0
- package/src/reviewer-binding.ts +99 -0
- package/src/rotation-status-store.ts +209 -0
- package/src/routes/adapters.ts +319 -0
- package/src/routes/agents.ts +424 -0
- package/src/routes/approvals.ts +759 -0
- package/src/routes/artifacts.ts +317 -0
- package/src/routes/audit.ts +219 -0
- package/src/routes/auth.ts +806 -0
- package/src/routes/capabilities.ts +79 -0
- package/src/routes/compliance.ts +482 -0
- package/src/routes/conversations.ts +369 -0
- package/src/routes/cost.ts +327 -0
- package/src/routes/deployments.ts +1493 -0
- package/src/routes/env.ts +429 -0
- package/src/routes/eval-runs.ts +631 -0
- package/src/routes/eval-suites.ts +490 -0
- package/src/routes/event-triggers.ts +283 -0
- package/src/routes/flows.ts +423 -0
- package/src/routes/guardrails.ts +320 -0
- package/src/routes/identity.ts +203 -0
- package/src/routes/mcp.ts +940 -0
- package/src/routes/memory.ts +430 -0
- package/src/routes/observations.ts +175 -0
- package/src/routes/orgs.ts +273 -0
- package/src/routes/pagination.ts +51 -0
- package/src/routes/policies.ts +413 -0
- package/src/routes/projects.ts +634 -0
- package/src/routes/proposals.ts +719 -0
- package/src/routes/provenance.ts +406 -0
- package/src/routes/providers.ts +624 -0
- package/src/routes/public-run-tokens.ts +104 -0
- package/src/routes/retention.ts +193 -0
- package/src/routes/reviewers.ts +209 -0
- package/src/routes/runs.ts +892 -0
- package/src/routes/s3.ts +519 -0
- package/src/routes/schedules.ts +300 -0
- package/src/routes/scope-params.ts +133 -0
- package/src/routes/secret-ref.ts +52 -0
- package/src/routes/secrets.ts +975 -0
- package/src/routes/signing-keys.ts +259 -0
- package/src/routes/sse.ts +148 -0
- package/src/routes/teams.ts +584 -0
- package/src/routes/tenant.ts +530 -0
- package/src/routes/tokens.ts +285 -0
- package/src/routes/tools.ts +491 -0
- package/src/routes/webhook-endpoints.ts +534 -0
- package/src/routes/webhooks.ts +296 -0
- package/src/s3-credential-binding.ts +58 -0
- package/src/secrets-binding.ts +308 -0
- package/src/secrets-provider-binding.ts +167 -0
- package/src/session-store-binding.ts +163 -0
- package/src/signing-key-binding.ts +235 -0
- package/src/state-store-binding.ts +84 -0
- package/src/supervisor-binding.ts +554 -0
- package/src/tenant-host-access.ts +62 -0
- package/src/token-admin.ts +104 -0
- package/src/tool-binding.ts +274 -0
- package/src/trigger-binding.ts +38 -0
- package/src/types.ts +74 -0
- package/src/webhook-endpoint-binding.ts +246 -0
- package/src/xml.ts +196 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import type { Scope } from '@kindgi/platform';
|
|
2
|
+
import type { EnvName, Result } from '@kindgi/types';
|
|
3
|
+
/**
|
|
4
|
+
* Adapter surface below `SecretBinding`. External-secret-manager
|
|
5
|
+
* deployments plug this in behind a secrets router (a thin
|
|
6
|
+
* `SecretBinding` implementation that delegates every method to a
|
|
7
|
+
* wired provider). Provider adapter packages MUST ship under
|
|
8
|
+
* a secrets-provider adapter naming for discoverability.
|
|
9
|
+
*
|
|
10
|
+
* Provider adapters MUST NOT emit compliance-evidence events
|
|
11
|
+
* themselves — the `SecretBinding` router owns that. Adapters are
|
|
12
|
+
* dumb translators between the framework's uniform surface and the
|
|
13
|
+
* provider's native API.
|
|
14
|
+
*/
|
|
15
|
+
export interface SecretProviderBinding {
|
|
16
|
+
readonly providerName: string;
|
|
17
|
+
getSecret(input: SecretProviderGetInput): Promise<Result<SecretProviderPayload | null, SecretProviderError>>;
|
|
18
|
+
getSecretVersion(input: SecretProviderGetVersionInput): Promise<Result<SecretProviderPayload | null, SecretProviderError>>;
|
|
19
|
+
listSecrets(input: SecretProviderListInput): Promise<Result<SecretProviderListOutput, SecretProviderError>>;
|
|
20
|
+
putSecret(input: SecretProviderPutInput): Promise<Result<SecretProviderPutOutput, SecretProviderError>>;
|
|
21
|
+
rotateSecret(input: SecretProviderRotateInput): Promise<Result<SecretProviderRotateOutput, SecretProviderError>>;
|
|
22
|
+
deleteSecret(input: SecretProviderDeleteInput): Promise<Result<SecretProviderDeleteOutput, SecretProviderError>>;
|
|
23
|
+
probe(): Promise<Result<SecretProviderProbeOutput, SecretProviderError>>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* How the provider knows which scope + env to talk to. Three
|
|
27
|
+
* strategies (mode governs provider-instance sharing; `scope` carries
|
|
28
|
+
* the full discriminated `Scope` from `@kindgi/platform` for
|
|
29
|
+
* path-encoding):
|
|
30
|
+
*
|
|
31
|
+
* - `mode: 'shared-provider'` — one provider instance for all
|
|
32
|
+
* tenants + envs; adapter encodes scope + env into `name`
|
|
33
|
+
* (e.g. Vault: `secret/data/<scopeKind>/<tenantId>/<orgId|projectId|_>/<envName>/<name>`).
|
|
34
|
+
* - `mode: 'per-tenant-provider'` — provider constructed per
|
|
35
|
+
* tenant; adapter encodes scope-level (org/project id) + env.
|
|
36
|
+
* - `mode: 'per-tenant-env-provider'` — provider constructed per
|
|
37
|
+
* (tenant, env) pair; adapter still encodes scope-level
|
|
38
|
+
* (org/project) into `name` when non-tenant. For providers with a
|
|
39
|
+
* native `environment` concept (env dimension only).
|
|
40
|
+
*
|
|
41
|
+
* Scope-hierarchy resolution is done framework-side by the
|
|
42
|
+
* `SecretBinding` router BEFORE delegating to a provider — each
|
|
43
|
+
* `Provider*Input` call targets exactly one scope level. Providers
|
|
44
|
+
* do not walk the hierarchy.
|
|
45
|
+
*
|
|
46
|
+
* `SecretProviderScope` carries the full discriminated `Scope`
|
|
47
|
+
* primitive, not just `tenantId`.
|
|
48
|
+
*/
|
|
49
|
+
export type SecretProviderScope = {
|
|
50
|
+
readonly mode: 'shared-provider';
|
|
51
|
+
readonly scope: Scope;
|
|
52
|
+
readonly envName: EnvName;
|
|
53
|
+
readonly namespace?: string;
|
|
54
|
+
} | {
|
|
55
|
+
readonly mode: 'per-tenant-provider';
|
|
56
|
+
readonly scope: Scope;
|
|
57
|
+
readonly envName: EnvName;
|
|
58
|
+
} | {
|
|
59
|
+
readonly mode: 'per-tenant-env-provider';
|
|
60
|
+
readonly scope: Scope;
|
|
61
|
+
readonly envName: EnvName;
|
|
62
|
+
};
|
|
63
|
+
export interface SecretProviderGetInput {
|
|
64
|
+
readonly providerScope: SecretProviderScope;
|
|
65
|
+
readonly name: string;
|
|
66
|
+
}
|
|
67
|
+
export interface SecretProviderGetVersionInput {
|
|
68
|
+
readonly providerScope: SecretProviderScope;
|
|
69
|
+
readonly name: string;
|
|
70
|
+
readonly versionId: number;
|
|
71
|
+
}
|
|
72
|
+
export interface SecretProviderPayload {
|
|
73
|
+
readonly name: string;
|
|
74
|
+
readonly versionId: number;
|
|
75
|
+
readonly createdAt: string;
|
|
76
|
+
readonly value: string;
|
|
77
|
+
}
|
|
78
|
+
export interface SecretProviderListInput {
|
|
79
|
+
readonly providerScope: SecretProviderScope;
|
|
80
|
+
readonly namePrefix?: string;
|
|
81
|
+
readonly cursor?: string;
|
|
82
|
+
readonly limit: number;
|
|
83
|
+
}
|
|
84
|
+
export interface SecretProviderListOutput {
|
|
85
|
+
readonly data: readonly SecretProviderMetadata[];
|
|
86
|
+
readonly nextCursor?: string;
|
|
87
|
+
}
|
|
88
|
+
export interface SecretProviderMetadata {
|
|
89
|
+
readonly name: string;
|
|
90
|
+
readonly currentVersion: number;
|
|
91
|
+
readonly createdAt: string;
|
|
92
|
+
readonly updatedAt: string;
|
|
93
|
+
readonly revokedAt?: string;
|
|
94
|
+
}
|
|
95
|
+
export interface SecretProviderPutInput {
|
|
96
|
+
readonly providerScope: SecretProviderScope;
|
|
97
|
+
readonly name: string;
|
|
98
|
+
readonly value: string;
|
|
99
|
+
readonly writeMode: 'create-new' | 'add-version';
|
|
100
|
+
}
|
|
101
|
+
export type SecretProviderPutOutput = {
|
|
102
|
+
readonly kind: 'ok';
|
|
103
|
+
readonly versionId: number;
|
|
104
|
+
readonly createdAt: string;
|
|
105
|
+
} | {
|
|
106
|
+
readonly kind: 'already-exists';
|
|
107
|
+
} | {
|
|
108
|
+
readonly kind: 'version-conflict';
|
|
109
|
+
readonly currentVersion: number;
|
|
110
|
+
};
|
|
111
|
+
export interface SecretProviderRotateInput {
|
|
112
|
+
readonly providerScope: SecretProviderScope;
|
|
113
|
+
readonly name: string;
|
|
114
|
+
readonly newValue?: string;
|
|
115
|
+
readonly revokeOldAfterMs?: number;
|
|
116
|
+
}
|
|
117
|
+
export type SecretProviderRotateOutput = {
|
|
118
|
+
readonly kind: 'ok';
|
|
119
|
+
readonly newVersionId: number;
|
|
120
|
+
readonly oldVersionId: number;
|
|
121
|
+
} | {
|
|
122
|
+
readonly kind: 'rotation-pending';
|
|
123
|
+
readonly resumeToken: string;
|
|
124
|
+
};
|
|
125
|
+
export interface SecretProviderDeleteInput {
|
|
126
|
+
readonly providerScope: SecretProviderScope;
|
|
127
|
+
readonly name: string;
|
|
128
|
+
readonly hard: boolean;
|
|
129
|
+
}
|
|
130
|
+
export interface SecretProviderDeleteOutput {
|
|
131
|
+
readonly deleted: boolean;
|
|
132
|
+
}
|
|
133
|
+
export interface SecretProviderProbeOutput {
|
|
134
|
+
readonly reachable: true;
|
|
135
|
+
readonly providerVersion?: string;
|
|
136
|
+
readonly latencyMs?: number;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Uniform error shape across every provider adapter. Adapters map
|
|
140
|
+
* their native failure conditions to these codes; the router
|
|
141
|
+
* translates them further into `SecretError` codes.
|
|
142
|
+
*/
|
|
143
|
+
export type SecretProviderError = {
|
|
144
|
+
readonly code: 'unreachable';
|
|
145
|
+
readonly message: string;
|
|
146
|
+
readonly cause?: unknown;
|
|
147
|
+
} | {
|
|
148
|
+
readonly code: 'unauthorized';
|
|
149
|
+
readonly message: string;
|
|
150
|
+
readonly cause?: unknown;
|
|
151
|
+
} | {
|
|
152
|
+
readonly code: 'rate-limited';
|
|
153
|
+
readonly message: string;
|
|
154
|
+
readonly retryAfterMs?: number;
|
|
155
|
+
} | {
|
|
156
|
+
readonly code: 'unsupported';
|
|
157
|
+
readonly message: string;
|
|
158
|
+
readonly feature: string;
|
|
159
|
+
} | {
|
|
160
|
+
readonly code: 'provider-error';
|
|
161
|
+
readonly message: string;
|
|
162
|
+
readonly cause?: unknown;
|
|
163
|
+
};
|
|
164
|
+
//# sourceMappingURL=secrets-provider-binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets-provider-binding.d.ts","sourceRoot":"","sources":["../src/secrets-provider-binding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets-provider-binding.js","sourceRoot":"","sources":["../src/secrets-provider-binding.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import type { Cursor, SessionId, TenantId, Timestamp, UserId } from '@kindgi/types';
|
|
2
|
+
/**
|
|
3
|
+
* Caller-plugged surface for OAuth/OIDC session persistence. Same
|
|
4
|
+
* pattern as `TokenAdmin` (write path for bearer tokens) — the API
|
|
5
|
+
* package does NOT own session persistence. Deployments plug in a
|
|
6
|
+
* durable store.
|
|
7
|
+
*
|
|
8
|
+
* Sessions are the byproduct of a successful OAuth callback:
|
|
9
|
+
* `POST /v1/auth/callback/:providerId` exchanges the authorization code
|
|
10
|
+
* for provider tokens, fetches the userinfo, and calls
|
|
11
|
+
* `SessionStoreBinding.create` to persist the resulting session; the
|
|
12
|
+
* route then hands the caller an opaque framework-issued token
|
|
13
|
+
* (`kgi_sk_<sessionId>`) that never leaks the provider access-token or
|
|
14
|
+
* refresh-token to the client.
|
|
15
|
+
*
|
|
16
|
+
* The bearer-auth middleware routes session-token requests through
|
|
17
|
+
* `get(tenantId, sessionId)`; the resolver hot path runs on every
|
|
18
|
+
* authenticated request that carries a session token, so implementations
|
|
19
|
+
* SHOULD keep `get` cheap (e.g. a single indexed lookup by id and
|
|
20
|
+
* expiry, or a cache).
|
|
21
|
+
*/
|
|
22
|
+
export interface SessionStoreBinding {
|
|
23
|
+
create(input: SessionCreateInput): Promise<SessionCreateOutput>;
|
|
24
|
+
get(input: SessionGetInput): Promise<Session | null>;
|
|
25
|
+
list(input: SessionListInput): Promise<SessionPage>;
|
|
26
|
+
revoke(input: SessionRevokeInput): Promise<SessionRevokeOutcome>;
|
|
27
|
+
revokeAllForUser(input: SessionRevokeAllForUserInput): Promise<SessionRevokeAllForUserOutcome>;
|
|
28
|
+
/**
|
|
29
|
+
* Update the session's `lastActiveAt` marker. Called by the auth
|
|
30
|
+
* middleware on each successful authenticated request (throttled, by
|
|
31
|
+
* default to at most once per minute per session, so the write path
|
|
32
|
+
* doesn't hot-spot under load). Absent = the middleware only enforces absolute
|
|
33
|
+
* TTL; inactivity timeout is disabled.
|
|
34
|
+
*
|
|
35
|
+
* The tenant sentinel `MULTI_TENANT_LOOKUP` is honored the same way
|
|
36
|
+
* as `get` — the middleware doesn't know the tenant ahead of time.
|
|
37
|
+
*/
|
|
38
|
+
readonly touch?: (input: SessionTouchInput) => Promise<SessionTouchOutcome>;
|
|
39
|
+
}
|
|
40
|
+
export interface SessionCreateInput {
|
|
41
|
+
readonly tenantId: TenantId;
|
|
42
|
+
readonly userId: UserId;
|
|
43
|
+
/** ProviderId of the `IdentityProviderBinding` that authenticated the user. */
|
|
44
|
+
readonly providerId: string;
|
|
45
|
+
/** Opaque provider access-token — server-side only. */
|
|
46
|
+
readonly accessToken: string;
|
|
47
|
+
/** Opaque provider refresh-token — server-side only, may be absent. */
|
|
48
|
+
readonly refreshToken?: string;
|
|
49
|
+
readonly expiresAt: Timestamp;
|
|
50
|
+
readonly scopes: readonly string[];
|
|
51
|
+
/** Free-form provider claims (e.g. `email`, `name`, `sub`). */
|
|
52
|
+
readonly metadata?: Record<string, unknown>;
|
|
53
|
+
}
|
|
54
|
+
export interface SessionCreateOutput {
|
|
55
|
+
readonly sessionId: SessionId;
|
|
56
|
+
readonly expiresAt: Timestamp;
|
|
57
|
+
}
|
|
58
|
+
export interface SessionGetInput {
|
|
59
|
+
readonly tenantId: TenantId;
|
|
60
|
+
readonly sessionId: SessionId;
|
|
61
|
+
}
|
|
62
|
+
export interface SessionListInput {
|
|
63
|
+
readonly tenantId: TenantId;
|
|
64
|
+
readonly limit: number;
|
|
65
|
+
readonly cursor?: Cursor;
|
|
66
|
+
/** Filter to sessions for a single user. Absent → all users in tenant. */
|
|
67
|
+
readonly userId?: UserId;
|
|
68
|
+
}
|
|
69
|
+
export interface SessionRevokeInput {
|
|
70
|
+
readonly tenantId: TenantId;
|
|
71
|
+
readonly sessionId: SessionId;
|
|
72
|
+
/**
|
|
73
|
+
* Distinguishes an explicit revoke (user logout, admin action) from
|
|
74
|
+
* a rotation (`POST /v1/auth/refresh` retiring the old session). The
|
|
75
|
+
* adapter uses this to set both `revokedAt` AND `rotatedAt` on the
|
|
76
|
+
* session so the middleware can return `401 refresh-token-invalid` when
|
|
77
|
+
* the OLD session token is reused after rotation. Defaults to
|
|
78
|
+
* `'revoke'`.
|
|
79
|
+
*/
|
|
80
|
+
readonly reason?: 'revoke' | 'rotate';
|
|
81
|
+
}
|
|
82
|
+
export interface SessionRevokeAllForUserInput {
|
|
83
|
+
readonly tenantId: TenantId;
|
|
84
|
+
readonly userId: UserId;
|
|
85
|
+
}
|
|
86
|
+
export interface Session {
|
|
87
|
+
readonly id: SessionId;
|
|
88
|
+
readonly tenantId: TenantId;
|
|
89
|
+
readonly userId: UserId;
|
|
90
|
+
readonly providerId: string;
|
|
91
|
+
readonly accessToken: string;
|
|
92
|
+
readonly refreshToken?: string;
|
|
93
|
+
readonly expiresAt: Timestamp;
|
|
94
|
+
readonly scopes: readonly string[];
|
|
95
|
+
readonly metadata?: Record<string, unknown>;
|
|
96
|
+
readonly createdAt: Timestamp;
|
|
97
|
+
/**
|
|
98
|
+
* Last-observed activity timestamp. Populated by adapters that
|
|
99
|
+
* implement `touch()` — the middleware bumps it (throttled) on each
|
|
100
|
+
* authenticated request so the deployment can enforce an
|
|
101
|
+
* inactivity-based logout independent of the absolute session TTL.
|
|
102
|
+
*
|
|
103
|
+
* Adapters MAY leave this undefined when the deployment has opted
|
|
104
|
+
* out of inactivity tracking; in that case the middleware skips the
|
|
105
|
+
* inactivity check and enforces only absolute TTL.
|
|
106
|
+
*/
|
|
107
|
+
readonly lastActiveAt?: Timestamp;
|
|
108
|
+
/**
|
|
109
|
+
* Set by `POST /v1/auth/refresh` on the OLD session when it mints a
|
|
110
|
+
* new one. Distinguishes rotation (client should retry with the
|
|
111
|
+
* fresh token — OAuth 2.1 BCP refresh-token reuse detection) from
|
|
112
|
+
* an explicit revocation (user logged out). The middleware surfaces
|
|
113
|
+
* this via `401 refresh-token-invalid` vs `401 auth-revoked`. Set
|
|
114
|
+
* atomically with `revokedAt`.
|
|
115
|
+
*/
|
|
116
|
+
readonly rotatedAt?: Timestamp;
|
|
117
|
+
readonly revokedAt?: Timestamp;
|
|
118
|
+
}
|
|
119
|
+
export interface SessionTouchInput {
|
|
120
|
+
readonly tenantId: TenantId;
|
|
121
|
+
readonly sessionId: SessionId;
|
|
122
|
+
/**
|
|
123
|
+
* The observed activity timestamp. Adapters SHOULD accept a
|
|
124
|
+
* caller-supplied instant so tests can drive the clock; production
|
|
125
|
+
* middleware passes `new Date()`.
|
|
126
|
+
*/
|
|
127
|
+
readonly at: Date;
|
|
128
|
+
}
|
|
129
|
+
export interface SessionTouchOutcome {
|
|
130
|
+
/**
|
|
131
|
+
* `false` when the session was already revoked or the row is
|
|
132
|
+
* unknown — the middleware treats either case as a soft-fail (no
|
|
133
|
+
* fatal error, but the caller's next request will 401 via the
|
|
134
|
+
* standard checks).
|
|
135
|
+
*/
|
|
136
|
+
readonly touched: boolean;
|
|
137
|
+
}
|
|
138
|
+
export interface SessionPage {
|
|
139
|
+
readonly data: readonly Session[];
|
|
140
|
+
readonly nextCursor?: Cursor;
|
|
141
|
+
}
|
|
142
|
+
export interface SessionRevokeOutcome {
|
|
143
|
+
readonly revoked: boolean;
|
|
144
|
+
}
|
|
145
|
+
export interface SessionRevokeAllForUserOutcome {
|
|
146
|
+
readonly revokedCount: number;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=session-store-binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-store-binding.d.ts","sourceRoot":"","sources":["../src/session-store-binding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-store-binding.js","sourceRoot":"","sources":["../src/session-store-binding.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import type { Cursor, Result, SigningKeyId, TenantId } from '@kindgi/types';
|
|
2
|
+
/**
|
|
3
|
+
* Caller-plugged surface for the API layer's **tenant-scoped signing-key
|
|
4
|
+
* trust registry** — the seam behind the deploy route's signature
|
|
5
|
+
* verification + trust-list cross-check.
|
|
6
|
+
*
|
|
7
|
+
* ## Position vs `SigningKeyBinding`
|
|
8
|
+
*
|
|
9
|
+
* the crypto module already exposes a `SigningKeyBinding` — a low-level
|
|
10
|
+
* KMS seam that returns raw key bytes for a `SigningKeyId`. That binding
|
|
11
|
+
* is deployment-wide; every request finds the same keys.
|
|
12
|
+
*
|
|
13
|
+
* THIS binding is a **higher-level, tenant-scoped trust registry**. It
|
|
14
|
+
* answers "for tenant T, is this public key allowed to sign deploys /
|
|
15
|
+
* artifacts?" and performs signature verification against the registered
|
|
16
|
+
* trust list. A production adapter typically wraps the crypto-layer
|
|
17
|
+
* binding for the underlying primitive ops and layers tenant-scoping,
|
|
18
|
+
* revocation, and audit on top.
|
|
19
|
+
*
|
|
20
|
+
* Consumers alias one of the two when importing both — TypeScript resolves
|
|
21
|
+
* them by module path but the local name collides.
|
|
22
|
+
*
|
|
23
|
+
* ## Two responsibilities
|
|
24
|
+
*
|
|
25
|
+
* 1. **Trust registry** (`listTrusted` / `getTrusted` / `addTrusted` /
|
|
26
|
+
* `revokeTrusted`) — per-tenant CRUD over the set of public keys
|
|
27
|
+
* permitted to sign deploys and admin operations.
|
|
28
|
+
* 2. **Verification** (`isTrusted` / `verify`) — cheap boolean trust
|
|
29
|
+
* check + a full signature-verification call. The `POST /v1/deployments`
|
|
30
|
+
* route calls `isTrusted` (which must be `true`) and then verifies the
|
|
31
|
+
* Ed25519 signature itself; it does not call `verify`.
|
|
32
|
+
*
|
|
33
|
+
* Tenant-scoped: callers pass `tenantId` explicitly. Same trust list
|
|
34
|
+
* partitioning as every other admin surface.
|
|
35
|
+
*
|
|
36
|
+
* ## Seam only
|
|
37
|
+
*
|
|
38
|
+
* No implementation is bundled here; the `POST /v1/deployments` route
|
|
39
|
+
* runs its trust check through this interface.
|
|
40
|
+
*/
|
|
41
|
+
export interface SigningKeyBinding {
|
|
42
|
+
/**
|
|
43
|
+
* Cheap trust check for the signature step of `POST /v1/deployments`.
|
|
44
|
+
* Returns `true` when the given `(keyId, publicKey)` pair appears on
|
|
45
|
+
* the tenant's trust list AND has not been revoked. `false` otherwise —
|
|
46
|
+
* the route surfaces `false` as `403 signer-not-trusted`.
|
|
47
|
+
*
|
|
48
|
+
* The pair is checked jointly to defend against a key-id collision
|
|
49
|
+
* across tenants: two tenants MAY use the same `SigningKeyId` for
|
|
50
|
+
* their own keys as long as the public bytes differ. Trust is bound
|
|
51
|
+
* to the exact bytes.
|
|
52
|
+
*/
|
|
53
|
+
isTrusted(input: IsTrustedInput): Promise<Result<boolean, SigningKeyError>>;
|
|
54
|
+
/**
|
|
55
|
+
* Verify a raw Ed25519 signature over a canonicalised payload against
|
|
56
|
+
* the trusted key — e.g. the canonical deploy envelope
|
|
57
|
+
* (`(imageDigest, artifactVersion, indexHash, tenantId, publishedAt)`)
|
|
58
|
+
* as `payload`. The binding computes the verification and returns
|
|
59
|
+
* `valid: true` on cryptographic match.
|
|
60
|
+
*
|
|
61
|
+
* Bindings MUST NOT trust the caller's assertion that the key is
|
|
62
|
+
* trusted — they re-run the trust check as part of `verify`, so
|
|
63
|
+
* `signer-not-trusted` shortcuts before `signature-invalid`.
|
|
64
|
+
*/
|
|
65
|
+
verify(input: VerifyInput): Promise<Result<VerifyOutcome, SigningKeyError>>;
|
|
66
|
+
/**
|
|
67
|
+
* Cursor-paginated list of trusted keys for the tenant. Sort order is
|
|
68
|
+
* binding-defined (e.g. `createdAt desc, keyId desc`).
|
|
69
|
+
*/
|
|
70
|
+
listTrusted(input: ListTrustedInput): Promise<TrustedKeyPage>;
|
|
71
|
+
/**
|
|
72
|
+
* Look up a single trusted key by id. `null` when unknown to the
|
|
73
|
+
* tenant OR revoked; revoked entries are excluded here (they still
|
|
74
|
+
* appear via `listTrusted` with `includeRevoked: true`).
|
|
75
|
+
*/
|
|
76
|
+
getTrusted(input: GetTrustedInput): Promise<TrustedKey | null>;
|
|
77
|
+
/**
|
|
78
|
+
* Add a key to the tenant's trust list. Idempotent per `(keyId,
|
|
79
|
+
* publicKey)` — re-adding the same pair returns
|
|
80
|
+
* `{ kind: 'already-trusted' }` with the existing entry (no bump to
|
|
81
|
+
* `createdAt`). Different `publicKey` under the same `keyId` is
|
|
82
|
+
* rejected with `key-id-conflict` — callers rotate by allocating a
|
|
83
|
+
* new keyId, not by rebinding one.
|
|
84
|
+
*/
|
|
85
|
+
addTrusted(input: AddTrustedInput): Promise<AddTrustedOutcome>;
|
|
86
|
+
/**
|
|
87
|
+
* Revoke a trusted key. Idempotent — revoking an already-revoked or
|
|
88
|
+
* unknown key returns `{ revoked: false }`; first-time revocation
|
|
89
|
+
* returns `{ revoked: true }`. The entry is retained (soft-delete)
|
|
90
|
+
* so historical `Deployment.signerKeyId` refs remain resolvable for
|
|
91
|
+
* audit; `isTrusted` returns `false` for revoked entries.
|
|
92
|
+
*/
|
|
93
|
+
revokeTrusted(input: RevokeTrustedInput): Promise<RevokeTrustedOutcome>;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Wire shape for a trusted-key registration. `publicKey` is base64 of
|
|
97
|
+
* the raw key bytes (Ed25519 = 32 bytes); `algorithm` is the closed set
|
|
98
|
+
* from the crypto module — extended here as an open string so future
|
|
99
|
+
* algorithms don't require a package bump on this file.
|
|
100
|
+
*/
|
|
101
|
+
export interface TrustedKey {
|
|
102
|
+
readonly keyId: SigningKeyId;
|
|
103
|
+
readonly tenantId: TenantId;
|
|
104
|
+
/** `'ed25519'` today. Open string for future algorithms. */
|
|
105
|
+
readonly algorithm: string;
|
|
106
|
+
/** Base64 of the raw public key bytes. */
|
|
107
|
+
readonly publicKey: string;
|
|
108
|
+
/** Optional human-readable label — e.g. `'acme-staging-2026-01'`. */
|
|
109
|
+
readonly label?: string;
|
|
110
|
+
/** ISO-8601 timestamp of first registration. */
|
|
111
|
+
readonly createdAt: string;
|
|
112
|
+
/** ISO-8601 timestamp of revocation; absent when active. */
|
|
113
|
+
readonly revokedAt?: string;
|
|
114
|
+
/** Reason string supplied at revocation time. */
|
|
115
|
+
readonly revokedReason?: string;
|
|
116
|
+
}
|
|
117
|
+
export interface IsTrustedInput {
|
|
118
|
+
readonly tenantId: TenantId;
|
|
119
|
+
readonly keyId: SigningKeyId;
|
|
120
|
+
/** Base64 of the raw public-key bytes the signer presented. */
|
|
121
|
+
readonly publicKey: string;
|
|
122
|
+
}
|
|
123
|
+
export interface VerifyInput {
|
|
124
|
+
readonly tenantId: TenantId;
|
|
125
|
+
readonly keyId: SigningKeyId;
|
|
126
|
+
/** Base64 of the raw public-key bytes. */
|
|
127
|
+
readonly publicKey: string;
|
|
128
|
+
/** Raw bytes over which the signature was computed. */
|
|
129
|
+
readonly payload: Uint8Array;
|
|
130
|
+
/** Base64 of the signature bytes. */
|
|
131
|
+
readonly signature: string;
|
|
132
|
+
}
|
|
133
|
+
export interface VerifyOutcome {
|
|
134
|
+
readonly valid: boolean;
|
|
135
|
+
/**
|
|
136
|
+
* When `valid: false`, a hint at why — `signature-mismatch` /
|
|
137
|
+
* `signer-not-trusted` / `algorithm-unsupported`. Useful for logs.
|
|
138
|
+
*/
|
|
139
|
+
readonly reason?: string;
|
|
140
|
+
}
|
|
141
|
+
export interface ListTrustedInput {
|
|
142
|
+
readonly tenantId: TenantId;
|
|
143
|
+
readonly limit: number;
|
|
144
|
+
readonly cursor?: Cursor;
|
|
145
|
+
/** When `true`, revoked entries are included. Default `false`. */
|
|
146
|
+
readonly includeRevoked?: boolean;
|
|
147
|
+
/** Prefix match on `TrustedKey.label` — useful for env-scoped listings. */
|
|
148
|
+
readonly labelFilter?: string;
|
|
149
|
+
}
|
|
150
|
+
export interface TrustedKeyPage {
|
|
151
|
+
readonly data: readonly TrustedKey[];
|
|
152
|
+
readonly nextCursor?: Cursor;
|
|
153
|
+
}
|
|
154
|
+
export interface GetTrustedInput {
|
|
155
|
+
readonly tenantId: TenantId;
|
|
156
|
+
readonly keyId: SigningKeyId;
|
|
157
|
+
}
|
|
158
|
+
export interface AddTrustedInput {
|
|
159
|
+
readonly tenantId: TenantId;
|
|
160
|
+
readonly keyId: SigningKeyId;
|
|
161
|
+
readonly algorithm: string;
|
|
162
|
+
readonly publicKey: string;
|
|
163
|
+
readonly label?: string;
|
|
164
|
+
}
|
|
165
|
+
export type AddTrustedOutcome = {
|
|
166
|
+
readonly kind: 'ok';
|
|
167
|
+
readonly key: TrustedKey;
|
|
168
|
+
} | {
|
|
169
|
+
readonly kind: 'already-trusted';
|
|
170
|
+
readonly key: TrustedKey;
|
|
171
|
+
} | {
|
|
172
|
+
/**
|
|
173
|
+
* Same `keyId` already registered but with different `publicKey`
|
|
174
|
+
* bytes. Callers rotate by allocating a fresh `keyId`.
|
|
175
|
+
*/
|
|
176
|
+
readonly kind: 'key-id-conflict';
|
|
177
|
+
readonly existing: TrustedKey;
|
|
178
|
+
} | {
|
|
179
|
+
/**
|
|
180
|
+
* The key couldn't be trusted. `signing-key-revoked`: the id was
|
|
181
|
+
* revoked, and revocation is final (rotate under a new id). Other
|
|
182
|
+
* codes are store failures.
|
|
183
|
+
*/
|
|
184
|
+
readonly kind: 'error';
|
|
185
|
+
readonly code: string;
|
|
186
|
+
readonly message: string;
|
|
187
|
+
};
|
|
188
|
+
export interface RevokeTrustedInput {
|
|
189
|
+
readonly tenantId: TenantId;
|
|
190
|
+
readonly keyId: SigningKeyId;
|
|
191
|
+
/** Optional audit reason surfaced through `TrustedKey.revokedReason`. */
|
|
192
|
+
readonly reason?: string;
|
|
193
|
+
}
|
|
194
|
+
export interface RevokeTrustedOutcome {
|
|
195
|
+
readonly revoked: boolean;
|
|
196
|
+
}
|
|
197
|
+
export type SigningKeyError = {
|
|
198
|
+
readonly code: 'signing-key-not-found';
|
|
199
|
+
readonly message: string;
|
|
200
|
+
readonly keyId: string;
|
|
201
|
+
} | {
|
|
202
|
+
readonly code: 'signing-key-algorithm-unsupported';
|
|
203
|
+
readonly message: string;
|
|
204
|
+
readonly algorithm: string;
|
|
205
|
+
} | {
|
|
206
|
+
readonly code: 'signing-key-store-error';
|
|
207
|
+
readonly message: string;
|
|
208
|
+
readonly cause?: unknown;
|
|
209
|
+
};
|
|
210
|
+
//# sourceMappingURL=signing-key-binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing-key-binding.d.ts","sourceRoot":"","sources":["../src/signing-key-binding.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,WAAW,iBAAiB;IAGhC;;;;;;;;;;OAUG;IACH,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;IAC5E;;;;;;;;;;OAUG;IACH,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;IAI5E;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC9D;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC/D;;;;;;;OAOG;IACH,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC/D;;;;;;OAMG;IACH,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACzE;AAID;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,iDAAiD;IACjD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAID,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,qCAAqC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,CAAC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC9D;IACE;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;CAC/B,GACD;IACE;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEN,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAID,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5F;IACE,QAAQ,CAAC,IAAI,EAAE,mCAAmC,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing-key-binding.js","sourceRoot":"","sources":["../src/signing-key-binding.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { TenantId } from '@kindgi/types';
|
|
2
|
+
/**
|
|
3
|
+
* Short-lived CSRF-`state` + PKCE-`code_verifier` cache used by the
|
|
4
|
+
* OAuth login/callback pair. Values live between `/v1/auth/login/:id`
|
|
5
|
+
* (which generates `state` + `code_verifier`) and
|
|
6
|
+
* `/v1/auth/callback/:id` (which reads them back). TTL is measured in
|
|
7
|
+
* minutes — long enough for a user to complete the provider hop, short
|
|
8
|
+
* enough that a lost row is a non-event.
|
|
9
|
+
*
|
|
10
|
+
* The default `createInMemoryOauthStateStore` is appropriate for
|
|
11
|
+
* single-process dev + tests. Multi-pod deployments MUST plug in a
|
|
12
|
+
* shared store (Redis, Postgres) because the callback usually lands on
|
|
13
|
+
* a different pod than the login. Mirror of the `IdempotencyStore`
|
|
14
|
+
* caller-plugged pattern.
|
|
15
|
+
*
|
|
16
|
+
* Keyed by `state` alone — `state` carries 256 bits of entropy, so it
|
|
17
|
+
* is uniquely identifying without a namespace. `take` matches on
|
|
18
|
+
* `providerId` when supplied to guard against a stolen `state` being
|
|
19
|
+
* replayed against the wrong provider mount; `tenantId` is returned in
|
|
20
|
+
* the entry (the callback route learns it from the row, not the URL).
|
|
21
|
+
*/
|
|
22
|
+
export interface OauthStateStore {
|
|
23
|
+
put(entry: OauthStateEntry): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Consume the entry keyed by `state`. Returns `null` when unknown or
|
|
26
|
+
* expired. When `providerId` is supplied, the returned entry MUST
|
|
27
|
+
* match — the store returns `null` (and leaves the entry in place)
|
|
28
|
+
* otherwise. `tenantId` is derived from the entry.
|
|
29
|
+
*/
|
|
30
|
+
take(input: OauthStateTakeInput): Promise<OauthStateEntry | null>;
|
|
31
|
+
}
|
|
32
|
+
export interface OauthStateEntry {
|
|
33
|
+
readonly state: string;
|
|
34
|
+
readonly tenantId: TenantId;
|
|
35
|
+
readonly providerId: string;
|
|
36
|
+
readonly codeVerifier: string;
|
|
37
|
+
readonly redirectUri: string;
|
|
38
|
+
readonly expiresAt: number;
|
|
39
|
+
}
|
|
40
|
+
export interface OauthStateTakeInput {
|
|
41
|
+
readonly state: string;
|
|
42
|
+
/** Optional cross-check — when set, entry must match or `take` returns null. */
|
|
43
|
+
readonly providerId?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Trivial in-memory store — appropriate for tests + single-process dev.
|
|
47
|
+
* Entries are single-use (`take` deletes on hit) and time out on their
|
|
48
|
+
* own; the store performs a shallow expired-entry sweep on every call
|
|
49
|
+
* so long-lived processes don't leak memory when a callback never
|
|
50
|
+
* arrives.
|
|
51
|
+
*/
|
|
52
|
+
export declare function createInMemoryOauthStateStore(): OauthStateStore;
|
|
53
|
+
//# sourceMappingURL=state-store-binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-store-binding.d.ts","sourceRoot":"","sources":["../src/state-store-binding.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,IAAI,eAAe,CAyB/D"}
|