@inkeep/agents-api 0.0.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.md +56 -0
- package/SUPPLEMENTAL_TERMS.md +40 -0
- package/dist/.well-known/workflow/v1/flow.cjs +46446 -0
- package/dist/.well-known/workflow/v1/flow.cjs.debug.json +8 -0
- package/dist/.well-known/workflow/v1/manifest.debug.json +93 -0
- package/dist/.well-known/workflow/v1/step.cjs +219923 -0
- package/dist/.well-known/workflow/v1/step.cjs.debug.json +8 -0
- package/dist/.well-known/workflow/v1/webhook.mjs +29 -0
- package/dist/createApp.d.ts +10 -0
- package/dist/createApp.js +170 -0
- package/dist/data/db/index.d.ts +4 -0
- package/dist/data/db/index.js +5 -0
- package/dist/data/db/manageDbClient.d.ts +6 -0
- package/dist/data/db/manageDbClient.js +9 -0
- package/dist/data/db/manageDbPool.d.ts +6 -0
- package/dist/data/db/manageDbPool.js +9 -0
- package/dist/data/db/runDbClient.d.ts +6 -0
- package/dist/data/db/runDbClient.js +9 -0
- package/dist/domains/evals/index.d.ts +13 -0
- package/dist/domains/evals/index.js +13 -0
- package/dist/domains/evals/routes/datasetTriggers.d.ts +7 -0
- package/dist/domains/evals/routes/datasetTriggers.js +65 -0
- package/dist/domains/evals/routes/evaluationTriggers.d.ts +11 -0
- package/dist/domains/evals/routes/evaluationTriggers.js +311 -0
- package/dist/domains/evals/routes/index.d.ts +7 -0
- package/dist/domains/evals/routes/index.js +12 -0
- package/dist/domains/evals/scripts/build-workflow.d.ts +1 -0
- package/dist/domains/evals/scripts/build-workflow.js +31 -0
- package/dist/domains/evals/services/EvaluationService.d.ts +96 -0
- package/dist/domains/evals/services/EvaluationService.js +863 -0
- package/dist/domains/evals/services/conversationEvaluation.d.ts +15 -0
- package/dist/domains/evals/services/conversationEvaluation.js +102 -0
- package/dist/domains/evals/services/datasetRun.d.ts +16 -0
- package/dist/domains/evals/services/datasetRun.js +43 -0
- package/dist/domains/evals/services/evaluationJob.d.ts +17 -0
- package/dist/domains/evals/services/evaluationJob.js +65 -0
- package/dist/domains/evals/services/startEvaluation.d.ts +19 -0
- package/dist/domains/evals/services/startEvaluation.js +18 -0
- package/dist/domains/evals/workflow/functions/evaluateConversation.d.ts +28 -0
- package/dist/domains/evals/workflow/functions/evaluateConversation.js +134 -0
- package/dist/domains/evals/workflow/functions/runDatasetItem.d.ts +36 -0
- package/dist/domains/evals/workflow/functions/runDatasetItem.js +204 -0
- package/dist/domains/evals/workflow/index.d.ts +4 -0
- package/dist/domains/evals/workflow/index.js +5 -0
- package/dist/domains/evals/workflow/routes.d.ts +7 -0
- package/dist/domains/evals/workflow/routes.js +106 -0
- package/dist/domains/evals/workflow/world.d.ts +4 -0
- package/dist/domains/evals/workflow/world.js +36 -0
- package/dist/domains/index.d.ts +4 -0
- package/dist/domains/index.js +5 -0
- package/dist/domains/manage/index.d.ts +12 -0
- package/dist/domains/manage/index.js +31 -0
- package/dist/domains/manage/routes/agent.d.ts +9 -0
- package/dist/domains/manage/routes/agent.js +264 -0
- package/dist/domains/manage/routes/agentFull.d.ts +9 -0
- package/dist/domains/manage/routes/agentFull.js +207 -0
- package/dist/domains/manage/routes/agentToolRelations.d.ts +9 -0
- package/dist/domains/manage/routes/agentToolRelations.js +289 -0
- package/dist/domains/manage/routes/apiKeys.d.ts +9 -0
- package/dist/domains/manage/routes/apiKeys.js +217 -0
- package/dist/domains/manage/routes/artifactComponents.d.ts +9 -0
- package/dist/domains/manage/routes/artifactComponents.js +210 -0
- package/dist/domains/manage/routes/branches.d.ts +9 -0
- package/dist/domains/manage/routes/branches.js +182 -0
- package/dist/domains/manage/routes/cliAuth.d.ts +9 -0
- package/dist/domains/manage/routes/cliAuth.js +60 -0
- package/dist/domains/manage/routes/contextConfigs.d.ts +9 -0
- package/dist/domains/manage/routes/contextConfigs.js +189 -0
- package/dist/domains/manage/routes/conversations.d.ts +7 -0
- package/dist/domains/manage/routes/conversations.js +59 -0
- package/dist/domains/manage/routes/credentialStores.d.ts +9 -0
- package/dist/domains/manage/routes/credentialStores.js +86 -0
- package/dist/domains/manage/routes/credentials.d.ts +9 -0
- package/dist/domains/manage/routes/credentials.js +207 -0
- package/dist/domains/manage/routes/dataComponents.d.ts +9 -0
- package/dist/domains/manage/routes/dataComponents.js +192 -0
- package/dist/domains/manage/routes/evals/datasetItems.d.ts +9 -0
- package/dist/domains/manage/routes/evals/datasetItems.js +310 -0
- package/dist/domains/manage/routes/evals/datasetRunConfigs.d.ts +9 -0
- package/dist/domains/manage/routes/evals/datasetRunConfigs.js +402 -0
- package/dist/domains/manage/routes/evals/datasetRuns.d.ts +9 -0
- package/dist/domains/manage/routes/evals/datasetRuns.js +256 -0
- package/dist/domains/manage/routes/evals/datasets.d.ts +9 -0
- package/dist/domains/manage/routes/evals/datasets.js +238 -0
- package/dist/domains/manage/routes/evals/evaluationJobConfigEvaluatorRelations.d.ts +9 -0
- package/dist/domains/manage/routes/evals/evaluationJobConfigEvaluatorRelations.js +146 -0
- package/dist/domains/manage/routes/evals/evaluationJobConfigs.d.ts +9 -0
- package/dist/domains/manage/routes/evals/evaluationJobConfigs.js +364 -0
- package/dist/domains/manage/routes/evals/evaluationResults.d.ts +7 -0
- package/dist/domains/manage/routes/evals/evaluationResults.js +192 -0
- package/dist/domains/manage/routes/evals/evaluationRunConfigs.d.ts +9 -0
- package/dist/domains/manage/routes/evals/evaluationRunConfigs.js +403 -0
- package/dist/domains/manage/routes/evals/evaluationSuiteConfigEvaluatorRelations.d.ts +9 -0
- package/dist/domains/manage/routes/evals/evaluationSuiteConfigEvaluatorRelations.js +146 -0
- package/dist/domains/manage/routes/evals/evaluationSuiteConfigs.d.ts +9 -0
- package/dist/domains/manage/routes/evals/evaluationSuiteConfigs.js +246 -0
- package/dist/domains/manage/routes/evals/evaluators.d.ts +9 -0
- package/dist/domains/manage/routes/evals/evaluators.js +281 -0
- package/dist/domains/manage/routes/evals/index.d.ts +9 -0
- package/dist/domains/manage/routes/evals/index.js +26 -0
- package/dist/domains/manage/routes/externalAgents.d.ts +9 -0
- package/dist/domains/manage/routes/externalAgents.js +199 -0
- package/dist/domains/manage/routes/functionTools.d.ts +9 -0
- package/dist/domains/manage/routes/functionTools.js +256 -0
- package/dist/domains/manage/routes/functions.d.ts +9 -0
- package/dist/domains/manage/routes/functions.js +285 -0
- package/dist/domains/manage/routes/index.d.ts +7 -0
- package/dist/domains/manage/routes/index.js +68 -0
- package/dist/domains/manage/routes/invitations.d.ts +9 -0
- package/dist/domains/manage/routes/invitations.js +41 -0
- package/dist/domains/manage/routes/mcp.d.ts +7 -0
- package/dist/domains/manage/routes/mcp.js +45 -0
- package/dist/domains/manage/routes/mcpCatalog.d.ts +9 -0
- package/dist/domains/manage/routes/mcpCatalog.js +454 -0
- package/dist/domains/manage/routes/oauth.d.ts +10 -0
- package/dist/domains/manage/routes/oauth.js +327 -0
- package/dist/domains/manage/routes/playgroundToken.d.ts +9 -0
- package/dist/domains/manage/routes/playgroundToken.js +127 -0
- package/dist/domains/manage/routes/projectFull.d.ts +9 -0
- package/dist/domains/manage/routes/projectFull.js +304 -0
- package/dist/domains/manage/routes/projectMembers.d.ts +9 -0
- package/dist/domains/manage/routes/projectMembers.js +201 -0
- package/dist/domains/manage/routes/projectPermissions.d.ts +9 -0
- package/dist/domains/manage/routes/projectPermissions.js +68 -0
- package/dist/domains/manage/routes/projects.d.ts +9 -0
- package/dist/domains/manage/routes/projects.js +279 -0
- package/dist/domains/manage/routes/ref.d.ts +9 -0
- package/dist/domains/manage/routes/ref.js +33 -0
- package/dist/domains/manage/routes/signoz.d.ts +10 -0
- package/dist/domains/manage/routes/signoz.js +159 -0
- package/dist/domains/manage/routes/subAgentArtifactComponents.d.ts +9 -0
- package/dist/domains/manage/routes/subAgentArtifactComponents.js +202 -0
- package/dist/domains/manage/routes/subAgentDataComponents.d.ts +9 -0
- package/dist/domains/manage/routes/subAgentDataComponents.js +201 -0
- package/dist/domains/manage/routes/subAgentExternalAgentRelations.d.ts +9 -0
- package/dist/domains/manage/routes/subAgentExternalAgentRelations.js +216 -0
- package/dist/domains/manage/routes/subAgentFunctionTools.d.ts +9 -0
- package/dist/domains/manage/routes/subAgentFunctionTools.js +205 -0
- package/dist/domains/manage/routes/subAgentRelations.d.ts +9 -0
- package/dist/domains/manage/routes/subAgentRelations.js +263 -0
- package/dist/domains/manage/routes/subAgentTeamAgentRelations.d.ts +9 -0
- package/dist/domains/manage/routes/subAgentTeamAgentRelations.js +216 -0
- package/dist/domains/manage/routes/subAgentToolRelations.d.ts +9 -0
- package/dist/domains/manage/routes/subAgentToolRelations.js +289 -0
- package/dist/domains/manage/routes/subAgents.d.ts +9 -0
- package/dist/domains/manage/routes/subAgents.js +220 -0
- package/dist/domains/manage/routes/thirdPartyMCPServers.d.ts +9 -0
- package/dist/domains/manage/routes/thirdPartyMCPServers.js +72 -0
- package/dist/domains/manage/routes/tools.d.ts +9 -0
- package/dist/domains/manage/routes/tools.js +261 -0
- package/dist/domains/manage/routes/triggers.d.ts +9 -0
- package/dist/domains/manage/routes/triggers.js +423 -0
- package/dist/domains/manage/routes/userOrganizations.d.ts +9 -0
- package/dist/domains/manage/routes/userOrganizations.js +58 -0
- package/dist/domains/run/a2a/client.d.ts +186 -0
- package/dist/domains/run/a2a/client.js +524 -0
- package/dist/domains/run/a2a/handlers.d.ts +7 -0
- package/dist/domains/run/a2a/handlers.js +582 -0
- package/dist/domains/run/a2a/transfer.d.ts +27 -0
- package/dist/domains/run/a2a/transfer.js +50 -0
- package/dist/domains/run/a2a/types.d.ts +79 -0
- package/dist/domains/run/a2a/types.js +22 -0
- package/dist/domains/run/agents/Agent.d.ts +273 -0
- package/dist/domains/run/agents/Agent.js +2104 -0
- package/dist/domains/run/agents/ModelFactory.d.ts +63 -0
- package/dist/domains/run/agents/ModelFactory.js +194 -0
- package/dist/domains/run/agents/SystemPromptBuilder.d.ts +21 -0
- package/dist/domains/run/agents/SystemPromptBuilder.js +48 -0
- package/dist/domains/run/agents/ToolSessionManager.d.ts +63 -0
- package/dist/domains/run/agents/ToolSessionManager.js +146 -0
- package/dist/domains/run/agents/generateTaskHandler.d.ts +44 -0
- package/dist/domains/run/agents/generateTaskHandler.js +384 -0
- package/dist/domains/run/agents/relationTools.d.ts +64 -0
- package/dist/domains/run/agents/relationTools.js +365 -0
- package/dist/domains/run/agents/types.d.ts +31 -0
- package/dist/domains/run/agents/types.js +1 -0
- package/dist/domains/run/agents/versions/v1/Phase1Config.d.ts +29 -0
- package/dist/domains/run/agents/versions/v1/Phase1Config.js +458 -0
- package/dist/domains/run/agents/versions/v1/Phase2Config.d.ts +33 -0
- package/dist/domains/run/agents/versions/v1/Phase2Config.js +341 -0
- package/dist/domains/run/constants/execution-limits/defaults.d.ts +51 -0
- package/dist/domains/run/constants/execution-limits/defaults.js +52 -0
- package/dist/domains/run/constants/execution-limits/index.d.ts +6 -0
- package/dist/domains/run/constants/execution-limits/index.js +21 -0
- package/dist/domains/run/context/ContextFetcher.d.ts +68 -0
- package/dist/domains/run/context/ContextFetcher.js +276 -0
- package/dist/domains/run/context/ContextResolver.d.ts +56 -0
- package/dist/domains/run/context/ContextResolver.js +273 -0
- package/dist/domains/run/context/context.d.ts +19 -0
- package/dist/domains/run/context/context.js +108 -0
- package/dist/domains/run/context/contextCache.d.ts +56 -0
- package/dist/domains/run/context/contextCache.js +174 -0
- package/dist/domains/run/context/index.d.ts +6 -0
- package/dist/domains/run/context/index.js +7 -0
- package/dist/domains/run/context/validation.d.ts +39 -0
- package/dist/domains/run/context/validation.js +255 -0
- package/dist/domains/run/data/agent.d.ts +7 -0
- package/dist/domains/run/data/agent.js +67 -0
- package/dist/domains/run/data/agents.d.ts +34 -0
- package/dist/domains/run/data/agents.js +131 -0
- package/dist/domains/run/data/conversations.d.ts +129 -0
- package/dist/domains/run/data/conversations.js +517 -0
- package/dist/domains/run/handlers/executionHandler.d.ts +42 -0
- package/dist/domains/run/handlers/executionHandler.js +484 -0
- package/dist/domains/run/index.d.ts +13 -0
- package/dist/domains/run/index.js +21 -0
- package/dist/domains/run/routes/agents.d.ts +13 -0
- package/dist/domains/run/routes/agents.js +141 -0
- package/dist/domains/run/routes/chat.d.ts +14 -0
- package/dist/domains/run/routes/chat.js +300 -0
- package/dist/domains/run/routes/chatDataStream.d.ts +14 -0
- package/dist/domains/run/routes/chatDataStream.js +381 -0
- package/dist/domains/run/routes/mcp.d.ts +14 -0
- package/dist/domains/run/routes/mcp.js +483 -0
- package/dist/domains/run/routes/webhooks.d.ts +15 -0
- package/dist/domains/run/routes/webhooks.js +396 -0
- package/dist/domains/run/services/AgentSession.d.ts +354 -0
- package/dist/domains/run/services/AgentSession.js +1203 -0
- package/dist/domains/run/services/ArtifactParser.d.ts +105 -0
- package/dist/domains/run/services/ArtifactParser.js +338 -0
- package/dist/domains/run/services/ArtifactService.d.ts +122 -0
- package/dist/domains/run/services/ArtifactService.js +629 -0
- package/dist/domains/run/services/BaseCompressor.d.ts +183 -0
- package/dist/domains/run/services/BaseCompressor.js +500 -0
- package/dist/domains/run/services/ConversationCompressor.d.ts +32 -0
- package/dist/domains/run/services/ConversationCompressor.js +91 -0
- package/dist/domains/run/services/IncrementalStreamParser.d.ts +98 -0
- package/dist/domains/run/services/IncrementalStreamParser.js +327 -0
- package/dist/domains/run/services/MidGenerationCompressor.d.ts +63 -0
- package/dist/domains/run/services/MidGenerationCompressor.js +104 -0
- package/dist/domains/run/services/PendingToolApprovalManager.d.ts +62 -0
- package/dist/domains/run/services/PendingToolApprovalManager.js +133 -0
- package/dist/domains/run/services/ResponseFormatter.d.ts +39 -0
- package/dist/domains/run/services/ResponseFormatter.js +152 -0
- package/dist/domains/run/services/evaluationRunConfigMatcher.d.ts +4 -0
- package/dist/domains/run/services/evaluationRunConfigMatcher.js +7 -0
- package/dist/domains/run/tools/NativeSandboxExecutor.d.ts +38 -0
- package/dist/domains/run/tools/NativeSandboxExecutor.js +432 -0
- package/dist/domains/run/tools/SandboxExecutorFactory.d.ts +36 -0
- package/dist/domains/run/tools/SandboxExecutorFactory.js +80 -0
- package/dist/domains/run/tools/VercelSandboxExecutor.d.ts +71 -0
- package/dist/domains/run/tools/VercelSandboxExecutor.js +340 -0
- package/dist/domains/run/tools/distill-conversation-history-tool.d.ts +62 -0
- package/dist/domains/run/tools/distill-conversation-history-tool.js +206 -0
- package/dist/domains/run/tools/distill-conversation-tool.d.ts +41 -0
- package/dist/domains/run/tools/distill-conversation-tool.js +141 -0
- package/dist/domains/run/tools/sandbox-utils.d.ts +18 -0
- package/dist/domains/run/tools/sandbox-utils.js +53 -0
- package/dist/domains/run/types/chat.d.ts +27 -0
- package/dist/domains/run/types/chat.js +1 -0
- package/dist/domains/run/types/executionContext.d.ts +40 -0
- package/dist/domains/run/types/executionContext.js +28 -0
- package/dist/domains/run/types/xml.d.ts +9 -0
- package/dist/domains/run/utils/SchemaProcessor.d.ts +52 -0
- package/dist/domains/run/utils/SchemaProcessor.js +182 -0
- package/dist/domains/run/utils/agent-operations.d.ts +62 -0
- package/dist/domains/run/utils/agent-operations.js +53 -0
- package/dist/domains/run/utils/artifact-component-schema.d.ts +42 -0
- package/dist/domains/run/utils/artifact-component-schema.js +186 -0
- package/dist/domains/run/utils/cleanup.d.ts +21 -0
- package/dist/domains/run/utils/cleanup.js +59 -0
- package/dist/domains/run/utils/data-component-schema.d.ts +2 -0
- package/dist/domains/run/utils/data-component-schema.js +3 -0
- package/dist/domains/run/utils/default-status-schemas.d.ts +20 -0
- package/dist/domains/run/utils/default-status-schemas.js +24 -0
- package/dist/domains/run/utils/json-postprocessor.d.ts +13 -0
- package/dist/domains/run/utils/json-postprocessor.js +19 -0
- package/dist/domains/run/utils/model-context-utils.d.ts +39 -0
- package/dist/domains/run/utils/model-context-utils.js +181 -0
- package/dist/domains/run/utils/model-resolver.d.ts +6 -0
- package/dist/domains/run/utils/model-resolver.js +24 -0
- package/dist/domains/run/utils/project.d.ts +207 -0
- package/dist/domains/run/utils/project.js +315 -0
- package/dist/domains/run/utils/schema-validation.d.ts +44 -0
- package/dist/domains/run/utils/schema-validation.js +97 -0
- package/dist/domains/run/utils/stream-helpers.d.ts +193 -0
- package/dist/domains/run/utils/stream-helpers.js +510 -0
- package/dist/domains/run/utils/stream-registry.d.ts +22 -0
- package/dist/domains/run/utils/stream-registry.js +33 -0
- package/dist/domains/run/utils/token-estimator.d.ts +23 -0
- package/dist/domains/run/utils/token-estimator.js +17 -0
- package/dist/domains/run/utils/tracer.d.ts +7 -0
- package/dist/domains/run/utils/tracer.js +7 -0
- package/dist/env.d.ts +89 -0
- package/dist/env.js +69 -0
- package/dist/factory.d.ts +1535 -0
- package/dist/factory.js +42 -0
- package/dist/index.d.ts +1530 -0
- package/dist/index.js +44 -0
- package/dist/initialization.d.ts +6 -0
- package/dist/initialization.js +65 -0
- package/dist/instrumentation.d.ts +17 -0
- package/dist/instrumentation.js +68 -0
- package/dist/logger.d.ts +2 -0
- package/dist/logger.js +3 -0
- package/dist/middleware/branchScopedDb.d.ts +31 -0
- package/dist/middleware/branchScopedDb.js +137 -0
- package/dist/middleware/cors.d.ts +36 -0
- package/dist/middleware/cors.js +131 -0
- package/dist/middleware/errorHandler.d.ts +12 -0
- package/dist/middleware/errorHandler.js +88 -0
- package/dist/middleware/evalsAuth.d.ts +16 -0
- package/dist/middleware/evalsAuth.js +52 -0
- package/dist/middleware/index.d.ts +8 -0
- package/dist/middleware/index.js +9 -0
- package/dist/middleware/manageAuth.d.ts +25 -0
- package/dist/middleware/manageAuth.js +80 -0
- package/dist/middleware/projectAccess.d.ts +31 -0
- package/dist/middleware/projectAccess.js +118 -0
- package/dist/middleware/projectConfig.d.ts +25 -0
- package/dist/middleware/projectConfig.js +89 -0
- package/dist/middleware/ref.d.ts +61 -0
- package/dist/middleware/ref.js +239 -0
- package/dist/middleware/requirePermission.d.ts +14 -0
- package/dist/middleware/requirePermission.js +80 -0
- package/dist/middleware/runAuth.d.ts +29 -0
- package/dist/middleware/runAuth.js +253 -0
- package/dist/middleware/sessionAuth.d.ts +17 -0
- package/dist/middleware/sessionAuth.js +58 -0
- package/dist/middleware/tenantAccess.d.ts +22 -0
- package/dist/middleware/tenantAccess.js +63 -0
- package/dist/middleware/tracing.d.ts +7 -0
- package/dist/middleware/tracing.js +50 -0
- package/dist/openapi.d.ts +7 -0
- package/dist/openapi.js +156 -0
- package/dist/ssoHelpers.d.ts +20 -0
- package/dist/ssoHelpers.js +51 -0
- package/dist/templates/v1/phase1/system-prompt.js +5 -0
- package/dist/templates/v1/phase1/thinking-preparation.js +5 -0
- package/dist/templates/v1/phase1/tool.js +5 -0
- package/dist/templates/v1/phase2/data-component.js +5 -0
- package/dist/templates/v1/phase2/data-components.js +5 -0
- package/dist/templates/v1/phase2/system-prompt.js +5 -0
- package/dist/templates/v1/shared/artifact-retrieval-guidance.js +5 -0
- package/dist/templates/v1/shared/artifact.js +5 -0
- package/dist/types/app.d.ts +64 -0
- package/dist/types/app.js +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +1 -0
- package/dist/types/runExecutionContext.d.ts +25 -0
- package/dist/types/runExecutionContext.js +28 -0
- package/dist/utils/oauthService.d.ts +71 -0
- package/dist/utils/oauthService.js +106 -0
- package/dist/utils/signozHelpers.d.ts +9 -0
- package/dist/utils/signozHelpers.js +33 -0
- package/dist/utils/speakeasy.d.ts +93 -0
- package/dist/utils/speakeasy.js +44 -0
- package/dist/utils/tempApiKeys.d.ts +17 -0
- package/dist/utils/tempApiKeys.js +26 -0
- package/dist/utils/workflowApiHelpers.d.ts +1 -0
- package/dist/utils/workflowApiHelpers.js +1 -0
- package/package.json +126 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { env } from "../env.js";
|
|
2
|
+
import { getLogger, isInternalServiceToken, verifyInternalServiceAuthHeader } from "@inkeep/agents-core";
|
|
3
|
+
import { createMiddleware } from "hono/factory";
|
|
4
|
+
import { HTTPException } from "hono/http-exception";
|
|
5
|
+
|
|
6
|
+
//#region src/middleware/evalsAuth.ts
|
|
7
|
+
const logger = getLogger("eval-auth");
|
|
8
|
+
/**
|
|
9
|
+
* Middleware to authenticate API requests using Bearer token authentication
|
|
10
|
+
* First checks if token matches INKEEP_AGENTS_EVAL_API_BYPASS_SECRET,
|
|
11
|
+
*/
|
|
12
|
+
const evalApiKeyAuth = () => createMiddleware(async (c, next) => {
|
|
13
|
+
const authHeader = c.req.header("Authorization");
|
|
14
|
+
if (!authHeader || !authHeader.startsWith("Bearer ")) {
|
|
15
|
+
if (env.ENVIRONMENT === "development") {
|
|
16
|
+
await next();
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
throw new HTTPException(401, { message: "Missing or invalid authorization header. Expected: Bearer <api_key>" });
|
|
20
|
+
}
|
|
21
|
+
const apiKey = authHeader.substring(7);
|
|
22
|
+
if (env.INKEEP_AGENTS_EVAL_API_BYPASS_SECRET) {
|
|
23
|
+
if (!authHeader || !authHeader.startsWith("Bearer ")) {
|
|
24
|
+
console.log("[AUTH DEBUG] Rejecting: No Bearer token provided");
|
|
25
|
+
throw new HTTPException(401, { message: "Missing or invalid authorization header. Expected: Bearer <api_key>" });
|
|
26
|
+
}
|
|
27
|
+
if (authHeader.substring(7) === env.INKEEP_AGENTS_EVAL_API_BYPASS_SECRET) {
|
|
28
|
+
logger.info({}, "Bypass secret authenticated successfully");
|
|
29
|
+
await next();
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (isInternalServiceToken(apiKey)) {
|
|
34
|
+
const result = await verifyInternalServiceAuthHeader(authHeader);
|
|
35
|
+
if (!result.valid || !result.payload) throw new HTTPException(401, { message: result.error || "Invalid internal service token" });
|
|
36
|
+
logger.info({
|
|
37
|
+
serviceId: result.payload.sub,
|
|
38
|
+
tenantId: result.payload.tenantId,
|
|
39
|
+
projectId: result.payload.projectId
|
|
40
|
+
}, "Internal service authenticated");
|
|
41
|
+
await next();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (env.ENVIRONMENT === "development") {
|
|
45
|
+
await next();
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
throw new HTTPException(401, { message: "Invalid Token" });
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
//#endregion
|
|
52
|
+
export { evalApiKeyAuth };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { authCorsConfig, defaultCorsConfig, getBaseDomain, isOriginAllowed, playgroundCorsConfig, runCorsConfig, signozCorsConfig } from "./cors.js";
|
|
2
|
+
import { errorHandler } from "./errorHandler.js";
|
|
3
|
+
import { manageApiKeyAuth } from "./manageAuth.js";
|
|
4
|
+
import { oauthRefMiddleware } from "./ref.js";
|
|
5
|
+
import { runApiKeyAuth, runApiKeyAuthExcept, runOptionalAuth } from "./runAuth.js";
|
|
6
|
+
import { sessionAuth } from "./sessionAuth.js";
|
|
7
|
+
import { requireTenantAccess } from "./tenantAccess.js";
|
|
8
|
+
export { authCorsConfig, defaultCorsConfig, errorHandler, getBaseDomain, isOriginAllowed, manageApiKeyAuth, oauthRefMiddleware, playgroundCorsConfig, requireTenantAccess, runApiKeyAuth, runApiKeyAuthExcept, runCorsConfig, runOptionalAuth, sessionAuth, signozCorsConfig };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { sessionAuth } from "./sessionAuth.js";
|
|
2
|
+
import { authCorsConfig, defaultCorsConfig, getBaseDomain, isOriginAllowed, playgroundCorsConfig, runCorsConfig, signozCorsConfig } from "./cors.js";
|
|
3
|
+
import { errorHandler } from "./errorHandler.js";
|
|
4
|
+
import { manageApiKeyAuth } from "./manageAuth.js";
|
|
5
|
+
import { oauthRefMiddleware } from "./ref.js";
|
|
6
|
+
import { runApiKeyAuth, runApiKeyAuthExcept, runOptionalAuth } from "./runAuth.js";
|
|
7
|
+
import { requireTenantAccess } from "./tenantAccess.js";
|
|
8
|
+
|
|
9
|
+
export { authCorsConfig, defaultCorsConfig, errorHandler, getBaseDomain, isOriginAllowed, manageApiKeyAuth, oauthRefMiddleware, playgroundCorsConfig, requireTenantAccess, runApiKeyAuth, runApiKeyAuthExcept, runCorsConfig, runOptionalAuth, sessionAuth, signozCorsConfig };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as hono0 from "hono";
|
|
2
|
+
import { BaseExecutionContext } from "@inkeep/agents-core";
|
|
3
|
+
import { createAuth } from "@inkeep/agents-core/auth";
|
|
4
|
+
|
|
5
|
+
//#region src/middleware/manageAuth.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Middleware to authenticate API requests using Bearer token authentication
|
|
9
|
+
* Authentication priority:
|
|
10
|
+
* 1. Bypass secret (INKEEP_AGENTS_MANAGE_API_BYPASS_SECRET)
|
|
11
|
+
* 2. Better-auth session token (from device authorization flow)
|
|
12
|
+
* 3. Database API key
|
|
13
|
+
* 4. Internal service token
|
|
14
|
+
*/
|
|
15
|
+
declare const manageApiKeyAuth: () => hono0.MiddlewareHandler<{
|
|
16
|
+
Variables: {
|
|
17
|
+
executionContext: BaseExecutionContext;
|
|
18
|
+
userId?: string;
|
|
19
|
+
userEmail?: string;
|
|
20
|
+
tenantId?: string;
|
|
21
|
+
auth: ReturnType<typeof createAuth> | null;
|
|
22
|
+
};
|
|
23
|
+
}, string, {}, Response>;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { manageApiKeyAuth };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { env } from "../env.js";
|
|
2
|
+
import runDbClient_default from "../data/db/runDbClient.js";
|
|
3
|
+
import { getLogger, isInternalServiceToken, validateAndGetApiKey, verifyInternalServiceAuthHeader } from "@inkeep/agents-core";
|
|
4
|
+
import { createMiddleware } from "hono/factory";
|
|
5
|
+
import { HTTPException } from "hono/http-exception";
|
|
6
|
+
|
|
7
|
+
//#region src/middleware/manageAuth.ts
|
|
8
|
+
const logger = getLogger("env-key-auth");
|
|
9
|
+
/**
|
|
10
|
+
* Middleware to authenticate API requests using Bearer token authentication
|
|
11
|
+
* Authentication priority:
|
|
12
|
+
* 1. Bypass secret (INKEEP_AGENTS_MANAGE_API_BYPASS_SECRET)
|
|
13
|
+
* 2. Better-auth session token (from device authorization flow)
|
|
14
|
+
* 3. Database API key
|
|
15
|
+
* 4. Internal service token
|
|
16
|
+
*/
|
|
17
|
+
const manageApiKeyAuth = () => createMiddleware(async (c, next) => {
|
|
18
|
+
const authHeader = c.req.header("Authorization");
|
|
19
|
+
if (!authHeader || !authHeader.startsWith("Bearer ")) throw new HTTPException(401, { message: "Missing or invalid authorization header. Expected: Bearer <api_key>" });
|
|
20
|
+
const token = authHeader.substring(7);
|
|
21
|
+
if (env.INKEEP_AGENTS_MANAGE_API_BYPASS_SECRET && token === env.INKEEP_AGENTS_MANAGE_API_BYPASS_SECRET) {
|
|
22
|
+
logger.info({}, "Bypass secret authenticated successfully");
|
|
23
|
+
c.set("userId", "system");
|
|
24
|
+
c.set("userEmail", "system@internal");
|
|
25
|
+
await next();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const auth = c.get("auth");
|
|
29
|
+
if (auth) try {
|
|
30
|
+
const headers$1 = new Headers();
|
|
31
|
+
headers$1.set("Authorization", authHeader);
|
|
32
|
+
const forwardedCookie = c.req.header("x-forwarded-cookie");
|
|
33
|
+
const cookie = c.req.header("cookie");
|
|
34
|
+
if (forwardedCookie) {
|
|
35
|
+
headers$1.set("cookie", forwardedCookie);
|
|
36
|
+
logger.debug({ source: "x-forwarded-cookie" }, "Using x-forwarded-cookie for session validation");
|
|
37
|
+
} else if (cookie) {
|
|
38
|
+
headers$1.set("cookie", cookie);
|
|
39
|
+
logger.debug({ source: "cookie" }, "Using cookie for session validation");
|
|
40
|
+
}
|
|
41
|
+
const session = await auth.api.getSession({ headers: headers$1 });
|
|
42
|
+
if (session?.user) {
|
|
43
|
+
logger.info({ userId: session.user.id }, "Better-auth session authenticated successfully");
|
|
44
|
+
c.set("userId", session.user.id);
|
|
45
|
+
c.set("userEmail", session.user.email);
|
|
46
|
+
await next();
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
} catch (error) {
|
|
50
|
+
logger.debug({ error }, "Better-auth session validation failed, trying API key");
|
|
51
|
+
}
|
|
52
|
+
const validatedKey = await validateAndGetApiKey(token, runDbClient_default);
|
|
53
|
+
if (validatedKey) {
|
|
54
|
+
logger.info({ keyId: validatedKey.id }, "API key authenticated successfully");
|
|
55
|
+
c.set("userId", `apikey:${validatedKey.id}`);
|
|
56
|
+
c.set("userEmail", `apikey-${validatedKey.id}@internal`);
|
|
57
|
+
c.set("tenantId", validatedKey.tenantId);
|
|
58
|
+
await next();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (isInternalServiceToken(token)) {
|
|
62
|
+
const result = await verifyInternalServiceAuthHeader(authHeader);
|
|
63
|
+
if (!result.valid || !result.payload) throw new HTTPException(401, { message: result.error || "Invalid internal service token" });
|
|
64
|
+
logger.info({
|
|
65
|
+
serviceId: result.payload.sub,
|
|
66
|
+
tenantId: result.payload.tenantId,
|
|
67
|
+
projectId: result.payload.projectId,
|
|
68
|
+
userId: result.payload.userId
|
|
69
|
+
}, "Internal service authenticated");
|
|
70
|
+
c.set("userId", result.payload.userId || `system`);
|
|
71
|
+
c.set("userEmail", `${result.payload.sub}@internal.inkeep`);
|
|
72
|
+
if (result.payload.tenantId) c.set("tenantId", result.payload.tenantId);
|
|
73
|
+
await next();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
throw new HTTPException(401, { message: "Invalid Token" });
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
//#endregion
|
|
80
|
+
export { manageApiKeyAuth };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ManageAppVariables } from "../types/app.js";
|
|
2
|
+
import * as hono8 from "hono";
|
|
3
|
+
|
|
4
|
+
//#region src/middleware/projectAccess.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Permission levels for project access
|
|
8
|
+
*
|
|
9
|
+
* - view: Can see project and resources (read-only)
|
|
10
|
+
* - use: Can invoke agents, create API keys, view traces
|
|
11
|
+
* - edit: Can modify configurations and manage members
|
|
12
|
+
*/
|
|
13
|
+
type ProjectPermission = 'view' | 'use' | 'edit';
|
|
14
|
+
/**
|
|
15
|
+
* Middleware to check project-level access.
|
|
16
|
+
*
|
|
17
|
+
* When ENABLE_AUTHZ is false:
|
|
18
|
+
* - 'view' permission: all org members can view
|
|
19
|
+
* - 'edit': only org owner/admin
|
|
20
|
+
*
|
|
21
|
+
* When ENABLE_AUTHZ is true:
|
|
22
|
+
* - Uses SpiceDB to check permissions
|
|
23
|
+
* - Org owner/admin bypass (handled in canViewProject etc.)
|
|
24
|
+
*/
|
|
25
|
+
declare const requireProjectPermission: <Env$1 extends {
|
|
26
|
+
Variables: ManageAppVariables;
|
|
27
|
+
} = {
|
|
28
|
+
Variables: ManageAppVariables;
|
|
29
|
+
}>(permission?: ProjectPermission) => hono8.MiddlewareHandler<Env$1, string, {}, Response>;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { ProjectPermission, requireProjectPermission };
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { env } from "../env.js";
|
|
2
|
+
import { canEditProject, canUseProject, canViewProject, createApiError, isAuthzEnabled } from "@inkeep/agents-core";
|
|
3
|
+
import { createMiddleware } from "hono/factory";
|
|
4
|
+
import { HTTPException } from "hono/http-exception";
|
|
5
|
+
|
|
6
|
+
//#region src/middleware/projectAccess.ts
|
|
7
|
+
/**
|
|
8
|
+
* Middleware to check project-level access.
|
|
9
|
+
*
|
|
10
|
+
* When ENABLE_AUTHZ is false:
|
|
11
|
+
* - 'view' permission: all org members can view
|
|
12
|
+
* - 'edit': only org owner/admin
|
|
13
|
+
*
|
|
14
|
+
* When ENABLE_AUTHZ is true:
|
|
15
|
+
* - Uses SpiceDB to check permissions
|
|
16
|
+
* - Org owner/admin bypass (handled in canViewProject etc.)
|
|
17
|
+
*/
|
|
18
|
+
const requireProjectPermission = (permission = "view") => createMiddleware(async (c, next) => {
|
|
19
|
+
const isTestEnvironment = process.env.ENVIRONMENT === "test";
|
|
20
|
+
if (env.DISABLE_AUTH || isTestEnvironment) {
|
|
21
|
+
await next();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const userId = c.get("userId");
|
|
25
|
+
const tenantId = c.get("tenantId");
|
|
26
|
+
const tenantRole = c.get("tenantRole");
|
|
27
|
+
const projectId = c.req.param("projectId") || c.req.param("id");
|
|
28
|
+
if (!userId || !tenantId) throw createApiError({
|
|
29
|
+
code: "unauthorized",
|
|
30
|
+
message: "User or organization context not found",
|
|
31
|
+
instance: c.req.path
|
|
32
|
+
});
|
|
33
|
+
if (!projectId) throw createApiError({
|
|
34
|
+
code: "bad_request",
|
|
35
|
+
message: "Project ID is required",
|
|
36
|
+
instance: c.req.path
|
|
37
|
+
});
|
|
38
|
+
if (userId === "system" || userId.startsWith("apikey:")) {
|
|
39
|
+
await next();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
let hasAccess = false;
|
|
44
|
+
switch (permission) {
|
|
45
|
+
case "view":
|
|
46
|
+
hasAccess = await canViewProject({
|
|
47
|
+
tenantId,
|
|
48
|
+
userId,
|
|
49
|
+
projectId,
|
|
50
|
+
orgRole: tenantRole
|
|
51
|
+
});
|
|
52
|
+
break;
|
|
53
|
+
case "use":
|
|
54
|
+
hasAccess = await canUseProject({
|
|
55
|
+
tenantId,
|
|
56
|
+
userId,
|
|
57
|
+
projectId,
|
|
58
|
+
orgRole: tenantRole
|
|
59
|
+
});
|
|
60
|
+
break;
|
|
61
|
+
case "edit":
|
|
62
|
+
hasAccess = await canEditProject({
|
|
63
|
+
tenantId,
|
|
64
|
+
userId,
|
|
65
|
+
projectId,
|
|
66
|
+
orgRole: tenantRole
|
|
67
|
+
});
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
if (!hasAccess) {
|
|
71
|
+
if (isAuthzEnabled(tenantId) && permission !== "view") {
|
|
72
|
+
if (await canViewProject({
|
|
73
|
+
tenantId,
|
|
74
|
+
userId,
|
|
75
|
+
projectId,
|
|
76
|
+
orgRole: tenantRole
|
|
77
|
+
})) throw createApiError({
|
|
78
|
+
code: "forbidden",
|
|
79
|
+
message: `Permission denied. Required: project:${permission}`,
|
|
80
|
+
instance: c.req.path,
|
|
81
|
+
extensions: { requiredPermissions: [`project:${permission}`] }
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
if (isAuthzEnabled(tenantId)) throw createApiError({
|
|
85
|
+
code: "not_found",
|
|
86
|
+
message: "Project not found",
|
|
87
|
+
instance: c.req.path
|
|
88
|
+
});
|
|
89
|
+
throw createApiError({
|
|
90
|
+
code: "forbidden",
|
|
91
|
+
message: `Permission denied. Required: project:${permission}`,
|
|
92
|
+
instance: c.req.path,
|
|
93
|
+
extensions: {
|
|
94
|
+
requiredPermissions: [`project:${permission}`],
|
|
95
|
+
context: {
|
|
96
|
+
userId,
|
|
97
|
+
organizationId: tenantId,
|
|
98
|
+
projectId,
|
|
99
|
+
currentRole: tenantRole
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
await next();
|
|
105
|
+
} catch (error) {
|
|
106
|
+
if (error instanceof HTTPException) throw error;
|
|
107
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
108
|
+
throw createApiError({
|
|
109
|
+
code: "internal_server_error",
|
|
110
|
+
message: "Failed to verify project access",
|
|
111
|
+
instance: c.req.path,
|
|
112
|
+
extensions: { internalError: errorMessage }
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
//#endregion
|
|
118
|
+
export { requireProjectPermission };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as hono12 from "hono";
|
|
2
|
+
import { BaseExecutionContext, ResolvedRef } from "@inkeep/agents-core";
|
|
3
|
+
|
|
4
|
+
//#region src/middleware/projectConfig.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Middleware that fetches the full project definition from the Management API
|
|
7
|
+
*/
|
|
8
|
+
declare const projectConfigMiddleware: hono12.MiddlewareHandler<{
|
|
9
|
+
Variables: {
|
|
10
|
+
executionContext: BaseExecutionContext;
|
|
11
|
+
resolvedRef: ResolvedRef;
|
|
12
|
+
};
|
|
13
|
+
}, string, {}, Response>;
|
|
14
|
+
/**
|
|
15
|
+
* Creates a middleware that applies project config fetching except for specified route patterns
|
|
16
|
+
* @param skipRouteCheck - Function that returns true if the route should skip the middleware
|
|
17
|
+
*/
|
|
18
|
+
declare const projectConfigMiddlewareExcept: (skipRouteCheck: (path: string) => boolean) => hono12.MiddlewareHandler<{
|
|
19
|
+
Variables: {
|
|
20
|
+
executionContext: BaseExecutionContext;
|
|
21
|
+
resolvedRef: ResolvedRef;
|
|
22
|
+
};
|
|
23
|
+
}, string, {}, Response>;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { projectConfigMiddleware, projectConfigMiddlewareExcept };
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { getLogger as getLogger$1 } from "../logger.js";
|
|
2
|
+
import manageDbPool_default from "../data/db/manageDbPool.js";
|
|
3
|
+
import { ManageApiError, getFullProjectWithRelationIds, withRef } from "@inkeep/agents-core";
|
|
4
|
+
import { createMiddleware } from "hono/factory";
|
|
5
|
+
|
|
6
|
+
//#region src/middleware/projectConfig.ts
|
|
7
|
+
const logger = getLogger$1("projectConfigMiddleware");
|
|
8
|
+
/**
|
|
9
|
+
* Core handler that fetches the full project definition from the Management API
|
|
10
|
+
* and adds it to the Hono context for use in route handlers.
|
|
11
|
+
*
|
|
12
|
+
* This handler should be applied after authentication middleware since it
|
|
13
|
+
* requires the execution context to be set.
|
|
14
|
+
*/
|
|
15
|
+
async function projectConfigHandler(c, next) {
|
|
16
|
+
const executionContext = c.get("executionContext");
|
|
17
|
+
const resolvedRef = c.get("resolvedRef");
|
|
18
|
+
const { tenantId, projectId } = executionContext;
|
|
19
|
+
logger.debug({
|
|
20
|
+
tenantId,
|
|
21
|
+
projectId,
|
|
22
|
+
resolvedRef
|
|
23
|
+
}, "Fetching project config from Management API");
|
|
24
|
+
try {
|
|
25
|
+
if (!resolvedRef) throw new Error("Resolved ref not found");
|
|
26
|
+
if (resolvedRef.type !== "branch") throw new Error(`Runtime operations require a branch ref. Got ${resolvedRef.type} '${resolvedRef.name}'.`);
|
|
27
|
+
const projectConfig = await withRef(manageDbPool_default, resolvedRef, async (db) => {
|
|
28
|
+
return await getFullProjectWithRelationIds(db)({ scopes: {
|
|
29
|
+
tenantId,
|
|
30
|
+
projectId
|
|
31
|
+
} });
|
|
32
|
+
});
|
|
33
|
+
if (!projectConfig) throw new Error("Project not found");
|
|
34
|
+
c.set("executionContext", {
|
|
35
|
+
...executionContext,
|
|
36
|
+
project: projectConfig,
|
|
37
|
+
resolvedRef
|
|
38
|
+
});
|
|
39
|
+
logger.debug({
|
|
40
|
+
tenantId,
|
|
41
|
+
projectId,
|
|
42
|
+
resolvedRef,
|
|
43
|
+
agentCount: Object.keys(projectConfig.agents || {}).length,
|
|
44
|
+
toolCount: Object.keys(projectConfig.tools || {}).length
|
|
45
|
+
}, "Project config fetched successfully");
|
|
46
|
+
await next();
|
|
47
|
+
} catch (error) {
|
|
48
|
+
if (error instanceof ManageApiError) {
|
|
49
|
+
logger.error({
|
|
50
|
+
tenantId,
|
|
51
|
+
projectId,
|
|
52
|
+
statusCode: error.statusCode,
|
|
53
|
+
message: error.message
|
|
54
|
+
}, "Failed to fetch project config from Management API");
|
|
55
|
+
if (error.isNotFound) return c.json({
|
|
56
|
+
error: "Project not found",
|
|
57
|
+
message: `Project ${projectId} not found for tenant ${tenantId}`
|
|
58
|
+
}, 404);
|
|
59
|
+
if (error.isUnauthorized || error.isForbidden) return c.json({
|
|
60
|
+
error: "Access denied",
|
|
61
|
+
message: "Unable to access project configuration"
|
|
62
|
+
}, 403);
|
|
63
|
+
}
|
|
64
|
+
logger.error({
|
|
65
|
+
tenantId,
|
|
66
|
+
projectId,
|
|
67
|
+
error: error instanceof Error ? error.message : String(error)
|
|
68
|
+
}, "Unexpected error fetching project config");
|
|
69
|
+
return c.json({
|
|
70
|
+
error: "Internal server error",
|
|
71
|
+
message: "Failed to load project configuration"
|
|
72
|
+
}, 500);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Middleware that fetches the full project definition from the Management API
|
|
77
|
+
*/
|
|
78
|
+
const projectConfigMiddleware = createMiddleware(projectConfigHandler);
|
|
79
|
+
/**
|
|
80
|
+
* Creates a middleware that applies project config fetching except for specified route patterns
|
|
81
|
+
* @param skipRouteCheck - Function that returns true if the route should skip the middleware
|
|
82
|
+
*/
|
|
83
|
+
const projectConfigMiddlewareExcept = (skipRouteCheck) => createMiddleware(async (c, next) => {
|
|
84
|
+
if (skipRouteCheck(c.req.path)) return next();
|
|
85
|
+
return projectConfigHandler(c, next);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
//#endregion
|
|
89
|
+
export { projectConfigMiddleware, projectConfigMiddlewareExcept };
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Context, Next } from "hono";
|
|
2
|
+
import { AgentsManageDatabaseClient, ResolvedRef } from "@inkeep/agents-core";
|
|
3
|
+
|
|
4
|
+
//#region src/middleware/ref.d.ts
|
|
5
|
+
type RefContext = {
|
|
6
|
+
resolvedRef?: ResolvedRef;
|
|
7
|
+
};
|
|
8
|
+
interface RefMiddlewareOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Extract tenantId from the request context.
|
|
11
|
+
* Default implementation extracts from path using /tenants/{tenantId} pattern.
|
|
12
|
+
*/
|
|
13
|
+
extractTenantId?: (c: Context) => string | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Extract projectId from the request context.
|
|
16
|
+
* Default implementation extracts from path using /tenants/{tenantId}/projects/{projectId} pattern.
|
|
17
|
+
*/
|
|
18
|
+
extractProjectId?: (c: Context) => string | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Whether to allow extracting projectId from request body for POST/PUT/PATCH.
|
|
21
|
+
* Default: true
|
|
22
|
+
*/
|
|
23
|
+
allowProjectIdFromBody?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Custom path patterns that should skip ref validation.
|
|
26
|
+
* Default: []
|
|
27
|
+
*/
|
|
28
|
+
skipRefValidationPaths?: RegExp[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Creates a ref resolution middleware factory.
|
|
32
|
+
*
|
|
33
|
+
* This middleware:
|
|
34
|
+
* 1. Extracts tenantId and projectId from the request
|
|
35
|
+
* 2. Resolves the `ref` query parameter to a ResolvedRef
|
|
36
|
+
* 3. Creates branches if needed (tenant_main, project_main)
|
|
37
|
+
* 4. Sets `resolvedRef` in the Hono context for downstream handlers
|
|
38
|
+
*
|
|
39
|
+
* @param db - The Doltgres database client to use for ref resolution
|
|
40
|
+
* @param options - Optional configuration for extraction and validation
|
|
41
|
+
* @returns Hono middleware function
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* import { createRefMiddleware } from '@inkeep/agents-core';
|
|
46
|
+
* import { manageDbClient } from './db';
|
|
47
|
+
*
|
|
48
|
+
* const refMiddleware = createRefMiddleware(manageDbClient);
|
|
49
|
+
* app.use('/tenants/*', refMiddleware);
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
declare const createRefMiddleware: (db: AgentsManageDatabaseClient, options?: RefMiddlewareOptions) => (c: Context, next: Next) => Promise<void>;
|
|
53
|
+
declare const writeProtectionMiddleware: (c: Context, next: Next) => Promise<void>;
|
|
54
|
+
declare const manageRefMiddleware: (c: Context, next: Next) => Promise<void>;
|
|
55
|
+
declare const runRefMiddleware: (c: Context, next: Next) => Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Ref middleware for OAuth routes - extracts tenant/project from query params
|
|
58
|
+
*/
|
|
59
|
+
declare const oauthRefMiddleware: (c: Context, next: Next) => Promise<void>;
|
|
60
|
+
//#endregion
|
|
61
|
+
export { RefContext, RefMiddlewareOptions, createRefMiddleware, manageRefMiddleware, oauthRefMiddleware, runRefMiddleware, writeProtectionMiddleware };
|