@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.
Files changed (230) hide show
  1. package/build/admin/assets/{admin-OAuthServicesWorkspace-B8y2weAX.js → admin-OAuthServicesWorkspace-BHyDoEos.js} +1 -1
  2. package/build/admin/assets/admin-console-DnlZpz5X.js +3 -0
  3. package/build/admin/assets/admin-vendor-62eL-qdH.js +1 -0
  4. package/build/admin/assets/admin-vendor-BbMrl7MK.js +3 -0
  5. package/build/admin/assets/admin-vendor-DpjVwd81.js +62 -0
  6. package/build/admin/index.html +4 -1
  7. package/build/auth/sdkOAuthServerProvider.d.ts.map +1 -1
  8. package/build/auth/sdkOAuthServerProvider.js +49 -48
  9. package/build/auth/sdkOAuthServerProvider.js.map +1 -1
  10. package/build/auth/storage/authCodeRepository.js +2 -2
  11. package/build/auth/storage/authCodeRepository.js.map +1 -1
  12. package/build/auth/storage/authRequestRepository.js +2 -2
  13. package/build/auth/storage/authRequestRepository.js.map +1 -1
  14. package/build/auth/storage/fileStorageService.d.ts +39 -0
  15. package/build/auth/storage/fileStorageService.d.ts.map +1 -1
  16. package/build/auth/storage/fileStorageService.js +171 -38
  17. package/build/auth/storage/fileStorageService.js.map +1 -1
  18. package/build/auth/storage/oauthStorageService.d.ts +5 -0
  19. package/build/auth/storage/oauthStorageService.d.ts.map +1 -1
  20. package/build/auth/storage/oauthStorageService.js +6 -0
  21. package/build/auth/storage/oauthStorageService.js.map +1 -1
  22. package/build/commands/mcp/install.d.ts +47 -3
  23. package/build/commands/mcp/install.d.ts.map +1 -1
  24. package/build/commands/mcp/install.js +22 -14
  25. package/build/commands/mcp/install.js.map +1 -1
  26. package/build/commands/registry/options.d.ts +3 -0
  27. package/build/commands/registry/options.d.ts.map +1 -1
  28. package/build/commands/registry/options.js +27 -0
  29. package/build/commands/registry/options.js.map +1 -1
  30. package/build/commands/registry/search.d.ts.map +1 -1
  31. package/build/commands/registry/search.js +2 -10
  32. package/build/commands/registry/search.js.map +1 -1
  33. package/build/commands/registry/show.d.ts.map +1 -1
  34. package/build/commands/registry/show.js +2 -10
  35. package/build/commands/registry/show.js.map +1 -1
  36. package/build/commands/registry/status.d.ts.map +1 -1
  37. package/build/commands/registry/status.js +2 -10
  38. package/build/commands/registry/status.js.map +1 -1
  39. package/build/commands/registry/versions.d.ts.map +1 -1
  40. package/build/commands/registry/versions.js +2 -10
  41. package/build/commands/registry/versions.js.map +1 -1
  42. package/build/commands/serve/asyncLoadingOptions.d.ts +16 -0
  43. package/build/commands/serve/asyncLoadingOptions.d.ts.map +1 -1
  44. package/build/commands/serve/asyncLoadingOptions.js +29 -0
  45. package/build/commands/serve/asyncLoadingOptions.js.map +1 -1
  46. package/build/commands/serve/index.d.ts +24 -0
  47. package/build/commands/serve/index.d.ts.map +1 -1
  48. package/build/commands/serve/index.js +24 -0
  49. package/build/commands/serve/index.js.map +1 -1
  50. package/build/commands/serve/serve.d.ts +6 -0
  51. package/build/commands/serve/serve.d.ts.map +1 -1
  52. package/build/commands/serve/serve.js +45 -2
  53. package/build/commands/serve/serve.js.map +1 -1
  54. package/build/commands/serve/serveBackground.d.ts +2 -1
  55. package/build/commands/serve/serveBackground.d.ts.map +1 -1
  56. package/build/commands/serve/serveBackground.js +6 -0
  57. package/build/commands/serve/serveBackground.js.map +1 -1
  58. package/build/commands/wait/wait.js +1 -1
  59. package/build/commands/wait/wait.js.map +1 -1
  60. package/build/config/configContext.d.ts +2 -0
  61. package/build/config/configContext.d.ts.map +1 -1
  62. package/build/config/configContext.js +5 -0
  63. package/build/config/configContext.js.map +1 -1
  64. package/build/config/configLoader.d.ts +8 -0
  65. package/build/config/configLoader.d.ts.map +1 -1
  66. package/build/config/configLoader.js +35 -11
  67. package/build/config/configLoader.js.map +1 -1
  68. package/build/config/configManager.d.ts +5 -0
  69. package/build/config/configManager.d.ts.map +1 -1
  70. package/build/config/configManager.js +83 -6
  71. package/build/config/configManager.js.map +1 -1
  72. package/build/config/configWatcher.d.ts +2 -0
  73. package/build/config/configWatcher.d.ts.map +1 -1
  74. package/build/config/configWatcher.js +9 -4
  75. package/build/config/configWatcher.js.map +1 -1
  76. package/build/config/configuredServerTargets.d.ts +1 -0
  77. package/build/config/configuredServerTargets.d.ts.map +1 -1
  78. package/build/config/configuredServerTargets.js +6 -0
  79. package/build/config/configuredServerTargets.js.map +1 -1
  80. package/build/config/envProcessor.d.ts +2 -1
  81. package/build/config/envProcessor.d.ts.map +1 -1
  82. package/build/config/envProcessor.js +16 -9
  83. package/build/config/envProcessor.js.map +1 -1
  84. package/build/config/runtimeScopeEnv.d.ts +15 -0
  85. package/build/config/runtimeScopeEnv.d.ts.map +1 -0
  86. package/build/config/runtimeScopeEnv.js +231 -0
  87. package/build/config/runtimeScopeEnv.js.map +1 -0
  88. package/build/config/runtimeTargetFingerprint.d.ts +3 -0
  89. package/build/config/runtimeTargetFingerprint.d.ts.map +1 -0
  90. package/build/config/runtimeTargetFingerprint.js +66 -0
  91. package/build/config/runtimeTargetFingerprint.js.map +1 -0
  92. package/build/config/types.d.ts +5 -0
  93. package/build/config/types.d.ts.map +1 -1
  94. package/build/config/types.js +1 -0
  95. package/build/config/types.js.map +1 -1
  96. package/build/constants/mcp.d.ts +1 -1
  97. package/build/constants/mcp.js +1 -1
  98. package/build/core/capabilities/capabilityPagination.d.ts.map +1 -1
  99. package/build/core/capabilities/capabilityPagination.js +5 -4
  100. package/build/core/capabilities/capabilityPagination.js.map +1 -1
  101. package/build/core/capabilities/configuredToolSnapshot.d.ts +22 -0
  102. package/build/core/capabilities/configuredToolSnapshot.d.ts.map +1 -1
  103. package/build/core/capabilities/configuredToolSnapshot.js +39 -0
  104. package/build/core/capabilities/configuredToolSnapshot.js.map +1 -1
  105. package/build/core/client/clientManager.d.ts.map +1 -1
  106. package/build/core/client/clientManager.js +25 -13
  107. package/build/core/client/clientManager.js.map +1 -1
  108. package/build/core/client/connectionHandler.d.ts.map +1 -1
  109. package/build/core/client/connectionHandler.js +9 -6
  110. package/build/core/client/connectionHandler.js.map +1 -1
  111. package/build/core/configChangeHandler.d.ts +3 -0
  112. package/build/core/configChangeHandler.d.ts.map +1 -1
  113. package/build/core/configChangeHandler.js +21 -4
  114. package/build/core/configChangeHandler.js.map +1 -1
  115. package/build/core/loading/backendLoadingPolicy.d.ts +11 -0
  116. package/build/core/loading/backendLoadingPolicy.d.ts.map +1 -0
  117. package/build/core/loading/backendLoadingPolicy.js +10 -0
  118. package/build/core/loading/backendLoadingPolicy.js.map +1 -0
  119. package/build/core/loading/mcpLoadingManager.d.ts +8 -24
  120. package/build/core/loading/mcpLoadingManager.d.ts.map +1 -1
  121. package/build/core/loading/mcpLoadingManager.js +121 -73
  122. package/build/core/loading/mcpLoadingManager.js.map +1 -1
  123. package/build/core/server/agentConfig.d.ts +26 -0
  124. package/build/core/server/agentConfig.d.ts.map +1 -1
  125. package/build/core/server/agentConfig.js +11 -0
  126. package/build/core/server/agentConfig.js.map +1 -1
  127. package/build/core/server/backendStdioSupervisor.d.ts.map +1 -1
  128. package/build/core/server/backendStdioSupervisor.js +2 -1
  129. package/build/core/server/backendStdioSupervisor.js.map +1 -1
  130. package/build/core/server/clientInstanceFactory.d.ts +2 -1
  131. package/build/core/server/clientInstanceFactory.d.ts.map +1 -1
  132. package/build/core/server/clientInstanceFactory.js +9 -2
  133. package/build/core/server/clientInstanceFactory.js.map +1 -1
  134. package/build/core/server/clientInstancePool.d.ts +5 -6
  135. package/build/core/server/clientInstancePool.d.ts.map +1 -1
  136. package/build/core/server/clientInstancePool.js +123 -86
  137. package/build/core/server/clientInstancePool.js.map +1 -1
  138. package/build/core/server/clientInstancePoolTypes.d.ts +11 -2
  139. package/build/core/server/clientInstancePoolTypes.d.ts.map +1 -1
  140. package/build/core/server/clientInstancePoolTypes.js +8 -3
  141. package/build/core/server/clientInstancePoolTypes.js.map +1 -1
  142. package/build/core/server/mcpServerLifecycleManager.d.ts +0 -4
  143. package/build/core/server/mcpServerLifecycleManager.d.ts.map +1 -1
  144. package/build/core/server/mcpServerLifecycleManager.js +18 -40
  145. package/build/core/server/mcpServerLifecycleManager.js.map +1 -1
  146. package/build/core/server/requestContextPreparation.d.ts.map +1 -1
  147. package/build/core/server/requestContextPreparation.js +2 -1
  148. package/build/core/server/requestContextPreparation.js.map +1 -1
  149. package/build/core/server/serverManager.d.ts +1 -0
  150. package/build/core/server/serverManager.d.ts.map +1 -1
  151. package/build/core/server/serverManager.js +33 -1
  152. package/build/core/server/serverManager.js.map +1 -1
  153. package/build/core/server/templateServerManager.d.ts +22 -1
  154. package/build/core/server/templateServerManager.d.ts.map +1 -1
  155. package/build/core/server/templateServerManager.js +107 -13
  156. package/build/core/server/templateServerManager.js.map +1 -1
  157. package/build/core/tools/handlers/serverManagementHandler.d.ts +7 -7
  158. package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts +1 -1
  159. package/build/core/tools/internal/schemas/index.d.ts +2 -2
  160. package/build/core/tools/internal/schemas/installation.d.ts +1 -1
  161. package/build/core/tools/internal/schemas/management.d.ts +1 -1
  162. package/build/core/types/transport.d.ts +88 -8
  163. package/build/core/types/transport.d.ts.map +1 -1
  164. package/build/core/types/transport.js +78 -1
  165. package/build/core/types/transport.js.map +1 -1
  166. package/build/domains/admin/adminConfiguredServerService.d.ts +160 -2
  167. package/build/domains/admin/adminConfiguredServerService.d.ts.map +1 -1
  168. package/build/domains/admin/adminConfiguredServerService.js +761 -91
  169. package/build/domains/admin/adminConfiguredServerService.js.map +1 -1
  170. package/build/domains/admin/adminDomain.d.ts +11 -0
  171. package/build/domains/admin/adminDomain.d.ts.map +1 -1
  172. package/build/domains/admin/adminDomain.js +12 -0
  173. package/build/domains/admin/adminDomain.js.map +1 -1
  174. package/build/domains/admin/adminOperationService.d.ts +1 -0
  175. package/build/domains/admin/adminOperationService.d.ts.map +1 -1
  176. package/build/domains/admin/adminOperationService.js +6 -2
  177. package/build/domains/admin/adminOperationService.js.map +1 -1
  178. package/build/domains/admin/configuredToolInventory.d.ts +19 -1
  179. package/build/domains/admin/configuredToolInventory.d.ts.map +1 -1
  180. package/build/domains/admin/configuredToolInventory.js +78 -31
  181. package/build/domains/admin/configuredToolInventory.js.map +1 -1
  182. package/build/domains/admin/runtimeConfiguredToolInspectionService.d.ts +21 -0
  183. package/build/domains/admin/runtimeConfiguredToolInspectionService.d.ts.map +1 -0
  184. package/build/domains/admin/runtimeConfiguredToolInspectionService.js +255 -0
  185. package/build/domains/admin/runtimeConfiguredToolInspectionService.js.map +1 -0
  186. package/build/domains/admin/templateServerDefinitionAnalyzer.d.ts +26 -0
  187. package/build/domains/admin/templateServerDefinitionAnalyzer.d.ts.map +1 -0
  188. package/build/domains/admin/templateServerDefinitionAnalyzer.js +148 -0
  189. package/build/domains/admin/templateServerDefinitionAnalyzer.js.map +1 -0
  190. package/build/domains/config-change/configChange.d.ts +1 -1
  191. package/build/domains/config-change/configChange.d.ts.map +1 -1
  192. package/build/domains/config-change/configChange.js +168 -49
  193. package/build/domains/config-change/configChange.js.map +1 -1
  194. package/build/domains/config-change/types.d.ts +16 -2
  195. package/build/domains/config-change/types.d.ts.map +1 -1
  196. package/build/domains/registry/mcpRegistryClient.d.ts +3 -3
  197. package/build/domains/registry/mcpRegistryClient.d.ts.map +1 -1
  198. package/build/domains/registry/mcpRegistryClient.js +8 -7
  199. package/build/domains/registry/mcpRegistryClient.js.map +1 -1
  200. package/build/logger/secureLogger.d.ts.map +1 -1
  201. package/build/logger/secureLogger.js +160 -23
  202. package/build/logger/secureLogger.js.map +1 -1
  203. package/build/server.d.ts +2 -1
  204. package/build/server.d.ts.map +1 -1
  205. package/build/server.js +8 -7
  206. package/build/server.js.map +1 -1
  207. package/build/transport/http/middlewares/securityMiddleware.d.ts +6 -0
  208. package/build/transport/http/middlewares/securityMiddleware.d.ts.map +1 -1
  209. package/build/transport/http/middlewares/securityMiddleware.js +35 -29
  210. package/build/transport/http/middlewares/securityMiddleware.js.map +1 -1
  211. package/build/transport/http/routes/adminRoutes.d.ts +17 -1
  212. package/build/transport/http/routes/adminRoutes.d.ts.map +1 -1
  213. package/build/transport/http/routes/adminRoutes.js +331 -15
  214. package/build/transport/http/routes/adminRoutes.js.map +1 -1
  215. package/build/transport/http/routes/healthRoutes.d.ts +6 -1
  216. package/build/transport/http/routes/healthRoutes.d.ts.map +1 -1
  217. package/build/transport/http/routes/healthRoutes.js +7 -3
  218. package/build/transport/http/routes/healthRoutes.js.map +1 -1
  219. package/build/transport/http/server.d.ts.map +1 -1
  220. package/build/transport/http/server.js +25 -8
  221. package/build/transport/http/server.js.map +1 -1
  222. package/build/transport/http/storage/streamableSessionRepository.d.ts +1 -0
  223. package/build/transport/http/storage/streamableSessionRepository.d.ts.map +1 -1
  224. package/build/transport/http/storage/streamableSessionRepository.js +6 -3
  225. package/build/transport/http/storage/streamableSessionRepository.js.map +1 -1
  226. package/build/transport/transportFactory.d.ts.map +1 -1
  227. package/build/transport/transportFactory.js +34 -12
  228. package/build/transport/transportFactory.js.map +1 -1
  229. package/package.json +6 -1
  230. 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":"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"}
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;AAWtF,OAAgB,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAC;AAqH7D,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;CAC9C;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAsiB5E;AAqQD,wBAAgB,mCAAmC,IAAI,MAAM,CAE5D;AAslBD,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgE;gBAGtE,GAAG,GAAE,MAAM,MAAiB,EAC5B,aAAa,SAA+B,EAC5C,QAAQ,SAAyB;IAGpD,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"}
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 { sensitiveOperationLimiter } from '../../../transport/http/middlewares/securityMiddleware.js';
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 failedLoginLimiter = new FailedLoginLimiter();
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: ADMIN_AUTH_RATE_LIMIT_WINDOW_MS,
128
- max: ADMIN_AUTH_RATE_LIMIT,
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: ADMIN_STATUS_RATE_LIMIT_WINDOW_MS,
134
- max: ADMIN_STATUS_RATE_LIMIT,
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'}:${targetName}`,
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'}:${targetName}`,
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'}:${targetName}`,
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'}:${targetName}`,
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 >= FAILED_LOGIN_LIMIT;
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 ?? req.socket.remoteAddress ?? req.header('origin') ?? 'unknown';
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
  }