@1mcp/agent 0.36.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 (158) hide show
  1. package/build/admin/assets/{admin-OAuthServicesWorkspace-BCGj2hP4.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/configManager.d.ts.map +1 -1
  61. package/build/config/configManager.js +19 -6
  62. package/build/config/configManager.js.map +1 -1
  63. package/build/config/configuredServerTargets.d.ts +1 -0
  64. package/build/config/configuredServerTargets.d.ts.map +1 -1
  65. package/build/config/configuredServerTargets.js +6 -0
  66. package/build/config/configuredServerTargets.js.map +1 -1
  67. package/build/constants/mcp.d.ts +1 -1
  68. package/build/constants/mcp.js +1 -1
  69. package/build/core/loading/backendLoadingPolicy.d.ts +11 -0
  70. package/build/core/loading/backendLoadingPolicy.d.ts.map +1 -0
  71. package/build/core/loading/backendLoadingPolicy.js +10 -0
  72. package/build/core/loading/backendLoadingPolicy.js.map +1 -0
  73. package/build/core/loading/mcpLoadingManager.d.ts +8 -24
  74. package/build/core/loading/mcpLoadingManager.d.ts.map +1 -1
  75. package/build/core/loading/mcpLoadingManager.js +116 -70
  76. package/build/core/loading/mcpLoadingManager.js.map +1 -1
  77. package/build/core/server/agentConfig.d.ts +26 -0
  78. package/build/core/server/agentConfig.d.ts.map +1 -1
  79. package/build/core/server/agentConfig.js +11 -0
  80. package/build/core/server/agentConfig.js.map +1 -1
  81. package/build/core/server/clientInstancePool.d.ts +4 -6
  82. package/build/core/server/clientInstancePool.d.ts.map +1 -1
  83. package/build/core/server/clientInstancePool.js +63 -63
  84. package/build/core/server/clientInstancePool.js.map +1 -1
  85. package/build/core/server/clientInstancePoolTypes.d.ts +9 -2
  86. package/build/core/server/clientInstancePoolTypes.d.ts.map +1 -1
  87. package/build/core/server/clientInstancePoolTypes.js +8 -3
  88. package/build/core/server/clientInstancePoolTypes.js.map +1 -1
  89. package/build/core/server/requestContextPreparation.d.ts.map +1 -1
  90. package/build/core/server/requestContextPreparation.js +2 -1
  91. package/build/core/server/requestContextPreparation.js.map +1 -1
  92. package/build/core/server/serverManager.d.ts.map +1 -1
  93. package/build/core/server/serverManager.js +2 -1
  94. package/build/core/server/serverManager.js.map +1 -1
  95. package/build/core/server/templateServerManager.d.ts +14 -1
  96. package/build/core/server/templateServerManager.d.ts.map +1 -1
  97. package/build/core/server/templateServerManager.js +64 -9
  98. package/build/core/server/templateServerManager.js.map +1 -1
  99. package/build/core/tools/internal/schemas/index.d.ts +1 -1
  100. package/build/core/tools/internal/schemas/installation.d.ts +1 -1
  101. package/build/core/types/transport.d.ts +82 -2
  102. package/build/core/types/transport.d.ts.map +1 -1
  103. package/build/core/types/transport.js +72 -0
  104. package/build/core/types/transport.js.map +1 -1
  105. package/build/domains/admin/adminConfiguredServerService.d.ts +146 -2
  106. package/build/domains/admin/adminConfiguredServerService.d.ts.map +1 -1
  107. package/build/domains/admin/adminConfiguredServerService.js +729 -81
  108. package/build/domains/admin/adminConfiguredServerService.js.map +1 -1
  109. package/build/domains/admin/adminDomain.d.ts +5 -0
  110. package/build/domains/admin/adminDomain.d.ts.map +1 -1
  111. package/build/domains/admin/adminDomain.js +11 -0
  112. package/build/domains/admin/adminDomain.js.map +1 -1
  113. package/build/domains/admin/adminOperationService.d.ts +1 -0
  114. package/build/domains/admin/adminOperationService.d.ts.map +1 -1
  115. package/build/domains/admin/adminOperationService.js +6 -2
  116. package/build/domains/admin/adminOperationService.js.map +1 -1
  117. package/build/domains/admin/templateServerDefinitionAnalyzer.d.ts +26 -0
  118. package/build/domains/admin/templateServerDefinitionAnalyzer.d.ts.map +1 -0
  119. package/build/domains/admin/templateServerDefinitionAnalyzer.js +148 -0
  120. package/build/domains/admin/templateServerDefinitionAnalyzer.js.map +1 -0
  121. package/build/domains/config-change/configChange.d.ts +1 -1
  122. package/build/domains/config-change/configChange.d.ts.map +1 -1
  123. package/build/domains/config-change/configChange.js +168 -49
  124. package/build/domains/config-change/configChange.js.map +1 -1
  125. package/build/domains/config-change/types.d.ts +16 -2
  126. package/build/domains/config-change/types.d.ts.map +1 -1
  127. package/build/domains/registry/mcpRegistryClient.d.ts +3 -3
  128. package/build/domains/registry/mcpRegistryClient.d.ts.map +1 -1
  129. package/build/domains/registry/mcpRegistryClient.js +8 -7
  130. package/build/domains/registry/mcpRegistryClient.js.map +1 -1
  131. package/build/logger/secureLogger.d.ts.map +1 -1
  132. package/build/logger/secureLogger.js +160 -23
  133. package/build/logger/secureLogger.js.map +1 -1
  134. package/build/server.d.ts +2 -1
  135. package/build/server.d.ts.map +1 -1
  136. package/build/server.js +8 -7
  137. package/build/server.js.map +1 -1
  138. package/build/transport/http/middlewares/securityMiddleware.d.ts +6 -0
  139. package/build/transport/http/middlewares/securityMiddleware.d.ts.map +1 -1
  140. package/build/transport/http/middlewares/securityMiddleware.js +35 -29
  141. package/build/transport/http/middlewares/securityMiddleware.js.map +1 -1
  142. package/build/transport/http/routes/adminRoutes.d.ts +17 -1
  143. package/build/transport/http/routes/adminRoutes.d.ts.map +1 -1
  144. package/build/transport/http/routes/adminRoutes.js +281 -17
  145. package/build/transport/http/routes/adminRoutes.js.map +1 -1
  146. package/build/transport/http/routes/healthRoutes.d.ts +6 -1
  147. package/build/transport/http/routes/healthRoutes.d.ts.map +1 -1
  148. package/build/transport/http/routes/healthRoutes.js +7 -3
  149. package/build/transport/http/routes/healthRoutes.js.map +1 -1
  150. package/build/transport/http/server.d.ts.map +1 -1
  151. package/build/transport/http/server.js +21 -3
  152. package/build/transport/http/server.js.map +1 -1
  153. package/build/transport/http/storage/streamableSessionRepository.d.ts +1 -0
  154. package/build/transport/http/storage/streamableSessionRepository.d.ts.map +1 -1
  155. package/build/transport/http/storage/streamableSessionRepository.js +6 -3
  156. package/build/transport/http/storage/streamableSessionRepository.js.map +1 -1
  157. package/package.json +1 -1
  158. package/build/admin/assets/admin-console-xbgqUjbT.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;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,SAAS,CAAC;IACjD,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa;IACvC,GAAG,EAAE,EAAE,EAAE,yBAAyB;IAClC,eAAe,EAAE,IAAI;IACrB,aAAa,EAAE,KAAK;IACpB,OAAO,EAAE;QACP,KAAK,EAAE,qBAAqB;QAC5B,iBAAiB,EAAE,wDAAwD;KAC5E;IACD,IAAI,EAAE,CAAC,GAAY,EAAE,EAAE;QACrB,kEAAkE;QAClE,OAAO,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;QACvC,MAAM,OAAO,GAA4B;YACvC,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC;YAChC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE,OAAO,CAAC,CAAC;QAEpE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,qBAAqB;YAC5B,iBAAiB,EAAE,wDAAwD;SAC5E,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAC7E,iDAAiD;IACjD,MAAM,kBAAkB,GAAG;QACzB,UAAU,EAAE,oBAAoB;QAChC,mBAAmB,EAAE,gCAAgC;QACrD,cAAc,EAAE,sBAAsB;QACtC,MAAM,EAAE,iBAAiB;QACzB,IAAI,EAAE,sBAAsB;QAC5B,gBAAgB,EAAE,gBAAgB;QAClC,YAAY,EAAE,iBAAiB;KAChC,CAAC;IAEF,MAAM,wBAAwB,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAW,EAAE;QAC5E,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACzC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,GAA4B;oBACvC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,2BAA2B;oBAC3D,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE;oBAC3B,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC;oBAChC,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,kCAAkC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;gBACnE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,gBAAgB;IAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAkC,CAAC,EAAE,CAAC;QAClF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,wBAAwB,CAAC,KAAK,EAAE,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC;YAClF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,iBAAiB;gBACxB,iBAAiB,EAAE,qCAAqC;aACzD,CAAC,CAAC;YACH,OAAO;QACT,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAgC,CAAC,EAAE,CAAC;QAChF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC;YACjF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,iBAAiB;gBACxB,iBAAiB,EAAE,qCAAqC;aACzD,CAAC,CAAC;YACH,OAAO;QACT,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,IAAI,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAA+B,CAAC,EAAE,CAAC;YAC/E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,wBAAwB,CAAC,KAAK,EAAE,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC;gBAChF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE,iBAAiB;oBACxB,iBAAiB,EAAE,qCAAqC;iBACzD,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,EAAE,CAAC;AACT,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAC7E,sDAAsD;IACtD,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,uDAAuD,CAAC,CAAC;IACxF,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACpC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC9B,GAAG,CAAC,SAAS,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;IAE/C,+CAA+C;IAC/C,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,yCAAyC,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,EAAE,CAAC;AACT,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IACjF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,iCAAiC;IACjC,MAAM,kBAAkB,GACtB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3B,GAAG,CAAC,MAAM,KAAK,MAAM;QACrB,GAAG,CAAC,MAAM,KAAK,KAAK;QACpB,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC;IAE1B,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,OAAO,GAA4B;YACvC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC;YAChC,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC;YACpC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB;YAC9D,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS;SAC3E,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,2BAA2B;IAC3B,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,GAAG,CAAC,IAAI,GAAG,UAA0B,IAAa;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAExC,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,OAAO,GAA4B;gBACvC,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,QAAQ;gBACR,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,IAAI,EAAE,CAAC;AACT,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IACpF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,kFAAkF;IAClF,MAAM,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEnF,IAAI,cAAc,EAAE,CAAC;QACnB,iEAAiE;QACjE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QAEvG,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,GAAG,UAA0B,IAAa;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACvC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC;YAE1D,UAAU,CAAC,GAAG,EAAE;gBACd,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC,EAAE,cAAc,CAAC,CAAC;YAEnB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,EAAE,CAAC;AACT,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;AAC1G,CAAC"}
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;AAUD,MAAM,CAAC,MAAM,6CAA6C,GAAsC;IAC9F,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;IACxB,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,MAAM,UAAU,+BAA+B,CAC7C,SAA4C,6CAA6C;IAEzF,OAAO,SAAS,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,GAAG,EAAE,MAAM,CAAC,WAAW;QACvB,eAAe,EAAE,IAAI;QACrB,aAAa,EAAE,KAAK;QACpB,OAAO,EAAE;YACP,KAAK,EAAE,qBAAqB;YAC5B,iBAAiB,EAAE,wDAAwD;SAC5E;QACD,IAAI,EAAE,CAAC,GAAY,EAAE,EAAE;YACrB,mEAAmE;YACnE,OAAO,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;QACpD,CAAC;QACD,OAAO,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;YACvC,MAAM,OAAO,GAA4B;gBACvC,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC;gBAChC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE,OAAO,CAAC,CAAC;YAEpE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,qBAAqB;gBAC5B,iBAAiB,EAAE,wDAAwD;aAC5E,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,6EAA6E;AAC7E,gFAAgF;AAChF,MAAM,CAAC,MAAM,yBAAyB,GAAG,+BAA+B,EAAE,CAAC;AAE3E;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAC7E,iDAAiD;IACjD,MAAM,kBAAkB,GAAG;QACzB,UAAU,EAAE,oBAAoB;QAChC,mBAAmB,EAAE,gCAAgC;QACrD,cAAc,EAAE,sBAAsB;QACtC,MAAM,EAAE,iBAAiB;QACzB,IAAI,EAAE,sBAAsB;QAC5B,gBAAgB,EAAE,gBAAgB;QAClC,YAAY,EAAE,iBAAiB;KAChC,CAAC;IAEF,MAAM,wBAAwB,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAW,EAAE;QAC5E,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACzC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,GAA4B;oBACvC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,2BAA2B;oBAC3D,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE;oBAC3B,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC;oBAChC,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,kCAAkC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;gBACnE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,gBAAgB;IAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAkC,CAAC,EAAE,CAAC;QAClF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,wBAAwB,CAAC,KAAK,EAAE,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC;YAClF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,iBAAiB;gBACxB,iBAAiB,EAAE,qCAAqC;aACzD,CAAC,CAAC;YACH,OAAO;QACT,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAgC,CAAC,EAAE,CAAC;QAChF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC;YACjF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,iBAAiB;gBACxB,iBAAiB,EAAE,qCAAqC;aACzD,CAAC,CAAC;YACH,OAAO;QACT,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,IAAI,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAA+B,CAAC,EAAE,CAAC;YAC/E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,wBAAwB,CAAC,KAAK,EAAE,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC;gBAChF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE,iBAAiB;oBACxB,iBAAiB,EAAE,qCAAqC;iBACzD,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,EAAE,CAAC;AACT,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAC7E,sDAAsD;IACtD,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,uDAAuD,CAAC,CAAC;IACxF,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACpC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC9B,GAAG,CAAC,SAAS,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;IAE/C,+CAA+C;IAC/C,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,yCAAyC,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,EAAE,CAAC;AACT,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IACjF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,iCAAiC;IACjC,MAAM,kBAAkB,GACtB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3B,GAAG,CAAC,MAAM,KAAK,MAAM;QACrB,GAAG,CAAC,MAAM,KAAK,KAAK;QACpB,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC;IAE1B,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,OAAO,GAA4B;YACvC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC;YAChC,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC;YACpC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB;YAC9D,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS;SAC3E,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,2BAA2B;IAC3B,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,GAAG,CAAC,IAAI,GAAG,UAA0B,IAAa;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAExC,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,OAAO,GAA4B;gBACvC,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,QAAQ;gBACR,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,IAAI,EAAE,CAAC;AACT,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IACpF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,kFAAkF;IAClF,MAAM,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEnF,IAAI,cAAc,EAAE,CAAC;QACnB,iEAAiE;QACjE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QAEvG,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,GAAG,UAA0B,IAAa;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACvC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC;YAE1D,UAAU,CAAC,GAAG,EAAE;gBACd,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC,EAAE,cAAc,CAAC,CAAC;YAEnB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,EAAE,CAAC;AACT,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;AAC1G,CAAC"}
@@ -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;AAsH7D,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,CA4iB5E;AAqQD,wBAAgB,mCAAmC,IAAI,MAAM,CAE5D;AAyoBD,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';
@@ -117,25 +117,52 @@ const requestContextSchema = z
117
117
  })
