@1mcp/agent 0.36.0 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/admin/assets/{admin-OAuthServicesWorkspace-BCGj2hP4.js → admin-OAuthServicesWorkspace-CzXIIHM0.js} +1 -1
- package/build/admin/assets/admin-console-Mv3xmdoU.js +3 -0
- package/build/admin/assets/admin-vendor-62eL-qdH.js +1 -0
- package/build/admin/assets/admin-vendor-BbMrl7MK.js +3 -0
- package/build/admin/assets/admin-vendor-DpjVwd81.js +62 -0
- package/build/admin/index.html +4 -1
- package/build/application/services/healthService.d.ts +6 -6
- package/build/application/services/healthService.d.ts.map +1 -1
- package/build/application/services/healthService.js +1 -1
- package/build/application/services/healthService.js.map +1 -1
- package/build/application/services/tokenEstimationService.d.ts +1 -1
- package/build/application/services/tokenEstimationService.d.ts.map +1 -1
- package/build/application/services/tokenEstimationService.js.map +1 -1
- package/build/auth/oauthAuthorizationFlow.d.ts +13 -11
- package/build/auth/oauthAuthorizationFlow.d.ts.map +1 -1
- package/build/auth/oauthAuthorizationFlow.js +4 -17
- package/build/auth/oauthAuthorizationFlow.js.map +1 -1
- package/build/auth/sdkOAuthClientProvider.d.ts +2 -97
- package/build/auth/sdkOAuthClientProvider.d.ts.map +1 -1
- package/build/auth/sdkOAuthClientProvider.js +1 -242
- package/build/auth/sdkOAuthClientProvider.js.map +1 -1
- package/build/auth/sdkOAuthServerProvider.d.ts +1 -68
- package/build/auth/sdkOAuthServerProvider.d.ts.map +1 -1
- package/build/auth/sdkOAuthServerProvider.js +1 -482
- package/build/auth/sdkOAuthServerProvider.js.map +1 -1
- package/build/auth/sessionTypes.d.ts +1 -1
- package/build/auth/sessionTypes.d.ts.map +1 -1
- package/build/auth/sessionTypes.js.map +1 -1
- package/build/auth/storage/authCodeRepository.js +2 -2
- package/build/auth/storage/authCodeRepository.js.map +1 -1
- package/build/auth/storage/authRequestRepository.js +2 -2
- package/build/auth/storage/authRequestRepository.js.map +1 -1
- package/build/auth/storage/clientDataRepository.d.ts +1 -1
- package/build/auth/storage/clientDataRepository.d.ts.map +1 -1
- package/build/auth/storage/clientDataRepository.js.map +1 -1
- package/build/auth/storage/fileStorageService.d.ts +41 -0
- package/build/auth/storage/fileStorageService.d.ts.map +1 -1
- package/build/auth/storage/fileStorageService.js +231 -44
- package/build/auth/storage/fileStorageService.js.map +1 -1
- package/build/auth/storage/oauthStorageService.d.ts +5 -0
- package/build/auth/storage/oauthStorageService.d.ts.map +1 -1
- package/build/auth/storage/oauthStorageService.js +6 -0
- package/build/auth/storage/oauthStorageService.js.map +1 -1
- package/build/commands/inspect/inspect.d.ts +1 -1
- package/build/commands/inspect/inspect.d.ts.map +1 -1
- package/build/commands/inspect/inspect.js +6 -9
- package/build/commands/inspect/inspect.js.map +1 -1
- package/build/commands/inspect/inspectUtils.d.ts +1 -1
- package/build/commands/inspect/inspectUtils.d.ts.map +1 -1
- package/build/commands/inspect/inspectUtils.js +4 -13
- package/build/commands/inspect/inspectUtils.js.map +1 -1
- package/build/commands/mcp/install.d.ts +47 -3
- package/build/commands/mcp/install.d.ts.map +1 -1
- package/build/commands/mcp/install.js +22 -14
- package/build/commands/mcp/install.js.map +1 -1
- package/build/commands/registry/options.d.ts +3 -0
- package/build/commands/registry/options.d.ts.map +1 -1
- package/build/commands/registry/options.js +27 -0
- package/build/commands/registry/options.js.map +1 -1
- package/build/commands/registry/search.d.ts.map +1 -1
- package/build/commands/registry/search.js +2 -10
- package/build/commands/registry/search.js.map +1 -1
- package/build/commands/registry/show.d.ts.map +1 -1
- package/build/commands/registry/show.js +2 -10
- package/build/commands/registry/show.js.map +1 -1
- package/build/commands/registry/status.d.ts.map +1 -1
- package/build/commands/registry/status.js +2 -10
- package/build/commands/registry/status.js.map +1 -1
- package/build/commands/registry/versions.d.ts.map +1 -1
- package/build/commands/registry/versions.js +2 -10
- package/build/commands/registry/versions.js.map +1 -1
- package/build/commands/run/run.d.ts +1 -1
- package/build/commands/run/run.d.ts.map +1 -1
- package/build/commands/run/run.js +5 -5
- package/build/commands/run/run.js.map +1 -1
- package/build/commands/run/runUtils.d.ts +1 -1
- package/build/commands/run/runUtils.d.ts.map +1 -1
- package/build/commands/run/runUtils.js.map +1 -1
- package/build/commands/serve/asyncLoadingOptions.d.ts +16 -0
- package/build/commands/serve/asyncLoadingOptions.d.ts.map +1 -1
- package/build/commands/serve/asyncLoadingOptions.js +29 -0
- package/build/commands/serve/asyncLoadingOptions.js.map +1 -1
- package/build/commands/serve/index.d.ts +24 -0
- package/build/commands/serve/index.d.ts.map +1 -1
- package/build/commands/serve/index.js +24 -0
- package/build/commands/serve/index.js.map +1 -1
- package/build/commands/serve/serve.d.ts +1 -83
- package/build/commands/serve/serve.d.ts.map +1 -1
- package/build/commands/serve/serve.js +1 -507
- package/build/commands/serve/serve.js.map +1 -1
- package/build/commands/serve/serveBackground.d.ts +2 -1
- package/build/commands/serve/serveBackground.d.ts.map +1 -1
- package/build/commands/serve/serveBackground.js +6 -0
- package/build/commands/serve/serveBackground.js.map +1 -1
- package/build/commands/shared/authProfileStore.d.ts.map +1 -1
- package/build/commands/shared/authProfileStore.js +54 -10
- package/build/commands/shared/authProfileStore.js.map +1 -1
- package/build/commands/shared/clientSurfaceAttachment.d.ts.map +1 -1
- package/build/commands/shared/clientSurfaceAttachment.js +16 -4
- package/build/commands/shared/clientSurfaceAttachment.js.map +1 -1
- package/build/commands/shared/connectionHelper.d.ts +4 -4
- package/build/commands/shared/connectionHelper.d.ts.map +1 -1
- package/build/commands/shared/connectionHelper.js +9 -26
- package/build/commands/shared/connectionHelper.js.map +1 -1
- package/build/commands/shared/inspectApiSchemas.d.ts +8 -8
- package/build/commands/shared/serveClient.d.ts +1 -69
- package/build/commands/shared/serveClient.d.ts.map +1 -1
- package/build/commands/shared/serveClient.js +1 -234
- package/build/commands/shared/serveClient.js.map +1 -1
- package/build/commands/wait/wait.js +1 -1
- package/build/commands/wait/wait.js.map +1 -1
- package/build/config/configManager.d.ts.map +1 -1
- package/build/config/configManager.js +19 -6
- package/build/config/configManager.js.map +1 -1
- package/build/config/configuredServerTargets.d.ts +1 -0
- package/build/config/configuredServerTargets.d.ts.map +1 -1
- package/build/config/configuredServerTargets.js +6 -0
- package/build/config/configuredServerTargets.js.map +1 -1
- package/build/config/envProcessor.d.ts.map +1 -1
- package/build/config/envProcessor.js +26 -1
- package/build/config/envProcessor.js.map +1 -1
- package/build/constants/auth.d.ts +7 -0
- package/build/constants/auth.d.ts.map +1 -1
- package/build/constants/auth.js +6 -1
- package/build/constants/auth.js.map +1 -1
- package/build/constants/mcp.d.ts +2 -2
- package/build/constants/mcp.d.ts.map +1 -1
- package/build/constants/mcp.js +1 -1
- package/build/core/capabilities/capabilityAggregator.d.ts +18 -88
- package/build/core/capabilities/capabilityAggregator.d.ts.map +1 -1
- package/build/core/capabilities/capabilityAggregator.js +75 -269
- package/build/core/capabilities/capabilityAggregator.js.map +1 -1
- package/build/core/capabilities/capabilityCatalog.d.ts +3 -4
- package/build/core/capabilities/capabilityCatalog.d.ts.map +1 -1
- package/build/core/capabilities/capabilityCatalog.js +46 -16
- package/build/core/capabilities/capabilityCatalog.js.map +1 -1
- package/build/core/capabilities/capabilityManager.d.ts +9 -32
- package/build/core/capabilities/capabilityManager.d.ts.map +1 -1
- package/build/core/capabilities/capabilityManager.js +5 -4
- package/build/core/capabilities/capabilityManager.js.map +1 -1
- package/build/core/capabilities/capabilityNotificationFacts.js +1 -1
- package/build/core/capabilities/capabilityNotificationFacts.js.map +1 -1
- package/build/core/capabilities/capabilityPagination.d.ts +2 -0
- package/build/core/capabilities/capabilityPagination.d.ts.map +1 -1
- package/build/core/capabilities/capabilityPagination.js +59 -32
- package/build/core/capabilities/capabilityPagination.js.map +1 -1
- package/build/core/capabilities/catalogGeneration.d.ts +47 -0
- package/build/core/capabilities/catalogGeneration.d.ts.map +1 -0
- package/build/core/capabilities/catalogGeneration.js +145 -0
- package/build/core/capabilities/catalogGeneration.js.map +1 -0
- package/build/core/capabilities/configuredToolSnapshot.d.ts +1 -1
- package/build/core/capabilities/configuredToolSnapshot.d.ts.map +1 -1
- package/build/core/capabilities/configuredToolSnapshot.js.map +1 -1
- package/build/core/capabilities/internal/discoveryTools.d.ts +1 -7
- package/build/core/capabilities/internal/discoveryTools.d.ts.map +1 -1
- package/build/core/capabilities/internal/discoveryTools.js +6 -0
- package/build/core/capabilities/internal/discoveryTools.js.map +1 -1
- package/build/core/capabilities/internal/installationTools.d.ts +1 -7
- package/build/core/capabilities/internal/installationTools.d.ts.map +1 -1
- package/build/core/capabilities/internal/installationTools.js +6 -0
- package/build/core/capabilities/internal/installationTools.js.map +1 -1
- package/build/core/capabilities/internal/lazyTools.d.ts +1 -1
- package/build/core/capabilities/internal/lazyTools.d.ts.map +1 -1
- package/build/core/capabilities/internal/lazyTools.js.map +1 -1
- package/build/core/capabilities/internal/managementTools.d.ts +1 -7
- package/build/core/capabilities/internal/managementTools.d.ts.map +1 -1
- package/build/core/capabilities/internal/managementTools.js +6 -0
- package/build/core/capabilities/internal/managementTools.js.map +1 -1
- package/build/core/capabilities/internalCapabilitiesProvider.d.ts +1 -1
- package/build/core/capabilities/internalCapabilitiesProvider.d.ts.map +1 -1
- package/build/core/capabilities/internalCapabilitiesProvider.js.map +1 -1
- package/build/core/capabilities/lazyLoadingOrchestrator.d.ts.map +1 -1
- package/build/core/capabilities/lazyLoadingOrchestrator.js +19 -78
- package/build/core/capabilities/lazyLoadingOrchestrator.js.map +1 -1
- package/build/core/capabilities/metaToolProvider.d.ts +1 -1
- package/build/core/capabilities/metaToolProvider.d.ts.map +1 -1
- package/build/core/capabilities/metaToolProvider.js.map +1 -1
- package/build/core/capabilities/runtimeCapabilityCatalog.d.ts +48 -0
- package/build/core/capabilities/runtimeCapabilityCatalog.d.ts.map +1 -0
- package/build/core/capabilities/runtimeCapabilityCatalog.js +409 -0
- package/build/core/capabilities/runtimeCapabilityCatalog.js.map +1 -0
- package/build/core/capabilities/schemaCache.d.ts +1 -1
- package/build/core/capabilities/schemaCache.d.ts.map +1 -1
- package/build/core/capabilities/schemaCache.js.map +1 -1
- package/build/core/capabilities/schemas/metaToolSchemas.d.ts +3 -3
- package/build/core/capabilities/toolRegistry.d.ts +11 -1
- package/build/core/capabilities/toolRegistry.d.ts.map +1 -1
- package/build/core/capabilities/toolRegistry.js +51 -32
- package/build/core/capabilities/toolRegistry.js.map +1 -1
- package/build/core/client/clientFactory.d.ts +1 -6
- package/build/core/client/clientFactory.d.ts.map +1 -1
- package/build/core/client/clientFactory.js +1 -35
- package/build/core/client/clientFactory.js.map +1 -1
- package/build/core/client/clientManager.d.ts +1 -89
- package/build/core/client/clientManager.d.ts.map +1 -1
- package/build/core/client/clientManager.js +1 -728
- package/build/core/client/clientManager.js.map +1 -1
- package/build/core/client/connectedClient.d.ts +1 -6
- package/build/core/client/connectedClient.d.ts.map +1 -1
- package/build/core/client/connectionHandler.d.ts +1 -8
- package/build/core/client/connectionHandler.d.ts.map +1 -1
- package/build/core/client/connectionHandler.js +1 -96
- package/build/core/client/connectionHandler.js.map +1 -1
- package/build/core/client/legacyAdapterRequest.d.ts +6 -0
- package/build/core/client/legacyAdapterRequest.d.ts.map +1 -0
- package/build/core/client/legacyAdapterRequest.js +55 -0
- package/build/core/client/legacyAdapterRequest.js.map +1 -0
- package/build/core/client/oauthFlowHandler.d.ts +1 -9
- package/build/core/client/oauthFlowHandler.d.ts.map +1 -1
- package/build/core/client/oauthFlowHandler.js +1 -80
- package/build/core/client/oauthFlowHandler.js.map +1 -1
- package/build/core/client/postAuthOAuthRecovery.d.ts +2 -2
- package/build/core/client/postAuthOAuthRecovery.d.ts.map +1 -1
- package/build/core/client/postAuthOAuthRecovery.js +4 -16
- package/build/core/client/postAuthOAuthRecovery.js.map +1 -1
- package/build/core/client/recreateHttpTransportOptions.d.ts +1 -13
- package/build/core/client/recreateHttpTransportOptions.d.ts.map +1 -1
- package/build/core/client/renderableOutboundConnection.d.ts +5 -0
- package/build/core/client/renderableOutboundConnection.d.ts.map +1 -0
- package/build/core/client/renderableOutboundConnection.js +38 -0
- package/build/core/client/renderableOutboundConnection.js.map +1 -0
- package/build/core/client/transportRecreationState.d.ts +1 -10
- package/build/core/client/transportRecreationState.d.ts.map +1 -1
- package/build/core/client/transportRecreator.d.ts +1 -13
- package/build/core/client/transportRecreator.d.ts.map +1 -1
- package/build/core/client/transportRecreator.js +1 -51
- package/build/core/client/transportRecreator.js.map +1 -1
- package/build/core/client/types.d.ts +1 -6
- package/build/core/client/types.d.ts.map +1 -1
- package/build/core/client/types.js +1 -10
- package/build/core/client/types.js.map +1 -1
- package/build/core/configChangeHandler.d.ts.map +1 -1
- package/build/core/configChangeHandler.js +2 -5
- package/build/core/configChangeHandler.js.map +1 -1
- package/build/core/context/templateContextTrust.d.ts.map +1 -1
- package/build/core/context/templateContextTrust.js +22 -4
- package/build/core/context/templateContextTrust.js.map +1 -1
- package/build/core/filtering/clientFiltering.d.ts +1 -1
- package/build/core/filtering/clientFiltering.d.ts.map +1 -1
- package/build/core/filtering/clientFiltering.js +3 -3
- package/build/core/filtering/clientFiltering.js.map +1 -1
- package/build/core/filtering/filteringService.d.ts +1 -1
- package/build/core/filtering/filteringService.d.ts.map +1 -1
- package/build/core/filtering/filteringService.js +3 -3
- package/build/core/filtering/filteringService.js.map +1 -1
- package/build/core/loading/backendLoadingPolicy.d.ts +11 -0
- package/build/core/loading/backendLoadingPolicy.d.ts.map +1 -0
- package/build/core/loading/backendLoadingPolicy.js +10 -0
- package/build/core/loading/backendLoadingPolicy.js.map +1 -0
- package/build/core/loading/mcpLoadingManager.d.ts +12 -25
- package/build/core/loading/mcpLoadingManager.d.ts.map +1 -1
- package/build/core/loading/mcpLoadingManager.js +116 -70
- package/build/core/loading/mcpLoadingManager.js.map +1 -1
- package/build/core/notifications/notificationManager.d.ts +3 -2
- package/build/core/notifications/notificationManager.d.ts.map +1 -1
- package/build/core/notifications/notificationManager.js +13 -11
- package/build/core/notifications/notificationManager.js.map +1 -1
- package/build/core/protocol/notificationHandlers.d.ts +1 -13
- package/build/core/protocol/notificationHandlers.d.ts.map +1 -1
- package/build/core/protocol/notificationHandlers.js +1 -123
- package/build/core/protocol/notificationHandlers.js.map +1 -1
- package/build/core/protocol/promptRequestHandlers.d.ts +1 -3
- package/build/core/protocol/promptRequestHandlers.d.ts.map +1 -1
- package/build/core/protocol/promptRequestHandlers.js +1 -72
- package/build/core/protocol/promptRequestHandlers.js.map +1 -1
- package/build/core/protocol/requestHandlerUtils.d.ts.map +1 -1
- package/build/core/protocol/requestHandlerUtils.js +5 -24
- package/build/core/protocol/requestHandlerUtils.js.map +1 -1
- package/build/core/protocol/requestHandlers.d.ts +1 -12
- package/build/core/protocol/requestHandlers.d.ts.map +1 -1
- package/build/core/protocol/requestHandlers.js +1 -92
- package/build/core/protocol/requestHandlers.js.map +1 -1
- package/build/core/protocol/resourceRequestHandlers.d.ts +1 -2
- package/build/core/protocol/resourceRequestHandlers.d.ts.map +1 -1
- package/build/core/protocol/resourceRequestHandlers.js +1 -95
- package/build/core/protocol/resourceRequestHandlers.js.map +1 -1
- package/build/core/protocol/toolRequestHandlers.d.ts +1 -3
- package/build/core/protocol/toolRequestHandlers.d.ts.map +1 -1
- package/build/core/protocol/toolRequestHandlers.js +1 -187
- package/build/core/protocol/toolRequestHandlers.js.map +1 -1
- package/build/core/server/agentConfig.d.ts +26 -0
- package/build/core/server/agentConfig.d.ts.map +1 -1
- package/build/core/server/agentConfig.js +11 -0
- package/build/core/server/agentConfig.js.map +1 -1
- package/build/core/server/clientInstanceFactory.d.ts +1 -13
- package/build/core/server/clientInstanceFactory.d.ts.map +1 -1
- package/build/core/server/clientInstanceFactory.js +1 -48
- package/build/core/server/clientInstanceFactory.js.map +1 -1
- package/build/core/server/clientInstancePool.d.ts +1 -117
- package/build/core/server/clientInstancePool.d.ts.map +1 -1
- package/build/core/server/clientInstancePool.js +1 -599
- package/build/core/server/clientInstancePool.js.map +1 -1
- package/build/core/server/clientInstancePoolTypes.d.ts +1 -59
- package/build/core/server/clientInstancePoolTypes.d.ts.map +1 -1
- package/build/core/server/clientInstancePoolTypes.js +1 -9
- package/build/core/server/clientInstancePoolTypes.js.map +1 -1
- package/build/core/server/connectionManager.d.ts +1 -79
- package/build/core/server/connectionManager.d.ts.map +1 -1
- package/build/core/server/connectionManager.js +1 -262
- package/build/core/server/connectionManager.js.map +1 -1
- package/build/core/server/disabledTools.d.ts +7 -1
- package/build/core/server/disabledTools.d.ts.map +1 -1
- package/build/core/server/disabledTools.js +13 -0
- package/build/core/server/disabledTools.js.map +1 -1
- package/build/core/server/mcpServerLifecycleManager.d.ts +1 -58
- package/build/core/server/mcpServerLifecycleManager.d.ts.map +1 -1
- package/build/core/server/mcpServerLifecycleManager.js +1 -271
- package/build/core/server/mcpServerLifecycleManager.js.map +1 -1
- package/build/core/server/requestContextPreparation.d.ts +1 -38
- package/build/core/server/requestContextPreparation.d.ts.map +1 -1
- package/build/core/server/requestContextPreparation.js +1 -48
- package/build/core/server/requestContextPreparation.js.map +1 -1
- package/build/core/server/serverManager.d.ts +1 -130
- package/build/core/server/serverManager.d.ts.map +1 -1
- package/build/core/server/serverManager.js +1 -456
- package/build/core/server/serverManager.js.map +1 -1
- package/build/core/server/templateServerCleanup.d.ts +1 -22
- package/build/core/server/templateServerCleanup.d.ts.map +1 -1
- package/build/core/server/templateServerCleanup.js +1 -160
- package/build/core/server/templateServerCleanup.js.map +1 -1
- package/build/core/server/templateServerManager.d.ts +1 -141
- package/build/core/server/templateServerManager.d.ts.map +1 -1
- package/build/core/server/templateServerManager.js +1 -548
- package/build/core/server/templateServerManager.js.map +1 -1
- package/build/core/server/toolDescriptionOverrides.d.ts +5 -1
- package/build/core/server/toolDescriptionOverrides.d.ts.map +1 -1
- package/build/core/server/toolDescriptionOverrides.js +6 -0
- package/build/core/server/toolDescriptionOverrides.js.map +1 -1
- package/build/core/tools/handlers/serverManagementHandler.d.ts +29 -21
- package/build/core/tools/handlers/serverManagementHandler.d.ts.map +1 -1
- package/build/core/tools/handlers/serverManagementHandler.js +1 -1
- package/build/core/tools/handlers/serverManagementHandler.js.map +1 -1
- package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts +2 -1
- package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts.map +1 -1
- package/build/core/tools/internal/adapters/management/types.d.ts +17 -7
- package/build/core/tools/internal/adapters/management/types.d.ts.map +1 -1
- package/build/core/tools/internal/managementHandlers.d.ts.map +1 -1
- package/build/core/tools/internal/managementHandlers.js +11 -2
- package/build/core/tools/internal/managementHandlers.js.map +1 -1
- package/build/core/tools/internal/schemas/discovery.d.ts +5 -5
- package/build/core/tools/internal/schemas/index.d.ts +15 -15
- package/build/core/tools/internal/schemas/installation.d.ts +2 -2
- package/build/core/tools/internal/schemas/management.d.ts +8 -8
- package/build/core/types/client.d.ts +30 -17
- package/build/core/types/client.d.ts.map +1 -1
- package/build/core/types/client.js.map +1 -1
- package/build/core/types/server.d.ts +16 -9
- package/build/core/types/server.d.ts.map +1 -1
- package/build/core/types/server.js.map +1 -1
- package/build/core/types/transport.d.ts +100 -21
- package/build/core/types/transport.d.ts.map +1 -1
- package/build/core/types/transport.js +76 -0
- package/build/core/types/transport.js.map +1 -1
- package/build/core/validation/CustomJsonSchemaValidator.d.ts +1 -62
- package/build/core/validation/CustomJsonSchemaValidator.d.ts.map +1 -1
- package/build/core/validation/CustomJsonSchemaValidator.js +1 -309
- package/build/core/validation/CustomJsonSchemaValidator.js.map +1 -1
- package/build/domains/admin/adminConfiguredServerService.d.ts +146 -2
- package/build/domains/admin/adminConfiguredServerService.d.ts.map +1 -1
- package/build/domains/admin/adminConfiguredServerService.js +733 -81
- package/build/domains/admin/adminConfiguredServerService.js.map +1 -1
- package/build/domains/admin/adminDomain.d.ts +5 -0
- package/build/domains/admin/adminDomain.d.ts.map +1 -1
- package/build/domains/admin/adminDomain.js +11 -0
- package/build/domains/admin/adminDomain.js.map +1 -1
- package/build/domains/admin/adminInstructionPreviewRuntime.d.ts.map +1 -1
- package/build/domains/admin/adminInstructionPreviewRuntime.js +2 -9
- package/build/domains/admin/adminInstructionPreviewRuntime.js.map +1 -1
- package/build/domains/admin/adminOperationService.d.ts +1 -0
- package/build/domains/admin/adminOperationService.d.ts.map +1 -1
- package/build/domains/admin/adminOperationService.js +6 -2
- package/build/domains/admin/adminOperationService.js.map +1 -1
- package/build/domains/admin/configuredToolInventory.d.ts.map +1 -1
- package/build/domains/admin/configuredToolInventory.js.map +1 -1
- package/build/domains/admin/runtimeConfiguredToolInspectionService.d.ts.map +1 -1
- package/build/domains/admin/runtimeConfiguredToolInspectionService.js +6 -12
- package/build/domains/admin/runtimeConfiguredToolInspectionService.js.map +1 -1
- package/build/domains/admin/runtimeServerManagerBackendRestartService.js +1 -1
- package/build/domains/admin/runtimeServerManagerBackendRestartService.js.map +1 -1
- package/build/domains/admin/templateServerDefinitionAnalyzer.d.ts +26 -0
- package/build/domains/admin/templateServerDefinitionAnalyzer.d.ts.map +1 -0
- package/build/domains/admin/templateServerDefinitionAnalyzer.js +148 -0
- package/build/domains/admin/templateServerDefinitionAnalyzer.js.map +1 -0
- package/build/domains/config-change/configChange.d.ts +1 -1
- package/build/domains/config-change/configChange.d.ts.map +1 -1
- package/build/domains/config-change/configChange.js +168 -49
- package/build/domains/config-change/configChange.js.map +1 -1
- package/build/domains/config-change/types.d.ts +16 -2
- package/build/domains/config-change/types.d.ts.map +1 -1
- package/build/domains/registry/mcpRegistryClient.d.ts +3 -3
- package/build/domains/registry/mcpRegistryClient.d.ts.map +1 -1
- package/build/domains/registry/mcpRegistryClient.js +8 -7
- package/build/domains/registry/mcpRegistryClient.js.map +1 -1
- package/build/gateway/adapters/index.d.ts +3 -0
- package/build/gateway/adapters/index.d.ts.map +1 -0
- package/build/gateway/adapters/index.js +3 -0
- package/build/gateway/adapters/index.js.map +1 -0
- package/build/gateway/adapters/legacy/index.d.ts +3 -0
- package/build/gateway/adapters/legacy/index.d.ts.map +1 -0
- package/build/gateway/adapters/legacy/index.js +3 -0
- package/build/gateway/adapters/legacy/index.js.map +1 -0
- package/build/gateway/adapters/legacy/legacyEraPin.d.ts +3 -0
- package/build/gateway/adapters/legacy/legacyEraPin.d.ts.map +1 -0
- package/build/gateway/adapters/legacy/legacyEraPin.js +12 -0
- package/build/gateway/adapters/legacy/legacyEraPin.js.map +1 -0
- package/build/gateway/adapters/legacy/legacyInboundEraAdapter.d.ts +19 -0
- package/build/gateway/adapters/legacy/legacyInboundEraAdapter.d.ts.map +1 -0
- package/build/gateway/adapters/legacy/legacyInboundEraAdapter.js +86 -0
- package/build/gateway/adapters/legacy/legacyInboundEraAdapter.js.map +1 -0
- package/build/gateway/adapters/legacy/legacyOutboundEraAdapter.d.ts +19 -0
- package/build/gateway/adapters/legacy/legacyOutboundEraAdapter.d.ts.map +1 -0
- package/build/gateway/adapters/legacy/legacyOutboundEraAdapter.js +76 -0
- package/build/gateway/adapters/legacy/legacyOutboundEraAdapter.js.map +1 -0
- package/build/gateway/adapters/modern/index.d.ts +3 -0
- package/build/gateway/adapters/modern/index.d.ts.map +1 -0
- package/build/gateway/adapters/modern/index.js +3 -0
- package/build/gateway/adapters/modern/index.js.map +1 -0
- package/build/gateway/adapters/modern/modernInboundEraAdapter.d.ts +32 -0
- package/build/gateway/adapters/modern/modernInboundEraAdapter.d.ts.map +1 -0
- package/build/gateway/adapters/modern/modernInboundEraAdapter.js +150 -0
- package/build/gateway/adapters/modern/modernInboundEraAdapter.js.map +1 -0
- package/build/gateway/adapters/modern/modernOutboundEraAdapter.d.ts +24 -0
- package/build/gateway/adapters/modern/modernOutboundEraAdapter.d.ts.map +1 -0
- package/build/gateway/adapters/modern/modernOutboundEraAdapter.js +75 -0
- package/build/gateway/adapters/modern/modernOutboundEraAdapter.js.map +1 -0
- package/build/gateway/adapters/modern/modernPin.d.ts +9 -0
- package/build/gateway/adapters/modern/modernPin.d.ts.map +1 -0
- package/build/gateway/adapters/modern/modernPin.js +14 -0
- package/build/gateway/adapters/modern/modernPin.js.map +1 -0
- package/build/gateway/contracts/effectiveRequestAuthority.d.ts +12 -0
- package/build/gateway/contracts/effectiveRequestAuthority.d.ts.map +1 -0
- package/build/gateway/contracts/effectiveRequestAuthority.js +30 -0
- package/build/gateway/contracts/effectiveRequestAuthority.js.map +1 -0
- package/build/gateway/contracts/gatewayFailure.d.ts +25 -0
- package/build/gateway/contracts/gatewayFailure.d.ts.map +1 -0
- package/build/gateway/contracts/gatewayFailure.js +72 -0
- package/build/gateway/contracts/gatewayFailure.js.map +1 -0
- package/build/gateway/contracts/gatewayRequest.d.ts +32 -0
- package/build/gateway/contracts/gatewayRequest.d.ts.map +1 -0
- package/build/gateway/contracts/gatewayRequest.js +50 -0
- package/build/gateway/contracts/gatewayRequest.js.map +1 -0
- package/build/gateway/contracts/immutableJson.d.ts +6 -0
- package/build/gateway/contracts/immutableJson.d.ts.map +1 -0
- package/build/gateway/contracts/immutableJson.js +14 -0
- package/build/gateway/contracts/immutableJson.js.map +1 -0
- package/build/gateway/contracts/index.d.ts +6 -0
- package/build/gateway/contracts/index.d.ts.map +1 -0
- package/build/gateway/contracts/index.js +6 -0
- package/build/gateway/contracts/index.js.map +1 -0
- package/build/gateway/contracts/protocolEra.d.ts +22 -0
- package/build/gateway/contracts/protocolEra.d.ts.map +1 -0
- package/build/gateway/contracts/protocolEra.js +68 -0
- package/build/gateway/contracts/protocolEra.js.map +1 -0
- package/build/gateway/core/gatewayDispatcher.d.ts +15 -0
- package/build/gateway/core/gatewayDispatcher.d.ts.map +1 -0
- package/build/gateway/core/gatewayDispatcher.js +77 -0
- package/build/gateway/core/gatewayDispatcher.js.map +1 -0
- package/build/gateway/core/gatewaySession.d.ts +13 -0
- package/build/gateway/core/gatewaySession.d.ts.map +1 -0
- package/build/gateway/core/gatewaySession.js +61 -0
- package/build/gateway/core/gatewaySession.js.map +1 -0
- package/build/gateway/core/index.d.ts +3 -0
- package/build/gateway/core/index.d.ts.map +1 -0
- package/build/gateway/core/index.js +3 -0
- package/build/gateway/core/index.js.map +1 -0
- package/build/gateway/index.d.ts +5 -0
- package/build/gateway/index.d.ts.map +1 -0
- package/build/gateway/index.js +5 -0
- package/build/gateway/index.js.map +1 -0
- package/build/gateway/ports/inboundEraAdapter.d.ts +27 -0
- package/build/gateway/ports/inboundEraAdapter.d.ts.map +1 -0
- package/build/gateway/ports/inboundEraAdapter.js +2 -0
- package/build/gateway/ports/inboundEraAdapter.js.map +1 -0
- package/build/gateway/ports/index.d.ts +3 -0
- package/build/gateway/ports/index.d.ts.map +1 -0
- package/build/gateway/ports/index.js +3 -0
- package/build/gateway/ports/index.js.map +1 -0
- package/build/gateway/ports/outboundEraAdapter.d.ts +16 -0
- package/build/gateway/ports/outboundEraAdapter.d.ts.map +1 -0
- package/build/gateway/ports/outboundEraAdapter.js +2 -0
- package/build/gateway/ports/outboundEraAdapter.js.map +1 -0
- package/build/logger/mcpLoggingEnhancer.d.ts +1 -5
- package/build/logger/mcpLoggingEnhancer.d.ts.map +1 -1
- package/build/logger/mcpLoggingEnhancer.js +1 -192
- package/build/logger/mcpLoggingEnhancer.js.map +1 -1
- package/build/logger/secureLogger.d.ts.map +1 -1
- package/build/logger/secureLogger.js +160 -23
- package/build/logger/secureLogger.js.map +1 -1
- package/build/sdk/contracts/index.d.ts +5 -0
- package/build/sdk/contracts/index.d.ts.map +1 -0
- package/build/sdk/contracts/index.js +5 -0
- package/build/sdk/contracts/index.js.map +1 -0
- package/build/sdk/contracts/jsonValue.d.ts +21 -0
- package/build/sdk/contracts/jsonValue.d.ts.map +1 -0
- package/build/sdk/contracts/jsonValue.js +127 -0
- package/build/sdk/contracts/jsonValue.js.map +1 -0
- package/build/sdk/contracts/legacySdkAdapter.d.ts +73 -0
- package/build/sdk/contracts/legacySdkAdapter.d.ts.map +1 -0
- package/build/sdk/contracts/legacySdkAdapter.js +7 -0
- package/build/sdk/contracts/legacySdkAdapter.js.map +1 -0
- package/build/sdk/contracts/oneMcpProtocolError.d.ts +18 -0
- package/build/sdk/contracts/oneMcpProtocolError.d.ts.map +1 -0
- package/build/sdk/contracts/oneMcpProtocolError.js +39 -0
- package/build/sdk/contracts/oneMcpProtocolError.js.map +1 -0
- package/build/sdk/contracts/protocol.d.ts +240 -0
- package/build/sdk/contracts/protocol.d.ts.map +1 -0
- package/build/sdk/contracts/protocol.js +187 -0
- package/build/sdk/contracts/protocol.js.map +1 -0
- package/build/sdk/legacy/auth/sdkOAuthClientProvider.d.ts +98 -0
- package/build/sdk/legacy/auth/sdkOAuthClientProvider.d.ts.map +1 -0
- package/build/sdk/legacy/auth/sdkOAuthClientProvider.js +243 -0
- package/build/sdk/legacy/auth/sdkOAuthClientProvider.js.map +1 -0
- package/build/sdk/legacy/auth/sdkOAuthServerProvider.d.ts +69 -0
- package/build/sdk/legacy/auth/sdkOAuthServerProvider.d.ts.map +1 -0
- package/build/sdk/legacy/auth/sdkOAuthServerProvider.js +519 -0
- package/build/sdk/legacy/auth/sdkOAuthServerProvider.js.map +1 -0
- package/build/sdk/legacy/client/auth.d.ts +2 -0
- package/build/sdk/legacy/client/auth.d.ts.map +1 -0
- package/build/sdk/legacy/client/auth.js +2 -0
- package/build/sdk/legacy/client/auth.js.map +1 -0
- package/build/sdk/legacy/client/index.d.ts +2 -0
- package/build/sdk/legacy/client/index.d.ts.map +1 -0
- package/build/sdk/legacy/client/index.js +2 -0
- package/build/sdk/legacy/client/index.js.map +1 -0
- package/build/sdk/legacy/client/runtime/clientFactory.d.ts +10 -0
- package/build/sdk/legacy/client/runtime/clientFactory.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/clientFactory.js +56 -0
- package/build/sdk/legacy/client/runtime/clientFactory.js.map +1 -0
- package/build/sdk/legacy/client/runtime/clientManager.d.ts +94 -0
- package/build/sdk/legacy/client/runtime/clientManager.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/clientManager.js +834 -0
- package/build/sdk/legacy/client/runtime/clientManager.js.map +1 -0
- package/build/sdk/legacy/client/runtime/connectedClient.d.ts +7 -0
- package/build/sdk/legacy/client/runtime/connectedClient.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/connectedClient.js +2 -0
- package/build/sdk/legacy/client/runtime/connectedClient.js.map +1 -0
- package/build/sdk/legacy/client/runtime/connectionHandler.d.ts +10 -0
- package/build/sdk/legacy/client/runtime/connectionHandler.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/connectionHandler.js +139 -0
- package/build/sdk/legacy/client/runtime/connectionHandler.js.map +1 -0
- package/build/sdk/legacy/client/runtime/legacyGatewayClientAdapter.d.ts +14 -0
- package/build/sdk/legacy/client/runtime/legacyGatewayClientAdapter.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/legacyGatewayClientAdapter.js +66 -0
- package/build/sdk/legacy/client/runtime/legacyGatewayClientAdapter.js.map +1 -0
- package/build/sdk/legacy/client/runtime/legacyOutboundConnection.d.ts +50 -0
- package/build/sdk/legacy/client/runtime/legacyOutboundConnection.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/legacyOutboundConnection.js +93 -0
- package/build/sdk/legacy/client/runtime/legacyOutboundConnection.js.map +1 -0
- package/build/sdk/legacy/client/runtime/legacySdkClientAdapter.d.ts +37 -0
- package/build/sdk/legacy/client/runtime/legacySdkClientAdapter.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/legacySdkClientAdapter.js +240 -0
- package/build/sdk/legacy/client/runtime/legacySdkClientAdapter.js.map +1 -0
- package/build/sdk/legacy/client/runtime/legacyTransport.d.ts +32 -0
- package/build/sdk/legacy/client/runtime/legacyTransport.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/legacyTransport.js +2 -0
- package/build/sdk/legacy/client/runtime/legacyTransport.js.map +1 -0
- package/build/sdk/legacy/client/runtime/modernSdkClientAdapter.d.ts +40 -0
- package/build/sdk/legacy/client/runtime/modernSdkClientAdapter.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/modernSdkClientAdapter.js +238 -0
- package/build/sdk/legacy/client/runtime/modernSdkClientAdapter.js.map +1 -0
- package/build/sdk/legacy/client/runtime/oauthFlowHandler.d.ts +12 -0
- package/build/sdk/legacy/client/runtime/oauthFlowHandler.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/oauthFlowHandler.js +93 -0
- package/build/sdk/legacy/client/runtime/oauthFlowHandler.js.map +1 -0
- package/build/sdk/legacy/client/runtime/outboundRequestParams.d.ts +4 -0
- package/build/sdk/legacy/client/runtime/outboundRequestParams.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/outboundRequestParams.js +8 -0
- package/build/sdk/legacy/client/runtime/outboundRequestParams.js.map +1 -0
- package/build/sdk/legacy/client/runtime/recreateHttpTransportOptions.d.ts +12 -0
- package/build/sdk/legacy/client/runtime/recreateHttpTransportOptions.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/recreateHttpTransportOptions.js +2 -0
- package/build/sdk/legacy/client/runtime/recreateHttpTransportOptions.js.map +1 -0
- package/build/sdk/legacy/client/runtime/sdkClient.d.ts +5 -0
- package/build/sdk/legacy/client/runtime/sdkClient.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/sdkClient.js +5 -0
- package/build/sdk/legacy/client/runtime/sdkClient.js.map +1 -0
- package/build/sdk/legacy/client/runtime/serveClient.d.ts +70 -0
- package/build/sdk/legacy/client/runtime/serveClient.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/serveClient.js +235 -0
- package/build/sdk/legacy/client/runtime/serveClient.js.map +1 -0
- package/build/sdk/legacy/client/runtime/transportRecreationState.d.ts +14 -0
- package/build/sdk/legacy/client/runtime/transportRecreationState.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/transportRecreationState.js +2 -0
- package/build/sdk/legacy/client/runtime/transportRecreationState.js.map +1 -0
- package/build/sdk/legacy/client/runtime/transportRecreator.d.ts +14 -0
- package/build/sdk/legacy/client/runtime/transportRecreator.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/transportRecreator.js +89 -0
- package/build/sdk/legacy/client/runtime/transportRecreator.js.map +1 -0
- package/build/sdk/legacy/client/runtime/types.d.ts +9 -0
- package/build/sdk/legacy/client/runtime/types.d.ts.map +1 -0
- package/build/sdk/legacy/client/runtime/types.js +13 -0
- package/build/sdk/legacy/client/runtime/types.js.map +1 -0
- package/build/sdk/legacy/client/sse.d.ts +2 -0
- package/build/sdk/legacy/client/sse.d.ts.map +1 -0
- package/build/sdk/legacy/client/sse.js +2 -0
- package/build/sdk/legacy/client/sse.js.map +1 -0
- package/build/sdk/legacy/client/stdio.d.ts +2 -0
- package/build/sdk/legacy/client/stdio.d.ts.map +1 -0
- package/build/sdk/legacy/client/stdio.js +2 -0
- package/build/sdk/legacy/client/stdio.js.map +1 -0
- package/build/sdk/legacy/client/streamableHttp.d.ts +2 -0
- package/build/sdk/legacy/client/streamableHttp.d.ts.map +1 -0
- package/build/sdk/legacy/client/streamableHttp.js +2 -0
- package/build/sdk/legacy/client/streamableHttp.js.map +1 -0
- package/build/sdk/legacy/commands/serve.d.ts +90 -0
- package/build/sdk/legacy/commands/serve.d.ts.map +1 -0
- package/build/sdk/legacy/commands/serve.js +561 -0
- package/build/sdk/legacy/commands/serve.js.map +1 -0
- package/build/sdk/legacy/server/auth/clients.d.ts +2 -0
- package/build/sdk/legacy/server/auth/clients.d.ts.map +1 -0
- package/build/sdk/legacy/server/auth/clients.js +2 -0
- package/build/sdk/legacy/server/auth/clients.js.map +1 -0
- package/build/sdk/legacy/server/auth/errors.d.ts +2 -0
- package/build/sdk/legacy/server/auth/errors.d.ts.map +1 -0
- package/build/sdk/legacy/server/auth/errors.js +2 -0
- package/build/sdk/legacy/server/auth/errors.js.map +1 -0
- package/build/sdk/legacy/server/auth/middleware/bearerAuth.d.ts +2 -0
- package/build/sdk/legacy/server/auth/middleware/bearerAuth.d.ts.map +1 -0
- package/build/sdk/legacy/server/auth/middleware/bearerAuth.js +2 -0
- package/build/sdk/legacy/server/auth/middleware/bearerAuth.js.map +1 -0
- package/build/sdk/legacy/server/auth/provider.d.ts +2 -0
- package/build/sdk/legacy/server/auth/provider.d.ts.map +1 -0
- package/build/sdk/legacy/server/auth/provider.js +2 -0
- package/build/sdk/legacy/server/auth/provider.js.map +1 -0
- package/build/sdk/legacy/server/auth/router.d.ts +2 -0
- package/build/sdk/legacy/server/auth/router.d.ts.map +1 -0
- package/build/sdk/legacy/server/auth/router.js +2 -0
- package/build/sdk/legacy/server/auth/router.js.map +1 -0
- package/build/sdk/legacy/server/auth/types.d.ts +2 -0
- package/build/sdk/legacy/server/auth/types.d.ts.map +1 -0
- package/build/sdk/legacy/server/auth/types.js +2 -0
- package/build/sdk/legacy/server/auth/types.js.map +1 -0
- package/build/sdk/legacy/server/index.d.ts +2 -0
- package/build/sdk/legacy/server/index.d.ts.map +1 -0
- package/build/sdk/legacy/server/index.js +2 -0
- package/build/sdk/legacy/server/index.js.map +1 -0
- package/build/sdk/legacy/server/protocol/notificationHandlers.d.ts +15 -0
- package/build/sdk/legacy/server/protocol/notificationHandlers.d.ts.map +1 -0
- package/build/sdk/legacy/server/protocol/notificationHandlers.js +146 -0
- package/build/sdk/legacy/server/protocol/notificationHandlers.js.map +1 -0
- package/build/sdk/legacy/server/protocol/promptRequestHandlers.d.ts +5 -0
- package/build/sdk/legacy/server/protocol/promptRequestHandlers.d.ts.map +1 -0
- package/build/sdk/legacy/server/protocol/promptRequestHandlers.js +50 -0
- package/build/sdk/legacy/server/protocol/promptRequestHandlers.js.map +1 -0
- package/build/sdk/legacy/server/protocol/requestHandlers.d.ts +14 -0
- package/build/sdk/legacy/server/protocol/requestHandlers.d.ts.map +1 -0
- package/build/sdk/legacy/server/protocol/requestHandlers.js +96 -0
- package/build/sdk/legacy/server/protocol/requestHandlers.js.map +1 -0
- package/build/sdk/legacy/server/protocol/resourceRequestHandlers.d.ts +4 -0
- package/build/sdk/legacy/server/protocol/resourceRequestHandlers.d.ts.map +1 -0
- package/build/sdk/legacy/server/protocol/resourceRequestHandlers.js +62 -0
- package/build/sdk/legacy/server/protocol/resourceRequestHandlers.js.map +1 -0
- package/build/sdk/legacy/server/protocol/toolRequestHandlers.d.ts +5 -0
- package/build/sdk/legacy/server/protocol/toolRequestHandlers.d.ts.map +1 -0
- package/build/sdk/legacy/server/protocol/toolRequestHandlers.js +87 -0
- package/build/sdk/legacy/server/protocol/toolRequestHandlers.js.map +1 -0
- package/build/sdk/legacy/server/runtime/clientInstanceFactory.d.ts +14 -0
- package/build/sdk/legacy/server/runtime/clientInstanceFactory.d.ts.map +1 -0
- package/build/sdk/legacy/server/runtime/clientInstanceFactory.js +49 -0
- package/build/sdk/legacy/server/runtime/clientInstanceFactory.js.map +1 -0
- package/build/sdk/legacy/server/runtime/clientInstancePool.d.ts +116 -0
- package/build/sdk/legacy/server/runtime/clientInstancePool.d.ts.map +1 -0
- package/build/sdk/legacy/server/runtime/clientInstancePool.js +600 -0
- package/build/sdk/legacy/server/runtime/clientInstancePool.js.map +1 -0
- package/build/sdk/legacy/server/runtime/clientInstancePoolTypes.d.ts +67 -0
- package/build/sdk/legacy/server/runtime/clientInstancePoolTypes.d.ts.map +1 -0
- package/build/sdk/legacy/server/runtime/clientInstancePoolTypes.js +15 -0
- package/build/sdk/legacy/server/runtime/clientInstancePoolTypes.js.map +1 -0
- package/build/sdk/legacy/server/runtime/connectionManager.d.ts +82 -0
- package/build/sdk/legacy/server/runtime/connectionManager.d.ts.map +1 -0
- package/build/sdk/legacy/server/runtime/connectionManager.js +298 -0
- package/build/sdk/legacy/server/runtime/connectionManager.js.map +1 -0
- package/build/sdk/legacy/server/runtime/legacyInboundConnection.d.ts +17 -0
- package/build/sdk/legacy/server/runtime/legacyInboundConnection.d.ts.map +1 -0
- package/build/sdk/legacy/server/runtime/legacyInboundConnection.js +22 -0
- package/build/sdk/legacy/server/runtime/legacyInboundConnection.js.map +1 -0
- package/build/sdk/legacy/server/runtime/legacySdkServerAdapter.d.ts +18 -0
- package/build/sdk/legacy/server/runtime/legacySdkServerAdapter.d.ts.map +1 -0
- package/build/sdk/legacy/server/runtime/legacySdkServerAdapter.js +82 -0
- package/build/sdk/legacy/server/runtime/legacySdkServerAdapter.js.map +1 -0
- package/build/sdk/legacy/server/runtime/mcpLoggingEnhancer.d.ts +6 -0
- package/build/sdk/legacy/server/runtime/mcpLoggingEnhancer.d.ts.map +1 -0
- package/build/sdk/legacy/server/runtime/mcpLoggingEnhancer.js +193 -0
- package/build/sdk/legacy/server/runtime/mcpLoggingEnhancer.js.map +1 -0
- package/build/sdk/legacy/server/runtime/mcpServerLifecycleManager.d.ts +60 -0
- package/build/sdk/legacy/server/runtime/mcpServerLifecycleManager.d.ts.map +1 -0
- package/build/sdk/legacy/server/runtime/mcpServerLifecycleManager.js +274 -0
- package/build/sdk/legacy/server/runtime/mcpServerLifecycleManager.js.map +1 -0
- package/build/sdk/legacy/server/runtime/requestContextPreparation.d.ts +39 -0
- package/build/sdk/legacy/server/runtime/requestContextPreparation.d.ts.map +1 -0
- package/build/sdk/legacy/server/runtime/requestContextPreparation.js +50 -0
- package/build/sdk/legacy/server/runtime/requestContextPreparation.js.map +1 -0
- package/build/sdk/legacy/server/runtime/serverManager.d.ts +132 -0
- package/build/sdk/legacy/server/runtime/serverManager.d.ts.map +1 -0
- package/build/sdk/legacy/server/runtime/serverManager.js +462 -0
- package/build/sdk/legacy/server/runtime/serverManager.js.map +1 -0
- package/build/sdk/legacy/server/runtime/templateServerCleanup.d.ts +23 -0
- package/build/sdk/legacy/server/runtime/templateServerCleanup.d.ts.map +1 -0
- package/build/sdk/legacy/server/runtime/templateServerCleanup.js +161 -0
- package/build/sdk/legacy/server/runtime/templateServerCleanup.js.map +1 -0
- package/build/sdk/legacy/server/runtime/templateServerManager.d.ts +155 -0
- package/build/sdk/legacy/server/runtime/templateServerManager.d.ts.map +1 -0
- package/build/sdk/legacy/server/runtime/templateServerManager.js +606 -0
- package/build/sdk/legacy/server/runtime/templateServerManager.js.map +1 -0
- package/build/sdk/legacy/server/sse.d.ts +2 -0
- package/build/sdk/legacy/server/sse.d.ts.map +1 -0
- package/build/sdk/legacy/server/sse.js +2 -0
- package/build/sdk/legacy/server/sse.js.map +1 -0
- package/build/sdk/legacy/server/stdio.d.ts +2 -0
- package/build/sdk/legacy/server/stdio.d.ts.map +1 -0
- package/build/sdk/legacy/server/stdio.js +2 -0
- package/build/sdk/legacy/server/stdio.js.map +1 -0
- package/build/sdk/legacy/server/streamableHttp.d.ts +2 -0
- package/build/sdk/legacy/server/streamableHttp.d.ts.map +1 -0
- package/build/sdk/legacy/server/streamableHttp.js +2 -0
- package/build/sdk/legacy/server/streamableHttp.js.map +1 -0
- package/build/sdk/legacy/shared/auth.d.ts +2 -0
- package/build/sdk/legacy/shared/auth.d.ts.map +1 -0
- package/build/sdk/legacy/shared/auth.js +2 -0
- package/build/sdk/legacy/shared/auth.js.map +1 -0
- package/build/sdk/legacy/shared/capabilityListCapture.d.ts +4 -0
- package/build/sdk/legacy/shared/capabilityListCapture.d.ts.map +1 -0
- package/build/sdk/legacy/shared/capabilityListCapture.js +30 -0
- package/build/sdk/legacy/shared/capabilityListCapture.js.map +1 -0
- package/build/sdk/legacy/shared/protocol.d.ts +2 -0
- package/build/sdk/legacy/shared/protocol.d.ts.map +1 -0
- package/build/sdk/legacy/shared/protocol.js +2 -0
- package/build/sdk/legacy/shared/protocol.js.map +1 -0
- package/build/sdk/legacy/shared/resourceTemplateRouting.d.ts +12 -0
- package/build/sdk/legacy/shared/resourceTemplateRouting.d.ts.map +1 -0
- package/build/sdk/legacy/shared/resourceTemplateRouting.js +66 -0
- package/build/sdk/legacy/shared/resourceTemplateRouting.js.map +1 -0
- package/build/sdk/legacy/shared/transport.d.ts +2 -0
- package/build/sdk/legacy/shared/transport.d.ts.map +1 -0
- package/build/sdk/legacy/shared/transport.js +2 -0
- package/build/sdk/legacy/shared/transport.js.map +1 -0
- package/build/sdk/legacy/transport/http/loggingSseTransport.d.ts +13 -0
- package/build/sdk/legacy/transport/http/loggingSseTransport.d.ts.map +1 -0
- package/build/sdk/legacy/transport/http/loggingSseTransport.js +43 -0
- package/build/sdk/legacy/transport/http/loggingSseTransport.js.map +1 -0
- package/build/sdk/legacy/transport/http/middlewares/scopeAuthMiddleware.d.ts +91 -0
- package/build/sdk/legacy/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -0
- package/build/sdk/legacy/transport/http/middlewares/scopeAuthMiddleware.js +240 -0
- package/build/sdk/legacy/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -0
- package/build/sdk/legacy/transport/http/modernInboundLegacyBridge.d.ts +14 -0
- package/build/sdk/legacy/transport/http/modernInboundLegacyBridge.d.ts.map +1 -0
- package/build/sdk/legacy/transport/http/modernInboundLegacyBridge.js +50 -0
- package/build/sdk/legacy/transport/http/modernInboundLegacyBridge.js.map +1 -0
- package/build/sdk/legacy/transport/http/restorableStreamableTransport.d.ts +58 -0
- package/build/sdk/legacy/transport/http/restorableStreamableTransport.d.ts.map +1 -0
- package/build/sdk/legacy/transport/http/restorableStreamableTransport.js +59 -0
- package/build/sdk/legacy/transport/http/restorableStreamableTransport.js.map +1 -0
- package/build/sdk/legacy/transport/http/routes/sseRoutes.d.ts +5 -0
- package/build/sdk/legacy/transport/http/routes/sseRoutes.d.ts.map +1 -0
- package/build/sdk/legacy/transport/http/routes/sseRoutes.js +105 -0
- package/build/sdk/legacy/transport/http/routes/sseRoutes.js.map +1 -0
- package/build/sdk/legacy/transport/http/server.d.ts +90 -0
- package/build/sdk/legacy/transport/http/server.d.ts.map +1 -0
- package/build/sdk/legacy/transport/http/server.js +487 -0
- package/build/sdk/legacy/transport/http/server.js.map +1 -0
- package/build/sdk/legacy/transport/http/streamableSessionLifecycle.d.ts +92 -0
- package/build/sdk/legacy/transport/http/streamableSessionLifecycle.d.ts.map +1 -0
- package/build/sdk/legacy/transport/http/streamableSessionLifecycle.js +372 -0
- package/build/sdk/legacy/transport/http/streamableSessionLifecycle.js.map +1 -0
- package/build/sdk/legacy/transport/restartableStdioTransport.d.ts +90 -0
- package/build/sdk/legacy/transport/restartableStdioTransport.d.ts.map +1 -0
- package/build/sdk/legacy/transport/restartableStdioTransport.js +192 -0
- package/build/sdk/legacy/transport/restartableStdioTransport.js.map +1 -0
- package/build/sdk/legacy/transport/stdioProxyTransport.d.ts +92 -0
- package/build/sdk/legacy/transport/stdioProxyTransport.d.ts.map +1 -0
- package/build/sdk/legacy/transport/stdioProxyTransport.js +388 -0
- package/build/sdk/legacy/transport/stdioProxyTransport.js.map +1 -0
- package/build/sdk/legacy/transport/transportFactory.d.ts +25 -0
- package/build/sdk/legacy/transport/transportFactory.d.ts.map +1 -0
- package/build/sdk/legacy/transport/transportFactory.js +404 -0
- package/build/sdk/legacy/transport/transportFactory.js.map +1 -0
- package/build/sdk/legacy/types.d.ts +2 -0
- package/build/sdk/legacy/types.d.ts.map +1 -0
- package/build/sdk/legacy/types.js +3 -0
- package/build/sdk/legacy/types.js.map +1 -0
- package/build/sdk/legacy/validation/CustomJsonSchemaValidator.d.ts +57 -0
- package/build/sdk/legacy/validation/CustomJsonSchemaValidator.d.ts.map +1 -0
- package/build/sdk/legacy/validation/CustomJsonSchemaValidator.js +316 -0
- package/build/sdk/legacy/validation/CustomJsonSchemaValidator.js.map +1 -0
- package/build/sdk/legacy/validation.d.ts +2 -0
- package/build/sdk/legacy/validation.d.ts.map +1 -0
- package/build/sdk/legacy/validation.js +2 -0
- package/build/sdk/legacy/validation.js.map +1 -0
- package/build/server.d.ts +2 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +19 -9
- package/build/server.js.map +1 -1
- package/build/transport/http/loggingSseTransport.d.ts +1 -12
- package/build/transport/http/loggingSseTransport.d.ts.map +1 -1
- package/build/transport/http/loggingSseTransport.js +1 -42
- package/build/transport/http/loggingSseTransport.js.map +1 -1
- package/build/transport/http/middlewares/errorHandler.d.ts.map +1 -1
- package/build/transport/http/middlewares/errorHandler.js +18 -1
- package/build/transport/http/middlewares/errorHandler.js.map +1 -1
- package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts +2 -90
- package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -1
- package/build/transport/http/middlewares/scopeAuthMiddleware.js +2 -239
- package/build/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -1
- package/build/transport/http/middlewares/securityMiddleware.d.ts +6 -0
- package/build/transport/http/middlewares/securityMiddleware.d.ts.map +1 -1
- package/build/transport/http/middlewares/securityMiddleware.js +35 -29
- package/build/transport/http/middlewares/securityMiddleware.js.map +1 -1
- package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -1
- package/build/transport/http/middlewares/tagsExtractor.js +1 -1
- package/build/transport/http/middlewares/tagsExtractor.js.map +1 -1
- package/build/transport/http/restorableStreamableTransport.d.ts +2 -57
- package/build/transport/http/restorableStreamableTransport.d.ts.map +1 -1
- package/build/transport/http/restorableStreamableTransport.js +1 -58
- package/build/transport/http/restorableStreamableTransport.js.map +1 -1
- package/build/transport/http/routes/adminRoutes.d.ts +17 -1
- package/build/transport/http/routes/adminRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/adminRoutes.js +283 -17
- package/build/transport/http/routes/adminRoutes.js.map +1 -1
- package/build/transport/http/routes/apiRoutes.d.ts +5 -1
- package/build/transport/http/routes/apiRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/apiRoutes.js +15 -3
- package/build/transport/http/routes/apiRoutes.js.map +1 -1
- package/build/transport/http/routes/healthRoutes.d.ts +6 -1
- package/build/transport/http/routes/healthRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/healthRoutes.js +7 -3
- package/build/transport/http/routes/healthRoutes.js.map +1 -1
- package/build/transport/http/routes/inspectHelpers.d.ts +1 -1
- package/build/transport/http/routes/inspectHelpers.d.ts.map +1 -1
- package/build/transport/http/routes/inspectHelpers.js +9 -5
- package/build/transport/http/routes/inspectHelpers.js.map +1 -1
- package/build/transport/http/routes/inspectRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/inspectRoutes.js +39 -25
- package/build/transport/http/routes/inspectRoutes.js.map +1 -1
- package/build/transport/http/routes/instructionsRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/instructionsRoutes.js +2 -9
- package/build/transport/http/routes/instructionsRoutes.js.map +1 -1
- package/build/transport/http/routes/modernHttpRoutes.d.ts +29 -0
- package/build/transport/http/routes/modernHttpRoutes.d.ts.map +1 -0
- package/build/transport/http/routes/modernHttpRoutes.js +241 -0
- package/build/transport/http/routes/modernHttpRoutes.js.map +1 -0
- package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/oauthRoutes.js +8 -4
- package/build/transport/http/routes/oauthRoutes.js.map +1 -1
- package/build/transport/http/routes/sseRoutes.d.ts +1 -4
- package/build/transport/http/routes/sseRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/sseRoutes.js +1 -109
- package/build/transport/http/routes/sseRoutes.js.map +1 -1
- package/build/transport/http/routes/toolRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/toolRoutes.js +21 -10
- package/build/transport/http/routes/toolRoutes.js.map +1 -1
- package/build/transport/http/server.d.ts +1 -84
- package/build/transport/http/server.d.ts.map +1 -1
- package/build/transport/http/server.js +1 -431
- package/build/transport/http/server.js.map +1 -1
- package/build/transport/http/storage/streamableSessionRepository.d.ts +1 -0
- package/build/transport/http/storage/streamableSessionRepository.d.ts.map +1 -1
- package/build/transport/http/storage/streamableSessionRepository.js +6 -3
- package/build/transport/http/storage/streamableSessionRepository.js.map +1 -1
- package/build/transport/http/streamableSessionLifecycle.d.ts +1 -91
- package/build/transport/http/streamableSessionLifecycle.d.ts.map +1 -1
- package/build/transport/http/streamableSessionLifecycle.js +1 -376
- package/build/transport/http/streamableSessionLifecycle.js.map +1 -1
- package/build/transport/http/utils/httpErrorHandler.js +1 -1
- package/build/transport/http/utils/httpErrorHandler.js.map +1 -1
- package/build/transport/http/utils/templateContextAuthority.d.ts.map +1 -1
- package/build/transport/http/utils/templateContextAuthority.js +19 -6
- package/build/transport/http/utils/templateContextAuthority.js.map +1 -1
- package/build/transport/restartableStdioTransport.d.ts +1 -89
- package/build/transport/restartableStdioTransport.d.ts.map +1 -1
- package/build/transport/restartableStdioTransport.js +1 -191
- package/build/transport/restartableStdioTransport.js.map +1 -1
- package/build/transport/stdioProxyTransport.d.ts +1 -82
- package/build/transport/stdioProxyTransport.d.ts.map +1 -1
- package/build/transport/stdioProxyTransport.js +1 -278
- package/build/transport/stdioProxyTransport.js.map +1 -1
- package/build/transport/transportFactory.d.ts +1 -23
- package/build/transport/transportFactory.d.ts.map +1 -1
- package/build/transport/transportFactory.js +1 -379
- package/build/transport/transportFactory.js.map +1 -1
- package/build/transport/transportFactory.testSetup.js +13 -0
- package/build/transport/transportFactory.testSetup.js.map +1 -1
- package/build/utils/client/clientInfoExtractor.d.ts +1 -1
- package/build/utils/client/clientInfoExtractor.d.ts.map +1 -1
- package/build/utils/client/clientInfoExtractor.js.map +1 -1
- package/build/utils/core/errorHandling.d.ts.map +1 -1
- package/build/utils/core/errorHandling.js +1 -1
- package/build/utils/core/errorHandling.js.map +1 -1
- package/build/utils/core/errorTypes.js +1 -1
- package/build/utils/core/errorTypes.js.map +1 -1
- package/build/utils/core/operationExecution.d.ts.map +1 -1
- package/build/utils/core/operationExecution.js +1 -1
- package/build/utils/core/operationExecution.js.map +1 -1
- package/build/utils/crypto.d.ts +5 -1
- package/build/utils/crypto.d.ts.map +1 -1
- package/build/utils/crypto.js +8 -3
- package/build/utils/crypto.js.map +1 -1
- package/build/utils/filePermissions.d.ts +65 -0
- package/build/utils/filePermissions.d.ts.map +1 -0
- package/build/utils/filePermissions.js +212 -0
- package/build/utils/filePermissions.js.map +1 -0
- package/package.json +18 -5
- package/build/admin/assets/admin-console-xbgqUjbT.js +0 -3
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { mergeGlobalAndServerConfig } from '../../config/mcpConfigMerge.js';
|
|
3
3
|
import { normalizeDisabledToolsForServer } from '../../core/server/disabledTools.js';
|
|
4
|
+
import { templateRuntimeHash } from '../../core/server/templateIdentity.js';
|
|
4
5
|
import { GLOBAL_TRANSPORT_CONFIG_KEYS, transportConfigSchema, } from '../../core/types/index.js';
|
|
5
6
|
import { fingerprintConfiguredServerConfigDocument, fingerprintConfiguredServerDefaults, fingerprintConfiguredServerSecretValue, fingerprintConfiguredServerTarget, isConfiguredServerTargetDisabled, } from '../../domains/config-change/configChange.js';
|
|
6
7
|
import { createServerInstallationWorkflow, } from '../../domains/installation/serverInstallationWorkflow.js';
|
|
8
|
+
import Handlebars from 'handlebars';
|
|
7
9
|
import { z } from 'zod';
|
|
10
|
+
import { analyzeTemplateServerDefinition, } from './templateServerDefinitionAnalyzer.js';
|
|
8
11
|
const configuredServerCreateSecretSchema = z
|
|
9
12
|
.object({
|
|
10
13
|
fieldPath: z.array(z.string()).min(2),
|
|
@@ -17,6 +20,7 @@ const configuredServerCreateSecretSchema = z
|
|
|
17
20
|
.strict();
|
|
18
21
|
const configuredServerCreateDraftSchema = z
|
|
19
22
|
.object({
|
|
23
|
+
source: z.enum(['mcpServers', 'mcpTemplates']).optional().default('mcpServers'),
|
|
20
24
|
name: z.string(),
|
|
21
25
|
enabled: z.boolean().optional(),
|
|
22
26
|
tags: z.array(z.string()).optional(),
|
|
@@ -35,6 +39,33 @@ const configuredServerCreateDraftSchema = z
|
|
|
35
39
|
restartOnExit: z.boolean().optional(),
|
|
36
40
|
maxRestarts: z.number().optional(),
|
|
37
41
|
restartDelay: z.number().optional(),
|
|
42
|
+
disabled: z.union([z.boolean(), z.string()]).optional(),
|
|
43
|
+
stderr: z.union([z.enum(['inherit', 'ignore', 'overlapped', 'pipe']), z.number().int().min(0)]).optional(),
|
|
44
|
+
inheritParentEnv: z.boolean().optional(),
|
|
45
|
+
envFilter: z.array(z.string()).optional(),
|
|
46
|
+
oauth: z
|
|
47
|
+
.object({
|
|
48
|
+
clientId: z.string().optional(),
|
|
49
|
+
clientSecret: z.string().optional(),
|
|
50
|
+
scopes: z.array(z.string()).optional(),
|
|
51
|
+
autoRegister: z.boolean().optional(),
|
|
52
|
+
redirectUrl: z.string().optional(),
|
|
53
|
+
})
|
|
54
|
+
.optional(),
|
|
55
|
+
template: z
|
|
56
|
+
.object({
|
|
57
|
+
shareable: z.boolean().optional(),
|
|
58
|
+
maxInstances: z.number().min(0).optional(),
|
|
59
|
+
idleTimeout: z.number().min(0).optional(),
|
|
60
|
+
perClient: z.boolean().optional(),
|
|
61
|
+
extractionOptions: z
|
|
62
|
+
.object({
|
|
63
|
+
includeOptional: z.boolean().optional(),
|
|
64
|
+
includeEnvironment: z.boolean().optional(),
|
|
65
|
+
})
|
|
66
|
+
.optional(),
|
|
67
|
+
})
|
|
68
|
+
.optional(),
|
|
38
69
|
})
|
|
39
70
|
.strict(),
|
|
40
71
|
secrets: z.array(configuredServerCreateSecretSchema).optional(),
|
|
@@ -54,6 +85,12 @@ const CONFIGURED_SERVER_CREATE_TRANSPORT_FIELD_KEYS = new Set([
|
|
|
54
85
|
'restartOnExit',
|
|
55
86
|
'maxRestarts',
|
|
56
87
|
'restartDelay',
|
|
88
|
+
'disabled',
|
|
89
|
+
'stderr',
|
|
90
|
+
'inheritParentEnv',
|
|
91
|
+
'envFilter',
|
|
92
|
+
'oauth',
|
|
93
|
+
'template',
|
|
57
94
|
]);
|
|
58
95
|
function normalizeConfiguredServerCreateDraft(value) {
|
|
59
96
|
const parsed = configuredServerCreateDraftSchema.safeParse(value);
|
|
@@ -70,6 +107,7 @@ function normalizeConfiguredServerCreateDraft(value) {
|
|
|
70
107
|
localName: typeof record.name === 'string' ? record.name : '',
|
|
71
108
|
transport: transportType,
|
|
72
109
|
},
|
|
110
|
+
targetSource: record.source === 'mcpTemplates' ? 'mcpTemplates' : 'mcpServers',
|
|
73
111
|
validation: {
|
|
74
112
|
status: 'invalid',
|
|
75
113
|
errors: parsed.error.issues.map((issue) => ({
|
|
@@ -82,6 +120,7 @@ function normalizeConfiguredServerCreateDraft(value) {
|
|
|
82
120
|
}
|
|
83
121
|
const { transport } = parsed.data;
|
|
84
122
|
const draft = {
|
|
123
|
+
source: parsed.data.source,
|
|
85
124
|
name: parsed.data.name,
|
|
86
125
|
enabled: parsed.data.enabled,
|
|
87
126
|
tags: parsed.data.tags,
|
|
@@ -109,7 +148,7 @@ function normalizeConfiguredServerCreateDraft(value) {
|
|
|
109
148
|
maxRestarts: transport.maxRestarts,
|
|
110
149
|
restartDelay: transport.restartDelay,
|
|
111
150
|
};
|
|
112
|
-
return { draft, source, validation: { status: 'valid', errors: [] } };
|
|
151
|
+
return { draft, source, targetSource: parsed.data.source, validation: { status: 'valid', errors: [] } };
|
|
113
152
|
}
|
|
114
153
|
function configuredServerCreateSecretValues(draft, container) {
|
|
115
154
|
const values = {};
|
|
@@ -127,7 +166,7 @@ function mergeConfiguredServerCreateRecord(base, additions) {
|
|
|
127
166
|
const merged = { ...base, ...additions };
|
|
128
167
|
return Object.keys(merged).length > 0 ? merged : undefined;
|
|
129
168
|
}
|
|
130
|
-
function createWorkflowValidation(workflow, config) {
|
|
169
|
+
function createWorkflowValidation(workflow, config, source = 'mcpServers') {
|
|
131
170
|
const errors = [];
|
|
132
171
|
for (const [field, messages] of Object.entries(workflow.fieldErrors ?? {})) {
|
|
133
172
|
for (const message of messages) {
|
|
@@ -149,6 +188,12 @@ function createWorkflowValidation(workflow, config) {
|
|
|
149
188
|
const parsed = transportConfigSchema.safeParse(config);
|
|
150
189
|
if (!parsed.success) {
|
|
151
190
|
for (const issue of parsed.error.issues) {
|
|
191
|
+
if (source === 'mcpTemplates' &&
|
|
192
|
+
issue.path[0] === 'url' &&
|
|
193
|
+
typeof config.url === 'string' &&
|
|
194
|
+
config.url.includes('{{')) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
152
197
|
errors.push({
|
|
153
198
|
fieldPath: ['transport', ...issue.path.map(String)],
|
|
154
199
|
code: 'invalid_transport_config',
|
|
@@ -199,7 +244,7 @@ function validateConfiguredServerCreateSecrets(draft) {
|
|
|
199
244
|
return { status: errors.length === 0 ? 'valid' : 'invalid', errors };
|
|
200
245
|
}
|
|
201
246
|
function createConfiguredServerCreateContract() {
|
|
202
|
-
const transportFields = TRANSPORT_FIELD_DEFINITIONS.filter((definition) => CONFIGURED_SERVER_CREATE_TRANSPORT_FIELD_KEYS.has(definition.key)).map((definition) => ({
|
|
247
|
+
const transportFields = TRANSPORT_FIELD_DEFINITIONS.filter((definition) => definition.key !== 'template' && CONFIGURED_SERVER_CREATE_TRANSPORT_FIELD_KEYS.has(definition.key)).map((definition) => ({
|
|
203
248
|
fieldPath: ['transport', definition.key],
|
|
204
249
|
label: definition.label,
|
|
205
250
|
control: definition.control,
|
|
@@ -234,12 +279,28 @@ function createConfiguredServerCreateContract() {
|
|
|
234
279
|
id: 'identity',
|
|
235
280
|
label: 'Identity',
|
|
236
281
|
fields: [
|
|
282
|
+
{
|
|
283
|
+
fieldPath: ['source'],
|
|
284
|
+
label: 'Definition Type',
|
|
285
|
+
control: 'select',
|
|
286
|
+
value: 'mcpServers',
|
|
287
|
+
options: ['mcpServers', 'mcpTemplates'],
|
|
288
|
+
editable: true,
|
|
289
|
+
},
|
|
237
290
|
{ fieldPath: ['name'], label: 'Server Name', control: 'text', editable: true },
|
|
238
|
-
{
|
|
291
|
+
{
|
|
292
|
+
fieldPath: ['enabled'],
|
|
293
|
+
label: 'Enabled',
|
|
294
|
+
control: 'switch',
|
|
295
|
+
value: true,
|
|
296
|
+
editable: true,
|
|
297
|
+
applicableSources: ['mcpServers'],
|
|
298
|
+
},
|
|
239
299
|
{ fieldPath: ['tags'], label: 'Tags', control: 'tag-list', value: [], editable: true },
|
|
240
300
|
],
|
|
241
301
|
},
|
|
242
302
|
{ id: 'transport', label: 'Transport', fields: transportFields },
|
|
303
|
+
{ id: 'template', label: 'Template instances', fields: templateLifecycleFields() },
|
|
243
304
|
],
|
|
244
305
|
};
|
|
245
306
|
}
|
|
@@ -307,7 +368,7 @@ function connectivityFingerprintFacts(connectivityCheck) {
|
|
|
307
368
|
return connectivityCheck;
|
|
308
369
|
return { status: connectivityCheck.status, mode: connectivityCheck.mode };
|
|
309
370
|
}
|
|
310
|
-
function previewCreateConfigChange(targetName, workflowStatus, changed) {
|
|
371
|
+
function previewCreateConfigChange(targetName, workflowStatus, changed, source = 'mcpServers') {
|
|
311
372
|
const status = workflowStatus === 'template_conflict'
|
|
312
373
|
? 'template_conflict'
|
|
313
374
|
: workflowStatus === 'exists'
|
|
@@ -317,15 +378,17 @@ function previewCreateConfigChange(targetName, workflowStatus, changed) {
|
|
|
317
378
|
: 'failed';
|
|
318
379
|
return {
|
|
319
380
|
status,
|
|
320
|
-
operation: 'create_static',
|
|
381
|
+
operation: source === 'mcpTemplates' ? 'create_template' : 'create_static',
|
|
321
382
|
configPath: '[redacted]',
|
|
322
383
|
target: {
|
|
323
384
|
name: targetName,
|
|
324
|
-
...(
|
|
325
|
-
? { source
|
|
326
|
-
: workflowStatus === '
|
|
327
|
-
? { source: '
|
|
328
|
-
:
|
|
385
|
+
...(changed
|
|
386
|
+
? { source }
|
|
387
|
+
: workflowStatus === 'template_conflict'
|
|
388
|
+
? { source: 'mcpTemplates' }
|
|
389
|
+
: workflowStatus === 'exists'
|
|
390
|
+
? { source: 'mcpServers' }
|
|
391
|
+
: {}),
|
|
329
392
|
},
|
|
330
393
|
changed,
|
|
331
394
|
backup: { created: false },
|
|
@@ -340,6 +403,11 @@ function createDraftCandidateName(value) {
|
|
|
340
403
|
const name = value.name;
|
|
341
404
|
return typeof name === 'string' ? name : '';
|
|
342
405
|
}
|
|
406
|
+
function createDraftCandidateSource(value) {
|
|
407
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
408
|
+
return 'mcpServers';
|
|
409
|
+
return value.source === 'mcpTemplates' ? 'mcpTemplates' : 'mcpServers';
|
|
410
|
+
}
|
|
343
411
|
function sanitizeCreateConfirmationFacts(facts) {
|
|
344
412
|
if (!facts)
|
|
345
413
|
return undefined;
|
|
@@ -396,7 +464,7 @@ export class AdminConfiguredServerService {
|
|
|
396
464
|
const candidateName = createDraftCandidateName(input.draft);
|
|
397
465
|
const context = {
|
|
398
466
|
...input.context,
|
|
399
|
-
target: { type: 'configured_server', id: candidateName },
|
|
467
|
+
target: { type: 'configured_server', id: `${createDraftCandidateSource(input.draft)}/${candidateName}` },
|
|
400
468
|
confirmationFacts: sanitizeCreateConfirmationFacts(input.context.confirmationFacts),
|
|
401
469
|
};
|
|
402
470
|
return this.options.operationService.executeMutation({
|
|
@@ -415,7 +483,8 @@ export class AdminConfiguredServerService {
|
|
|
415
483
|
if (!prepared.config) {
|
|
416
484
|
throw new AdminConfiguredServerApplyError('configured_server_create_invalid');
|
|
417
485
|
}
|
|
418
|
-
if (prepared.
|
|
486
|
+
if (prepared.targetSource === 'mcpServers' &&
|
|
487
|
+
prepared.enabled &&
|
|
419
488
|
!wouldUseLocalStdioTransport(prepared.config) &&
|
|
420
489
|
preview.connectivityCheck.status !== 'passed' &&
|
|
421
490
|
!(preview.connectivityCheck.status === 'skipped' && preview.connectivityCheck.reason === 'checker_unavailable') &&
|
|
@@ -438,13 +507,21 @@ export class AdminConfiguredServerService {
|
|
|
438
507
|
run: async () => {
|
|
439
508
|
let configChange;
|
|
440
509
|
try {
|
|
441
|
-
configChange =
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
510
|
+
configChange =
|
|
511
|
+
prepared.targetSource === 'mcpTemplates'
|
|
512
|
+
? await this.options.configChangeService.createTemplateConfiguredServerTarget({
|
|
513
|
+
targetName: prepared.targetName,
|
|
514
|
+
serverConfig: prepared.config,
|
|
515
|
+
backup: 'skip',
|
|
516
|
+
expectedConfigFingerprint: configFingerprint,
|
|
517
|
+
})
|
|
518
|
+
: await this.options.configChangeService.createStaticConfiguredServerTarget({
|
|
519
|
+
targetName: prepared.targetName,
|
|
520
|
+
serverConfig: prepared.config,
|
|
521
|
+
operation: 'install',
|
|
522
|
+
backup: 'skip',
|
|
523
|
+
expectedConfigFingerprint: configFingerprint,
|
|
524
|
+
});
|
|
448
525
|
}
|
|
449
526
|
catch {
|
|
450
527
|
throw new AdminConfiguredServerApplyError('configured_server_create_failed');
|
|
@@ -452,8 +529,12 @@ export class AdminConfiguredServerService {
|
|
|
452
529
|
assertSuccessfulConfiguredServerCreate(configChange);
|
|
453
530
|
return {
|
|
454
531
|
targetName: prepared.targetName,
|
|
532
|
+
targetSource: prepared.targetSource,
|
|
455
533
|
previewFingerprint: preview.previewFingerprint,
|
|
456
534
|
configChange,
|
|
535
|
+
...(prepared.targetSource === 'mcpTemplates'
|
|
536
|
+
? { runtimeImpact: { activeInstanceCount: 0, createdInstance: false } }
|
|
537
|
+
: {}),
|
|
457
538
|
};
|
|
458
539
|
},
|
|
459
540
|
};
|
|
@@ -472,14 +553,14 @@ export class AdminConfiguredServerService {
|
|
|
472
553
|
const source = configuredState.source;
|
|
473
554
|
const context = {
|
|
474
555
|
...input.context,
|
|
475
|
-
target: { type: 'configured_server', id: `${source}
|
|
556
|
+
target: { type: 'configured_server', id: `${source}/${input.targetName}` },
|
|
476
557
|
};
|
|
477
558
|
return this.options.operationService.executeReadOnly({
|
|
478
559
|
context,
|
|
479
560
|
operationName: 'getConfiguredServerDetail',
|
|
480
561
|
run: async () => {
|
|
481
|
-
const { currentConfig, serverDefaults } = configuredState;
|
|
482
|
-
const server = createConfiguredServerReadModel(input.targetName, mergeGlobalAndServerConfig(serverDefaults, currentConfig), source, fingerprintConfiguredServerTarget(currentConfig), Object.hasOwn(currentConfig, 'instructionOverride') ? currentConfig.instructionOverride : undefined, Object.hasOwn(currentConfig, 'instructionOverride'));
|
|
562
|
+
const { currentConfig, serverDefaults, collision } = configuredState;
|
|
563
|
+
const server = createConfiguredServerReadModel(input.targetName, mergeGlobalAndServerConfig(serverDefaults, currentConfig), source, fingerprintConfiguredServerTarget(currentConfig), Object.hasOwn(currentConfig, 'instructionOverride') ? currentConfig.instructionOverride : undefined, Object.hasOwn(currentConfig, 'instructionOverride'), collision, source === 'mcpTemplates' ? (this.options.getTemplateActiveInstanceCount?.(input.targetName) ?? 0) : 0, this.options.mutationAvailability?.available ?? true);
|
|
483
564
|
return {
|
|
484
565
|
server,
|
|
485
566
|
editContract: createConfiguredServerEditContract(server, currentConfig, serverDefaults),
|
|
@@ -501,7 +582,7 @@ export class AdminConfiguredServerService {
|
|
|
501
582
|
const configuredState = this.readConfiguredServerState(input.targetName, input.targetSource);
|
|
502
583
|
const context = {
|
|
503
584
|
...input.context,
|
|
504
|
-
target: { type: 'configured_server', id: `${configuredState.source}
|
|
585
|
+
target: { type: 'configured_server', id: `${configuredState.source}/${input.targetName}` },
|
|
505
586
|
};
|
|
506
587
|
return this.options.operationService.executeReadOnly({
|
|
507
588
|
context,
|
|
@@ -533,7 +614,7 @@ export class AdminConfiguredServerService {
|
|
|
533
614
|
const source = configuredState.source;
|
|
534
615
|
const context = {
|
|
535
616
|
...input.context,
|
|
536
|
-
target: { type: 'configured_server', id: `${source}
|
|
617
|
+
target: { type: 'configured_server', id: `${source}/${input.targetName}` },
|
|
537
618
|
};
|
|
538
619
|
const { currentConfig, serverDefaults } = configuredState;
|
|
539
620
|
return this.options.operationService.executeDryRun({
|
|
@@ -546,7 +627,7 @@ export class AdminConfiguredServerService {
|
|
|
546
627
|
const source = this.resolveConfiguredServerSource(input.targetName, input.targetSource);
|
|
547
628
|
const context = {
|
|
548
629
|
...input.context,
|
|
549
|
-
target: { type: 'configured_server', id: `${source}
|
|
630
|
+
target: { type: 'configured_server', id: `${source}/${input.targetName}` },
|
|
550
631
|
confirmationFacts: sanitizeApplyConfirmationFacts(input.context.confirmationFacts),
|
|
551
632
|
};
|
|
552
633
|
return this.options.operationService.executeMutation({
|
|
@@ -571,7 +652,8 @@ export class AdminConfiguredServerService {
|
|
|
571
652
|
if (preview.previewFingerprint !== input.previewFingerprint) {
|
|
572
653
|
throw new AdminConfiguredServerApplyError('configured_server_stale_preview');
|
|
573
654
|
}
|
|
574
|
-
if (
|
|
655
|
+
if (source === 'mcpServers' &&
|
|
656
|
+
connectionCritical &&
|
|
575
657
|
!wouldUseLocalStdioTransport(proposedConfig) &&
|
|
576
658
|
proposedReadModel.enabled &&
|
|
577
659
|
preview.connectivityCheck.status !== 'passed' &&
|
|
@@ -595,6 +677,14 @@ export class AdminConfiguredServerService {
|
|
|
595
677
|
: []),
|
|
596
678
|
],
|
|
597
679
|
run: async () => {
|
|
680
|
+
const instanceIdentities = source === 'mcpTemplates'
|
|
681
|
+
? (this.options.getTemplateActiveInstanceIdentities?.(input.targetName) ?? [])
|
|
682
|
+
: [];
|
|
683
|
+
const activeInstancesBefore = instanceIdentities.length > 0
|
|
684
|
+
? instanceIdentities.length
|
|
685
|
+
: source === 'mcpTemplates'
|
|
686
|
+
? (this.options.getTemplateActiveInstanceCount?.(input.targetName) ?? 0)
|
|
687
|
+
: 0;
|
|
598
688
|
const configChange = await this.options.configChangeService.editConfiguredServerTarget({
|
|
599
689
|
sourceName: input.targetName,
|
|
600
690
|
targetSource: source,
|
|
@@ -604,11 +694,142 @@ export class AdminConfiguredServerService {
|
|
|
604
694
|
expectedGlobalConfigFingerprint: fingerprintConfiguredServerDefaults(serverDefaults),
|
|
605
695
|
});
|
|
606
696
|
assertSuccessfulConfiguredServerEdit(configChange);
|
|
697
|
+
const runtimeImpact = source === 'mcpTemplates'
|
|
698
|
+
? await this.observeTemplateRetirement(input.targetName, configChange, preview.runtimeImpact?.retirementRequired === true, activeInstancesBefore, instanceIdentities)
|
|
699
|
+
: undefined;
|
|
607
700
|
return {
|
|
608
701
|
originalTargetName: input.targetName,
|
|
609
702
|
targetName: preview.proposedTargetName,
|
|
610
703
|
previewFingerprint: preview.previewFingerprint,
|
|
611
704
|
configChange,
|
|
705
|
+
...(runtimeImpact ? { runtimeImpact } : {}),
|
|
706
|
+
};
|
|
707
|
+
},
|
|
708
|
+
};
|
|
709
|
+
},
|
|
710
|
+
});
|
|
711
|
+
}
|
|
712
|
+
async previewConfiguredServerDelete(input) {
|
|
713
|
+
const context = {
|
|
714
|
+
...input.context,
|
|
715
|
+
target: { type: 'configured_server', id: `${input.targetSource}/${input.targetName}` },
|
|
716
|
+
};
|
|
717
|
+
return this.options.operationService.executeDryRun({
|
|
718
|
+
context,
|
|
719
|
+
operationName: 'previewConfiguredServerDelete',
|
|
720
|
+
run: async () => this.previewConfiguredServerDeleteResult(input),
|
|
721
|
+
});
|
|
722
|
+
}
|
|
723
|
+
async deleteConfiguredServer(input) {
|
|
724
|
+
const qualifiedId = `${input.targetSource}/${input.targetName}`;
|
|
725
|
+
const context = {
|
|
726
|
+
...input.context,
|
|
727
|
+
target: { type: 'configured_server', id: qualifiedId },
|
|
728
|
+
confirmationFacts: sanitizeConfiguredServerIdentityConfirmationFacts(input.context.confirmationFacts),
|
|
729
|
+
};
|
|
730
|
+
return this.options.operationService.executeMutation({
|
|
731
|
+
context,
|
|
732
|
+
operationName: 'deleteConfiguredServer',
|
|
733
|
+
prepare: async () => {
|
|
734
|
+
let preview;
|
|
735
|
+
try {
|
|
736
|
+
preview = this.previewConfiguredServerDeleteResult(input);
|
|
737
|
+
}
|
|
738
|
+
catch (error) {
|
|
739
|
+
if (error instanceof AdminConfiguredServerNotFoundError) {
|
|
740
|
+
throw new AdminConfiguredServerApplyError('configured_server_already_removed');
|
|
741
|
+
}
|
|
742
|
+
throw error;
|
|
743
|
+
}
|
|
744
|
+
if (preview.previewFingerprint !== input.previewFingerprint) {
|
|
745
|
+
throw new AdminConfiguredServerApplyError('configured_server_stale_preview');
|
|
746
|
+
}
|
|
747
|
+
return {
|
|
748
|
+
confirmationRequirements: [
|
|
749
|
+
{ code: 'previewConfirmed', expected: input.previewFingerprint },
|
|
750
|
+
{ code: 'targetIdentityConfirmed', expected: qualifiedId },
|
|
751
|
+
],
|
|
752
|
+
run: async () => {
|
|
753
|
+
const instanceIdentities = input.targetSource === 'mcpTemplates'
|
|
754
|
+
? (this.options.getTemplateActiveInstanceIdentities?.(input.targetName) ?? [])
|
|
755
|
+
: [];
|
|
756
|
+
const activeInstancesBefore = instanceIdentities.length > 0
|
|
757
|
+
? instanceIdentities.length
|
|
758
|
+
: preview.runtimeImpact.kind === 'template'
|
|
759
|
+
? preview.runtimeImpact.activeInstanceCount
|
|
760
|
+
: 0;
|
|
761
|
+
const configChange = await this.options.configChangeService.deleteConfiguredServerTarget({
|
|
762
|
+
targetName: input.targetName,
|
|
763
|
+
targetSource: input.targetSource,
|
|
764
|
+
expectedTargetFingerprint: preview.targetFingerprint,
|
|
765
|
+
});
|
|
766
|
+
assertSuccessfulConfiguredServerDelete(configChange);
|
|
767
|
+
const runtimeImpact = input.targetSource === 'mcpTemplates'
|
|
768
|
+
? await this.observeTemplateRetirement(input.targetName, configChange, true, activeInstancesBefore, instanceIdentities)
|
|
769
|
+
: undefined;
|
|
770
|
+
return {
|
|
771
|
+
target: preview.target,
|
|
772
|
+
qualifiedId,
|
|
773
|
+
previewFingerprint: preview.previewFingerprint,
|
|
774
|
+
configChange: sanitizeConfiguredServerDeleteResult(configChange),
|
|
775
|
+
...(runtimeImpact ? { runtimeImpact } : {}),
|
|
776
|
+
};
|
|
777
|
+
},
|
|
778
|
+
};
|
|
779
|
+
},
|
|
780
|
+
});
|
|
781
|
+
}
|
|
782
|
+
async previewConfiguredServerLifecycle(input) {
|
|
783
|
+
const context = {
|
|
784
|
+
...input.context,
|
|
785
|
+
target: { type: 'configured_server', id: `${input.targetSource}/${input.targetName}` },
|
|
786
|
+
};
|
|
787
|
+
return this.options.operationService.executeDryRun({
|
|
788
|
+
context,
|
|
789
|
+
operationName: 'previewConfiguredServerLifecycle',
|
|
790
|
+
run: async () => this.previewConfiguredServerLifecycleResult(input),
|
|
791
|
+
});
|
|
792
|
+
}
|
|
793
|
+
async applyConfiguredServerLifecycle(input) {
|
|
794
|
+
const qualifiedId = `${input.targetSource}/${input.targetName}`;
|
|
795
|
+
const context = {
|
|
796
|
+
...input.context,
|
|
797
|
+
target: { type: 'configured_server', id: qualifiedId },
|
|
798
|
+
confirmationFacts: sanitizeConfiguredServerIdentityConfirmationFacts(input.context.confirmationFacts),
|
|
799
|
+
};
|
|
800
|
+
return this.options.operationService.executeMutation({
|
|
801
|
+
context,
|
|
802
|
+
operationName: 'applyConfiguredServerLifecycle',
|
|
803
|
+
prepare: async () => {
|
|
804
|
+
const preview = await this.previewConfiguredServerLifecycleResult(input);
|
|
805
|
+
if (preview.previewFingerprint !== input.previewFingerprint) {
|
|
806
|
+
throw new AdminConfiguredServerApplyError('configured_server_stale_preview');
|
|
807
|
+
}
|
|
808
|
+
return {
|
|
809
|
+
confirmationRequirements: [
|
|
810
|
+
{ code: 'previewConfirmed', expected: input.previewFingerprint },
|
|
811
|
+
{ code: 'targetIdentityConfirmed', expected: qualifiedId },
|
|
812
|
+
],
|
|
813
|
+
run: async () => {
|
|
814
|
+
const instanceIdentities = this.options.getTemplateActiveInstanceIdentities?.(input.targetName) ?? [];
|
|
815
|
+
const activeInstancesBefore = instanceIdentities.length || this.options.getTemplateActiveInstanceCount?.(input.targetName) || 0;
|
|
816
|
+
const configChange = await this.options.configChangeService.setConfiguredServerTargetEnabledState({
|
|
817
|
+
targetName: input.targetName,
|
|
818
|
+
targetSource: input.targetSource,
|
|
819
|
+
enabled: input.enabled,
|
|
820
|
+
backup: 'required',
|
|
821
|
+
expectedTargetFingerprint: preview.targetFingerprint,
|
|
822
|
+
});
|
|
823
|
+
assertSuccessfulConfiguredServerLifecycle(configChange);
|
|
824
|
+
const runtimeImpact = await this.observeTemplateRetirement(input.targetName, configChange, !input.enabled && configChange.changed, activeInstancesBefore, instanceIdentities);
|
|
825
|
+
return {
|
|
826
|
+
target: preview.target,
|
|
827
|
+
qualifiedId,
|
|
828
|
+
previewFingerprint: preview.previewFingerprint,
|
|
829
|
+
enabled: input.enabled,
|
|
830
|
+
outcome: mutationOutcome(input.enabled, configChange.changed),
|
|
831
|
+
configChange: sanitizeConfiguredServerLifecycleResult(configChange),
|
|
832
|
+
runtimeImpact,
|
|
612
833
|
};
|
|
613
834
|
},
|
|
614
835
|
};
|
|
@@ -629,7 +850,7 @@ export class AdminConfiguredServerService {
|
|
|
629
850
|
const source = input.targetSource ?? 'mcpServers';
|
|
630
851
|
const context = {
|
|
631
852
|
...input.context,
|
|
632
|
-
target: { type: 'configured_server', id: `${source}
|
|
853
|
+
target: { type: 'configured_server', id: `${source}/${input.targetName}` },
|
|
633
854
|
};
|
|
634
855
|
if (input.dryRun) {
|
|
635
856
|
return this.options.operationService.executeDryRun({
|
|
@@ -687,17 +908,166 @@ export class AdminConfiguredServerService {
|
|
|
687
908
|
}
|
|
688
909
|
return {
|
|
689
910
|
configFingerprint: fingerprintConfiguredServerConfigDocument(parsed),
|
|
690
|
-
servers: ['mcpServers', 'mcpTemplates'].flatMap((source) => Object.entries(parsed[source] ?? {}).map(([name, serverConfig]) => createConfiguredServerReadModel(name, mergeGlobalAndServerConfig(parsed.serverDefaults, serverConfig), source, fingerprintConfiguredServerTarget(serverConfig), Object.hasOwn(serverConfig, 'instructionOverride') ? serverConfig.instructionOverride : undefined, Object.hasOwn(serverConfig, 'instructionOverride')))),
|
|
911
|
+
servers: ['mcpServers', 'mcpTemplates'].flatMap((source) => Object.entries(parsed[source] ?? {}).map(([name, serverConfig]) => createConfiguredServerReadModel(name, mergeGlobalAndServerConfig(parsed.serverDefaults, serverConfig), source, fingerprintConfiguredServerTarget(serverConfig), Object.hasOwn(serverConfig, 'instructionOverride') ? serverConfig.instructionOverride : undefined, Object.hasOwn(serverConfig, 'instructionOverride'), Boolean((source === 'mcpTemplates' ? parsed.mcpServers : parsed.mcpTemplates)?.[name]), source === 'mcpTemplates' ? (this.options.getTemplateActiveInstanceCount?.(name) ?? 0) : 0, this.options.mutationAvailability?.available ?? true))),
|
|
691
912
|
};
|
|
692
913
|
}
|
|
693
|
-
|
|
694
|
-
const
|
|
914
|
+
previewConfiguredServerDeleteResult(input) {
|
|
915
|
+
const document = this.options.readConfigDocument();
|
|
916
|
+
const otherSource = input.targetSource === 'mcpServers' ? 'mcpTemplates' : 'mcpServers';
|
|
917
|
+
if (!document?.[input.targetSource]?.[input.targetName] && document?.[otherSource]?.[input.targetName]) {
|
|
918
|
+
throw new AdminConfiguredServerApplyError('configured_server_source_changed');
|
|
919
|
+
}
|
|
920
|
+
const { currentConfig, serverDefaults, collision } = this.readConfiguredServerState(input.targetName, input.targetSource, document);
|
|
921
|
+
const targetFingerprint = fingerprintConfiguredServerTarget(currentConfig);
|
|
922
|
+
const activeInstanceCount = input.targetSource === 'mcpTemplates'
|
|
923
|
+
? (this.options.getTemplateActiveInstanceCount?.(input.targetName) ?? 0)
|
|
924
|
+
: 0;
|
|
925
|
+
const definition = createConfiguredServerReadModel(input.targetName, mergeGlobalAndServerConfig(serverDefaults, currentConfig), input.targetSource, targetFingerprint, Object.hasOwn(currentConfig, 'instructionOverride') ? currentConfig.instructionOverride : undefined, Object.hasOwn(currentConfig, 'instructionOverride'), collision, activeInstanceCount, this.options.mutationAvailability?.available ?? true);
|
|
926
|
+
const qualifiedId = definition.definition?.qualifiedId ?? `${input.targetSource}/${input.targetName}`;
|
|
927
|
+
const authority = definition.definition?.authority ?? 'sole';
|
|
928
|
+
const runtimeImpact = input.targetSource === 'mcpTemplates'
|
|
929
|
+
? { kind: 'template', activeInstanceCount, retirement: 'reload_scheduled' }
|
|
930
|
+
: { kind: 'static', configuredBackendRemoval: 'after_reload' };
|
|
931
|
+
const warnings = [
|
|
932
|
+
'Deletion removes only this source-qualified definition and does not cascade to presets, filters, credentials, registry state, or individually selected live instances.',
|
|
933
|
+
...(collision
|
|
934
|
+
? [`The same name in ${input.targetSource === 'mcpServers' ? 'mcpTemplates' : 'mcpServers'} is preserved.`]
|
|
935
|
+
: []),
|
|
936
|
+
...(input.targetSource === 'mcpTemplates' && activeInstanceCount > 0
|
|
937
|
+
? [
|
|
938
|
+
`Reload schedules retirement of ${activeInstanceCount} active Template Server instance${activeInstanceCount === 1 ? '' : 's'}.`,
|
|
939
|
+
]
|
|
940
|
+
: []),
|
|
941
|
+
];
|
|
942
|
+
const previewFingerprint = `delete_preview_${createHash('sha256')
|
|
943
|
+
.update(stableStringify({
|
|
944
|
+
schemaVersion: 1,
|
|
945
|
+
qualifiedId,
|
|
946
|
+
targetFingerprint,
|
|
947
|
+
authority,
|
|
948
|
+
collision,
|
|
949
|
+
runtimeImpact,
|
|
950
|
+
warnings,
|
|
951
|
+
}))
|
|
952
|
+
.digest('hex')}`;
|
|
953
|
+
return {
|
|
954
|
+
target: definition.target,
|
|
955
|
+
qualifiedId,
|
|
956
|
+
targetFingerprint,
|
|
957
|
+
previewFingerprint,
|
|
958
|
+
authority,
|
|
959
|
+
removal: { definition, preservesSameNamedOtherSource: collision, cascades: false },
|
|
960
|
+
configChange: previewDeleteConfigChange(input.targetName, input.targetSource),
|
|
961
|
+
expectedBackup: { policy: 'required', recoveryCopy: true },
|
|
962
|
+
expectedReload: {
|
|
963
|
+
policy: 'observe_after_write',
|
|
964
|
+
possibleStatuses: ['observed', 'runtime_not_running', 'reload_disabled', 'failed'],
|
|
965
|
+
},
|
|
966
|
+
runtimeImpact,
|
|
967
|
+
warnings,
|
|
968
|
+
};
|
|
969
|
+
}
|
|
970
|
+
async previewConfiguredServerLifecycleResult(input) {
|
|
971
|
+
const document = this.options.readConfigDocument();
|
|
972
|
+
const currentConfig = document?.mcpTemplates?.[input.targetName];
|
|
973
|
+
if (!currentConfig) {
|
|
974
|
+
if (document?.mcpServers?.[input.targetName]) {
|
|
975
|
+
throw new AdminConfiguredServerApplyError('configured_server_source_changed');
|
|
976
|
+
}
|
|
977
|
+
throw new AdminConfiguredServerNotFoundError(input.targetName);
|
|
978
|
+
}
|
|
979
|
+
const targetFingerprint = fingerprintConfiguredServerTarget(currentConfig);
|
|
980
|
+
const qualifiedId = `mcpTemplates/${input.targetName}`;
|
|
981
|
+
const disabled = currentConfig.disabled;
|
|
982
|
+
const currentEnabled = !isConfiguredServerTargetDisabled(disabled);
|
|
983
|
+
const disabledValueKind = disabled === undefined
|
|
984
|
+
? 'absent'
|
|
985
|
+
: typeof disabled === 'string' && disabled.includes('{{')
|
|
986
|
+
? 'context_expression'
|
|
987
|
+
: 'literal';
|
|
988
|
+
const expressionReplacement = {
|
|
989
|
+
occurs: disabledValueKind === 'context_expression' && !input.enabled,
|
|
990
|
+
replacement: input.enabled ? 'enabled_absent' : 'disabled_true',
|
|
991
|
+
};
|
|
992
|
+
const activeInstanceCount = this.options.getTemplateActiveInstanceCount?.(input.targetName) ?? 0;
|
|
993
|
+
const configChange = await this.options.configChangeService.previewConfiguredServerTargetEnabledState({
|
|
994
|
+
targetName: input.targetName,
|
|
995
|
+
targetSource: input.targetSource,
|
|
996
|
+
enabled: input.enabled,
|
|
997
|
+
backup: 'skip',
|
|
998
|
+
});
|
|
999
|
+
if (configChange.status === 'not_found' || configChange.status === 'source_conflict') {
|
|
1000
|
+
throw new AdminConfiguredServerApplyError('configured_server_stale_preview');
|
|
1001
|
+
}
|
|
1002
|
+
if (configChange.status === 'failed') {
|
|
1003
|
+
throw new AdminConfiguredServerApplyError('configured_server_apply_failed');
|
|
1004
|
+
}
|
|
1005
|
+
const warnings = [
|
|
1006
|
+
...(expressionReplacement.occurs
|
|
1007
|
+
? [
|
|
1008
|
+
'The context-rendered disabled expression will be replaced with literal true without evaluating Request Context.',
|
|
1009
|
+
]
|
|
1010
|
+
: []),
|
|
1011
|
+
...(input.enabled
|
|
1012
|
+
? [
|
|
1013
|
+
'Re-enable restores eligibility only; instances and Request Sessions are created lazily by future matching requests.',
|
|
1014
|
+
]
|
|
1015
|
+
: activeInstanceCount > 0
|
|
1016
|
+
? [
|
|
1017
|
+
`Successful reload retires ${activeInstanceCount} active Template Server instance${activeInstanceCount === 1 ? '' : 's'} and removes their Request Session memberships.`,
|
|
1018
|
+
]
|
|
1019
|
+
: []),
|
|
1020
|
+
];
|
|
1021
|
+
const runtimeImpact = {
|
|
1022
|
+
activeInstanceCount,
|
|
1023
|
+
retirement: !input.enabled && configChange.changed ? 'after_successful_reload' : 'not_required',
|
|
1024
|
+
recreation: 'lazy_future_match_only',
|
|
1025
|
+
};
|
|
1026
|
+
const previewFingerprint = `lifecycle_preview_${createHash('sha256')
|
|
1027
|
+
.update(stableStringify({
|
|
1028
|
+
schemaVersion: 1,
|
|
1029
|
+
qualifiedId,
|
|
1030
|
+
targetFingerprint,
|
|
1031
|
+
currentEnabled,
|
|
1032
|
+
proposedEnabled: input.enabled,
|
|
1033
|
+
disabledValueKind,
|
|
1034
|
+
expressionReplacement,
|
|
1035
|
+
changed: configChange.changed,
|
|
1036
|
+
runtimeImpact,
|
|
1037
|
+
warnings,
|
|
1038
|
+
}))
|
|
1039
|
+
.digest('hex')}`;
|
|
1040
|
+
return {
|
|
1041
|
+
target: { type: 'configured_server', id: input.targetName, source: input.targetSource },
|
|
1042
|
+
qualifiedId,
|
|
1043
|
+
targetFingerprint,
|
|
1044
|
+
previewFingerprint,
|
|
1045
|
+
current: { enabled: currentEnabled, disabledValueKind },
|
|
1046
|
+
proposed: { enabled: input.enabled, disabledValueKind: input.enabled ? 'absent' : 'literal' },
|
|
1047
|
+
expressionReplacement,
|
|
1048
|
+
configChange: sanitizeConfiguredServerLifecycleResult(configChange),
|
|
1049
|
+
expectedBackup: { policy: 'required', recoveryCopy: true },
|
|
1050
|
+
expectedReload: {
|
|
1051
|
+
policy: 'observe_after_write',
|
|
1052
|
+
possibleStatuses: ['observed', 'runtime_not_running', 'reload_disabled', 'failed'],
|
|
1053
|
+
},
|
|
1054
|
+
runtimeImpact,
|
|
1055
|
+
warnings,
|
|
1056
|
+
};
|
|
1057
|
+
}
|
|
1058
|
+
readConfiguredServerState(targetName, targetSource, document = this.options.readConfigDocument()) {
|
|
1059
|
+
const parsed = document;
|
|
695
1060
|
const source = this.resolveConfiguredServerSource(targetName, targetSource, parsed);
|
|
696
1061
|
const currentConfig = parsed?.[source]?.[targetName];
|
|
697
1062
|
if (!currentConfig) {
|
|
698
1063
|
throw new AdminConfiguredServerNotFoundError(targetName);
|
|
699
1064
|
}
|
|
700
|
-
return {
|
|
1065
|
+
return {
|
|
1066
|
+
currentConfig,
|
|
1067
|
+
serverDefaults: parsed?.serverDefaults,
|
|
1068
|
+
source,
|
|
1069
|
+
collision: Boolean((source === 'mcpTemplates' ? parsed?.mcpServers : parsed?.mcpTemplates)?.[targetName]),
|
|
1070
|
+
};
|
|
701
1071
|
}
|
|
702
1072
|
resolveConfiguredServerSource(targetName, targetSource, document = this.options.readConfigDocument()) {
|
|
703
1073
|
if (targetSource)
|
|
@@ -715,6 +1085,9 @@ export class AdminConfiguredServerService {
|
|
|
715
1085
|
async previewConfiguredServerEditResult(input, currentConfig, serverDefaults, requireCriticalConnectivity = false, source = 'mcpServers') {
|
|
716
1086
|
const normalizedEdit = normalizeEditDraft(input.edit);
|
|
717
1087
|
const sourceValidation = validateEditForSource(source, normalizedEdit.edit);
|
|
1088
|
+
const rawTemplateHeaderValidation = source === 'mcpTemplates'
|
|
1089
|
+
? validateRawTemplateHeaderEdit(input.edit)
|
|
1090
|
+
: { status: 'valid', errors: [] };
|
|
718
1091
|
const currentReadModel = createConfiguredServerReadModel(input.targetName, mergeGlobalAndServerConfig(serverDefaults, currentConfig), source);
|
|
719
1092
|
const secretValidation = validateSecretEditCapabilities(normalizedEdit.edit, currentReadModel.secretInputs);
|
|
720
1093
|
const transportApplicabilityValidation = validateTransportFieldApplicability(currentConfig, normalizedEdit.edit);
|
|
@@ -724,7 +1097,10 @@ export class AdminConfiguredServerService {
|
|
|
724
1097
|
const proposedConfig = applyEditDraft(currentConfig, applicableEdit, serverDefaults, input.targetName);
|
|
725
1098
|
const proposedReadModel = createConfiguredServerReadModel(proposedTargetName, mergeGlobalAndServerConfig(serverDefaults, proposedConfig), source);
|
|
726
1099
|
const proposedTransportType = configuredTransportType(proposedConfig);
|
|
727
|
-
const serverValidation = validatePreviewServerConfig(proposedConfig);
|
|
1100
|
+
const serverValidation = validatePreviewServerConfig(proposedConfig, source);
|
|
1101
|
+
const templateValidation = source === 'mcpTemplates'
|
|
1102
|
+
? templateDefinitionValidation(proposedConfig)
|
|
1103
|
+
: { status: 'valid', errors: [] };
|
|
728
1104
|
const currentToolInventory = this.options.readToolInventory
|
|
729
1105
|
? await this.options.readToolInventory({
|
|
730
1106
|
targetName: input.targetName,
|
|
@@ -734,7 +1110,7 @@ export class AdminConfiguredServerService {
|
|
|
734
1110
|
})
|
|
735
1111
|
: undefined;
|
|
736
1112
|
const toolEditValidation = validateConfiguredToolEdit(applicableEdit, currentToolInventory);
|
|
737
|
-
const validation = mergeValidation(mergeValidation(mergeValidation(mergeValidation(normalizedEdit.validation, secretValidation), transportApplicabilityValidation), overrideValidation), mergeValidation(mergeValidation(serverValidation, sourceValidation), toolEditValidation));
|
|
1113
|
+
const validation = mergeValidation(mergeValidation(mergeValidation(mergeValidation(normalizedEdit.validation, secretValidation), transportApplicabilityValidation), overrideValidation), mergeValidation(mergeValidation(mergeValidation(mergeValidation(serverValidation, sourceValidation), toolEditValidation), rawTemplateHeaderValidation), templateValidation));
|
|
738
1114
|
const diff = createPreviewDiff(currentReadModel, proposedReadModel, applicableEdit);
|
|
739
1115
|
pushDiff(diff, ['disabledTools'], currentConfig.disabledTools ?? [], proposedConfig.disabledTools ?? [], [
|
|
740
1116
|
'tool_visibility',
|
|
@@ -742,6 +1118,9 @@ export class AdminConfiguredServerService {
|
|
|
742
1118
|
pushDiff(diff, ['toolDescriptionOverrides'], currentConfig.toolDescriptionOverrides ?? {}, proposedConfig.toolDescriptionOverrides ?? {}, ['tool_metadata']);
|
|
743
1119
|
appendClearedOverrideDiff(diff, currentReadModel, proposedReadModel, applicableEdit);
|
|
744
1120
|
const changed = validation.status === 'valid' && diff.length > 0;
|
|
1121
|
+
const retirementRequired = source === 'mcpTemplates' &&
|
|
1122
|
+
(proposedTargetName !== input.targetName ||
|
|
1123
|
+
templateRuntimeHash(currentConfig) !== templateRuntimeHash(proposedConfig));
|
|
745
1124
|
const endpointChangedWithPreservedSecrets = endpointAuthorityChanged(currentConfig, proposedConfig) &&
|
|
746
1125
|
hasPreservedSecretInputs(currentReadModel.secretInputs.filter((input) => !proposedTransportType || transportFieldAppliesToType(input.fieldPath[0], proposedTransportType)), applicableEdit);
|
|
747
1126
|
const proposedToolInventory = this.options.readToolInventory
|
|
@@ -773,17 +1152,32 @@ export class AdminConfiguredServerService {
|
|
|
773
1152
|
validation,
|
|
774
1153
|
diff,
|
|
775
1154
|
configChange: previewConfigChange(input.targetName, changed, source),
|
|
776
|
-
connectivityCheck:
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
1155
|
+
connectivityCheck: source === 'mcpTemplates'
|
|
1156
|
+
? { status: 'skipped', reason: 'template_structural_preview' }
|
|
1157
|
+
: await this.previewConnectivityCheck({
|
|
1158
|
+
targetName: proposedTargetName,
|
|
1159
|
+
serverConfig: proposedConfig,
|
|
1160
|
+
enabled: proposedReadModel.enabled,
|
|
1161
|
+
validationStatus: validation.status,
|
|
1162
|
+
connectionCriticalChanged: diff.some((entry) => entry.riskFlags.includes('connection_critical')),
|
|
1163
|
+
force: input.connectivityCheck === 'manual' ||
|
|
1164
|
+
(requireCriticalConnectivity && diff.some((entry) => entry.riskFlags.includes('connection_critical'))),
|
|
1165
|
+
endpointChangedWithPreservedSecrets,
|
|
1166
|
+
}),
|
|
786
1167
|
...(toolSelection ? { toolSelection } : {}),
|
|
1168
|
+
...(source === 'mcpTemplates'
|
|
1169
|
+
? {
|
|
1170
|
+
templateAnalysis: analyzeTemplateServerDefinition(proposedConfig),
|
|
1171
|
+
runtimeImpact: {
|
|
1172
|
+
activeInstanceCount: this.options.getTemplateActiveInstanceCount?.(input.targetName) ?? 0,
|
|
1173
|
+
retirementRequired: changed && retirementRequired,
|
|
1174
|
+
createsInstance: false,
|
|
1175
|
+
},
|
|
1176
|
+
}
|
|
1177
|
+
: {}),
|
|
1178
|
+
warnings: source === 'mcpTemplates'
|
|
1179
|
+
? ['Structural preview only: Request Context values are not rendered and no backend is contacted.']
|
|
1180
|
+
: [],
|
|
787
1181
|
};
|
|
788
1182
|
}
|
|
789
1183
|
async previewConnectivityCheck(input) {
|
|
@@ -810,6 +1204,42 @@ export class AdminConfiguredServerService {
|
|
|
810
1204
|
serverConfig: input.serverConfig,
|
|
811
1205
|
});
|
|
812
1206
|
}
|
|
1207
|
+
async observeTemplateRetirement(templateName, configChange, retirementRequired, activeInstancesBefore, instanceIdentities) {
|
|
1208
|
+
if (!retirementRequired) {
|
|
1209
|
+
return {
|
|
1210
|
+
activeInstancesBefore,
|
|
1211
|
+
retiredInstances: 0,
|
|
1212
|
+
activeInstancesAfter: activeInstancesBefore,
|
|
1213
|
+
retirementObserved: true,
|
|
1214
|
+
};
|
|
1215
|
+
}
|
|
1216
|
+
if (configChange.reload.status === 'failed' || !this.options.observeTemplateDefinitionRetirement) {
|
|
1217
|
+
const activeInstancesAfter = this.options.getTemplateActiveInstanceCount?.(templateName) ?? activeInstancesBefore;
|
|
1218
|
+
return {
|
|
1219
|
+
activeInstancesBefore,
|
|
1220
|
+
retiredInstances: Math.max(0, activeInstancesBefore - activeInstancesAfter),
|
|
1221
|
+
activeInstancesAfter,
|
|
1222
|
+
retirementObserved: activeInstancesAfter === 0,
|
|
1223
|
+
};
|
|
1224
|
+
}
|
|
1225
|
+
try {
|
|
1226
|
+
const observed = await this.options.observeTemplateDefinitionRetirement(templateName, instanceIdentities);
|
|
1227
|
+
return {
|
|
1228
|
+
...observed,
|
|
1229
|
+
activeInstancesBefore,
|
|
1230
|
+
retiredInstances: Math.max(0, activeInstancesBefore - observed.activeInstancesAfter),
|
|
1231
|
+
};
|
|
1232
|
+
}
|
|
1233
|
+
catch {
|
|
1234
|
+
return {
|
|
1235
|
+
activeInstancesBefore,
|
|
1236
|
+
retiredInstances: 0,
|
|
1237
|
+
activeInstancesAfter: this.options.getTemplateActiveInstanceCount?.(templateName) ?? activeInstancesBefore,
|
|
1238
|
+
retirementObserved: false,
|
|
1239
|
+
error: 'Template instance retirement could not be confirmed.',
|
|
1240
|
+
};
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
813
1243
|
async previewConfiguredServerCreateResult(input, forceConnectivity = false, document = this.options.readConfigDocument() ?? {}) {
|
|
814
1244
|
const prepared = await this.resolveConfiguredServerCreate(input.draft, document);
|
|
815
1245
|
const proposedReadModel = prepared.config
|
|
@@ -818,17 +1248,19 @@ export class AdminConfiguredServerService {
|
|
|
818
1248
|
const validation = prepared.validation;
|
|
819
1249
|
const diff = proposedReadModel ? createConfiguredServerCreateDiff(proposedReadModel, prepared.draft) : [];
|
|
820
1250
|
const changed = validation.status === 'valid' && prepared.workflow.status === 'preview';
|
|
821
|
-
const connectivityCheck = prepared.
|
|
822
|
-
?
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
1251
|
+
const connectivityCheck = prepared.targetSource === 'mcpTemplates'
|
|
1252
|
+
? { status: 'skipped', reason: 'template_structural_preview' }
|
|
1253
|
+
: prepared.config
|
|
1254
|
+
? await this.previewConnectivityCheck({
|
|
1255
|
+
targetName: prepared.targetName,
|
|
1256
|
+
serverConfig: prepared.config,
|
|
1257
|
+
enabled: prepared.enabled,
|
|
1258
|
+
validationStatus: validation.status,
|
|
1259
|
+
connectionCriticalChanged: true,
|
|
1260
|
+
force: forceConnectivity || input.connectivityCheck === 'manual',
|
|
1261
|
+
endpointChangedWithPreservedSecrets: false,
|
|
1262
|
+
})
|
|
1263
|
+
: { status: 'skipped', reason: 'validation_failed' };
|
|
832
1264
|
const preview = {
|
|
833
1265
|
targetName: prepared.targetName,
|
|
834
1266
|
previewFingerprint: configuredServerCreatePreviewFingerprint({
|
|
@@ -841,12 +1273,25 @@ export class AdminConfiguredServerService {
|
|
|
841
1273
|
}),
|
|
842
1274
|
validation,
|
|
843
1275
|
diff,
|
|
844
|
-
configChange: previewCreateConfigChange(prepared.targetName, prepared.workflow.status, changed),
|
|
1276
|
+
configChange: previewCreateConfigChange(prepared.targetName, prepared.workflow.status, changed, prepared.targetSource),
|
|
845
1277
|
connectivityCheck,
|
|
846
1278
|
expectedReload: {
|
|
847
1279
|
policy: 'observe_after_write',
|
|
848
1280
|
possibleStatuses: ['observed', 'runtime_not_running', 'reload_disabled', 'failed'],
|
|
849
1281
|
},
|
|
1282
|
+
...(prepared.targetSource === 'mcpTemplates' && prepared.config
|
|
1283
|
+
? {
|
|
1284
|
+
templateAnalysis: analyzeTemplateServerDefinition(prepared.config),
|
|
1285
|
+
runtimeImpact: {
|
|
1286
|
+
activeInstanceCount: 0,
|
|
1287
|
+
retirementRequired: false,
|
|
1288
|
+
createsInstance: false,
|
|
1289
|
+
},
|
|
1290
|
+
}
|
|
1291
|
+
: {}),
|
|
1292
|
+
warnings: prepared.targetSource === 'mcpTemplates'
|
|
1293
|
+
? ['Creating a Template Server definition does not create a runtime instance.']
|
|
1294
|
+
: [],
|
|
850
1295
|
};
|
|
851
1296
|
return preview;
|
|
852
1297
|
}
|
|
@@ -862,8 +1307,11 @@ export class AdminConfiguredServerService {
|
|
|
862
1307
|
},
|
|
863
1308
|
});
|
|
864
1309
|
const workflowResult = await workflow.run({ mode: 'preview', source: normalized.source });
|
|
865
|
-
const config = workflowResult.config;
|
|
866
|
-
const
|
|
1310
|
+
const config = normalized.targetSource === 'mcpTemplates' ? createTemplateServerConfig(normalized.draft) : workflowResult.config;
|
|
1311
|
+
const templateValidation = normalized.targetSource === 'mcpTemplates' && config
|
|
1312
|
+
? templateDefinitionValidation(config)
|
|
1313
|
+
: { status: 'valid', errors: [] };
|
|
1314
|
+
const validation = mergeValidation(mergeValidation(mergeValidation(normalized.validation, validateConfiguredServerCreateSecrets(normalized.draft)), createWorkflowValidation(workflowResult, config, normalized.targetSource)), templateValidation);
|
|
867
1315
|
return {
|
|
868
1316
|
draft: normalized.draft,
|
|
869
1317
|
source: normalized.source,
|
|
@@ -872,20 +1320,71 @@ export class AdminConfiguredServerService {
|
|
|
872
1320
|
workflow: workflowResult,
|
|
873
1321
|
config,
|
|
874
1322
|
validation,
|
|
1323
|
+
targetSource: normalized.targetSource,
|
|
875
1324
|
};
|
|
876
1325
|
}
|
|
877
1326
|
}
|
|
1327
|
+
function createTemplateServerConfig(draft) {
|
|
1328
|
+
if (!draft.transport)
|
|
1329
|
+
return undefined;
|
|
1330
|
+
const config = cloneUnknown(draft.transport);
|
|
1331
|
+
if (draft.tags?.length)
|
|
1332
|
+
config.tags = [...draft.tags];
|
|
1333
|
+
const secretContainer = config.type === 'stdio' ? 'env' : 'headers';
|
|
1334
|
+
const secrets = configuredServerCreateSecretValues(draft, secretContainer);
|
|
1335
|
+
if (Object.keys(secrets).length > 0) {
|
|
1336
|
+
const current = config[secretContainer];
|
|
1337
|
+
const currentRecord = current && !Array.isArray(current) ? current : {};
|
|
1338
|
+
config[secretContainer] = { ...currentRecord, ...secrets };
|
|
1339
|
+
}
|
|
1340
|
+
return config;
|
|
1341
|
+
}
|
|
1342
|
+
function templateDefinitionValidation(config) {
|
|
1343
|
+
const analysis = analyzeTemplateServerDefinition(config);
|
|
1344
|
+
const headerErrors = Object.entries(config.headers ?? {}).flatMap(([name, value]) => typeof value === 'string' && value.includes('{{')
|
|
1345
|
+
? [
|
|
1346
|
+
{
|
|
1347
|
+
fieldPath: ['transport', 'headers', name],
|
|
1348
|
+
code: 'template_header_not_rendered',
|
|
1349
|
+
message: 'Template expressions are not supported in headers because the runtime does not render them.',
|
|
1350
|
+
},
|
|
1351
|
+
]
|
|
1352
|
+
: []);
|
|
1353
|
+
const errors = [...analysis.syntax.errors, ...headerErrors];
|
|
1354
|
+
return {
|
|
1355
|
+
status: errors.length === 0 ? 'valid' : 'invalid',
|
|
1356
|
+
errors,
|
|
1357
|
+
};
|
|
1358
|
+
}
|
|
1359
|
+
function validateRawTemplateHeaderEdit(value) {
|
|
1360
|
+
const record = value && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
1361
|
+
const transport = record.transport && typeof record.transport === 'object' && !Array.isArray(record.transport)
|
|
1362
|
+
? record.transport
|
|
1363
|
+
: {};
|
|
1364
|
+
const headers = transport.headers && typeof transport.headers === 'object' && !Array.isArray(transport.headers)
|
|
1365
|
+
? transport.headers
|
|
1366
|
+
: {};
|
|
1367
|
+
const errors = Object.entries(headers).flatMap(([name, entry]) => typeof entry === 'string' && entry.includes('{{')
|
|
1368
|
+
? [
|
|
1369
|
+
{
|
|
1370
|
+
fieldPath: ['transport', 'headers', name],
|
|
1371
|
+
code: 'template_header_not_rendered',
|
|
1372
|
+
message: 'Template expressions are not supported in headers because the runtime does not render them.',
|
|
1373
|
+
},
|
|
1374
|
+
]
|
|
1375
|
+
: []);
|
|
1376
|
+
return { status: errors.length === 0 ? 'valid' : 'invalid', errors };
|
|
1377
|
+
}
|
|
878
1378
|
function validateEditForSource(source, edit) {
|
|
879
1379
|
if (source !== 'mcpTemplates')
|
|
880
1380
|
return { status: 'valid', errors: [] };
|
|
881
|
-
const
|
|
882
|
-
const unsupported = Object.keys(edit).filter((key) => !supportedTemplateMetadata.has(key));
|
|
1381
|
+
const unsupported = Object.keys(edit).filter((key) => key === 'enabled');
|
|
883
1382
|
return {
|
|
884
1383
|
status: unsupported.length === 0 ? 'valid' : 'invalid',
|
|
885
1384
|
errors: unsupported.map((key) => ({
|
|
886
1385
|
fieldPath: [key],
|
|
887
1386
|
code: 'template_edit_field_unsupported',
|
|
888
|
-
message: 'Template Server
|
|
1387
|
+
message: 'Template Server definitions do not support enable or disable operations.',
|
|
889
1388
|
})),
|
|
890
1389
|
};
|
|
891
1390
|
}
|
|
@@ -928,6 +1427,57 @@ function assertSuccessfulConfiguredServerEdit(configChange) {
|
|
|
928
1427
|
throw new AdminConfiguredServerApplyError('configured_server_apply_failed');
|
|
929
1428
|
}
|
|
930
1429
|
}
|
|
1430
|
+
function assertSuccessfulConfiguredServerDelete(configChange) {
|
|
1431
|
+
switch (configChange.status) {
|
|
1432
|
+
case 'changed':
|
|
1433
|
+
return;
|
|
1434
|
+
case 'source_conflict':
|
|
1435
|
+
throw new AdminConfiguredServerApplyError('configured_server_stale_preview');
|
|
1436
|
+
case 'not_found':
|
|
1437
|
+
throw new AdminConfiguredServerApplyError('configured_server_already_removed');
|
|
1438
|
+
default:
|
|
1439
|
+
throw new AdminConfiguredServerApplyError('configured_server_delete_failed');
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1442
|
+
function assertSuccessfulConfiguredServerLifecycle(configChange) {
|
|
1443
|
+
switch (configChange.status) {
|
|
1444
|
+
case 'changed':
|
|
1445
|
+
case 'unchanged':
|
|
1446
|
+
return;
|
|
1447
|
+
case 'source_conflict':
|
|
1448
|
+
case 'not_found':
|
|
1449
|
+
throw new AdminConfiguredServerApplyError('configured_server_stale_preview');
|
|
1450
|
+
default:
|
|
1451
|
+
throw new AdminConfiguredServerApplyError('configured_server_apply_failed');
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
function sanitizeConfiguredServerDeleteResult(configChange) {
|
|
1455
|
+
return sanitizeConfiguredServerMutationResult(configChange, 'Runtime reload failed after the configuration was deleted.');
|
|
1456
|
+
}
|
|
1457
|
+
function sanitizeConfiguredServerLifecycleResult(configChange) {
|
|
1458
|
+
return sanitizeConfiguredServerMutationResult(configChange, 'Runtime reload failed after the lifecycle configuration was persisted.');
|
|
1459
|
+
}
|
|
1460
|
+
function sanitizeConfiguredServerMutationResult(configChange, reloadFailureMessage) {
|
|
1461
|
+
return {
|
|
1462
|
+
...configChange,
|
|
1463
|
+
configPath: '[redacted]',
|
|
1464
|
+
backup: configChange.backup.created ? { created: true, path: '[redacted]' } : { created: false },
|
|
1465
|
+
retentionCleanup: {
|
|
1466
|
+
attempted: configChange.retentionCleanup.attempted,
|
|
1467
|
+
deletedPaths: configChange.retentionCleanup.deletedPaths.map(() => '[redacted]'),
|
|
1468
|
+
warnings: configChange.retentionCleanup.warnings.map(() => 'A recovery backup retention cleanup failed.'),
|
|
1469
|
+
},
|
|
1470
|
+
reload: configChange.reload.status === 'failed' ? { status: 'failed', error: reloadFailureMessage } : configChange.reload,
|
|
1471
|
+
warnings: configChange.warnings.map(() => 'A recovery backup retention cleanup failed.'),
|
|
1472
|
+
};
|
|
1473
|
+
}
|
|
1474
|
+
function sanitizeConfiguredServerIdentityConfirmationFacts(facts) {
|
|
1475
|
+
if (!facts)
|
|
1476
|
+
return undefined;
|
|
1477
|
+
const allowed = ['previewConfirmed', 'targetIdentityConfirmed'];
|
|
1478
|
+
const sanitized = Object.fromEntries(allowed.filter((key) => key in facts).map((key) => [key, facts[key]]));
|
|
1479
|
+
return Object.keys(sanitized).length > 0 ? sanitized : undefined;
|
|
1480
|
+
}
|
|
931
1481
|
function sanitizeApplyConfirmationFacts(facts) {
|
|
932
1482
|
if (!facts)
|
|
933
1483
|
return undefined;
|
|
@@ -1149,9 +1699,13 @@ function isSecretCapableRawTransportEdit(key, value) {
|
|
|
1149
1699
|
if (key === 'url') {
|
|
1150
1700
|
return isSecretCapableUrlEdit(value);
|
|
1151
1701
|
}
|
|
1152
|
-
if (key === 'headers'
|
|
1702
|
+
if (key === 'headers') {
|
|
1153
1703
|
return true;
|
|
1154
1704
|
}
|
|
1705
|
+
if (key === 'env' && value && typeof value === 'object' && !Array.isArray(value)) {
|
|
1706
|
+
return Object.entries(value).some(([name, entry]) => !(typeof entry === 'string' && isSafeTemplateExpressionValue(entry)) &&
|
|
1707
|
+
(isSecretLikeKey(name) || containsSecretLikeField(entry)));
|
|
1708
|
+
}
|
|
1155
1709
|
if (key === 'oauth' && value && typeof value === 'object' && !Array.isArray(value)) {
|
|
1156
1710
|
return containsStringOrSecretLikeField(value);
|
|
1157
1711
|
}
|
|
@@ -1774,7 +2328,7 @@ function deleteNestedValue(target, fieldPath) {
|
|
|
1774
2328
|
}
|
|
1775
2329
|
delete cursor[fieldPath[fieldPath.length - 1]];
|
|
1776
2330
|
}
|
|
1777
|
-
function validatePreviewServerConfig(serverConfig) {
|
|
2331
|
+
function validatePreviewServerConfig(serverConfig, source = 'mcpServers') {
|
|
1778
2332
|
const errors = [];
|
|
1779
2333
|
const type = typeof serverConfig.type === 'string' ? serverConfig.type : undefined;
|
|
1780
2334
|
const url = typeof serverConfig.url === 'string' ? serverConfig.url : undefined;
|
|
@@ -1815,7 +2369,7 @@ function validatePreviewServerConfig(serverConfig) {
|
|
|
1815
2369
|
message: 'Transport type must be stdio, http, sse, or streamableHttp.',
|
|
1816
2370
|
});
|
|
1817
2371
|
}
|
|
1818
|
-
if (url !== undefined && !isValidUrlOrEnvReference(url)) {
|
|
2372
|
+
if (url !== undefined && !isValidUrlOrEnvReference(url, source === 'mcpTemplates')) {
|
|
1819
2373
|
errors.push({
|
|
1820
2374
|
fieldPath: ['transport', 'url'],
|
|
1821
2375
|
code: 'invalid_url',
|
|
@@ -1849,7 +2403,9 @@ function mergeValidation(editValidation, serverValidation) {
|
|
|
1849
2403
|
errors,
|
|
1850
2404
|
};
|
|
1851
2405
|
}
|
|
1852
|
-
function isValidUrlOrEnvReference(value) {
|
|
2406
|
+
function isValidUrlOrEnvReference(value, allowHandlebars = false) {
|
|
2407
|
+
if (value.includes('{{'))
|
|
2408
|
+
return allowHandlebars && /\{\{[^}]+\}\}/u.test(value);
|
|
1853
2409
|
if (/\$\{[^}]+\}|\$[A-Za-z_][A-Za-z0-9_]*/u.test(value)) {
|
|
1854
2410
|
return true;
|
|
1855
2411
|
}
|
|
@@ -1874,6 +2430,19 @@ function previewConfigChange(targetName, changed, source = 'mcpServers') {
|
|
|
1874
2430
|
warnings: [],
|
|
1875
2431
|
};
|
|
1876
2432
|
}
|
|
2433
|
+
function previewDeleteConfigChange(targetName, source) {
|
|
2434
|
+
return {
|
|
2435
|
+
status: 'changed',
|
|
2436
|
+
operation: 'remove',
|
|
2437
|
+
configPath: '[redacted]',
|
|
2438
|
+
target: { name: targetName, source },
|
|
2439
|
+
changed: true,
|
|
2440
|
+
backup: { created: false },
|
|
2441
|
+
retentionCleanup: { attempted: false, deletedPaths: [], warnings: [] },
|
|
2442
|
+
reload: { status: 'skipped' },
|
|
2443
|
+
warnings: [],
|
|
2444
|
+
};
|
|
2445
|
+
}
|
|
1877
2446
|
function previewFingerprint(input) {
|
|
1878
2447
|
return `preview_${createHash('sha256')
|
|
1879
2448
|
.update(stableStringify({
|
|
@@ -2086,9 +2655,11 @@ function stableStringify(value) {
|
|
|
2086
2655
|
}
|
|
2087
2656
|
return JSON.stringify(value);
|
|
2088
2657
|
}
|
|
2089
|
-
function createConfiguredServerReadModel(name, serverConfig, source = 'mcpServers', revision = fingerprintConfiguredServerTarget(serverConfig), instructionOverride = serverConfig.instructionOverride, hasInstructionOverride = Object.hasOwn(serverConfig, 'instructionOverride')) {
|
|
2658
|
+
function createConfiguredServerReadModel(name, serverConfig, source = 'mcpServers', revision = fingerprintConfiguredServerTarget(serverConfig), instructionOverride = serverConfig.instructionOverride, hasInstructionOverride = Object.hasOwn(serverConfig, 'instructionOverride'), collision = false, activeInstanceCount = 0, mutationAvailable = true) {
|
|
2090
2659
|
const secretInputs = [];
|
|
2091
2660
|
const transport = {};
|
|
2661
|
+
const templateAnalysis = source === 'mcpTemplates' ? analyzeTemplateServerDefinition(serverConfig) : undefined;
|
|
2662
|
+
const invalidTemplateFields = new Set(templateAnalysis?.syntax.errors.map((error) => fieldKey(error.fieldPath)) ?? []);
|
|
2092
2663
|
for (const [key, value] of Object.entries(serverConfig)) {
|
|
2093
2664
|
if (key === 'disabled' ||
|
|
2094
2665
|
key === 'tags' ||
|
|
@@ -2098,7 +2669,7 @@ function createConfiguredServerReadModel(name, serverConfig, source = 'mcpServer
|
|
|
2098
2669
|
continue;
|
|
2099
2670
|
}
|
|
2100
2671
|
if (key === 'env') {
|
|
2101
|
-
transport.env = redactNamedSecretRecord(value, ['env'], secretInputs);
|
|
2672
|
+
transport.env = redactNamedSecretRecord(value, ['env'], secretInputs, source === 'mcpTemplates', invalidTemplateFields);
|
|
2102
2673
|
continue;
|
|
2103
2674
|
}
|
|
2104
2675
|
if (key === 'headers') {
|
|
@@ -2107,6 +2678,9 @@ function createConfiguredServerReadModel(name, serverConfig, source = 'mcpServer
|
|
|
2107
2678
|
}
|
|
2108
2679
|
if (key === 'args') {
|
|
2109
2680
|
transport.args = sanitizeCommandArgs(value, secretInputs);
|
|
2681
|
+
if (Array.isArray(transport.args)) {
|
|
2682
|
+
transport.args = transport.args.map((entry, index) => invalidTemplateFields.has(fieldKey(['transport', 'args', String(index)])) ? redactedValue() : entry);
|
|
2683
|
+
}
|
|
2110
2684
|
continue;
|
|
2111
2685
|
}
|
|
2112
2686
|
if (key === 'oauth') {
|
|
@@ -2114,7 +2688,13 @@ function createConfiguredServerReadModel(name, serverConfig, source = 'mcpServer
|
|
|
2114
2688
|
continue;
|
|
2115
2689
|
}
|
|
2116
2690
|
if (key === 'url' && typeof value === 'string') {
|
|
2117
|
-
transport.url =
|
|
2691
|
+
transport.url = invalidTemplateFields.has(fieldKey(['transport', 'url']))
|
|
2692
|
+
? redactedValue()
|
|
2693
|
+
: redactUrlQuerySecrets(value, secretInputs);
|
|
2694
|
+
continue;
|
|
2695
|
+
}
|
|
2696
|
+
if (invalidTemplateFields.has(fieldKey(['transport', key]))) {
|
|
2697
|
+
transport[key] = redactedValue();
|
|
2118
2698
|
continue;
|
|
2119
2699
|
}
|
|
2120
2700
|
transport[key] = sanitizeUnknownValue(value, [key], secretInputs);
|
|
@@ -2133,15 +2713,11 @@ function createConfiguredServerReadModel(name, serverConfig, source = 'mcpServer
|
|
|
2133
2713
|
tags: normalizeTags(serverConfig.tags),
|
|
2134
2714
|
transportSummary: createTransportSummary(serverConfig, transport),
|
|
2135
2715
|
mutationAvailability: {
|
|
2136
|
-
available:
|
|
2137
|
-
operations:
|
|
2716
|
+
available: mutationAvailable,
|
|
2717
|
+
operations: ['enable', 'disable'],
|
|
2718
|
+
deleteAvailable: mutationAvailable,
|
|
2138
2719
|
},
|
|
2139
|
-
actionState:
|
|
2140
|
-
? createActionState(name, enabled)
|
|
2141
|
-
: {
|
|
2142
|
-
enable: { available: false, label: `Enable ${name}`, disabledReason: 'already_enabled' },
|
|
2143
|
-
disable: { available: false, label: `Disable ${name}`, disabledReason: 'already_disabled' },
|
|
2144
|
-
},
|
|
2720
|
+
actionState: createActionState(name, enabled),
|
|
2145
2721
|
transport,
|
|
2146
2722
|
secretInputs,
|
|
2147
2723
|
instructionOverride: !hasInstructionOverride
|
|
@@ -2149,6 +2725,16 @@ function createConfiguredServerReadModel(name, serverConfig, source = 'mcpServer
|
|
|
2149
2725
|
: instructionOverride === ''
|
|
2150
2726
|
? { state: 'suppress', value: '' }
|
|
2151
2727
|
: { state: 'replace', value: instructionOverride },
|
|
2728
|
+
definition: {
|
|
2729
|
+
kind: source === 'mcpTemplates' ? 'template' : 'static',
|
|
2730
|
+
qualifiedId: `${source}/${name}`,
|
|
2731
|
+
authority: collision ? (source === 'mcpTemplates' ? 'authoritative' : 'shadowed') : 'sole',
|
|
2732
|
+
},
|
|
2733
|
+
...(templateAnalysis ? { templateAnalysis } : {}),
|
|
2734
|
+
runtime: {
|
|
2735
|
+
objectKind: 'definition',
|
|
2736
|
+
activeInstanceCount: source === 'mcpTemplates' ? activeInstanceCount : 0,
|
|
2737
|
+
},
|
|
2152
2738
|
};
|
|
2153
2739
|
}
|
|
2154
2740
|
const STDIO_TRANSPORT_TYPES = ['stdio'];
|
|
@@ -2257,7 +2843,7 @@ const TRANSPORT_FIELD_DEFINITIONS = [
|
|
|
2257
2843
|
const TRANSPORT_FIELD_DEFINITION_BY_KEY = new Map(TRANSPORT_FIELD_DEFINITIONS.map((definition) => [definition.key, definition]));
|
|
2258
2844
|
function createConfiguredServerEditContract(server, rawServerConfig, serverDefaults) {
|
|
2259
2845
|
const secretFieldKeys = new Set(server.secretInputs.map((input) => fieldKey(input.fieldPath)));
|
|
2260
|
-
const transportFields = TRANSPORT_FIELD_DEFINITIONS.map((definition) => {
|
|
2846
|
+
const transportFields = TRANSPORT_FIELD_DEFINITIONS.filter((definition) => definition.key !== 'template').map((definition) => {
|
|
2261
2847
|
const value = Object.prototype.hasOwnProperty.call(server.transport, definition.key)
|
|
2262
2848
|
? server.transport[definition.key]
|
|
2263
2849
|
: definition.defaultValue;
|
|
@@ -2276,7 +2862,7 @@ function createConfiguredServerEditContract(server, rawServerConfig, serverDefau
|
|
|
2276
2862
|
singleTargetEdit: true,
|
|
2277
2863
|
rename: { supported: true },
|
|
2278
2864
|
create: { supported: false },
|
|
2279
|
-
delete: { supported:
|
|
2865
|
+
delete: { supported: server.mutationAvailability.deleteAvailable === true },
|
|
2280
2866
|
bulkEdit: { supported: false },
|
|
2281
2867
|
rawJson: { supported: false },
|
|
2282
2868
|
preview: { supported: true },
|
|
@@ -2299,7 +2885,7 @@ function createConfiguredServerEditContract(server, rawServerConfig, serverDefau
|
|
|
2299
2885
|
label: 'Enabled',
|
|
2300
2886
|
control: 'switch',
|
|
2301
2887
|
value: server.enabled,
|
|
2302
|
-
editable:
|
|
2888
|
+
editable: server.source === 'mcpServers',
|
|
2303
2889
|
},
|
|
2304
2890
|
{
|
|
2305
2891
|
fieldPath: ['tags'],
|
|
@@ -2315,6 +2901,15 @@ function createConfiguredServerEditContract(server, rawServerConfig, serverDefau
|
|
|
2315
2901
|
label: 'Transport',
|
|
2316
2902
|
fields: transportFields,
|
|
2317
2903
|
},
|
|
2904
|
+
...(server.source === 'mcpTemplates'
|
|
2905
|
+
? [
|
|
2906
|
+
{
|
|
2907
|
+
id: 'template',
|
|
2908
|
+
label: 'Template instances',
|
|
2909
|
+
fields: templateLifecycleFields(server.transport.template, rawServerConfig.disabled),
|
|
2910
|
+
},
|
|
2911
|
+
]
|
|
2912
|
+
: []),
|
|
2318
2913
|
{
|
|
2319
2914
|
id: 'secrets',
|
|
2320
2915
|
label: 'Secrets',
|
|
@@ -2323,6 +2918,31 @@ function createConfiguredServerEditContract(server, rawServerConfig, serverDefau
|
|
|
2323
2918
|
],
|
|
2324
2919
|
};
|
|
2325
2920
|
}
|
|
2921
|
+
function templateLifecycleFields(value, disabled) {
|
|
2922
|
+
const template = value && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
2923
|
+
const extraction = template.extractionOptions && typeof template.extractionOptions === 'object'
|
|
2924
|
+
? template.extractionOptions
|
|
2925
|
+
: {};
|
|
2926
|
+
return [
|
|
2927
|
+
templateField(['disabled'], 'Disabled expression', 'text', disabled ?? ''),
|
|
2928
|
+
templateField(['shareable'], 'Share instances', 'switch', template.shareable ?? true),
|
|
2929
|
+
templateField(['perClient'], 'One instance per client', 'switch', template.perClient ?? false),
|
|
2930
|
+
templateField(['maxInstances'], 'Maximum instances', 'number', template.maxInstances),
|
|
2931
|
+
templateField(['idleTimeout'], 'Idle timeout (ms)', 'number', template.idleTimeout),
|
|
2932
|
+
templateField(['extractionOptions', 'includeOptional'], 'Include optional context', 'switch', extraction.includeOptional ?? false),
|
|
2933
|
+
templateField(['extractionOptions', 'includeEnvironment'], 'Include environment context', 'switch', extraction.includeEnvironment ?? false),
|
|
2934
|
+
];
|
|
2935
|
+
}
|
|
2936
|
+
function templateField(nestedPath, label, control, value) {
|
|
2937
|
+
return {
|
|
2938
|
+
fieldPath: nestedPath[0] === 'disabled' ? ['transport', 'disabled'] : ['transport', 'template', ...nestedPath],
|
|
2939
|
+
label,
|
|
2940
|
+
control,
|
|
2941
|
+
value,
|
|
2942
|
+
editable: true,
|
|
2943
|
+
applicableSources: ['mcpTemplates'],
|
|
2944
|
+
};
|
|
2945
|
+
}
|
|
2326
2946
|
function omitSecretValues(value, fieldPath, secretFieldKeys) {
|
|
2327
2947
|
if (secretFieldKeys.has(fieldKey(fieldPath))) {
|
|
2328
2948
|
return undefined;
|
|
@@ -2567,7 +3187,7 @@ function wouldUseLocalStdioTransport(serverConfig) {
|
|
|
2567
3187
|
function normalizeTags(tags) {
|
|
2568
3188
|
return Array.isArray(tags) ? tags.filter((tag) => typeof tag === 'string') : [];
|
|
2569
3189
|
}
|
|
2570
|
-
function redactNamedSecretRecord(value, basePath, secretInputs) {
|
|
3190
|
+
function redactNamedSecretRecord(value, basePath, secretInputs, exposeTemplateExpressions = false, invalidTemplateFields = new Set()) {
|
|
2571
3191
|
if (Array.isArray(value)) {
|
|
2572
3192
|
return value.map((entry, index) => {
|
|
2573
3193
|
const label = typeof entry === 'string' && entry.includes('=') ? entry.split('=')[0] : String(index);
|
|
@@ -2579,12 +3199,44 @@ function redactNamedSecretRecord(value, basePath, secretInputs) {
|
|
|
2579
3199
|
return {};
|
|
2580
3200
|
}
|
|
2581
3201
|
const redacted = {};
|
|
2582
|
-
for (const key of Object.
|
|
3202
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
3203
|
+
if (invalidTemplateFields.has(fieldKey(['transport', ...basePath, key]))) {
|
|
3204
|
+
redacted[key] = redactedValue();
|
|
3205
|
+
continue;
|
|
3206
|
+
}
|
|
3207
|
+
if (exposeTemplateExpressions &&
|
|
3208
|
+
typeof entry === 'string' &&
|
|
3209
|
+
isSafeTemplateExpressionValue(entry) &&
|
|
3210
|
+
!containsSecretLikeString(entry)) {
|
|
3211
|
+
redacted[key] = entry;
|
|
3212
|
+
continue;
|
|
3213
|
+
}
|
|
2583
3214
|
redacted[key] = redactedValue();
|
|
2584
3215
|
secretInputs.push(secretInput([...basePath, key], key));
|
|
2585
3216
|
}
|
|
2586
3217
|
return redacted;
|
|
2587
3218
|
}
|
|
3219
|
+
function isSafeTemplateExpressionValue(value) {
|
|
3220
|
+
if (!value.includes('{{'))
|
|
3221
|
+
return false;
|
|
3222
|
+
const withoutExpressions = value.replace(/\{\{\{?[\s\S]*?\}\}\}?/gu, '');
|
|
3223
|
+
if (!/^[\s,;:|/_.-]*$/u.test(withoutExpressions))
|
|
3224
|
+
return false;
|
|
3225
|
+
try {
|
|
3226
|
+
return !templateAstContainsStringLiteral(Handlebars.parse(value));
|
|
3227
|
+
}
|
|
3228
|
+
catch {
|
|
3229
|
+
return false;
|
|
3230
|
+
}
|
|
3231
|
+
}
|
|
3232
|
+
function templateAstContainsStringLiteral(value) {
|
|
3233
|
+
if (!value || typeof value !== 'object')
|
|
3234
|
+
return false;
|
|
3235
|
+
if (Array.isArray(value))
|
|
3236
|
+
return value.some(templateAstContainsStringLiteral);
|
|
3237
|
+
const node = value;
|
|
3238
|
+
return node.type === 'StringLiteral' || Object.values(node).some(templateAstContainsStringLiteral);
|
|
3239
|
+
}
|
|
2588
3240
|
function redactOAuthConfig(value, secretInputs) {
|
|
2589
3241
|
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
2590
3242
|
return {};
|