@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,406 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (C) 2026 Kindgi Inc.
|
|
3
|
+
|
|
4
|
+
import { Hono } from 'hono';
|
|
5
|
+
|
|
6
|
+
import type { ConversationBinding } from '@kindgi/agents';
|
|
7
|
+
import { serializePublicKeyPem, signEd25519 } from '@kindgi/crypto';
|
|
8
|
+
import type { SigningKeyBinding } from '@kindgi/crypto';
|
|
9
|
+
import { canonicalize } from '@kindgi/schema';
|
|
10
|
+
import type { ConversationId, RunId, SigningKeyId, TenantId, Timestamp } from '@kindgi/types';
|
|
11
|
+
|
|
12
|
+
import { statusFor, toWireError } from '../errors.js';
|
|
13
|
+
|
|
14
|
+
import type {
|
|
15
|
+
ProvenanceBinding,
|
|
16
|
+
ProvenanceListCursor,
|
|
17
|
+
ProvenanceRecordSummary,
|
|
18
|
+
} from '../provenance-binding.js';
|
|
19
|
+
import type { AppEnv } from '../types.js';
|
|
20
|
+
import { clampLimit, decodeCursor, encodeCursor } from './pagination.js';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Provenance resource routes.
|
|
24
|
+
*
|
|
25
|
+
* Reads flow through `ProvenanceBinding`: the API package owns the wire
|
|
26
|
+
* shape + pagination envelope while the binding owns the storage
|
|
27
|
+
* projection (query + serialization to `ProvenanceRecordSummary`). Export signing
|
|
28
|
+
* is caller-plugged via `SigningKeyBinding` from the crypto module:
|
|
29
|
+
* deployments that need signed exports plug in a KMS-backed key store;
|
|
30
|
+
* deployments that omit the binding get `404 signing-not-configured` on
|
|
31
|
+
* the export route.
|
|
32
|
+
*
|
|
33
|
+
* The export bundle is canonicalized as sorted-key JSON (via
|
|
34
|
+
* `canonicalize` — same algorithm the runtime uses for signing
|
|
35
|
+
* individual `Provenance` records) so the signature verifies byte-
|
|
36
|
+
* identically on any client that re-canonicalizes the same shape.
|
|
37
|
+
* Verification is a pure client-side operation via `verifyEd25519` — no
|
|
38
|
+
* server round trip.
|
|
39
|
+
*/
|
|
40
|
+
export interface ProvenanceRouterOptions {
|
|
41
|
+
readonly signingKey?: SigningKeyBinding;
|
|
42
|
+
/**
|
|
43
|
+
* Conversation binding used by the signed-export path to read
|
|
44
|
+
* conversation transcripts (`readMessages`) alongside provenance
|
|
45
|
+
* DAGs. Absent = the export omits messages (empty array).
|
|
46
|
+
*/
|
|
47
|
+
readonly conversationBinding?: ConversationBinding;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Bundle schema version — bump when the wire shape of `bundle.body` changes. */
|
|
51
|
+
const BUNDLE_SCHEMA_VERSION = '1.0.0';
|
|
52
|
+
|
|
53
|
+
export function provenanceRouter(
|
|
54
|
+
binding: ProvenanceBinding,
|
|
55
|
+
options: ProvenanceRouterOptions = {},
|
|
56
|
+
): Hono<AppEnv> {
|
|
57
|
+
const r = new Hono<AppEnv>();
|
|
58
|
+
const signingKey = options.signingKey;
|
|
59
|
+
|
|
60
|
+
// ---------- GET / (list metadata, cursor-paginated) ----------
|
|
61
|
+
r.get('/', async (c) => {
|
|
62
|
+
const requestId = c.get('requestId');
|
|
63
|
+
const tenantId = c.get('tenantId') as TenantId;
|
|
64
|
+
const limit = clampLimit(c.req.query('limit'));
|
|
65
|
+
|
|
66
|
+
const rawCursor = c.req.query('cursor');
|
|
67
|
+
let cursorFilter: ProvenanceListCursor | undefined;
|
|
68
|
+
if (rawCursor !== undefined && rawCursor.length > 0) {
|
|
69
|
+
const decoded = decodeCursor(rawCursor);
|
|
70
|
+
if (decoded === null) {
|
|
71
|
+
c.status(statusFor('bad-input') as never);
|
|
72
|
+
return c.json(
|
|
73
|
+
toWireError({ code: 'bad-input', message: '`cursor` is malformed' }, requestId),
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
cursorFilter = { createdAt: decoded.createdAt, id: decoded.id };
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const runIdFilter = c.req.query('runId');
|
|
80
|
+
const agentIdFilter = c.req.query('agentId');
|
|
81
|
+
const createdAfterRaw = c.req.query('createdAfter');
|
|
82
|
+
|
|
83
|
+
let createdAfter: Date | undefined;
|
|
84
|
+
if (createdAfterRaw !== undefined && createdAfterRaw.length > 0) {
|
|
85
|
+
const parsed = new Date(createdAfterRaw);
|
|
86
|
+
if (Number.isNaN(parsed.getTime())) {
|
|
87
|
+
c.status(statusFor('bad-input') as never);
|
|
88
|
+
return c.json(
|
|
89
|
+
toWireError(
|
|
90
|
+
{ code: 'bad-input', message: '`createdAfter` must be an ISO 8601 timestamp' },
|
|
91
|
+
requestId,
|
|
92
|
+
),
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
createdAfter = parsed;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const result = await binding.listRecords({
|
|
99
|
+
tenantId,
|
|
100
|
+
limit,
|
|
101
|
+
...(runIdFilter !== undefined && runIdFilter.length > 0 && { runId: runIdFilter as RunId }),
|
|
102
|
+
...(agentIdFilter !== undefined && agentIdFilter.length > 0 && { agentId: agentIdFilter }),
|
|
103
|
+
...(createdAfter !== undefined && { createdAfter }),
|
|
104
|
+
...(cursorFilter !== undefined && { cursor: cursorFilter }),
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
if (result.kind === 'err') {
|
|
108
|
+
c.status(statusFor(result.error.code) as never);
|
|
109
|
+
return c.json(
|
|
110
|
+
toWireError({ code: result.error.code, message: result.error.message }, requestId),
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
const { records, nextCursor } = result.value;
|
|
114
|
+
const hasMore = nextCursor !== undefined;
|
|
115
|
+
return c.json({
|
|
116
|
+
data: records.map(serializeRecordMetadata),
|
|
117
|
+
hasMore,
|
|
118
|
+
...(nextCursor !== undefined && {
|
|
119
|
+
nextCursor: encodeCursor({ createdAt: nextCursor.createdAt, id: nextCursor.id }),
|
|
120
|
+
}),
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
// ---------- GET /:runId (full DAG) ----------
|
|
125
|
+
r.get('/:runId', async (c) => {
|
|
126
|
+
const requestId = c.get('requestId');
|
|
127
|
+
const tenantId = c.get('tenantId') as TenantId;
|
|
128
|
+
const runId = c.req.param('runId') as RunId;
|
|
129
|
+
|
|
130
|
+
const result = await binding.getByRunId(tenantId, runId);
|
|
131
|
+
if (result.kind === 'err') {
|
|
132
|
+
if (result.error.code === 'provenance-not-found') {
|
|
133
|
+
c.status(statusFor('not-found') as never);
|
|
134
|
+
return c.json(
|
|
135
|
+
toWireError(
|
|
136
|
+
{
|
|
137
|
+
code: 'provenance-not-found',
|
|
138
|
+
message: result.error.message,
|
|
139
|
+
runId: runId as unknown as string,
|
|
140
|
+
},
|
|
141
|
+
requestId,
|
|
142
|
+
),
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
c.status(statusFor(result.error.code) as never);
|
|
146
|
+
return c.json(
|
|
147
|
+
toWireError({ code: result.error.code, message: result.error.message }, requestId),
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
const provenance = result.value;
|
|
151
|
+
return c.json({
|
|
152
|
+
id: provenance.id as unknown as string,
|
|
153
|
+
runId: provenance.runId as unknown as string,
|
|
154
|
+
tenantId: provenance.tenantId as unknown as string,
|
|
155
|
+
version: provenance.version,
|
|
156
|
+
createdAt: provenance.createdAt as unknown as string,
|
|
157
|
+
...(provenance.flowRef !== undefined && {
|
|
158
|
+
flowRef: {
|
|
159
|
+
id: provenance.flowRef.id as unknown as string,
|
|
160
|
+
version: provenance.flowRef.version,
|
|
161
|
+
},
|
|
162
|
+
}),
|
|
163
|
+
dag: {
|
|
164
|
+
nodes: provenance.nodes,
|
|
165
|
+
edges: provenance.edges,
|
|
166
|
+
},
|
|
167
|
+
...(provenance.signature !== undefined && { signature: provenance.signature }),
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
// ---------- POST /:runId/export (signed bundle) ----------
|
|
172
|
+
r.post('/:runId/export', async (c) => {
|
|
173
|
+
const requestId = c.get('requestId');
|
|
174
|
+
const tenantId = c.get('tenantId') as TenantId;
|
|
175
|
+
const runId = c.req.param('runId') as RunId;
|
|
176
|
+
|
|
177
|
+
if (signingKey === undefined) {
|
|
178
|
+
c.status(statusFor('signing-not-configured') as never);
|
|
179
|
+
return c.json(
|
|
180
|
+
toWireError(
|
|
181
|
+
{
|
|
182
|
+
code: 'signing-not-configured',
|
|
183
|
+
message:
|
|
184
|
+
'This deployment does not have a `signingKey` binding mounted; signed provenance exports are unavailable.',
|
|
185
|
+
},
|
|
186
|
+
requestId,
|
|
187
|
+
),
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
let body: unknown;
|
|
192
|
+
try {
|
|
193
|
+
body = await c.req.json();
|
|
194
|
+
} catch {
|
|
195
|
+
c.status(statusFor('bad-input') as never);
|
|
196
|
+
return c.json(
|
|
197
|
+
toWireError({ code: 'bad-input', message: 'Request body must be valid JSON' }, requestId),
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
if (body === null || typeof body !== 'object' || Array.isArray(body)) {
|
|
201
|
+
c.status(statusFor('bad-input') as never);
|
|
202
|
+
return c.json(
|
|
203
|
+
toWireError({ code: 'bad-input', message: 'Request body must be an object' }, requestId),
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
const parsed = parseExportBody(body as Record<string, unknown>);
|
|
207
|
+
if (parsed.kind === 'err') {
|
|
208
|
+
c.status(statusFor('bad-input') as never);
|
|
209
|
+
return c.json(toWireError({ code: 'bad-input', message: parsed.message }, requestId));
|
|
210
|
+
}
|
|
211
|
+
const { signingKeyId, includeMessages } = parsed.value;
|
|
212
|
+
|
|
213
|
+
// 1. Load the DAG.
|
|
214
|
+
const loaded = await binding.getByRunId(tenantId, runId);
|
|
215
|
+
if (loaded.kind === 'err') {
|
|
216
|
+
if (loaded.error.code === 'provenance-not-found') {
|
|
217
|
+
c.status(statusFor('not-found') as never);
|
|
218
|
+
return c.json(
|
|
219
|
+
toWireError(
|
|
220
|
+
{
|
|
221
|
+
code: 'provenance-not-found',
|
|
222
|
+
message: loaded.error.message,
|
|
223
|
+
runId: runId as unknown as string,
|
|
224
|
+
},
|
|
225
|
+
requestId,
|
|
226
|
+
),
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
c.status(statusFor(loaded.error.code) as never);
|
|
230
|
+
return c.json(
|
|
231
|
+
toWireError({ code: loaded.error.code, message: loaded.error.message }, requestId),
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
const provenance = loaded.value;
|
|
235
|
+
|
|
236
|
+
// 2. Optionally hydrate conversation messages. Agent turns use the
|
|
237
|
+
// conversation id as the run id; for flow-only runs no
|
|
238
|
+
// conversation exists and we return an empty `messages: []`
|
|
239
|
+
// field so the shape stays stable.
|
|
240
|
+
let messages: readonly unknown[] | undefined;
|
|
241
|
+
if (includeMessages) {
|
|
242
|
+
if (options.conversationBinding === undefined) {
|
|
243
|
+
// Reads require a ConversationBinding. When the route is wired
|
|
244
|
+
// without one, fall back to the same stable-empty-shape used
|
|
245
|
+
// for flow-only runs so response shape doesn't change.
|
|
246
|
+
messages = [];
|
|
247
|
+
} else {
|
|
248
|
+
const msgResult = await options.conversationBinding.readMessages({
|
|
249
|
+
tenantId,
|
|
250
|
+
conversationId: runId as unknown as ConversationId,
|
|
251
|
+
});
|
|
252
|
+
messages = msgResult.kind === 'ok' ? msgResult.value : [];
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// 3. Look up the private key material.
|
|
257
|
+
const privateKey = signingKey.getPrivateKey(signingKeyId);
|
|
258
|
+
if (privateKey === null) {
|
|
259
|
+
c.status(statusFor('signing-key-not-found') as never);
|
|
260
|
+
return c.json(
|
|
261
|
+
toWireError(
|
|
262
|
+
{
|
|
263
|
+
code: 'signing-key-not-found',
|
|
264
|
+
message: `No signing key registered with id "${signingKeyId as unknown as string}"`,
|
|
265
|
+
signingKeyId: signingKeyId as unknown as string,
|
|
266
|
+
},
|
|
267
|
+
requestId,
|
|
268
|
+
),
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
const publicKeyRaw = signingKey.getPublicKey(signingKeyId);
|
|
272
|
+
if (publicKeyRaw === null) {
|
|
273
|
+
// Contract: `getPublicKey` never returns null for a key that
|
|
274
|
+
// `getPrivateKey` resolved. Treat mismatch as a binding bug.
|
|
275
|
+
c.status(statusFor('signing-key-not-found') as never);
|
|
276
|
+
return c.json(
|
|
277
|
+
toWireError(
|
|
278
|
+
{
|
|
279
|
+
code: 'signing-key-not-found',
|
|
280
|
+
message: `Signing key "${signingKeyId as unknown as string}" resolved a private key but no public key`,
|
|
281
|
+
signingKeyId: signingKeyId as unknown as string,
|
|
282
|
+
},
|
|
283
|
+
requestId,
|
|
284
|
+
),
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// 4. Build the canonical bundle body. Bundle shape is v1.0.0 —
|
|
289
|
+
// ordering here is irrelevant for signing (canonicalize sorts
|
|
290
|
+
// keys) but declared explicitly for reviewer scanability.
|
|
291
|
+
const bundleBody = {
|
|
292
|
+
bundleSchemaVersion: BUNDLE_SCHEMA_VERSION,
|
|
293
|
+
provenanceId: provenance.id as unknown as string,
|
|
294
|
+
runId: provenance.runId as unknown as string,
|
|
295
|
+
tenantId: provenance.tenantId as unknown as string,
|
|
296
|
+
version: provenance.version,
|
|
297
|
+
createdAt: provenance.createdAt as unknown as string,
|
|
298
|
+
...(provenance.flowRef !== undefined && {
|
|
299
|
+
flowRef: {
|
|
300
|
+
id: provenance.flowRef.id as unknown as string,
|
|
301
|
+
version: provenance.flowRef.version,
|
|
302
|
+
},
|
|
303
|
+
}),
|
|
304
|
+
dag: {
|
|
305
|
+
nodes: provenance.nodes,
|
|
306
|
+
edges: provenance.edges,
|
|
307
|
+
},
|
|
308
|
+
...(messages !== undefined && { messages }),
|
|
309
|
+
};
|
|
310
|
+
const canonicalBundleBytes = new TextEncoder().encode(canonicalize(bundleBody));
|
|
311
|
+
|
|
312
|
+
// 5. Sign the canonical bytes.
|
|
313
|
+
const signResult = signEd25519(privateKey, canonicalBundleBytes);
|
|
314
|
+
if (signResult.kind === 'err') {
|
|
315
|
+
c.status(statusFor('export-key-error') as never);
|
|
316
|
+
return c.json(
|
|
317
|
+
toWireError(
|
|
318
|
+
{
|
|
319
|
+
code: 'export-key-error',
|
|
320
|
+
message: `Failed to sign provenance bundle: ${signResult.error.message}`,
|
|
321
|
+
},
|
|
322
|
+
requestId,
|
|
323
|
+
),
|
|
324
|
+
);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// 6. Emit the signed envelope. `bundle` is a base64 of the exact
|
|
328
|
+
// bytes that were signed — verifiers decode + re-canonicalize
|
|
329
|
+
// is unnecessary, they can verify against `atob(bundle)`
|
|
330
|
+
// directly.
|
|
331
|
+
const exportedAt = new Date().toISOString() as Timestamp;
|
|
332
|
+
return c.json({
|
|
333
|
+
runId: runId as unknown as string,
|
|
334
|
+
bundle: Buffer.from(canonicalBundleBytes).toString('base64'),
|
|
335
|
+
bundleSchemaVersion: BUNDLE_SCHEMA_VERSION,
|
|
336
|
+
algorithm: 'ed25519' as const,
|
|
337
|
+
signingKeyId: signingKeyId as unknown as string,
|
|
338
|
+
signature: Buffer.from(signResult.value).toString('base64'),
|
|
339
|
+
publicKey: serializePublicKeyPem(publicKeyRaw),
|
|
340
|
+
canonicalization: 'sorted-key-json' as const,
|
|
341
|
+
exportedAt: exportedAt as unknown as string,
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
return r;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// ============ helpers ============
|
|
349
|
+
|
|
350
|
+
interface RecordMetadata {
|
|
351
|
+
readonly id: string;
|
|
352
|
+
readonly runId: string;
|
|
353
|
+
readonly tenantId: string;
|
|
354
|
+
readonly version: string;
|
|
355
|
+
readonly createdAt: string;
|
|
356
|
+
readonly flowRef?: { readonly id: string; readonly version: string };
|
|
357
|
+
readonly signed: boolean;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
function serializeRecordMetadata(row: ProvenanceRecordSummary): RecordMetadata {
|
|
361
|
+
return {
|
|
362
|
+
id: row.id as unknown as string,
|
|
363
|
+
runId: row.runId as unknown as string,
|
|
364
|
+
tenantId: row.tenantId as unknown as string,
|
|
365
|
+
version: row.version,
|
|
366
|
+
createdAt: row.createdAt as unknown as string,
|
|
367
|
+
...(row.flowRef !== undefined && {
|
|
368
|
+
flowRef: {
|
|
369
|
+
id: row.flowRef.id as unknown as string,
|
|
370
|
+
version: row.flowRef.version,
|
|
371
|
+
},
|
|
372
|
+
}),
|
|
373
|
+
signed: row.signed,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
interface ValidatedExportBody {
|
|
378
|
+
readonly signingKeyId: SigningKeyId;
|
|
379
|
+
readonly includeMessages: boolean;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
type ParseResult<T> =
|
|
383
|
+
| { readonly kind: 'ok'; readonly value: T }
|
|
384
|
+
| { readonly kind: 'err'; readonly message: string };
|
|
385
|
+
|
|
386
|
+
function parseExportBody(body: Record<string, unknown>): ParseResult<ValidatedExportBody> {
|
|
387
|
+
const raw = body.signingKeyId;
|
|
388
|
+
if (typeof raw !== 'string' || raw.length === 0) {
|
|
389
|
+
return { kind: 'err', message: 'Field `signingKeyId` must be a non-empty string' };
|
|
390
|
+
}
|
|
391
|
+
let includeMessages = false;
|
|
392
|
+
if ('includeMessages' in body) {
|
|
393
|
+
const im = body.includeMessages;
|
|
394
|
+
if (typeof im !== 'boolean') {
|
|
395
|
+
return { kind: 'err', message: 'Field `includeMessages` must be a boolean when present' };
|
|
396
|
+
}
|
|
397
|
+
includeMessages = im;
|
|
398
|
+
}
|
|
399
|
+
return {
|
|
400
|
+
kind: 'ok',
|
|
401
|
+
value: {
|
|
402
|
+
signingKeyId: raw as SigningKeyId,
|
|
403
|
+
includeMessages,
|
|
404
|
+
},
|
|
405
|
+
};
|
|
406
|
+
}
|