118
118
  .strict();
119
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
+ };
120
145
  export function createAdminRoutes(options) {
121
146
  if (!options.adminEnabled) {
122
147
  options.adminService.revokeAllSessions();
123
148
  return null;
124
149
  }
125
150
  const router = Router();
126
- 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);
127
153
  const authenticationLimiter = rateLimit({
128
- windowMs: ADMIN_AUTH_RATE_LIMIT_WINDOW_MS,
129
- max: ADMIN_AUTH_RATE_LIMIT,
154
+ windowMs: rateLimitPolicy.login.windowMs,
155
+ max: rateLimitPolicy.login.maxRequests,
130
156
  standardHeaders: true,
131
157
  legacyHeaders: false,
132
158
  });
133
159
  const statusLimiter = rateLimit({
134
- windowMs: ADMIN_STATUS_RATE_LIMIT_WINDOW_MS,
135
- max: ADMIN_STATUS_RATE_LIMIT,
160
+ windowMs: rateLimitPolicy.status.windowMs,
161
+ max: rateLimitPolicy.status.maxRequests,
136
162
  standardHeaders: true,
137
163
  legacyHeaders: false,
138
164
  });
165
+ const sensitiveOperationLimiter = createSensitiveOperationLimiter(rateLimitPolicy.sensitive);
139
166
  const adminConsoleAssets = resolveAdminConsoleAssets(options.adminConsoleAssetsDir);
