@1mcp/agent 0.35.0 → 0.37.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-B8y2weAX.js → admin-OAuthServicesWorkspace-BHyDoEos.js} +1 -1
- package/build/admin/assets/admin-console-DnlZpz5X.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/auth/sdkOAuthServerProvider.d.ts.map +1 -1
- package/build/auth/sdkOAuthServerProvider.js +49 -48
- package/build/auth/sdkOAuthServerProvider.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/fileStorageService.d.ts +39 -0
- package/build/auth/storage/fileStorageService.d.ts.map +1 -1
- package/build/auth/storage/fileStorageService.js +171 -38
- 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/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/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 +6 -0
- package/build/commands/serve/serve.d.ts.map +1 -1
- package/build/commands/serve/serve.js +45 -2
- 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/wait/wait.js +1 -1
- package/build/commands/wait/wait.js.map +1 -1
- package/build/config/configContext.d.ts +2 -0
- package/build/config/configContext.d.ts.map +1 -1
- package/build/config/configContext.js +5 -0
- package/build/config/configContext.js.map +1 -1
- package/build/config/configLoader.d.ts +8 -0
- package/build/config/configLoader.d.ts.map +1 -1
- package/build/config/configLoader.js +35 -11
- package/build/config/configLoader.js.map +1 -1
- package/build/config/configManager.d.ts +5 -0
- package/build/config/configManager.d.ts.map +1 -1
- package/build/config/configManager.js +83 -6
- package/build/config/configManager.js.map +1 -1
- package/build/config/configWatcher.d.ts +2 -0
- package/build/config/configWatcher.d.ts.map +1 -1
- package/build/config/configWatcher.js +9 -4
- package/build/config/configWatcher.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 +2 -1
- package/build/config/envProcessor.d.ts.map +1 -1
- package/build/config/envProcessor.js +16 -9
- package/build/config/envProcessor.js.map +1 -1
- package/build/config/runtimeScopeEnv.d.ts +15 -0
- package/build/config/runtimeScopeEnv.d.ts.map +1 -0
- package/build/config/runtimeScopeEnv.js +231 -0
- package/build/config/runtimeScopeEnv.js.map +1 -0
- package/build/config/runtimeTargetFingerprint.d.ts +3 -0
- package/build/config/runtimeTargetFingerprint.d.ts.map +1 -0
- package/build/config/runtimeTargetFingerprint.js +66 -0
- package/build/config/runtimeTargetFingerprint.js.map +1 -0
- package/build/config/types.d.ts +5 -0
- package/build/config/types.d.ts.map +1 -1
- package/build/config/types.js +1 -0
- package/build/config/types.js.map +1 -1
- package/build/constants/mcp.d.ts +1 -1
- package/build/constants/mcp.js +1 -1
- package/build/core/capabilities/capabilityPagination.d.ts.map +1 -1
- package/build/core/capabilities/capabilityPagination.js +5 -4
- package/build/core/capabilities/capabilityPagination.js.map +1 -1
- package/build/core/capabilities/configuredToolSnapshot.d.ts +22 -0
- package/build/core/capabilities/configuredToolSnapshot.d.ts.map +1 -1
- package/build/core/capabilities/configuredToolSnapshot.js +39 -0
- package/build/core/capabilities/configuredToolSnapshot.js.map +1 -1
- package/build/core/client/clientManager.d.ts.map +1 -1
- package/build/core/client/clientManager.js +25 -13
- package/build/core/client/clientManager.js.map +1 -1
- package/build/core/client/connectionHandler.d.ts.map +1 -1
- package/build/core/client/connectionHandler.js +9 -6
- package/build/core/client/connectionHandler.js.map +1 -1
- package/build/core/configChangeHandler.d.ts +3 -0
- package/build/core/configChangeHandler.d.ts.map +1 -1
- package/build/core/configChangeHandler.js +21 -4
- package/build/core/configChangeHandler.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 +8 -24
- package/build/core/loading/mcpLoadingManager.d.ts.map +1 -1
- package/build/core/loading/mcpLoadingManager.js +121 -73
- package/build/core/loading/mcpLoadingManager.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/backendStdioSupervisor.d.ts.map +1 -1
- package/build/core/server/backendStdioSupervisor.js +2 -1
- package/build/core/server/backendStdioSupervisor.js.map +1 -1
- package/build/core/server/clientInstanceFactory.d.ts +2 -1
- package/build/core/server/clientInstanceFactory.d.ts.map +1 -1
- package/build/core/server/clientInstanceFactory.js +9 -2
- package/build/core/server/clientInstanceFactory.js.map +1 -1
- package/build/core/server/clientInstancePool.d.ts +5 -6
- package/build/core/server/clientInstancePool.d.ts.map +1 -1
- package/build/core/server/clientInstancePool.js +123 -86
- package/build/core/server/clientInstancePool.js.map +1 -1
- package/build/core/server/clientInstancePoolTypes.d.ts +11 -2
- package/build/core/server/clientInstancePoolTypes.d.ts.map +1 -1
- package/build/core/server/clientInstancePoolTypes.js +8 -3
- package/build/core/server/clientInstancePoolTypes.js.map +1 -1
- package/build/core/server/mcpServerLifecycleManager.d.ts +0 -4
- package/build/core/server/mcpServerLifecycleManager.d.ts.map +1 -1
- package/build/core/server/mcpServerLifecycleManager.js +18 -40
- package/build/core/server/mcpServerLifecycleManager.js.map +1 -1
- package/build/core/server/requestContextPreparation.d.ts.map +1 -1
- package/build/core/server/requestContextPreparation.js +2 -1
- package/build/core/server/requestContextPreparation.js.map +1 -1
- package/build/core/server/serverManager.d.ts +1 -0
- package/build/core/server/serverManager.d.ts.map +1 -1
- package/build/core/server/serverManager.js +33 -1
- package/build/core/server/serverManager.js.map +1 -1
- package/build/core/server/templateServerManager.d.ts +22 -1
- package/build/core/server/templateServerManager.d.ts.map +1 -1
- package/build/core/server/templateServerManager.js +107 -13
- package/build/core/server/templateServerManager.js.map +1 -1
- package/build/core/tools/handlers/serverManagementHandler.d.ts +7 -7
- package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts +1 -1
- package/build/core/tools/internal/schemas/index.d.ts +2 -2
- package/build/core/tools/internal/schemas/installation.d.ts +1 -1
- package/build/core/tools/internal/schemas/management.d.ts +1 -1
- package/build/core/types/transport.d.ts +88 -8
- package/build/core/types/transport.d.ts.map +1 -1
- package/build/core/types/transport.js +78 -1
- package/build/core/types/transport.js.map +1 -1
- package/build/domains/admin/adminConfiguredServerService.d.ts +160 -2
- package/build/domains/admin/adminConfiguredServerService.d.ts.map +1 -1
- package/build/domains/admin/adminConfiguredServerService.js +761 -91
- package/build/domains/admin/adminConfiguredServerService.js.map +1 -1
- package/build/domains/admin/adminDomain.d.ts +11 -0
- package/build/domains/admin/adminDomain.d.ts.map +1 -1
- package/build/domains/admin/adminDomain.js +12 -0
- package/build/domains/admin/adminDomain.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 +19 -1
- package/build/domains/admin/configuredToolInventory.d.ts.map +1 -1
- package/build/domains/admin/configuredToolInventory.js +78 -31
- package/build/domains/admin/configuredToolInventory.js.map +1 -1
- package/build/domains/admin/runtimeConfiguredToolInspectionService.d.ts +21 -0
- package/build/domains/admin/runtimeConfiguredToolInspectionService.d.ts.map +1 -0
- package/build/domains/admin/runtimeConfiguredToolInspectionService.js +255 -0
- package/build/domains/admin/runtimeConfiguredToolInspectionService.js.map +1 -0
- 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/logger/secureLogger.d.ts.map +1 -1
- package/build/logger/secureLogger.js +160 -23
- package/build/logger/secureLogger.js.map +1 -1
- package/build/server.d.ts +2 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +8 -7
- package/build/server.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/routes/adminRoutes.d.ts +17 -1
- package/build/transport/http/routes/adminRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/adminRoutes.js +331 -15
- package/build/transport/http/routes/adminRoutes.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/server.d.ts.map +1 -1
- package/build/transport/http/server.js +25 -8
- 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/transportFactory.d.ts.map +1 -1
- package/build/transport/transportFactory.js +34 -12
- package/build/transport/transportFactory.js.map +1 -1
- package/package.json +6 -1
- package/build/admin/assets/admin-console-HJH52xGP.js +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"securityMiddleware.js","sourceRoot":"","sources":["../../../../src/transport/http/middlewares/securityMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAG3C,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAC7E,uBAAuB;IACvB,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAEzC,6BAA6B;IAC7B,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;IAEnD,wBAAwB;IACxB,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;IAEnD,2BAA2B;IAC3B,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,iCAAiC,CAAC,CAAC;IAEpE,6EAA6E;IAC7E,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzF,GAAG,CAAC,SAAS,CACX,yBAAyB,EACzB,sIAAsI,CACvI,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IAEjC,IAAI,EAAE,CAAC;AACT,CAAC;
|
|
1
|
+
{"version":3,"file":"securityMiddleware.js","sourceRoot":"","sources":["../../../../src/transport/http/middlewares/securityMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,21 @@ import type { AdminOAuthOperations } from '../../../domains/admin/adminOAuthServ
|
|
|
8
8
|
import { type AdminPresetOperations } from '../../../domains/admin/adminPresetService.js';
|
|
9
9
|
import type { AdminMutationAvailability } from '../../../domains/admin/runtimeScopeAdminLock.js';
|
|
10
10
|
import type { BackendLogBroker } from '../../../domains/backend-logs/backendLogBroker.js';
|
|
11
|
+
import { type SensitiveOperationRateLimitPolicy } from '../../../transport/http/middlewares/securityMiddleware.js';
|
|
11
12
|
import { Router } from 'express';
|
|
13
|
+
export interface AdminRateLimitPolicy {
|
|
14
|
+
login: {
|
|
15
|
+
windowMs: number;
|
|
16
|
+
maxRequests: number;
|
|
17
|
+
maxFailedAttempts: number;
|
|
18
|
+
};
|
|
19
|
+
status: {
|
|
20
|
+
windowMs: number;
|
|
21
|
+
maxRequests: number;
|
|
22
|
+
};
|
|
23
|
+
sensitive: SensitiveOperationRateLimitPolicy;
|
|
24
|
+
}
|
|
25
|
+
export declare const DEFAULT_ADMIN_RATE_LIMIT_POLICY: AdminRateLimitPolicy;
|
|
12
26
|
interface AdminRoutesOptions {
|
|
13
27
|
adminEnabled: boolean;
|
|
14
28
|
adminService: AdminIdentityService;
|
|
@@ -22,6 +36,7 @@ interface AdminRoutesOptions {
|
|
|
22
36
|
getOAuthDashboard?: () => BackendOAuthDashboardResult;
|
|
23
37
|
adminConsoleAssetsDir?: string;
|
|
24
38
|
getBackendLogBroker?: () => BackendLogBroker;
|
|
39
|
+
rateLimit?: AdminRateLimitPolicy;
|
|
25
40
|
}
|
|
26
41
|
export declare function createAdminRoutes(options: AdminRoutesOptions): Router | null;
|
|
27
42
|
export declare function resolveDefaultAdminConsoleAssetsDir(): string;
|
|
@@ -29,8 +44,9 @@ export declare class FailedLoginLimiter {
|
|
|
29
44
|
private readonly now;
|
|
30
45
|
private readonly maxActiveKeys;
|
|
31
46
|
private readonly windowMs;
|
|
47
|
+
private readonly maxFailedAttempts;
|
|
32
48
|
private readonly attempts;
|
|
33
|
-
constructor(now?: () => number, maxActiveKeys?: number, windowMs?: number);
|
|
49
|
+
constructor(now?: () => number, maxActiveKeys?: number, windowMs?: number, maxFailedAttempts?: number);
|
|
34
50
|
isLimited(username: string, origin: string): boolean;
|
|
35
51
|
recordFailure(username: string, origin: string): void;
|
|
36
52
|
reset(username: string, origin: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adminRoutes.d.ts","sourceRoot":"","sources":["../../../../src/transport/http/routes/adminRoutes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAEvF,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAE9E,OAAO,KAAK,EACV,6BAA6B,EAI9B,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAGL,KAAK,+BAA+B,EACrC,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EAIL,oBAAoB,EACrB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAEL,KAAK,kCAAkC,EACxC,MAAM,uDAAuD,CAAC;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAMpF,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"adminRoutes.d.ts","sourceRoot":"","sources":["../../../../src/transport/http/routes/adminRoutes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAEvF,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAE9E,OAAO,KAAK,EACV,6BAA6B,EAI9B,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAGL,KAAK,+BAA+B,EACrC,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EAIL,oBAAoB,EACrB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAEL,KAAK,kCAAkC,EACxC,MAAM,uDAAuD,CAAC;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAMpF,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AAQtF,OAAO,EAGL,KAAK,iCAAiC,EACvC,MAAM,uDAAuD,CAAC;AAG/D,OAAgB,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAC;AAmI7D,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,SAAS,EAAE,iCAAiC,CAAC;CAC9C;AAED,eAAO,MAAM,+BAA+B,EAAE,oBAW7C,CAAC;AAEF,UAAU,kBAAkB;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,oBAAoB,CAAC;IACnC,uBAAuB,CAAC,EAAE,+BAA+B,CAAC;IAC1D,0BAA0B,CAAC,EAAE,kCAAkC,CAAC;IAChE,qBAAqB,CAAC,EAAE,6BAA6B,CAAC;IACtD,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,kBAAkB,EAAE,MAAM,eAAe,CAAC;IAC1C,iBAAiB,CAAC,EAAE,MAAM,2BAA2B,CAAC;IACtD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,gBAAgB,CAAC;IAC7C,SAAS,CAAC,EAAE,oBAAoB,CAAC;CAClC;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAukB5E;AAqQD,wBAAgB,mCAAmC,IAAI,MAAM,CAE5D;AA80BD,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IANpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgE;gBAGtE,GAAG,GAAE,MAAM,MAAiB,EAC5B,aAAa,SAA+B,EAC5C,QAAQ,SAAyB,EACjC,iBAAiB,SAAqB;IAGzD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IASpD,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAWrD,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI7C,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,YAAY;CAQrB"}
|
|
@@ -8,7 +8,7 @@ import { AdminConfiguredServerApplyError, AdminConfiguredServerNotFoundError, }
|
|
|
8
8
|
import { ADMIN_SESSION_COOKIE_NAME, AdminIdentityError, } from '../../../domains/admin/adminIdentityService.js';
|
|
9
9
|
import { AdminInstructionTemplateNotFoundError, } from '../../../domains/admin/adminInstructionTemplateService.js';
|
|
10
10
|
import { AdminPresetConflictError, AdminPresetNotFoundError, } from '../../../domains/admin/adminPresetService.js';
|
|
11
|
-
import {
|
|
11
|
+
import { createSensitiveOperationLimiter, DEFAULT_SENSITIVE_OPERATION_RATE_LIMIT_POLICY, } from '../../../transport/http/middlewares/securityMiddleware.js';
|
|
12
12
|
import { sanitizeErrorMessage } from '../../../utils/validation/sanitization.js';
|
|
13
13
|
import express, { Router } from 'express';
|
|
14
14
|
import rateLimit from 'express-rate-limit';
|
|
@@ -42,6 +42,7 @@ const backendLogSnapshotQuerySchema = z.object({
|
|
|
42
42
|
sourceId: z.string().trim().min(1).max(256).optional(),
|
|
43
43
|
});
|
|
44
44
|
const configuredServerModelSchema = z.string().trim().min(1).max(64);
|
|
45
|
+
const configuredToolInventoryRefreshSchema = z.object({ model: configuredServerModelSchema.optional() }).strict();
|
|
45
46
|
const cliConfiguredServerMutationBodySchema = z.object({
|
|
46
47
|
targetName: z.string().trim().min(1).max(256),
|
|
47
48
|
dryRun: z.boolean().optional(),
|
|
@@ -116,25 +117,52 @@ const requestContextSchema = z
|
|
|
116
117
|
})
|
|
117
118
|
.strict();
|
|
118
119
|
const configuredServerSourceSchema = z.enum(['mcpServers', 'mcpTemplates']);
|
|
120
|
+
const configuredServerDeleteApplySchema = z
|
|
121
|
+
.object({
|
|
122
|
+
previewFingerprint: z.string().trim().min(1).max(256),
|
|
123
|
+
confirmationFacts: z
|
|
124
|
+
.object({
|
|
125
|
+
previewConfirmed: z.string().trim().min(1).max(256),
|
|
126
|
+
targetIdentityConfirmed: z.string().trim().min(1).max(512),
|
|
127
|
+
})
|
|
128
|
+
.strict(),
|
|
129
|
+
})
|
|
130
|
+
.strict();
|
|
131
|
+
const configuredServerLifecyclePreviewSchema = z.object({ enabled: z.boolean() }).strict();
|
|
132
|
+
const configuredServerLifecycleApplySchema = configuredServerDeleteApplySchema.extend({ enabled: z.boolean() }).strict();
|
|
133
|
+
export const DEFAULT_ADMIN_RATE_LIMIT_POLICY = {
|
|
134
|
+
login: {
|
|
135
|
+
windowMs: ADMIN_AUTH_RATE_LIMIT_WINDOW_MS,
|
|
136
|
+
maxRequests: ADMIN_AUTH_RATE_LIMIT,
|
|
137
|
+
maxFailedAttempts: FAILED_LOGIN_LIMIT,
|
|
138
|
+
},
|
|
139
|
+
status: {
|
|
140
|
+
windowMs: ADMIN_STATUS_RATE_LIMIT_WINDOW_MS,
|
|
141
|
+
maxRequests: ADMIN_STATUS_RATE_LIMIT,
|
|
142
|
+
},
|
|
143
|
+
sensitive: { ...DEFAULT_SENSITIVE_OPERATION_RATE_LIMIT_POLICY },
|
|
144
|
+
};
|
|
119
145
|
export function createAdminRoutes(options) {
|
|
120
146
|
if (!options.adminEnabled) {
|
|
121
147
|
options.adminService.revokeAllSessions();
|
|
122
148
|
return null;
|
|
123
149
|
}
|
|
124
150
|
const router = Router();
|
|
125
|
-
const
|
|
151
|
+
const rateLimitPolicy = options.rateLimit ?? DEFAULT_ADMIN_RATE_LIMIT_POLICY;
|
|
152
|
+
const failedLoginLimiter = new FailedLoginLimiter(Date.now, FAILED_LOGIN_MAX_ACTIVE_KEYS, rateLimitPolicy.login.windowMs, rateLimitPolicy.login.maxFailedAttempts);
|
|
126
153
|
const authenticationLimiter = rateLimit({
|
|
127
|
-
windowMs:
|
|
128
|
-
max:
|
|
154
|
+
windowMs: rateLimitPolicy.login.windowMs,
|
|
155
|
+
max: rateLimitPolicy.login.maxRequests,
|
|
129
156
|
standardHeaders: true,
|
|
130
157
|
legacyHeaders: false,
|
|
131
158
|
});
|
|
132
159
|
const statusLimiter = rateLimit({
|
|
133
|
-
windowMs:
|
|
134
|
-
max:
|
|
160
|
+
windowMs: rateLimitPolicy.status.windowMs,
|
|
161
|
+
max: rateLimitPolicy.status.maxRequests,
|
|
135
162
|
standardHeaders: true,
|
|
136
163
|
legacyHeaders: false,
|
|
137
164
|
});
|
|
165
|
+
const sensitiveOperationLimiter = createSensitiveOperationLimiter(rateLimitPolicy.sensitive);
|
|
138
166
|
const adminConsoleAssets = resolveAdminConsoleAssets(options.adminConsoleAssetsDir);
|
|
139
167
|
options.adminService.bootstrapFirstAdminFromEnvironment();
|
|
140
168
|
router.get('/cli/v1/capabilities', (req, res) => {
|
|
@@ -543,6 +571,12 @@ export function createAdminRoutes(options) {
|
|
|
543
571
|
router.get('/api/configured-servers/:name', async (req, res) => {
|
|
544
572
|
await handleConfiguredServerDetail(req, res, options);
|
|
545
573
|
});
|
|
574
|
+
router.post('/api/configured-servers/:source/:name/tool-inventory/refresh', async (req, res) => {
|
|
575
|
+
const source = configuredServerSourceSchema.safeParse(req.params.source);
|
|
576
|
+
if (!source.success)
|
|
577
|
+
return void res.status(400).json({ error: 'configured_server_source_invalid' });
|
|
578
|
+
await handleConfiguredToolInventoryRefresh(req, res, options, source.data);
|
|
579
|
+
});
|
|
546
580
|
router.post('/api/configured-servers/:source/:name/preview', async (req, res) => {
|
|
547
581
|
const source = configuredServerSourceSchema.safeParse(req.params.source);
|
|
548
582
|
if (!source.success)
|
|
@@ -555,6 +589,24 @@ export function createAdminRoutes(options) {
|
|
|
555
589
|
return void res.status(400).json({ error: 'configured_server_source_invalid' });
|
|
556
590
|
await handleConfiguredServerApply(req, res, options, source.data);
|
|
557
591
|
});
|
|
592
|
+
router.post('/api/configured-servers/:source/:name/delete-preview', async (req, res) => {
|
|
593
|
+
const source = configuredServerSourceSchema.safeParse(req.params.source);
|
|
594
|
+
if (!source.success)
|
|
595
|
+
return void res.status(400).json({ error: 'configured_server_source_invalid' });
|
|
596
|
+
await handleConfiguredServerDeletePreview(req, res, options, source.data);
|
|
597
|
+
});
|
|
598
|
+
router.post('/api/configured-servers/mcpTemplates/:name/lifecycle-preview', async (req, res) => {
|
|
599
|
+
await handleConfiguredServerLifecyclePreview(req, res, options);
|
|
600
|
+
});
|
|
601
|
+
router.post('/api/configured-servers/mcpTemplates/:name/lifecycle', async (req, res) => {
|
|
602
|
+
await handleConfiguredServerLifecycleApply(req, res, options);
|
|
603
|
+
});
|
|
604
|
+
router.delete('/api/configured-servers/:source/:name', async (req, res) => {
|
|
605
|
+
const source = configuredServerSourceSchema.safeParse(req.params.source);
|
|
606
|
+
if (!source.success)
|
|
607
|
+
return void res.status(400).json({ error: 'configured_server_source_invalid' });
|
|
608
|
+
await handleConfiguredServerDelete(req, res, options, source.data);
|
|
609
|
+
});
|
|
558
610
|
router.post('/api/configured-servers/mcpServers/:name/enable', async (req, res) => {
|
|
559
611
|
await handleConfiguredServerMutation(req, res, options, 'enableConfiguredServer', 'mcpServers');
|
|
560
612
|
});
|
|
@@ -1030,7 +1082,7 @@ async function handleConfiguredServerDetail(req, res, options, targetSource) {
|
|
|
1030
1082
|
const result = await options.configuredServerService.getConfiguredServerDetail({
|
|
1031
1083
|
context: buildAdminOperationContext(req, options, {
|
|
1032
1084
|
type: 'configured_server',
|
|
1033
|
-
id: `${targetSource ?? 'mcpServers'}
|
|
1085
|
+
id: `${targetSource ?? 'mcpServers'}/${targetName}`,
|
|
1034
1086
|
}),
|
|
1035
1087
|
targetName,
|
|
1036
1088
|
...(targetSource ? { targetSource } : {}),
|
|
@@ -1055,7 +1107,52 @@ async function handleConfiguredServerDetail(req, res, options, targetSource) {
|
|
|
1055
1107
|
error: error.code,
|
|
1056
1108
|
code: error.code,
|
|
1057
1109
|
message: 'Configured server target was not found',
|
|
1058
|
-
target: { type: 'configured_server', id: error.targetName },
|
|
1110
|
+
target: { type: 'configured_server', id: `${targetSource ?? 'mcpServers'}/${error.targetName}` },
|
|
1111
|
+
});
|
|
1112
|
+
return;
|
|
1113
|
+
}
|
|
1114
|
+
throw error;
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
async function handleConfiguredToolInventoryRefresh(req, res, options, targetSource) {
|
|
1118
|
+
if (!options.configuredServerService?.refreshConfiguredToolInventory) {
|
|
1119
|
+
res.status(404).json({ error: 'admin_configured_servers_unavailable' });
|
|
1120
|
+
return;
|
|
1121
|
+
}
|
|
1122
|
+
const body = configuredToolInventoryRefreshSchema.safeParse(req.body ?? {});
|
|
1123
|
+
if (!body.success) {
|
|
1124
|
+
res.status(400).json({ error: 'configured_tool_inventory_refresh_invalid' });
|
|
1125
|
+
return;
|
|
1126
|
+
}
|
|
1127
|
+
const targetName = req.params.name;
|
|
1128
|
+
try {
|
|
1129
|
+
const result = await options.configuredServerService.refreshConfiguredToolInventory({
|
|
1130
|
+
context: buildAdminOperationContext(req, options, {
|
|
1131
|
+
type: 'configured_server',
|
|
1132
|
+
id: `${targetSource}/${targetName}`,
|
|
1133
|
+
}),
|
|
1134
|
+
targetName,
|
|
1135
|
+
targetSource,
|
|
1136
|
+
...(body.data.model ? { model: body.data.model } : {}),
|
|
1137
|
+
});
|
|
1138
|
+
if (!result.ok) {
|
|
1139
|
+
sendAdminOperationResult(res, result);
|
|
1140
|
+
return;
|
|
1141
|
+
}
|
|
1142
|
+
res.status(200).json({
|
|
1143
|
+
ok: true,
|
|
1144
|
+
operationId: result.operationId,
|
|
1145
|
+
toolInventory: result.result,
|
|
1146
|
+
});
|
|
1147
|
+
}
|
|
1148
|
+
catch (error) {
|
|
1149
|
+
if (error instanceof AdminConfiguredServerNotFoundError) {
|
|
1150
|
+
res.status(404).json({
|
|
1151
|
+
ok: false,
|
|
1152
|
+
error: error.code,
|
|
1153
|
+
code: error.code,
|
|
1154
|
+
message: 'Configured server target was not found',
|
|
1155
|
+
target: { type: 'configured_server', id: `${targetSource}/${targetName}` },
|
|
1059
1156
|
});
|
|
1060
1157
|
return;
|
|
1061
1158
|
}
|
|
@@ -1158,7 +1255,7 @@ async function handleConfiguredServerPreview(req, res, options, targetSource) {
|
|
|
1158
1255
|
const result = await options.configuredServerService.previewConfiguredServerEdit({
|
|
1159
1256
|
context: buildAdminOperationContext(req, options, {
|
|
1160
1257
|
type: 'configured_server',
|
|
1161
|
-
id: `${targetSource ?? 'mcpServers'}
|
|
1258
|
+
id: `${targetSource ?? 'mcpServers'}/${targetName}`,
|
|
1162
1259
|
}),
|
|
1163
1260
|
targetName,
|
|
1164
1261
|
...(targetSource ? { targetSource } : {}),
|
|
@@ -1183,7 +1280,7 @@ async function handleConfiguredServerPreview(req, res, options, targetSource) {
|
|
|
1183
1280
|
error: error.code,
|
|
1184
1281
|
code: error.code,
|
|
1185
1282
|
message: 'Configured server target was not found',
|
|
1186
|
-
target: { type: 'configured_server', id: error.targetName },
|
|
1283
|
+
target: { type: 'configured_server', id: `${targetSource ?? 'mcpServers'}/${error.targetName}` },
|
|
1187
1284
|
});
|
|
1188
1285
|
return;
|
|
1189
1286
|
}
|
|
@@ -1212,7 +1309,7 @@ async function handleConfiguredServerApply(req, res, options, targetSource) {
|
|
|
1212
1309
|
const result = await options.configuredServerService.applyConfiguredServerEdit({
|
|
1213
1310
|
context: buildAdminOperationContext(req, options, {
|
|
1214
1311
|
type: 'configured_server',
|
|
1215
|
-
id: `${targetSource ?? 'mcpServers'}
|
|
1312
|
+
id: `${targetSource ?? 'mcpServers'}/${targetName}`,
|
|
1216
1313
|
}),
|
|
1217
1314
|
targetName,
|
|
1218
1315
|
...(targetSource ? { targetSource } : {}),
|
|
@@ -1238,6 +1335,180 @@ async function handleConfiguredServerApply(req, res, options, targetSource) {
|
|
|
1238
1335
|
throw error;
|
|
1239
1336
|
}
|
|
1240
1337
|
}
|
|
1338
|
+
async function handleConfiguredServerDeletePreview(req, res, options, targetSource) {
|
|
1339
|
+
if (!options.configuredServerService?.previewConfiguredServerDelete) {
|
|
1340
|
+
res.status(404).json({ error: 'admin_configured_server_delete_unavailable' });
|
|
1341
|
+
return;
|
|
1342
|
+
}
|
|
1343
|
+
const targetName = req.params.name;
|
|
1344
|
+
try {
|
|
1345
|
+
const result = await options.configuredServerService.previewConfiguredServerDelete({
|
|
1346
|
+
context: buildAdminOperationContext(req, options, {
|
|
1347
|
+
type: 'configured_server',
|
|
1348
|
+
id: `${targetSource}/${targetName}`,
|
|
1349
|
+
}),
|
|
1350
|
+
targetName,
|
|
1351
|
+
targetSource,
|
|
1352
|
+
});
|
|
1353
|
+
if (!result.ok) {
|
|
1354
|
+
if (result.status === 'mutation_failed' && isConfiguredServerApplyErrorCode(result.error)) {
|
|
1355
|
+
sendConfiguredServerApplyError(res, result.error);
|
|
1356
|
+
return;
|
|
1357
|
+
}
|
|
1358
|
+
sendAdminOperationResult(res, result);
|
|
1359
|
+
return;
|
|
1360
|
+
}
|
|
1361
|
+
res.status(200).json({ ok: true, operationId: result.operationId, preview: result.result });
|
|
1362
|
+
}
|
|
1363
|
+
catch (error) {
|
|
1364
|
+
if (error instanceof AdminConfiguredServerNotFoundError) {
|
|
1365
|
+
sendConfiguredServerApplyError(res, error.code);
|
|
1366
|
+
return;
|
|
1367
|
+
}
|
|
1368
|
+
if (error instanceof AdminConfiguredServerApplyError) {
|
|
1369
|
+
sendConfiguredServerApplyError(res, error.code);
|
|
1370
|
+
return;
|
|
1371
|
+
}
|
|
1372
|
+
throw error;
|
|
1373
|
+
}
|
|
1374
|
+
}
|
|
1375
|
+
async function handleConfiguredServerDelete(req, res, options, targetSource) {
|
|
1376
|
+
if (!options.configuredServerService?.deleteConfiguredServer) {
|
|
1377
|
+
res.status(404).json({ error: 'admin_configured_server_delete_unavailable' });
|
|
1378
|
+
return;
|
|
1379
|
+
}
|
|
1380
|
+
if (!req.header('Idempotency-Key')?.trim()) {
|
|
1381
|
+
res.status(400).json({ ok: false, error: 'idempotency_key_required', code: 'idempotency_key_required' });
|
|
1382
|
+
return;
|
|
1383
|
+
}
|
|
1384
|
+
if (isMutationLocked(options)) {
|
|
1385
|
+
sendAdminOperationResult(res, {
|
|
1386
|
+
ok: false,
|
|
1387
|
+
status: 'runtime_scope_locked',
|
|
1388
|
+
code: 'runtime_scope_locked',
|
|
1389
|
+
retryable: true,
|
|
1390
|
+
operationName: 'deleteConfiguredServer',
|
|
1391
|
+
reason: 'writer_lock_unavailable',
|
|
1392
|
+
});
|
|
1393
|
+
return;
|
|
1394
|
+
}
|
|
1395
|
+
const targetName = req.params.name;
|
|
1396
|
+
const parsedBody = configuredServerDeleteApplySchema.safeParse(req.body);
|
|
1397
|
+
if (!parsedBody.success) {
|
|
1398
|
+
res.status(400).json({
|
|
1399
|
+
ok: false,
|
|
1400
|
+
error: 'configured_server_delete_request_invalid',
|
|
1401
|
+
code: 'configured_server_delete_request_invalid',
|
|
1402
|
+
message: 'Delete requires a current preview fingerprint and exact source-qualified confirmation facts.',
|
|
1403
|
+
});
|
|
1404
|
+
return;
|
|
1405
|
+
}
|
|
1406
|
+
try {
|
|
1407
|
+
const result = await options.configuredServerService.deleteConfiguredServer({
|
|
1408
|
+
context: buildAdminOperationContext(req, options, {
|
|
1409
|
+
type: 'configured_server',
|
|
1410
|
+
id: `${targetSource}/${targetName}`,
|
|
1411
|
+
}),
|
|
1412
|
+
targetName,
|
|
1413
|
+
targetSource,
|
|
1414
|
+
previewFingerprint: parsedBody.data.previewFingerprint,
|
|
1415
|
+
});
|
|
1416
|
+
if (!result.ok && result.status === 'mutation_failed' && isConfiguredServerApplyErrorCode(result.error)) {
|
|
1417
|
+
sendConfiguredServerApplyError(res, result.error);
|
|
1418
|
+
return;
|
|
1419
|
+
}
|
|
1420
|
+
sendAdminOperationResult(res, result);
|
|
1421
|
+
}
|
|
1422
|
+
catch (error) {
|
|
1423
|
+
if (error instanceof AdminConfiguredServerNotFoundError || error instanceof AdminConfiguredServerApplyError) {
|
|
1424
|
+
sendConfiguredServerApplyError(res, error.code);
|
|
1425
|
+
return;
|
|
1426
|
+
}
|
|
1427
|
+
throw error;
|
|
1428
|
+
}
|
|
1429
|
+
}
|
|
1430
|
+
async function handleConfiguredServerLifecyclePreview(req, res, options) {
|
|
1431
|
+
if (!options.configuredServerService?.previewConfiguredServerLifecycle) {
|
|
1432
|
+
res.status(404).json({ error: 'admin_configured_server_lifecycle_unavailable' });
|
|
1433
|
+
return;
|
|
1434
|
+
}
|
|
1435
|
+
const body = configuredServerLifecyclePreviewSchema.safeParse(req.body);
|
|
1436
|
+
if (!body.success) {
|
|
1437
|
+
res.status(400).json({ ok: false, error: 'configured_server_lifecycle_request_invalid' });
|
|
1438
|
+
return;
|
|
1439
|
+
}
|
|
1440
|
+
try {
|
|
1441
|
+
const result = await options.configuredServerService.previewConfiguredServerLifecycle({
|
|
1442
|
+
context: buildAdminOperationContext(req, options, {
|
|
1443
|
+
type: 'configured_server',
|
|
1444
|
+
id: `mcpTemplates/${req.params.name}`,
|
|
1445
|
+
}),
|
|
1446
|
+
targetName: req.params.name,
|
|
1447
|
+
targetSource: 'mcpTemplates',
|
|
1448
|
+
enabled: body.data.enabled,
|
|
1449
|
+
});
|
|
1450
|
+
if (!result.ok)
|
|
1451
|
+
return void sendAdminOperationResult(res, result);
|
|
1452
|
+
res.status(200).json({ ok: true, operationId: result.operationId, preview: result.result });
|
|
1453
|
+
}
|
|
1454
|
+
catch (error) {
|
|
1455
|
+
if (error instanceof AdminConfiguredServerNotFoundError || error instanceof AdminConfiguredServerApplyError) {
|
|
1456
|
+
sendConfiguredServerApplyError(res, error.code);
|
|
1457
|
+
return;
|
|
1458
|
+
}
|
|
1459
|
+
throw error;
|
|
1460
|
+
}
|
|
1461
|
+
}
|
|
1462
|
+
async function handleConfiguredServerLifecycleApply(req, res, options) {
|
|
1463
|
+
if (!options.configuredServerService?.applyConfiguredServerLifecycle) {
|
|
1464
|
+
res.status(404).json({ error: 'admin_configured_server_lifecycle_unavailable' });
|
|
1465
|
+
return;
|
|
1466
|
+
}
|
|
1467
|
+
if (!req.header('Idempotency-Key')?.trim()) {
|
|
1468
|
+
res.status(400).json({ ok: false, error: 'idempotency_key_required', code: 'idempotency_key_required' });
|
|
1469
|
+
return;
|
|
1470
|
+
}
|
|
1471
|
+
if (isMutationLocked(options)) {
|
|
1472
|
+
sendAdminOperationResult(res, {
|
|
1473
|
+
ok: false,
|
|
1474
|
+
status: 'runtime_scope_locked',
|
|
1475
|
+
code: 'runtime_scope_locked',
|
|
1476
|
+
retryable: true,
|
|
1477
|
+
operationName: 'applyConfiguredServerLifecycle',
|
|
1478
|
+
reason: 'writer_lock_unavailable',
|
|
1479
|
+
});
|
|
1480
|
+
return;
|
|
1481
|
+
}
|
|
1482
|
+
const body = configuredServerLifecycleApplySchema.safeParse(req.body);
|
|
1483
|
+
if (!body.success) {
|
|
1484
|
+
res.status(400).json({ ok: false, error: 'configured_server_lifecycle_request_invalid' });
|
|
1485
|
+
return;
|
|
1486
|
+
}
|
|
1487
|
+
try {
|
|
1488
|
+
const result = await options.configuredServerService.applyConfiguredServerLifecycle({
|
|
1489
|
+
context: buildAdminOperationContext(req, options, {
|
|
1490
|
+
type: 'configured_server',
|
|
1491
|
+
id: `mcpTemplates/${req.params.name}`,
|
|
1492
|
+
}),
|
|
1493
|
+
targetName: req.params.name,
|
|
1494
|
+
targetSource: 'mcpTemplates',
|
|
1495
|
+
enabled: body.data.enabled,
|
|
1496
|
+
previewFingerprint: body.data.previewFingerprint,
|
|
1497
|
+
});
|
|
1498
|
+
if (!result.ok && result.status === 'mutation_failed' && isConfiguredServerApplyErrorCode(result.error)) {
|
|
1499
|
+
sendConfiguredServerApplyError(res, result.error);
|
|
1500
|
+
return;
|
|
1501
|
+
}
|
|
1502
|
+
sendAdminOperationResult(res, result);
|
|
1503
|
+
}
|
|
1504
|
+
catch (error) {
|
|
1505
|
+
if (error instanceof AdminConfiguredServerNotFoundError || error instanceof AdminConfiguredServerApplyError) {
|
|
1506
|
+
sendConfiguredServerApplyError(res, error.code);
|
|
1507
|
+
return;
|
|
1508
|
+
}
|
|
1509
|
+
throw error;
|
|
1510
|
+
}
|
|
1511
|
+
}
|
|
1241
1512
|
function isConfiguredServerApplyErrorCode(value) {
|
|
1242
1513
|
return value.startsWith('configured_server_');
|
|
1243
1514
|
}
|
|
@@ -1268,6 +1539,12 @@ function configuredServerApplyErrorMessage(code) {
|
|
|
1268
1539
|
return 'The configured server could not be persisted. Inspect the Runtime Scope configuration and retry with a new idempotency key.';
|
|
1269
1540
|
case 'configured_server_not_found':
|
|
1270
1541
|
return 'Configured server target was not found.';
|
|
1542
|
+
case 'configured_server_already_removed':
|
|
1543
|
+
return 'This source-qualified configured server target was already removed. Refresh the server inventory.';
|
|
1544
|
+
case 'configured_server_source_changed':
|
|
1545
|
+
return 'The requested source no longer owns this configured server target. Refresh the inventory; the same name in the other source was not changed.';
|
|
1546
|
+
case 'configured_server_delete_failed':
|
|
1547
|
+
return 'The configured server target could not be deleted. The recovery backup and original definition were preserved.';
|
|
1271
1548
|
default:
|
|
1272
1549
|
return 'The configured server edit could not be applied.';
|
|
1273
1550
|
}
|
|
@@ -1291,7 +1568,7 @@ async function handleConfiguredServerMutation(req, res, options, operationName,
|
|
|
1291
1568
|
const targetName = req.params.name;
|
|
1292
1569
|
const context = buildAdminOperationContext(req, options, {
|
|
1293
1570
|
type: 'configured_server',
|
|
1294
|
-
id: `${targetSource ?? 'mcpServers'}
|
|
1571
|
+
id: `${targetSource ?? 'mcpServers'}/${targetName}`,
|
|
1295
1572
|
});
|
|
1296
1573
|
const input = { context, targetName, ...(targetSource ? { targetSource } : {}) };
|
|
1297
1574
|
const result = operationName === 'enableConfiguredServer'
|
|
@@ -1330,17 +1607,19 @@ export class FailedLoginLimiter {
|
|
|
1330
1607
|
now;
|
|
1331
1608
|
maxActiveKeys;
|
|
1332
1609
|
windowMs;
|
|
1610
|
+
maxFailedAttempts;
|
|
1333
1611
|
attempts = new Map();
|
|
1334
|
-
constructor(now = Date.now, maxActiveKeys = FAILED_LOGIN_MAX_ACTIVE_KEYS, windowMs = FAILED_LOGIN_WINDOW_MS) {
|
|
1612
|
+
constructor(now = Date.now, maxActiveKeys = FAILED_LOGIN_MAX_ACTIVE_KEYS, windowMs = FAILED_LOGIN_WINDOW_MS, maxFailedAttempts = FAILED_LOGIN_LIMIT) {
|
|
1335
1613
|
this.now = now;
|
|
1336
1614
|
this.maxActiveKeys = maxActiveKeys;
|
|
1337
1615
|
this.windowMs = windowMs;
|
|
1616
|
+
this.maxFailedAttempts = maxFailedAttempts;
|
|
1338
1617
|
}
|
|
1339
1618
|
isLimited(username, origin) {
|
|
1340
1619
|
this.pruneExpired();
|
|
1341
1620
|
const attempt = this.getAttempt(username, origin);
|
|
1342
1621
|
if (attempt) {
|
|
1343
|
-
return attempt.count >=
|
|
1622
|
+
return attempt.count >= this.maxFailedAttempts;
|
|
1344
1623
|
}
|
|
1345
1624
|
return this.attempts.size >= this.maxActiveKeys;
|
|
1346
1625
|
}
|
|
@@ -1385,7 +1664,7 @@ function isUnsafeMethod(method) {
|
|
|
1385
1664
|
return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS';
|
|
1386
1665
|
}
|
|
1387
1666
|
function getLoginSource(req) {
|
|
1388
|
-
return req.ip ??
|
|
1667
|
+
return req.ip ?? 'unknown';
|
|
1389
1668
|
}
|
|
1390
1669
|
function setAdminSessionCookie(res, externalUrl, sessionToken, expiresAt) {
|
|
1391
1670
|
res.cookie(ADMIN_SESSION_COOKIE_NAME, sessionToken, {
|
|
@@ -1778,6 +2057,25 @@ function configuredServerRequestFingerprint(operationName, targetName, body) {
|
|
|
1778
2057
|
draftDigest: keyedRequestFingerprint(previewFingerprint, 'configured-server-create-draft', stableJsonStringify(getBodyValue(body, 'draft') ?? {})),
|
|
1779
2058
|
}
|
|
1780
2059
|
: {}),
|
|
2060
|
+
...(operationName === 'deleteConfiguredServer'
|
|
2061
|
+
? {
|
|
2062
|
+
previewFingerprint,
|
|
2063
|
+
deleteDigest: keyedRequestFingerprint(previewFingerprint, 'configured-server-delete-body', stableJsonStringify({
|
|
2064
|
+
previewFingerprint,
|
|
2065
|
+
confirmationFacts: getBodyRecord(body, 'confirmationFacts') ?? {},
|
|
2066
|
+
})),
|
|
2067
|
+
}
|
|
2068
|
+
: {}),
|
|
2069
|
+
...(operationName === 'applyConfiguredServerLifecycle'
|
|
2070
|
+
? {
|
|
2071
|
+
previewFingerprint,
|
|
2072
|
+
lifecycleDigest: keyedRequestFingerprint(previewFingerprint, 'configured-server-lifecycle-body', stableJsonStringify({
|
|
2073
|
+
enabled: getBodyValue(body, 'enabled') === true,
|
|
2074
|
+
previewFingerprint,
|
|
2075
|
+
confirmationFacts: getBodyRecord(body, 'confirmationFacts') ?? {},
|
|
2076
|
+
})),
|
|
2077
|
+
}
|
|
2078
|
+
: {}),
|
|
1781
2079
|
...(operationName === 'restartBackend'
|
|
1782
2080
|
? {
|
|
1783
2081
|
restartSelection: {
|
|
@@ -1795,6 +2093,12 @@ function configuredServerRequestFingerprint(operationName, targetName, body) {
|
|
|
1795
2093
|
if (operationName === 'applyConfiguredServerCreate') {
|
|
1796
2094
|
return `configured_server_create_${keyedRequestFingerprint(previewFingerprint, 'configured-server-create', normalized)}`;
|
|
1797
2095
|
}
|
|
2096
|
+
if (operationName === 'deleteConfiguredServer') {
|
|
2097
|
+
return `configured_server_delete_${keyedRequestFingerprint(previewFingerprint, 'configured-server-delete', normalized)}`;
|
|
2098
|
+
}
|
|
2099
|
+
if (operationName === 'applyConfiguredServerLifecycle') {
|
|
2100
|
+
return `configured_server_lifecycle_${keyedRequestFingerprint(previewFingerprint, 'configured-server-lifecycle', normalized)}`;
|
|
2101
|
+
}
|
|
1798
2102
|
return operationName === 'applyConfiguredServerEdit'
|
|
1799
2103
|
? `configured_server_apply_${keyedRequestFingerprint(previewFingerprint, 'configured-server-apply', normalized)}`
|
|
1800
2104
|
: normalized;
|
|
@@ -1926,9 +2230,21 @@ function operationNameForRequest(req) {
|
|
|
1926
2230
|
if (req.method === 'GET' && req.path === '/api/configured-servers/create-contract') {
|
|
1927
2231
|
return 'getConfiguredServerCreateContract';
|
|
1928
2232
|
}
|
|
2233
|
+
if (req.path.endsWith('/lifecycle-preview')) {
|
|
2234
|
+
return 'previewConfiguredServerLifecycle';
|
|
2235
|
+
}
|
|
2236
|
+
if (req.path.endsWith('/lifecycle')) {
|
|
2237
|
+
return 'applyConfiguredServerLifecycle';
|
|
2238
|
+
}
|
|
1929
2239
|
if (req.path.endsWith('/preview')) {
|
|
1930
2240
|
return 'previewConfiguredServerEdit';
|
|
1931
2241
|
}
|
|
2242
|
+
if (req.path.endsWith('/delete-preview')) {
|
|
2243
|
+
return 'previewConfiguredServerDelete';
|
|
2244
|
+
}
|
|
2245
|
+
if (req.method === 'DELETE' && req.path.startsWith('/api/configured-servers/')) {
|
|
2246
|
+
return 'deleteConfiguredServer';
|
|
2247
|
+
}
|
|
1932
2248
|
if (req.path.endsWith('/apply')) {
|
|
1933
2249
|
return 'applyConfiguredServerEdit';
|
|
1934
2250
|
}
|