@inkeep/agents-api 0.0.0-dev-20260121145510
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 +46383 -0
- package/dist/.well-known/workflow/v1/flow.cjs.debug.json +6 -0
- package/dist/.well-known/workflow/v1/manifest.debug.json +55 -0
- package/dist/.well-known/workflow/v1/step.cjs +218683 -0
- package/dist/.well-known/workflow/v1/step.cjs.debug.json +6 -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 +31 -0
- package/dist/domains/evals/workflow/functions/evaluateConversation.js +135 -0
- package/dist/domains/evals/workflow/functions/runDatasetItem.d.ts +39 -0
- package/dist/domains/evals/workflow/functions/runDatasetItem.js +205 -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 +266 -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 +455 -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 +574 -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 +75 -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 +396 -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 +44 -0
- package/dist/domains/run/handlers/executionHandler.js +485 -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 +416 -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 +5 -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 +59 -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 +125 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { getLogger as getLogger$1 } from "../../../logger.js";
|
|
2
|
+
import manageDbClient_default from "../../../data/db/manageDbClient.js";
|
|
3
|
+
import runDbClient_default from "../../../data/db/runDbClient.js";
|
|
4
|
+
import { requireProjectPermission } from "../../../middleware/projectAccess.js";
|
|
5
|
+
import { requirePermission } from "../../../middleware/requirePermission.js";
|
|
6
|
+
import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
|
|
7
|
+
import { ErrorResponseSchema, FullProjectDefinitionSchema, FullProjectSelectResponse, FullProjectSelectWithRelationIdsResponse, TenantParamsSchema, TenantProjectParamsSchema, cascadeDeleteByProject, checkoutBranch, commonGetErrorResponses, createApiError, createFullProjectServerSide, createProjectMetadataAndBranch, deleteFullProject, deleteProjectWithBranch, doltCheckout, getFullProject, getFullProjectWithRelationIds, getProjectMainBranchName, getProjectMetadata, updateFullProjectServerSide } from "@inkeep/agents-core";
|
|
8
|
+
|
|
9
|
+
//#region src/domains/manage/routes/projectFull.ts
|
|
10
|
+
const logger = getLogger$1("projectFull");
|
|
11
|
+
const app = new OpenAPIHono();
|
|
12
|
+
app.use("/project-full", async (c, next) => {
|
|
13
|
+
if (c.req.method === "POST") return requirePermission({ project: ["create"] })(c, next);
|
|
14
|
+
return next();
|
|
15
|
+
});
|
|
16
|
+
app.use("/project-full/:projectId", async (c, next) => {
|
|
17
|
+
if (c.req.method === "PUT") return requireProjectPermission("edit")(c, next);
|
|
18
|
+
if (c.req.method === "DELETE") return requireProjectPermission("edit")(c, next);
|
|
19
|
+
return next();
|
|
20
|
+
});
|
|
21
|
+
app.openapi(createRoute({
|
|
22
|
+
method: "post",
|
|
23
|
+
path: "/project-full",
|
|
24
|
+
summary: "Create Full Project",
|
|
25
|
+
operationId: "create-full-project",
|
|
26
|
+
tags: ["Full Project"],
|
|
27
|
+
description: "Create a complete project with all Agents, Sub Agents, tools, and relationships from JSON definition",
|
|
28
|
+
request: {
|
|
29
|
+
params: TenantParamsSchema,
|
|
30
|
+
body: { content: { "application/json": { schema: FullProjectDefinitionSchema } } }
|
|
31
|
+
},
|
|
32
|
+
responses: {
|
|
33
|
+
201: {
|
|
34
|
+
description: "Full project created successfully",
|
|
35
|
+
content: { "application/json": { schema: FullProjectSelectResponse } }
|
|
36
|
+
},
|
|
37
|
+
409: {
|
|
38
|
+
description: "Project already exists",
|
|
39
|
+
content: { "application/json": { schema: ErrorResponseSchema } }
|
|
40
|
+
},
|
|
41
|
+
...commonGetErrorResponses
|
|
42
|
+
}
|
|
43
|
+
}), async (c) => {
|
|
44
|
+
const configDb = c.get("db");
|
|
45
|
+
const userId = c.get("userId");
|
|
46
|
+
const { tenantId } = c.req.valid("param");
|
|
47
|
+
const projectData = c.req.valid("json");
|
|
48
|
+
const validatedProjectData = FullProjectDefinitionSchema.parse(projectData);
|
|
49
|
+
try {
|
|
50
|
+
await createProjectMetadataAndBranch(runDbClient_default, configDb)({
|
|
51
|
+
tenantId,
|
|
52
|
+
projectId: validatedProjectData.id,
|
|
53
|
+
createdBy: userId
|
|
54
|
+
});
|
|
55
|
+
logger.info({
|
|
56
|
+
tenantId,
|
|
57
|
+
projectId: validatedProjectData.id
|
|
58
|
+
}, "Created project with branch, now populating config");
|
|
59
|
+
const projectMainBranch = getProjectMainBranchName(tenantId, validatedProjectData.id);
|
|
60
|
+
await checkoutBranch(configDb)({
|
|
61
|
+
branchName: projectMainBranch,
|
|
62
|
+
autoCommitPending: true
|
|
63
|
+
});
|
|
64
|
+
const newResolvedRef = {
|
|
65
|
+
type: "branch",
|
|
66
|
+
name: projectMainBranch,
|
|
67
|
+
hash: ""
|
|
68
|
+
};
|
|
69
|
+
c.set("resolvedRef", newResolvedRef);
|
|
70
|
+
logger.debug({ projectMainBranch }, "Checked out project branch for config writes");
|
|
71
|
+
const createdProject = await createFullProjectServerSide(configDb)({
|
|
72
|
+
scopes: {
|
|
73
|
+
tenantId,
|
|
74
|
+
projectId: validatedProjectData.id
|
|
75
|
+
},
|
|
76
|
+
projectData: validatedProjectData
|
|
77
|
+
});
|
|
78
|
+
return c.json({ data: createdProject }, 201);
|
|
79
|
+
} catch (error) {
|
|
80
|
+
logger.error({ error }, "Error creating project");
|
|
81
|
+
if (error?.cause?.code === "23505" || error?.message?.includes("already exists")) throw createApiError({
|
|
82
|
+
code: "conflict",
|
|
83
|
+
message: `Project with ID '${projectData.id}' already exists`
|
|
84
|
+
});
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
app.openapi(createRoute({
|
|
89
|
+
method: "get",
|
|
90
|
+
path: "/project-full/{projectId}",
|
|
91
|
+
summary: "Get Full Project",
|
|
92
|
+
operationId: "get-full-project",
|
|
93
|
+
tags: ["Full Project"],
|
|
94
|
+
description: "Retrieve a complete project definition with all Agents, Sub Agents, tools, and relationships",
|
|
95
|
+
request: { params: TenantProjectParamsSchema },
|
|
96
|
+
responses: {
|
|
97
|
+
200: {
|
|
98
|
+
description: "Full project found",
|
|
99
|
+
content: { "application/json": { schema: FullProjectSelectResponse } }
|
|
100
|
+
},
|
|
101
|
+
...commonGetErrorResponses
|
|
102
|
+
}
|
|
103
|
+
}), async (c) => {
|
|
104
|
+
const { tenantId, projectId } = c.req.valid("param");
|
|
105
|
+
const db = c.get("db");
|
|
106
|
+
try {
|
|
107
|
+
const project = await getFullProject(db)({ scopes: {
|
|
108
|
+
tenantId,
|
|
109
|
+
projectId
|
|
110
|
+
} });
|
|
111
|
+
if (!project) throw createApiError({
|
|
112
|
+
code: "not_found",
|
|
113
|
+
message: "Project not found"
|
|
114
|
+
});
|
|
115
|
+
return c.json({ data: project });
|
|
116
|
+
} catch (error) {
|
|
117
|
+
if (error instanceof Error && error.message.includes("not found")) throw createApiError({
|
|
118
|
+
code: "not_found",
|
|
119
|
+
message: "Project not found"
|
|
120
|
+
});
|
|
121
|
+
throw createApiError({
|
|
122
|
+
code: "internal_server_error",
|
|
123
|
+
message: error instanceof Error ? error.message : "Failed to retrieve project"
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
app.openapi(createRoute({
|
|
128
|
+
method: "get",
|
|
129
|
+
path: "/project-full/{projectId}/with-relation-ids",
|
|
130
|
+
summary: "Get Full Project with Relation IDs",
|
|
131
|
+
operationId: "get-full-project-with-relation-ids",
|
|
132
|
+
tags: ["Full Project"],
|
|
133
|
+
description: "Retrieve a complete project definition with all Agents, Sub Agents, tools, and relationships",
|
|
134
|
+
request: { params: TenantProjectParamsSchema },
|
|
135
|
+
responses: {
|
|
136
|
+
200: {
|
|
137
|
+
description: "Full project found",
|
|
138
|
+
content: { "application/json": { schema: FullProjectSelectWithRelationIdsResponse } }
|
|
139
|
+
},
|
|
140
|
+
...commonGetErrorResponses
|
|
141
|
+
}
|
|
142
|
+
}), async (c) => {
|
|
143
|
+
const { tenantId, projectId } = c.req.valid("param");
|
|
144
|
+
const db = c.get("db");
|
|
145
|
+
try {
|
|
146
|
+
const project = await getFullProjectWithRelationIds(db)({ scopes: {
|
|
147
|
+
tenantId,
|
|
148
|
+
projectId
|
|
149
|
+
} });
|
|
150
|
+
if (!project) throw createApiError({
|
|
151
|
+
code: "not_found",
|
|
152
|
+
message: "Project not found"
|
|
153
|
+
});
|
|
154
|
+
return c.json({ data: project });
|
|
155
|
+
} catch (error) {
|
|
156
|
+
if (error instanceof Error && error.message.includes("not found")) throw createApiError({
|
|
157
|
+
code: "not_found",
|
|
158
|
+
message: "Project not found"
|
|
159
|
+
});
|
|
160
|
+
throw createApiError({
|
|
161
|
+
code: "internal_server_error",
|
|
162
|
+
message: error instanceof Error ? error.message : "Failed to retrieve project"
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
app.openapi(createRoute({
|
|
167
|
+
method: "put",
|
|
168
|
+
path: "/project-full/{projectId}",
|
|
169
|
+
summary: "Update Full Project",
|
|
170
|
+
operationId: "update-full-project",
|
|
171
|
+
tags: ["Full Project"],
|
|
172
|
+
description: "Update or create a complete project with all Agents, Sub Agents, tools, and relationships from JSON definition",
|
|
173
|
+
request: {
|
|
174
|
+
params: TenantProjectParamsSchema,
|
|
175
|
+
body: { content: { "application/json": { schema: FullProjectDefinitionSchema } } }
|
|
176
|
+
},
|
|
177
|
+
responses: {
|
|
178
|
+
200: {
|
|
179
|
+
description: "Full project updated successfully",
|
|
180
|
+
content: { "application/json": { schema: FullProjectSelectResponse } }
|
|
181
|
+
},
|
|
182
|
+
201: {
|
|
183
|
+
description: "Full project created successfully",
|
|
184
|
+
content: { "application/json": { schema: FullProjectSelectResponse } }
|
|
185
|
+
},
|
|
186
|
+
...commonGetErrorResponses
|
|
187
|
+
}
|
|
188
|
+
}), async (c) => {
|
|
189
|
+
const { tenantId, projectId } = c.req.valid("param");
|
|
190
|
+
const projectData = c.req.valid("json");
|
|
191
|
+
const configDb = c.get("db");
|
|
192
|
+
const userId = c.get("userId");
|
|
193
|
+
try {
|
|
194
|
+
const validatedProjectData = FullProjectDefinitionSchema.parse(projectData);
|
|
195
|
+
if (projectId !== validatedProjectData.id) throw createApiError({
|
|
196
|
+
code: "bad_request",
|
|
197
|
+
message: `Project ID mismatch: expected ${projectId}, got ${validatedProjectData.id}`
|
|
198
|
+
});
|
|
199
|
+
const isCreate = !await getProjectMetadata(runDbClient_default)({
|
|
200
|
+
tenantId,
|
|
201
|
+
projectId
|
|
202
|
+
});
|
|
203
|
+
if (isCreate) {
|
|
204
|
+
await createProjectMetadataAndBranch(runDbClient_default, configDb)({
|
|
205
|
+
tenantId,
|
|
206
|
+
projectId,
|
|
207
|
+
createdBy: userId
|
|
208
|
+
});
|
|
209
|
+
logger.info({
|
|
210
|
+
tenantId,
|
|
211
|
+
projectId
|
|
212
|
+
}, "Created project with branch for PUT (upsert)");
|
|
213
|
+
const projectMainBranch = getProjectMainBranchName(tenantId, projectId);
|
|
214
|
+
await checkoutBranch(configDb)({
|
|
215
|
+
branchName: projectMainBranch,
|
|
216
|
+
autoCommitPending: true
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
const updatedProject = isCreate ? await createFullProjectServerSide(configDb)({
|
|
220
|
+
scopes: {
|
|
221
|
+
tenantId,
|
|
222
|
+
projectId
|
|
223
|
+
},
|
|
224
|
+
projectData: validatedProjectData
|
|
225
|
+
}) : await updateFullProjectServerSide(configDb)({
|
|
226
|
+
scopes: {
|
|
227
|
+
tenantId,
|
|
228
|
+
projectId
|
|
229
|
+
},
|
|
230
|
+
projectData: validatedProjectData
|
|
231
|
+
});
|
|
232
|
+
return c.json({ data: updatedProject }, isCreate ? 201 : 200);
|
|
233
|
+
} catch (error) {
|
|
234
|
+
if (error instanceof z.ZodError) throw createApiError({
|
|
235
|
+
code: "bad_request",
|
|
236
|
+
message: "Invalid project definition"
|
|
237
|
+
});
|
|
238
|
+
if (error instanceof Error && error.message.includes("ID mismatch")) throw createApiError({
|
|
239
|
+
code: "bad_request",
|
|
240
|
+
message: error.message
|
|
241
|
+
});
|
|
242
|
+
throw createApiError({
|
|
243
|
+
code: "internal_server_error",
|
|
244
|
+
message: error instanceof Error ? error.message : "Failed to update project"
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
app.openapi(createRoute({
|
|
249
|
+
method: "delete",
|
|
250
|
+
path: "/project-full/{projectId}",
|
|
251
|
+
summary: "Delete Full Project",
|
|
252
|
+
operationId: "delete-full-project",
|
|
253
|
+
tags: ["Full Project"],
|
|
254
|
+
description: "Delete a complete project and cascade to all related entities (Agents, Sub Agents, tools, relationships)",
|
|
255
|
+
request: { params: TenantProjectParamsSchema },
|
|
256
|
+
responses: {
|
|
257
|
+
204: { description: "Project deleted successfully" },
|
|
258
|
+
...commonGetErrorResponses
|
|
259
|
+
}
|
|
260
|
+
}), async (c) => {
|
|
261
|
+
const { tenantId, projectId } = c.req.valid("param");
|
|
262
|
+
const configDb = c.get("db");
|
|
263
|
+
const resolvedRef = c.get("resolvedRef");
|
|
264
|
+
const expectedMainBranch = `${tenantId}_${projectId}_main`;
|
|
265
|
+
if (resolvedRef?.name !== expectedMainBranch) throw createApiError({
|
|
266
|
+
code: "bad_request",
|
|
267
|
+
message: "Project deletion must be performed from the main branch"
|
|
268
|
+
});
|
|
269
|
+
try {
|
|
270
|
+
await cascadeDeleteByProject(runDbClient_default)({
|
|
271
|
+
scopes: {
|
|
272
|
+
tenantId,
|
|
273
|
+
projectId
|
|
274
|
+
},
|
|
275
|
+
fullBranchName: resolvedRef.name
|
|
276
|
+
});
|
|
277
|
+
await deleteFullProject(configDb)({ scopes: {
|
|
278
|
+
tenantId,
|
|
279
|
+
projectId
|
|
280
|
+
} });
|
|
281
|
+
await doltCheckout(configDb)({ branch: "main" });
|
|
282
|
+
if (!await deleteProjectWithBranch(runDbClient_default, manageDbClient_default)({
|
|
283
|
+
tenantId,
|
|
284
|
+
projectId
|
|
285
|
+
})) throw createApiError({
|
|
286
|
+
code: "not_found",
|
|
287
|
+
message: "Project not found"
|
|
288
|
+
});
|
|
289
|
+
return c.body(null, 204);
|
|
290
|
+
} catch (error) {
|
|
291
|
+
if (error instanceof Error && error.message.includes("not found")) throw createApiError({
|
|
292
|
+
code: "not_found",
|
|
293
|
+
message: "Project not found"
|
|
294
|
+
});
|
|
295
|
+
throw createApiError({
|
|
296
|
+
code: "internal_server_error",
|
|
297
|
+
message: error instanceof Error ? error.message : "Failed to delete project"
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
var projectFull_default = app;
|
|
302
|
+
|
|
303
|
+
//#endregion
|
|
304
|
+
export { projectFull_default as default };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ManageAppVariables } from "../../../types/app.js";
|
|
2
|
+
import { OpenAPIHono } from "@hono/zod-openapi";
|
|
3
|
+
|
|
4
|
+
//#region src/domains/manage/routes/projectMembers.d.ts
|
|
5
|
+
declare const app: OpenAPIHono<{
|
|
6
|
+
Variables: ManageAppVariables;
|
|
7
|
+
}, {}, "/">;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { app as default };
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { requireProjectPermission } from "../../../middleware/projectAccess.js";
|
|
2
|
+
import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
|
|
3
|
+
import { changeProjectRole, commonGetErrorResponses, createApiError, grantProjectAccess, isAuthzEnabled, listProjectMembers, revokeProjectAccess } from "@inkeep/agents-core";
|
|
4
|
+
|
|
5
|
+
//#region src/domains/manage/routes/projectMembers.ts
|
|
6
|
+
const app = new OpenAPIHono();
|
|
7
|
+
const ProjectMemberSchema = z.object({
|
|
8
|
+
userId: z.string().min(1),
|
|
9
|
+
role: z.enum([
|
|
10
|
+
"project_admin",
|
|
11
|
+
"project_member",
|
|
12
|
+
"project_viewer"
|
|
13
|
+
])
|
|
14
|
+
});
|
|
15
|
+
const ProjectMemberResponseSchema = z.object({ data: z.object({
|
|
16
|
+
userId: z.string(),
|
|
17
|
+
role: z.enum([
|
|
18
|
+
"project_admin",
|
|
19
|
+
"project_member",
|
|
20
|
+
"project_viewer"
|
|
21
|
+
]),
|
|
22
|
+
projectId: z.string()
|
|
23
|
+
}) });
|
|
24
|
+
const ProjectMemberParamsSchema = z.object({
|
|
25
|
+
tenantId: z.string(),
|
|
26
|
+
projectId: z.string()
|
|
27
|
+
});
|
|
28
|
+
const ProjectMemberUserParamsSchema = z.object({
|
|
29
|
+
tenantId: z.string(),
|
|
30
|
+
projectId: z.string(),
|
|
31
|
+
userId: z.string()
|
|
32
|
+
});
|
|
33
|
+
const UpdateRoleSchema = z.object({
|
|
34
|
+
role: z.enum([
|
|
35
|
+
"project_admin",
|
|
36
|
+
"project_member",
|
|
37
|
+
"project_viewer"
|
|
38
|
+
]),
|
|
39
|
+
previousRole: z.enum([
|
|
40
|
+
"project_admin",
|
|
41
|
+
"project_member",
|
|
42
|
+
"project_viewer"
|
|
43
|
+
]).optional()
|
|
44
|
+
});
|
|
45
|
+
app.openapi(createRoute({
|
|
46
|
+
method: "get",
|
|
47
|
+
path: "/",
|
|
48
|
+
summary: "List Project Members",
|
|
49
|
+
description: "List all users with explicit project access. Requires authz to be enabled.",
|
|
50
|
+
operationId: "list-project-members",
|
|
51
|
+
tags: ["Project Members"],
|
|
52
|
+
request: { params: ProjectMemberParamsSchema },
|
|
53
|
+
responses: {
|
|
54
|
+
200: {
|
|
55
|
+
description: "List of project members",
|
|
56
|
+
content: { "application/json": { schema: z.object({ data: z.array(z.object({
|
|
57
|
+
userId: z.string(),
|
|
58
|
+
role: z.enum([
|
|
59
|
+
"project_admin",
|
|
60
|
+
"project_member",
|
|
61
|
+
"project_viewer"
|
|
62
|
+
])
|
|
63
|
+
})) }) } }
|
|
64
|
+
},
|
|
65
|
+
...commonGetErrorResponses
|
|
66
|
+
}
|
|
67
|
+
}), async (c) => {
|
|
68
|
+
const { projectId, tenantId } = c.req.valid("param");
|
|
69
|
+
if (!isAuthzEnabled(tenantId)) return c.json({ data: [] });
|
|
70
|
+
const members = await listProjectMembers({
|
|
71
|
+
tenantId,
|
|
72
|
+
projectId
|
|
73
|
+
});
|
|
74
|
+
return c.json({ data: members });
|
|
75
|
+
});
|
|
76
|
+
app.use("/*", async (c, next) => {
|
|
77
|
+
if (c.req.method === "GET") return next();
|
|
78
|
+
return requireProjectPermission("edit")(c, next);
|
|
79
|
+
});
|
|
80
|
+
app.openapi(createRoute({
|
|
81
|
+
method: "post",
|
|
82
|
+
path: "/",
|
|
83
|
+
summary: "Add Project Member",
|
|
84
|
+
description: "Add a user to a project with a specified role. Requires authz to be enabled.",
|
|
85
|
+
operationId: "add-project-member",
|
|
86
|
+
tags: ["Project Members"],
|
|
87
|
+
request: {
|
|
88
|
+
params: ProjectMemberParamsSchema,
|
|
89
|
+
body: { content: { "application/json": { schema: ProjectMemberSchema } } }
|
|
90
|
+
},
|
|
91
|
+
responses: {
|
|
92
|
+
201: {
|
|
93
|
+
description: "Member added successfully",
|
|
94
|
+
content: { "application/json": { schema: ProjectMemberResponseSchema } }
|
|
95
|
+
},
|
|
96
|
+
...commonGetErrorResponses
|
|
97
|
+
}
|
|
98
|
+
}), async (c) => {
|
|
99
|
+
const { projectId, tenantId } = c.req.valid("param");
|
|
100
|
+
const { userId, role } = c.req.valid("json");
|
|
101
|
+
if (!isAuthzEnabled(tenantId)) throw createApiError({
|
|
102
|
+
code: "bad_request",
|
|
103
|
+
message: "Project member management requires authorization to be enabled (ENABLE_AUTHZ=true)"
|
|
104
|
+
});
|
|
105
|
+
await grantProjectAccess({
|
|
106
|
+
tenantId,
|
|
107
|
+
projectId,
|
|
108
|
+
userId,
|
|
109
|
+
role
|
|
110
|
+
});
|
|
111
|
+
return c.json({ data: {
|
|
112
|
+
userId,
|
|
113
|
+
role,
|
|
114
|
+
projectId
|
|
115
|
+
} }, 201);
|
|
116
|
+
});
|
|
117
|
+
app.openapi(createRoute({
|
|
118
|
+
method: "patch",
|
|
119
|
+
path: "/{userId}",
|
|
120
|
+
summary: "Update Project Member Role",
|
|
121
|
+
description: "Update a project member's role. Requires authz to be enabled. Include previousRole to specify which role to revoke.",
|
|
122
|
+
operationId: "update-project-member",
|
|
123
|
+
tags: ["Project Members"],
|
|
124
|
+
request: {
|
|
125
|
+
params: ProjectMemberUserParamsSchema,
|
|
126
|
+
body: { content: { "application/json": { schema: UpdateRoleSchema } } }
|
|
127
|
+
},
|
|
128
|
+
responses: {
|
|
129
|
+
200: {
|
|
130
|
+
description: "Member role updated successfully",
|
|
131
|
+
content: { "application/json": { schema: ProjectMemberResponseSchema } }
|
|
132
|
+
},
|
|
133
|
+
...commonGetErrorResponses
|
|
134
|
+
}
|
|
135
|
+
}), async (c) => {
|
|
136
|
+
const { projectId, userId, tenantId } = c.req.valid("param");
|
|
137
|
+
const { role: newRole, previousRole } = c.req.valid("json");
|
|
138
|
+
if (!isAuthzEnabled(tenantId)) throw createApiError({
|
|
139
|
+
code: "bad_request",
|
|
140
|
+
message: "Project member management requires authorization to be enabled (ENABLE_AUTHZ=true)"
|
|
141
|
+
});
|
|
142
|
+
if (!previousRole) throw createApiError({
|
|
143
|
+
code: "bad_request",
|
|
144
|
+
message: "previousRole is required to update a member role"
|
|
145
|
+
});
|
|
146
|
+
if (previousRole === newRole) return c.json({ data: {
|
|
147
|
+
userId,
|
|
148
|
+
role: newRole,
|
|
149
|
+
projectId
|
|
150
|
+
} });
|
|
151
|
+
await changeProjectRole({
|
|
152
|
+
tenantId,
|
|
153
|
+
projectId,
|
|
154
|
+
userId,
|
|
155
|
+
oldRole: previousRole,
|
|
156
|
+
newRole
|
|
157
|
+
});
|
|
158
|
+
return c.json({ data: {
|
|
159
|
+
userId,
|
|
160
|
+
role: newRole,
|
|
161
|
+
projectId
|
|
162
|
+
} });
|
|
163
|
+
});
|
|
164
|
+
app.openapi(createRoute({
|
|
165
|
+
method: "delete",
|
|
166
|
+
path: "/{userId}",
|
|
167
|
+
summary: "Remove Project Member",
|
|
168
|
+
description: "Remove a user from a project. Requires authz to be enabled. Pass role as query param to specify which role to revoke.",
|
|
169
|
+
operationId: "remove-project-member",
|
|
170
|
+
tags: ["Project Members"],
|
|
171
|
+
request: {
|
|
172
|
+
params: ProjectMemberUserParamsSchema,
|
|
173
|
+
query: z.object({ role: z.enum([
|
|
174
|
+
"project_admin",
|
|
175
|
+
"project_member",
|
|
176
|
+
"project_viewer"
|
|
177
|
+
]) })
|
|
178
|
+
},
|
|
179
|
+
responses: {
|
|
180
|
+
204: { description: "Member removed successfully" },
|
|
181
|
+
...commonGetErrorResponses
|
|
182
|
+
}
|
|
183
|
+
}), async (c) => {
|
|
184
|
+
const { projectId, userId, tenantId } = c.req.valid("param");
|
|
185
|
+
const { role } = c.req.valid("query");
|
|
186
|
+
if (!isAuthzEnabled(tenantId)) throw createApiError({
|
|
187
|
+
code: "bad_request",
|
|
188
|
+
message: "Project member management requires authorization to be enabled (ENABLE_AUTHZ=true)"
|
|
189
|
+
});
|
|
190
|
+
await revokeProjectAccess({
|
|
191
|
+
tenantId,
|
|
192
|
+
projectId,
|
|
193
|
+
userId,
|
|
194
|
+
role
|
|
195
|
+
});
|
|
196
|
+
return c.body(null, 204);
|
|
197
|
+
});
|
|
198
|
+
var projectMembers_default = app;
|
|
199
|
+
|
|
200
|
+
//#endregion
|
|
201
|
+
export { projectMembers_default as default };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ManageAppVariables } from "../../../types/app.js";
|
|
2
|
+
import { OpenAPIHono } from "@hono/zod-openapi";
|
|
3
|
+
|
|
4
|
+
//#region src/domains/manage/routes/projectPermissions.d.ts
|
|
5
|
+
declare const app: OpenAPIHono<{
|
|
6
|
+
Variables: ManageAppVariables;
|
|
7
|
+
}, {}, "/">;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { app as default };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
|
|
2
|
+
import { SpiceDbPermissions, SpiceDbResourceTypes, checkBulkPermissions, commonGetErrorResponses, createApiError, isAuthzEnabled } from "@inkeep/agents-core";
|
|
3
|
+
|
|
4
|
+
//#region src/domains/manage/routes/projectPermissions.ts
|
|
5
|
+
const app = new OpenAPIHono();
|
|
6
|
+
const ProjectPermissionsParamsSchema = z.object({
|
|
7
|
+
tenantId: z.string(),
|
|
8
|
+
projectId: z.string()
|
|
9
|
+
});
|
|
10
|
+
const ProjectPermissionsResponseSchema = z.object({ data: z.object({
|
|
11
|
+
canView: z.boolean(),
|
|
12
|
+
canUse: z.boolean(),
|
|
13
|
+
canEdit: z.boolean()
|
|
14
|
+
}) });
|
|
15
|
+
app.openapi(createRoute({
|
|
16
|
+
method: "get",
|
|
17
|
+
path: "/",
|
|
18
|
+
summary: "Get Project Permissions",
|
|
19
|
+
description: "Get the current user's permissions for a project. Returns which actions the user can perform.",
|
|
20
|
+
operationId: "get-project-permissions",
|
|
21
|
+
tags: ["Project Permissions"],
|
|
22
|
+
request: { params: ProjectPermissionsParamsSchema },
|
|
23
|
+
responses: {
|
|
24
|
+
200: {
|
|
25
|
+
description: "Project permissions for the current user",
|
|
26
|
+
content: { "application/json": { schema: ProjectPermissionsResponseSchema } }
|
|
27
|
+
},
|
|
28
|
+
...commonGetErrorResponses
|
|
29
|
+
}
|
|
30
|
+
}), async (c) => {
|
|
31
|
+
const { projectId, tenantId } = c.req.valid("param");
|
|
32
|
+
const userId = c.get("userId");
|
|
33
|
+
const tenantRole = c.get("tenantRole");
|
|
34
|
+
if (tenantRole === "owner" || tenantRole === "admin") return c.json({ data: {
|
|
35
|
+
canView: true,
|
|
36
|
+
canUse: true,
|
|
37
|
+
canEdit: true
|
|
38
|
+
} });
|
|
39
|
+
if (!isAuthzEnabled(tenantId)) return c.json({ data: {
|
|
40
|
+
canView: true,
|
|
41
|
+
canUse: true,
|
|
42
|
+
canEdit: false
|
|
43
|
+
} });
|
|
44
|
+
if (!userId) throw createApiError({
|
|
45
|
+
code: "unauthorized",
|
|
46
|
+
message: "User not found"
|
|
47
|
+
});
|
|
48
|
+
const permissions = await checkBulkPermissions({
|
|
49
|
+
resourceType: SpiceDbResourceTypes.PROJECT,
|
|
50
|
+
resourceId: projectId,
|
|
51
|
+
permissions: [
|
|
52
|
+
SpiceDbPermissions.VIEW,
|
|
53
|
+
SpiceDbPermissions.USE,
|
|
54
|
+
SpiceDbPermissions.EDIT
|
|
55
|
+
],
|
|
56
|
+
subjectType: SpiceDbResourceTypes.USER,
|
|
57
|
+
subjectId: userId
|
|
58
|
+
});
|
|
59
|
+
return c.json({ data: {
|
|
60
|
+
canView: permissions[SpiceDbPermissions.VIEW] ?? false,
|
|
61
|
+
canUse: permissions[SpiceDbPermissions.USE] ?? false,
|
|
62
|
+
canEdit: permissions[SpiceDbPermissions.EDIT] ?? false
|
|
63
|
+
} });
|
|
64
|
+
});
|
|
65
|
+
var projectPermissions_default = app;
|
|
66
|
+
|
|
67
|
+
//#endregion
|
|
68
|
+
export { projectPermissions_default as default };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ManageAppVariables } from "../../../types/app.js";
|
|
2
|
+
import { OpenAPIHono } from "@hono/zod-openapi";
|
|
3
|
+
|
|
4
|
+
//#region src/domains/manage/routes/projects.d.ts
|
|
5
|
+
declare const app: OpenAPIHono<{
|
|
6
|
+
Variables: ManageAppVariables;
|
|
7
|
+
}, {}, "/">;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { app as default };
|