140
167
  options.adminService.bootstrapFirstAdminFromEnvironment();
141
168
  router.get('/cli/v1/capabilities', (req, res) => {
@@ -562,6 +589,24 @@ export function createAdminRoutes(options) {
562
589
  return void res.status(400).json({ error: 'configured_server_source_invalid' });
563
590
  await handleConfiguredServerApply(req, res, options, source.data);
564
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
+ });
565
610
  router.post('/api/configured-servers/mcpServers/:name/enable', async (req, res) => {
566
611
  await handleConfiguredServerMutation(req, res, options, 'enableConfiguredServer', 'mcpServers');
567
612
  });
@@ -1037,7 +1082,7 @@ async function handleConfiguredServerDetail(req, res, options, targetSource) {
1037
1082
  const result = await options.configuredServerService.getConfiguredServerDetail({
1038
1083
  context: buildAdminOperationContext(req, options, {
1039
1084
  type: 'configured_server',
1040
- id: `${targetSource ?? 'mcpServers'}:${targetName}`,
1085
+ id: `${targetSource ?? 'mcpServers'}/${targetName}`,
1041
1086
  }),
1042
1087
  targetName,
1043
1088
  ...(targetSource ? { targetSource } : {}),
@@ -1062,7 +1107,7 @@ async function handleConfiguredServerDetail(req, res, options, targetSource) {
1062
1107
  error: error.code,
1063
1108
  code: error.code,
1064
1109
  message: 'Configured server target was not found',
1065
- target: { type: 'configured_server', id: error.targetName },
1110
+ target: { type: 'configured_server', id: `${targetSource ?? 'mcpServers'}/${error.targetName}` },
1066
1111
  });
1067
1112
  return;
1068
1113
  }
@@ -1084,7 +1129,7 @@ async function handleConfiguredToolInventoryRefresh(req, res, options, targetSou
1084
1129
  const result = await options.configuredServerService.refreshConfiguredToolInventory({
1085
1130
  context: buildAdminOperationContext(req, options, {
1086
1131
  type: 'configured_server',
1087
- id: `${targetSource}:${targetName}`,
1132
+ id: `${targetSource}/${targetName}`,
1088
1133
  }),
1089
1134
  targetName,
1090
1135
  targetSource,
@@ -1107,7 +1152,7 @@ async function handleConfiguredToolInventoryRefresh(req, res, options, targetSou
1107
1152
  error: error.code,
1108
1153
  code: error.code,
1109
1154
  message: 'Configured server target was not found',
1110
- target: { type: 'configured_server', id: `${targetSource}:${targetName}` },
1155
+ target: { type: 'configured_server', id: `${targetSource}/${targetName}` },
1111
1156
  });
1112
1157
  return;
1113
1158
  }
@@ -1210,7 +1255,7 @@ async function handleConfiguredServerPreview(req, res, options, targetSource) {
1210
1255
  const result = await options.configuredServerService.previewConfiguredServerEdit({
1211
1256
  context: buildAdminOperationContext(req, options, {
1212
1257
  type: 'configured_server',
1213
- id: `${targetSource ?? 'mcpServers'}:${targetName}`,
1258
+ id: `${targetSource ?? 'mcpServers'}/${targetName}`,
1214
1259
  }),
1215
1260
  targetName,
1216
1261
  ...(targetSource ? { targetSource } : {}),
@@ -1235,7 +1280,7 @@ async function handleConfiguredServerPreview(req, res, options, targetSource) {
1235
1280
  error: error.code,
1236
1281
  code: error.code,
1237
1282
  message: 'Configured server target was not found',
1238
- target: { type: 'configured_server', id: error.targetName },
1283
+ target: { type: 'configured_server', id: `${targetSource ?? 'mcpServers'}/${error.targetName}` },
1239
1284
  });
1240
1285
  return;
1241
1286
  }
@@ -1264,7 +1309,7 @@ async function handleConfiguredServerApply(req, res, options, targetSource) {
1264
1309
  const result = await options.configuredServerService.applyConfiguredServerEdit({
1265
1310
  context: buildAdminOperationContext(req, options, {
1266
1311
  type: 'configured_server',
1267
- id: `${targetSource ?? 'mcpServers'}:${targetName}`,
1312
+ id: `${targetSource ?? 'mcpServers'}/${targetName}`,
1268
1313
  }),
1269
1314
  targetName,
1270
1315
  ...(targetSource ? { targetSource } : {}),
@@ -1290,6 +1335,180 @@ async function handleConfiguredServerApply(req, res, options, targetSource) {
1290
1335
  throw error;
1291
1336
  }
1292
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
+ }
1293
1512
  function isConfiguredServerApplyErrorCode(value) {
1294
1513
  return value.startsWith('configured_server_');
1295
1514
  }
@@ -1320,6 +1539,12 @@ function configuredServerApplyErrorMessage(code) {
1320
1539
  return 'The configured server could not be persisted. Inspect the Runtime Scope configuration and retry with a new idempotency key.';
1321
1540
  case 'configured_server_not_found':
1322
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.';
1323
1548
  default:
1324
1549
  return 'The configured server edit could not be applied.';
1325
1550
  }
@@ -1343,7 +1568,7 @@ async function handleConfiguredServerMutation(req, res, options, operationName,
1343
1568
  const targetName = req.params.name;
1344
1569
  const context = buildAdminOperationContext(req, options, {
1345
1570
  type: 'configured_server',
1346
- id: `${targetSource ?? 'mcpServers'}:${targetName}`,
1571
+ id: `${targetSource ?? 'mcpServers'}/${targetName}`,
1347
1572
  });
1348
1573
  const input = { context, targetName, ...(targetSource ? { targetSource } : {}) };
1349
1574
  const result = operationName === 'enableConfiguredServer'
@@ -1382,17 +1607,19 @@ export class FailedLoginLimiter {
1382
1607
  now;
1383
1608
  maxActiveKeys;
1384
1609
  windowMs;
1610
+ maxFailedAttempts;
1385
1611
  attempts = new Map();
1386
- 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) {
1387
1613
  this.now = now;
1388
1614
  this.maxActiveKeys = maxActiveKeys;
1389
1615
  this.windowMs = windowMs;
1616
+ this.maxFailedAttempts = maxFailedAttempts;
1390
1617
  }
1391
1618
  isLimited(username, origin) {
1392
1619
  this.pruneExpired();
1393
1620
  const attempt = this.getAttempt(username, origin);
1394
1621
  if (attempt) {
1395
- return attempt.count >= FAILED_LOGIN_LIMIT;
1622
+ return attempt.count >= this.maxFailedAttempts;
1396
1623
  }
1397
1624
  return this.attempts.size >= this.maxActiveKeys;
1398
1625
  }
@@ -1437,7 +1664,7 @@ function isUnsafeMethod(method) {
1437
1664
  return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS';
1438
1665
  }
1439
1666
  function getLoginSource(req) {
1440
- return req.ip ?? req.socket.remoteAddress ?? req.header('origin') ?? 'unknown';
1667
+ return req.ip ?? 'unknown';
1441
1668
  }
1442
1669
  function setAdminSessionCookie(res, externalUrl, sessionToken, expiresAt) {
1443
1670
  res.cookie(ADMIN_SESSION_COOKIE_NAME, sessionToken, {
@@ -1830,6 +2057,25 @@ function configuredServerRequestFingerprint(operationName, targetName, body) {
1830
2057
  draftDigest: keyedRequestFingerprint(previewFingerprint, 'configured-server-create-draft', stableJsonStringify(getBodyValue(body, 'draft') ?? {})),
1831
2058
  }
1832
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
+ : {}),
1833
2079
  ...(operationName === 'restartBackend'
1834
2080
  ? {
1835
2081
  restartSelection: {
@@ -1847,6 +2093,12 @@ function configuredServerRequestFingerprint(operationName, targetName, body) {
1847
2093
  if (operationName === 'applyConfiguredServerCreate') {
1848
2094
  return `configured_server_create_${keyedRequestFingerprint(previewFingerprint, 'configured-server-create', normalized)}`;
1849
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
+ }
1850
2102
  return operationName === 'applyConfiguredServerEdit'
1851
2103
  ? `configured_server_apply_${keyedRequestFingerprint(previewFingerprint, 'configured-server-apply', normalized)}`
1852
2104
  : normalized;
@@ -1978,9 +2230,21 @@ function operationNameForRequest(req) {
1978
2230
  if (req.method === 'GET' && req.path === '/api/configured-servers/create-contract') {
1979
2231
  return 'getConfiguredServerCreateContract';
1980
2232
  }
2233
+ if (req.path.endsWith('/lifecycle-preview')) {
2234
+ return 'previewConfiguredServerLifecycle';
2235
+ }
2236
+ if (req.path.endsWith('/lifecycle')) {
2237
+ return 'applyConfiguredServerLifecycle';
2238
+ }
1981
2239
  if (req.path.endsWith('/preview')) {
1982
2240
  return 'previewConfiguredServerEdit';
1983
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
+ }
1984
2248
  if (req.path.endsWith('/apply')) {
1985
2249
  return 'applyConfiguredServerEdit';
1986
2250
  }