@1mcp/agent 0.35.0-beta.1 → 0.35.0-beta.2

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 (186) hide show
  1. package/README.md +1 -0
  2. package/build/admin/assets/{admin-console-CX5GzncA.css → admin-console-C5_zD_qW.css} +1 -1
  3. package/build/admin/assets/{admin-console-CkZ5lBKg.js → admin-console-CbHHoqLr.js} +6 -6
  4. package/build/admin/index.html +2 -2
  5. package/build/application/services/healthService.d.ts +32 -0
  6. package/build/application/services/healthService.d.ts.map +1 -1
  7. package/build/application/services/healthService.js +49 -0
  8. package/build/application/services/healthService.js.map +1 -1
  9. package/build/commands/mcp/index.d.ts.map +1 -1
  10. package/build/commands/mcp/index.js +10 -0
  11. package/build/commands/mcp/index.js.map +1 -1
  12. package/build/commands/mcp/restart.d.ts +69 -0
  13. package/build/commands/mcp/restart.d.ts.map +1 -0
  14. package/build/commands/mcp/restart.js +259 -0
  15. package/build/commands/mcp/restart.js.map +1 -0
  16. package/build/commands/mcp/status.d.ts +24 -1
  17. package/build/commands/mcp/status.d.ts.map +1 -1
  18. package/build/commands/mcp/status.js +158 -14
  19. package/build/commands/mcp/status.js.map +1 -1
  20. package/build/commands/serve/index.d.ts +8 -0
  21. package/build/commands/serve/index.d.ts.map +1 -1
  22. package/build/commands/serve/index.js +12 -0
  23. package/build/commands/serve/index.js.map +1 -1
  24. package/build/commands/serve/serve.d.ts +13 -0
  25. package/build/commands/serve/serve.d.ts.map +1 -1
  26. package/build/commands/serve/serve.js +111 -57
  27. package/build/commands/serve/serve.js.map +1 -1
  28. package/build/commands/serve/serveBackground.d.ts +48 -26
  29. package/build/commands/serve/serveBackground.d.ts.map +1 -1
  30. package/build/commands/serve/serveBackground.js +230 -61
  31. package/build/commands/serve/serveBackground.js.map +1 -1
  32. package/build/commands/serve/serveRestart.d.ts +1 -1
  33. package/build/commands/serve/serveRestart.js +1 -1
  34. package/build/commands/serve/serveStatus.d.ts +20 -10
  35. package/build/commands/serve/serveStatus.d.ts.map +1 -1
  36. package/build/commands/serve/serveStatus.js +174 -13
  37. package/build/commands/serve/serveStatus.js.map +1 -1
  38. package/build/commands/serve/serveStop.d.ts +13 -4
  39. package/build/commands/serve/serveStop.d.ts.map +1 -1
  40. package/build/commands/serve/serveStop.js +212 -23
  41. package/build/commands/serve/serveStop.js.map +1 -1
  42. package/build/config/configManager.d.ts +2 -0
  43. package/build/config/configManager.d.ts.map +1 -1
  44. package/build/config/configManager.js +19 -8
  45. package/build/config/configManager.js.map +1 -1
  46. package/build/config/mcpConfigMerge.d.ts.map +1 -1
  47. package/build/config/mcpConfigMerge.js +13 -2
  48. package/build/config/mcpConfigMerge.js.map +1 -1
  49. package/build/constants/mcp.d.ts +1 -1
  50. package/build/constants/mcp.js +1 -1
  51. package/build/core/client/clientManager.d.ts +24 -1
  52. package/build/core/client/clientManager.d.ts.map +1 -1
  53. package/build/core/client/clientManager.js +268 -2
  54. package/build/core/client/clientManager.js.map +1 -1
  55. package/build/core/client/connectionHandler.d.ts.map +1 -1
  56. package/build/core/client/connectionHandler.js +18 -1
  57. package/build/core/client/connectionHandler.js.map +1 -1
  58. package/build/core/configChangeHandler.d.ts +1 -0
  59. package/build/core/configChangeHandler.d.ts.map +1 -1
  60. package/build/core/configChangeHandler.js +14 -0
  61. package/build/core/configChangeHandler.js.map +1 -1
  62. package/build/core/loading/mcpLoadingManager.d.ts.map +1 -1
  63. package/build/core/loading/mcpLoadingManager.js +16 -4
  64. package/build/core/loading/mcpLoadingManager.js.map +1 -1
  65. package/build/core/server/backendStdioSupervisor.d.ts +73 -0
  66. package/build/core/server/backendStdioSupervisor.d.ts.map +1 -0
  67. package/build/core/server/backendStdioSupervisor.js +191 -0
  68. package/build/core/server/backendStdioSupervisor.js.map +1 -0
  69. package/build/core/server/backgroundLaunchConfig.d.ts +15 -0
  70. package/build/core/server/backgroundLaunchConfig.d.ts.map +1 -0
  71. package/build/core/server/backgroundLaunchConfig.js +46 -0
  72. package/build/core/server/backgroundLaunchConfig.js.map +1 -0
  73. package/build/core/server/backgroundRuntimeSupervisor.d.ts +44 -0
  74. package/build/core/server/backgroundRuntimeSupervisor.d.ts.map +1 -0
  75. package/build/core/server/backgroundRuntimeSupervisor.js +252 -0
  76. package/build/core/server/backgroundRuntimeSupervisor.js.map +1 -0
  77. package/build/core/server/backgroundRuntimeSupervisorState.d.ts +30 -0
  78. package/build/core/server/backgroundRuntimeSupervisorState.d.ts.map +1 -0
  79. package/build/core/server/backgroundRuntimeSupervisorState.js +81 -0
  80. package/build/core/server/backgroundRuntimeSupervisorState.js.map +1 -0
  81. package/build/core/server/clientInstanceFactory.d.ts.map +1 -1
  82. package/build/core/server/clientInstanceFactory.js +1 -0
  83. package/build/core/server/clientInstanceFactory.js.map +1 -1
  84. package/build/core/server/clientInstancePool.d.ts +17 -5
  85. package/build/core/server/clientInstancePool.d.ts.map +1 -1
  86. package/build/core/server/clientInstancePool.js +198 -33
  87. package/build/core/server/clientInstancePool.js.map +1 -1
  88. package/build/core/server/clientInstancePoolTypes.d.ts +7 -1
  89. package/build/core/server/clientInstancePoolTypes.d.ts.map +1 -1
  90. package/build/core/server/clientInstancePoolTypes.js.map +1 -1
  91. package/build/core/server/runtimeScopeOwnership.d.ts +61 -0
  92. package/build/core/server/runtimeScopeOwnership.d.ts.map +1 -0
  93. package/build/core/server/runtimeScopeOwnership.js +544 -0
  94. package/build/core/server/runtimeScopeOwnership.js.map +1 -0
  95. package/build/core/server/serverManager.d.ts +2 -0
  96. package/build/core/server/serverManager.d.ts.map +1 -1
  97. package/build/core/server/serverManager.js +30 -0
  98. package/build/core/server/serverManager.js.map +1 -1
  99. package/build/core/server/templateIdentity.d.ts +10 -0
  100. package/build/core/server/templateIdentity.d.ts.map +1 -1
  101. package/build/core/server/templateIdentity.js +33 -0
  102. package/build/core/server/templateIdentity.js.map +1 -1
  103. package/build/core/server/templateServerCleanup.d.ts.map +1 -1
  104. package/build/core/server/templateServerCleanup.js +7 -1
  105. package/build/core/server/templateServerCleanup.js.map +1 -1
  106. package/build/core/server/templateServerManager.d.ts +13 -0
  107. package/build/core/server/templateServerManager.d.ts.map +1 -1
  108. package/build/core/server/templateServerManager.js +129 -4
  109. package/build/core/server/templateServerManager.js.map +1 -1
  110. package/build/core/tools/handlers/serverManagementHandler.d.ts +111 -5
  111. package/build/core/tools/handlers/serverManagementHandler.d.ts.map +1 -1
  112. package/build/core/tools/handlers/serverManagementHandler.js +103 -45
  113. package/build/core/tools/handlers/serverManagementHandler.js.map +1 -1
  114. package/build/core/tools/internal/adapters/management/managementAdapter.d.ts +2 -2
  115. package/build/core/tools/internal/adapters/management/managementAdapter.d.ts.map +1 -1
  116. package/build/core/tools/internal/adapters/management/managementAdapter.js +45 -26
  117. package/build/core/tools/internal/adapters/management/managementAdapter.js.map +1 -1
  118. package/build/core/tools/internal/adapters/management/types.d.ts +21 -2
  119. package/build/core/tools/internal/adapters/management/types.d.ts.map +1 -1
  120. package/build/core/tools/internal/managementHandlers.d.ts.map +1 -1
  121. package/build/core/tools/internal/managementHandlers.js +73 -22
  122. package/build/core/tools/internal/managementHandlers.js.map +1 -1
  123. package/build/core/tools/internal/schemas/discovery.d.ts +2 -2
  124. package/build/core/tools/internal/schemas/edit.js +1 -1
  125. package/build/core/tools/internal/schemas/edit.js.map +1 -1
  126. package/build/core/tools/internal/schemas/index.d.ts +77 -6
  127. package/build/core/tools/internal/schemas/index.d.ts.map +1 -1
  128. package/build/core/tools/internal/schemas/management.d.ts +75 -4
  129. package/build/core/tools/internal/schemas/management.d.ts.map +1 -1
  130. package/build/core/tools/internal/schemas/management.js +69 -2
  131. package/build/core/tools/internal/schemas/management.js.map +1 -1
  132. package/build/core/types/client.d.ts +9 -2
  133. package/build/core/types/client.d.ts.map +1 -1
  134. package/build/core/types/client.js +4 -0
  135. package/build/core/types/client.js.map +1 -1
  136. package/build/core/types/transport.d.ts +25 -1
  137. package/build/core/types/transport.d.ts.map +1 -1
  138. package/build/core/types/transport.js +21 -3
  139. package/build/core/types/transport.js.map +1 -1
  140. package/build/domains/admin/adminBackendRestartService.d.ts +41 -0
  141. package/build/domains/admin/adminBackendRestartService.d.ts.map +1 -0
  142. package/build/domains/admin/adminBackendRestartService.js +22 -0
  143. package/build/domains/admin/adminBackendRestartService.js.map +1 -0
  144. package/build/domains/admin/adminDomain.d.ts +7 -0
  145. package/build/domains/admin/adminDomain.d.ts.map +1 -1
  146. package/build/domains/admin/adminDomain.js +13 -0
  147. package/build/domains/admin/adminDomain.js.map +1 -1
  148. package/build/domains/admin/adminOAuthService.d.ts +26 -0
  149. package/build/domains/admin/adminOAuthService.d.ts.map +1 -0
  150. package/build/domains/admin/adminOAuthService.js +71 -0
  151. package/build/domains/admin/adminOAuthService.js.map +1 -0
  152. package/build/domains/admin/adminOperationService.d.ts +1 -0
  153. package/build/domains/admin/adminOperationService.d.ts.map +1 -1
  154. package/build/domains/admin/adminOperationService.js +39 -14
  155. package/build/domains/admin/adminOperationService.js.map +1 -1
  156. package/build/domains/admin/runtimeServerManagerBackendRestartService.d.ts +20 -0
  157. package/build/domains/admin/runtimeServerManagerBackendRestartService.d.ts.map +1 -0
  158. package/build/domains/admin/runtimeServerManagerBackendRestartService.js +78 -0
  159. package/build/domains/admin/runtimeServerManagerBackendRestartService.js.map +1 -0
  160. package/build/server.d.ts.map +1 -1
  161. package/build/server.js +18 -2
  162. package/build/server.js.map +1 -1
  163. package/build/transport/http/routes/adminRoutes.d.ts +4 -0
  164. package/build/transport/http/routes/adminRoutes.d.ts.map +1 -1
  165. package/build/transport/http/routes/adminRoutes.js +280 -22
  166. package/build/transport/http/routes/adminRoutes.js.map +1 -1
  167. package/build/transport/http/routes/healthRoutes.d.ts.map +1 -1
  168. package/build/transport/http/routes/healthRoutes.js +70 -2
  169. package/build/transport/http/routes/healthRoutes.js.map +1 -1
  170. package/build/transport/http/routes/oauthRoutes.d.ts +3 -2
  171. package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -1
  172. package/build/transport/http/routes/oauthRoutes.js +10 -8
  173. package/build/transport/http/routes/oauthRoutes.js.map +1 -1
  174. package/build/transport/http/server.d.ts.map +1 -1
  175. package/build/transport/http/server.js +13 -4
  176. package/build/transport/http/server.js.map +1 -1
  177. package/build/transport/transportFactory.d.ts.map +1 -1
  178. package/build/transport/transportFactory.js +27 -15
  179. package/build/transport/transportFactory.js.map +1 -1
  180. package/build/transport/transportFactory.testSetup.js +2 -0
  181. package/build/transport/transportFactory.testSetup.js.map +1 -1
  182. package/build/utils/core/errorTypes.d.ts +3 -0
  183. package/build/utils/core/errorTypes.d.ts.map +1 -1
  184. package/build/utils/core/errorTypes.js +7 -0
  185. package/build/utils/core/errorTypes.js.map +1 -1
  186. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import type { BackendOAuthDashboardResult } from '../../../auth/oauthAuthorizationFlow.js';
2
2
  import { RuntimeIdentity } from '../../../core/runtime/runtimeIdentityService.js';
3
+ import type { AdminBackendRestartOperations } from '../../../domains/admin/adminBackendRestartService.js';
3
4
  import { type AdminConfiguredServerOperations } from '../../../domains/admin/adminConfiguredServerService.js';
4
5
  import { AdminIdentityService } from '../../../domains/admin/adminIdentityService.js';
6
+ import type { AdminOAuthOperations } from '../../../domains/admin/adminOAuthService.js';
5
7
  import { type AdminPresetOperations } from '../../../domains/admin/adminPresetService.js';
6
8
  import type { AdminMutationAvailability } from '../../../domains/admin/runtimeScopeAdminLock.js';
7
9
  import { Router } from 'express';
@@ -9,7 +11,9 @@ interface AdminRoutesOptions {
9
11
  adminEnabled: boolean;
10
12
  adminService: AdminIdentityService;
11
13
  configuredServerService?: AdminConfiguredServerOperations;
14
+ backendRestartService?: AdminBackendRestartOperations;
12
15
  presetService?: AdminPresetOperations;
16
+ oauthService?: AdminOAuthOperations;
13
17
  adminMutationAvailability?: AdminMutationAvailability;
14
18
  getRuntimeIdentity: () => RuntimeIdentity;
15
19
  getOAuthDashboard?: () => BackendOAuthDashboardResult;
@@ -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;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAGL,KAAK,+BAA+B,EACrC,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EAIL,oBAAoB,EACrB,MAAM,4CAA4C,CAAC;AAMpD,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAG7F,OAAgB,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAC;AA0C7D,UAAU,kBAAkB;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,oBAAoB,CAAC;IACnC,uBAAuB,CAAC,EAAE,+BAA+B,CAAC;IAC1D,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,kBAAkB,EAAE,MAAM,eAAe,CAAC;IAC1C,iBAAiB,CAAC,EAAE,MAAM,2BAA2B,CAAC;IACtD,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAmX5E;AAUD,wBAAgB,mCAAmC,IAAI,MAAM,CAE5D;AA2UD,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;AACvF,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,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;AAI7F,OAAgB,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAC;AA6D7D,UAAU,kBAAkB;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,oBAAoB,CAAC;IACnC,uBAAuB,CAAC,EAAE,+BAA+B,CAAC;IAC1D,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;CAChC;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CA4a5E;AAUD,wBAAgB,mCAAmC,IAAI,MAAM,CAE5D;AAqcD,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,17 +1,24 @@
1
- import { createHash } from 'node:crypto';
1
+ import { createHmac } from 'node:crypto';
2
2
  import fs from 'node:fs';
3
3
  import path from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
+ import { parseTemplateConnectionKey } from '../../../core/server/templateIdentity.js';
5
6
  import { AdminConfiguredServerApplyError, AdminConfiguredServerNotFoundError, } from '../../../domains/admin/adminConfiguredServerService.js';
6
7
  import { ADMIN_SESSION_COOKIE_NAME, AdminIdentityError, } from '../../../domains/admin/adminIdentityService.js';
7
8
  import { AdminPresetConflictError, AdminPresetNotFoundError, } from '../../../domains/admin/adminPresetService.js';
9
+ import { sensitiveOperationLimiter } from '../../../transport/http/middlewares/securityMiddleware.js';
8
10
  import { sanitizeErrorMessage } from '../../../utils/validation/sanitization.js';
9
11
  import express, { Router } from 'express';
12
+ import rateLimit from 'express-rate-limit';
10
13
  import { createRequire } from 'node:module';
11
14
  import { z } from 'zod';
12
15
  const FAILED_LOGIN_LIMIT = 5;
13
16
  const FAILED_LOGIN_WINDOW_MS = 15 * 60 * 1000;
14
17
  const FAILED_LOGIN_MAX_ACTIVE_KEYS = 10_000;
18
+ const ADMIN_AUTH_RATE_LIMIT = 30;
19
+ const ADMIN_AUTH_RATE_LIMIT_WINDOW_MS = 15 * 60 * 1000;
20
+ const ADMIN_STATUS_RATE_LIMIT = 120;
21
+ const ADMIN_STATUS_RATE_LIMIT_WINDOW_MS = 60 * 1000;
15
22
  const ADMIN_USERNAME_MAX_LENGTH = 256;
16
23
  const ADMIN_PASSWORD_MAX_LENGTH = 4096;
17
24
  const CLI_ADMIN_PROTOCOL_VERSION = '1';
@@ -19,16 +26,30 @@ const CLI_ADMIN_RESPONSE_MAX_BYTES = 256 * 1024;
19
26
  const CLI_ADMIN_RESPONSE_TOO_LARGE_MESSAGE = 'CLI Admin response exceeded the maximum supported size; use a narrower or paginated request.';
20
27
  const CLI_SESSION_OPERATIONS = ['admin.login', 'admin.status', 'admin.logout'];
21
28
  const ADMIN_API_PROTOCOL_VERSION = '1';
29
+ const TEMPLATE_INSTANCE_ID_DISPLAY_LENGTH = 12;
22
30
  const packageMetadata = createRequire(import.meta.url)('../../../../package.json');
23
- const CLI_MCP_OPERATIONS = ['mcp.enable', 'mcp.disable'];
31
+ const CLI_CONFIGURED_SERVER_OPERATIONS = ['mcp.enable', 'mcp.disable'];
32
+ const CLI_BACKEND_RESTART_OPERATION = 'mcp.restart';
24
33
  const adminLoginBodySchema = z.object({
25
34
  username: z.string().trim().min(1).max(ADMIN_USERNAME_MAX_LENGTH),
26
35
  password: z.string().min(1).max(ADMIN_PASSWORD_MAX_LENGTH),
27
36
  });
37
+ const adminOAuthServiceParamsSchema = z.object({
38
+ serviceId: z.string().trim().min(1).max(256),
39
+ });
28
40
  const cliConfiguredServerMutationBodySchema = z.object({
29
41
  targetName: z.string().trim().min(1).max(256),
30
42
  dryRun: z.boolean().optional(),
31
43
  });
44
+ const cliBackendRestartBodySchema = z
45
+ .object({
46
+ targetName: z.string().trim().min(1).max(256),
47
+ instance: z.string().trim().min(1).max(64).optional(),
48
+ allInstances: z.boolean().optional(),
49
+ })
50
+ .refine((value) => !(value.instance !== undefined && value.allInstances === true), {
51
+ message: 'instance and allInstances are mutually exclusive',
52
+ });
32
53
  export function createAdminRoutes(options) {
33
54
  if (!options.adminEnabled) {
34
55
  options.adminService.revokeAllSessions();
@@ -36,6 +57,18 @@ export function createAdminRoutes(options) {
36
57
  }
37
58
  const router = Router();
38
59
  const failedLoginLimiter = new FailedLoginLimiter();
60
+ const authenticationLimiter = rateLimit({
61
+ windowMs: ADMIN_AUTH_RATE_LIMIT_WINDOW_MS,
62
+ max: ADMIN_AUTH_RATE_LIMIT,
63
+ standardHeaders: true,
64
+ legacyHeaders: false,
65
+ });
66
+ const statusLimiter = rateLimit({
67
+ windowMs: ADMIN_STATUS_RATE_LIMIT_WINDOW_MS,
68
+ max: ADMIN_STATUS_RATE_LIMIT,
69
+ standardHeaders: true,
70
+ legacyHeaders: false,
71
+ });
39
72
  const adminConsoleAssets = resolveAdminConsoleAssets(options.adminConsoleAssetsDir);
40
73
  options.adminService.bootstrapFirstAdminFromEnvironment();
41
74
  router.get('/cli/v1/capabilities', (req, res) => {
@@ -43,9 +76,18 @@ export function createAdminRoutes(options) {
43
76
  const setupRequired = !options.adminService.hasAdminAccount();
44
77
  const mutationAvailability = cliMutationAvailability(options, setupRequired);
45
78
  const configuredServerOperationsSupported = Boolean(options.configuredServerService);
46
- const mcpMutationsReady = configuredServerOperationsSupported && mutationAvailability.available;
47
- const mcpOperations = configuredServerOperationsSupported ? [...CLI_MCP_OPERATIONS] : [];
48
- const mcpMutationOperations = mcpMutationsReady ? ['enable', 'disable'] : [];
79
+ const backendRestartSupported = Boolean(options.backendRestartService);
80
+ const mcpMutationsReady = (configuredServerOperationsSupported || backendRestartSupported) && mutationAvailability.available;
81
+ const mcpOperations = [
82
+ ...(configuredServerOperationsSupported ? [...CLI_CONFIGURED_SERVER_OPERATIONS] : []),
83
+ ...(backendRestartSupported ? [CLI_BACKEND_RESTART_OPERATION] : []),
84
+ ];
85
+ const mcpMutationOperations = mutationAvailability.available
86
+ ? [
87
+ ...(configuredServerOperationsSupported ? ['enable', 'disable'] : []),
88
+ ...(backendRestartSupported ? ['restart'] : []),
89
+ ]
90
+ : [];
49
91
  const mcpReadinessStatus = cliMcpReadinessStatus(mutationAvailability);
50
92
  sendCliSuccess(req, res, {
51
93
  runtime: toCliRuntimeIdentity(identity),
@@ -67,11 +109,12 @@ export function createAdminRoutes(options) {
67
109
  adminSessions: true,
68
110
  bearerSessionAuth: true,
69
111
  csrfTokens: true,
70
- mcpEnableDisable: mcpMutationsReady,
112
+ mcpEnableDisable: configuredServerOperationsSupported && mutationAvailability.available,
113
+ mcpRestart: backendRestartSupported && mutationAvailability.available,
71
114
  },
72
115
  });
73
116
  });
74
- router.post('/cli/v1/session/login', async (req, res) => {
117
+ router.post('/cli/v1/session/login', authenticationLimiter, async (req, res) => {
75
118
  const parsedBody = adminLoginBodySchema.safeParse(req.body);
76
119
  if (!parsedBody.success) {
77
120
  sendCliError(req, res, {
@@ -143,7 +186,10 @@ export function createAdminRoutes(options) {
143
186
  router.post('/cli/v1/operations/disable-server', async (req, res) => {
144
187
  await handleCliConfiguredServerMutation(req, res, options, 'disableConfiguredServer');
145
188
  });
146
- router.post('/api/session/login', async (req, res) => {
189
+ router.post('/cli/v1/operations/restart-server', async (req, res) => {
190
+ await handleCliBackendRestart(req, res, options);
191
+ });
192
+ router.post('/api/session/login', authenticationLimiter, async (req, res) => {
147
193
  const parsedBody = adminLoginBodySchema.safeParse(req.body);
148
194
  if (!parsedBody.success) {
149
195
  res.status(400).json({ error: 'admin_login_request_invalid' });
@@ -205,7 +251,7 @@ export function createAdminRoutes(options) {
205
251
  clearAdminSessionCookie(res, options.getRuntimeIdentity().externalUrl);
206
252
  res.status(200).json({ ok: true });
207
253
  });
208
- router.get('/api/status', (req, res) => {
254
+ router.get('/api/status', statusLimiter, (req, res) => {
209
255
  const session = options.adminService.validateSession(getAdminSessionCookie(req));
210
256
  if (!session) {
211
257
  res.status(401).json({ authenticated: false });
@@ -231,6 +277,34 @@ export function createAdminRoutes(options) {
231
277
  }),
232
278
  });
233
279
  });
280
+ router.post('/api/oauth/:serviceId/authorize', sensitiveOperationLimiter, async (req, res) => {
281
+ if (!options.oauthService) {
282
+ res.status(503).json({ error: 'backend_oauth_runtime_unavailable' });
283
+ return;
284
+ }
285
+ const serviceId = parseAdminOAuthServiceId(req, res);
286
+ if (!serviceId)
287
+ return;
288
+ const result = await options.oauthService.authorizeService({
289
+ context: buildAdminOperationContext(req, options, { type: 'backend_oauth_service', id: serviceId }),
290
+ serviceId,
291
+ });
292
+ sendAdminOAuthOperationResult(res, result);
293
+ });
294
+ router.post('/api/oauth/:serviceId/restart', sensitiveOperationLimiter, async (req, res) => {
295
+ if (!options.oauthService) {
296
+ res.status(503).json({ error: 'backend_oauth_runtime_unavailable' });
297
+ return;
298
+ }
299
+ const serviceId = parseAdminOAuthServiceId(req, res);
300
+ if (!serviceId)
301
+ return;
302
+ const result = await options.oauthService.restartService({
303
+ context: buildAdminOperationContext(req, options, { type: 'backend_oauth_service', id: serviceId }),
304
+ serviceId,
305
+ });
306
+ sendAdminOAuthOperationResult(res, result);
307
+ });
234
308
  router.get('/api/presets', async (req, res) => {
235
309
  if (!options.presetService)
236
310
  return void res.status(404).json({ error: 'admin_presets_unavailable' });
@@ -374,7 +448,7 @@ function sendAdminConsoleIndex(res, indexPath) {
374
448
  res.status(503).type('text/plain').send('Admin Console assets are not available. Run the package build first.');
375
449
  return;
376
450
  }
377
- res.status(200).sendFile(indexPath);
451
+ res.status(200).sendFile(indexPath, { dotfiles: 'allow' });
378
452
  }
379
453
  function unauthenticatedAdminApiResponse(options) {
380
454
  return options.adminService.hasAdminAccount()
@@ -452,6 +526,109 @@ async function handleCliConfiguredServerMutation(req, res, options, operationNam
452
526
  : await options.configuredServerService.disableConfiguredServer(input);
453
527
  sendCliAdminOperationResult(req, res, result);
454
528
  }
529
+ async function handleCliBackendRestart(req, res, options) {
530
+ if (!options.backendRestartService) {
531
+ sendCliError(req, res, {
532
+ status: 404,
533
+ code: 'backend_restart_unavailable',
534
+ message: 'Backend restart administration is unavailable',
535
+ retryable: false,
536
+ });
537
+ return;
538
+ }
539
+ if (isMutationLocked(options)) {
540
+ sendCliError(req, res, {
541
+ status: 409,
542
+ code: 'runtime_scope_locked',
543
+ message: 'Runtime scope admin mutations are locked by another writer',
544
+ retryable: true,
545
+ details: { operationName: 'restartBackend', reason: 'writer_lock_unavailable' },
546
+ });
547
+ return;
548
+ }
549
+ const sessionToken = getBearerSessionToken(req);
550
+ const session = sessionToken ? options.adminService.validateSession(sessionToken) : null;
551
+ if (!sessionToken || !session) {
552
+ sendCliError(req, res, {
553
+ status: 401,
554
+ code: 'admin_session_required',
555
+ message: 'A valid admin session bearer token is required',
556
+ retryable: false,
557
+ });
558
+ return;
559
+ }
560
+ const parsedBody = cliBackendRestartBodySchema.safeParse(req.body);
561
+ if (!parsedBody.success) {
562
+ sendCliError(req, res, {
563
+ status: 400,
564
+ code: 'validation_request_invalid',
565
+ message: 'Backend targetName and restart selectors must have valid, mutually exclusive values',
566
+ retryable: false,
567
+ });
568
+ return;
569
+ }
570
+ const { targetName, instance, allInstances = false } = parsedBody.data;
571
+ const selection = instance
572
+ ? { mode: 'instance', instanceIdOrPrefix: instance }
573
+ : allInstances
574
+ ? { mode: 'all_instances' }
575
+ : { mode: 'target_default' };
576
+ const context = buildCliAdminOperationContext(req, options, session.account, sessionToken, {
577
+ type: 'backend',
578
+ id: targetName,
579
+ });
580
+ const result = await options.backendRestartService.restartBackend({
581
+ context,
582
+ targetName,
583
+ selection,
584
+ confirmationRequirements: cliBackendRestartConfirmationRequirements(options, targetName),
585
+ });
586
+ if (result.ok && isBackendRestartFailureResult(result.result)) {
587
+ sendCliBackendRestartOutcome(req, res, result.result);
588
+ return;
589
+ }
590
+ sendCliAdminOperationResult(req, res, result);
591
+ }
592
+ function sendCliBackendRestartOutcome(req, res, result) {
593
+ const response = backendRestartFailure(result.outcome);
594
+ sendCliError(req, res, {
595
+ status: response.status,
596
+ code: response.code,
597
+ message: response.message,
598
+ retryable: false,
599
+ details: {
600
+ targetName: result.targetName,
601
+ ...(result.candidateInstanceIds ? { candidateInstanceIds: result.candidateInstanceIds } : {}),
602
+ },
603
+ });
604
+ }
605
+ function isBackendRestartFailureResult(result) {
606
+ return result.outcome !== 'restarted';
607
+ }
608
+ function backendRestartFailure(outcome) {
609
+ switch (outcome) {
610
+ case 'target_not_found':
611
+ return { status: 404, code: 'backend_not_found', message: 'Backend target was not found' };
612
+ case 'target_disabled':
613
+ return { status: 409, code: 'backend_disabled', message: 'Backend target is disabled' };
614
+ case 'instance_not_found':
615
+ return { status: 404, code: 'backend_instance_not_found', message: 'Backend instance was not found' };
616
+ case 'instance_ambiguous':
617
+ return { status: 409, code: 'backend_instance_ambiguous', message: 'Backend instance prefix is ambiguous' };
618
+ case 'no_active_instances':
619
+ return {
620
+ status: 409,
621
+ code: 'backend_no_active_instances',
622
+ message: 'Backend has no active instances to restart',
623
+ };
624
+ case 'no_unhealthy_instances':
625
+ return {
626
+ status: 409,
627
+ code: 'backend_no_unhealthy_instances',
628
+ message: 'Backend has no unhealthy active instances to restart by default',
629
+ };
630
+ }
631
+ }
455
632
  async function handleConfiguredServerDetail(req, res, options) {
456
633
  if (!options.configuredServerService) {
457
634
  res.status(404).json({ error: 'admin_configured_servers_unavailable' });
@@ -623,7 +800,7 @@ async function handleConfiguredServerMutation(req, res, options, operationName)
623
800
  sendAdminOperationResult(res, result);
624
801
  }
625
802
  function cliMutationAvailability(options, setupRequired) {
626
- if (!options.configuredServerService) {
803
+ if (!options.configuredServerService && !options.backendRestartService) {
627
804
  return {
628
805
  available: false,
629
806
  reason: 'mutation_service_unavailable',
@@ -745,9 +922,20 @@ function getBearerSessionToken(req) {
745
922
  if (!authorization) {
746
923
  return undefined;
747
924
  }
748
- const match = authorization.match(/^Bearer\s+(.+)$/i);
749
- const token = match?.[1]?.trim();
750
- return token || undefined;
925
+ const bearerScheme = 'Bearer';
926
+ if (authorization.length <= bearerScheme.length ||
927
+ authorization.slice(0, bearerScheme.length).toLowerCase() !== bearerScheme.toLowerCase()) {
928
+ return undefined;
929
+ }
930
+ let tokenStart = bearerScheme.length;
931
+ if (authorization.charCodeAt(tokenStart) !== 0x20) {
932
+ return undefined;
933
+ }
934
+ while (authorization.charCodeAt(tokenStart) === 0x20) {
935
+ tokenStart += 1;
936
+ }
937
+ const token = authorization.slice(tokenStart);
938
+ return token && !/\s/u.test(token) ? token : undefined;
751
939
  }
752
940
  function isHttpsRuntime(externalUrl) {
753
941
  try {
@@ -864,6 +1052,26 @@ function sendAdminOperationResult(res, result) {
864
1052
  const status = result.status === 'idempotency_key_required' ? 400 : result.status === 'mutation_failed' ? 409 : 409;
865
1053
  res.status(status).json(result);
866
1054
  }
1055
+ function sendAdminOAuthOperationResult(res, result) {
1056
+ if (!result.ok && result.status === 'mutation_failed') {
1057
+ const status = result.error === 'backend_oauth_service_not_found'
1058
+ ? 404
1059
+ : result.error === 'backend_oauth_runtime_unavailable'
1060
+ ? 503
1061
+ : 502;
1062
+ res.status(status).json({ ok: false, error: result.error });
1063
+ return;
1064
+ }
1065
+ sendAdminOperationResult(res, result);
1066
+ }
1067
+ function parseAdminOAuthServiceId(req, res) {
1068
+ const parsed = adminOAuthServiceParamsSchema.safeParse(req.params);
1069
+ if (!parsed.success) {
1070
+ res.status(400).json({ error: 'backend_oauth_service_id_invalid' });
1071
+ return null;
1072
+ }
1073
+ return parsed.data.serviceId;
1074
+ }
867
1075
  async function handlePresetMutation(req, res, options, action) {
868
1076
  if (!options.presetService) {
869
1077
  res.status(404).json({ error: 'admin_presets_unavailable' });
@@ -972,7 +1180,9 @@ function buildAdminOperationContext(req, options, target) {
972
1180
  jsonMode: true,
973
1181
  },
974
1182
  idempotencyKey: req.header('Idempotency-Key'),
975
- requestFingerprint: configuredServerRequestFingerprint(operationName, target.id, req.body),
1183
+ requestFingerprint: target.type === 'backend_oauth_service'
1184
+ ? backendOAuthRequestFingerprint(operationName, target.id)
1185
+ : configuredServerRequestFingerprint(operationName, target.id, req.body),
976
1186
  confirmationFacts: getBodyRecord(req.body, 'confirmationFacts'),
977
1187
  };
978
1188
  }
@@ -1016,6 +1226,19 @@ function cliConfiguredServerConfirmationRequirements(options, targetName, operat
1016
1226
  },
1017
1227
  ];
1018
1228
  }
1229
+ function cliBackendRestartConfirmationRequirements(options, targetName) {
1230
+ const identity = options.getRuntimeIdentity();
1231
+ if (isLoopbackRuntimeUrl(identity.externalUrl)) {
1232
+ return [];
1233
+ }
1234
+ const target = { type: 'backend', id: targetName };
1235
+ return [
1236
+ { code: 'confirm_non_loopback_runtime', expected: true, target },
1237
+ { code: 'confirmedOperation', expected: 'mcp.restart', target },
1238
+ { code: 'confirmedRuntimeScopeId', expected: identity.runtimeScopeId, target },
1239
+ { code: 'confirmationSource', expected: 'cli_flag', target },
1240
+ ];
1241
+ }
1019
1242
  function buildCliAdminOperationContext(req, options, account, sessionToken, target) {
1020
1243
  const runtimeIdentity = options.getRuntimeIdentity();
1021
1244
  const operationName = operationNameForRequest(req);
@@ -1036,31 +1259,51 @@ function buildCliAdminOperationContext(req, options, account, sessionToken, targ
1036
1259
  jsonMode: true,
1037
1260
  },
1038
1261
  idempotencyKey: req.header('Idempotency-Key'),
1039
- requestFingerprint: configuredServerRequestFingerprint(operationName, target.id),
1262
+ requestFingerprint: configuredServerRequestFingerprint(operationName, target.id, req.body),
1040
1263
  confirmationFacts: getBodyRecord(req.body, 'confirmationFacts'),
1041
1264
  };
1042
1265
  }
1043
1266
  function configuredServerRequestFingerprint(operationName, targetName, body) {
1267
+ const previewFingerprint = getBodyString(body, 'previewFingerprint');
1044
1268
  const normalized = stableJsonStringify({
1045
1269
  schemaVersion: 1,
1046
1270
  operationName,
1047
1271
  target: {
1048
- type: 'configured_server',
1272
+ type: operationName === 'restartBackend' ? 'backend' : 'configured_server',
1049
1273
  id: targetName ?? '',
1050
1274
  },
1051
1275
  ...(operationName === 'applyConfiguredServerEdit'
1052
1276
  ? {
1053
- previewFingerprint: getBodyString(body, 'previewFingerprint'),
1054
- editDigest: createHash('sha256')
1055
- .update(stableJsonStringify(getBodyValue(body, 'edit') ?? {}))
1056
- .digest('hex'),
1277
+ previewFingerprint,
1278
+ editDigest: keyedRequestFingerprint(previewFingerprint, 'configured-server-edit', stableJsonStringify(getBodyValue(body, 'edit') ?? {})),
1279
+ }
1280
+ : {}),
1281
+ ...(operationName === 'restartBackend'
1282
+ ? {
1283
+ restartSelection: {
1284
+ instance: getBodyString(body, 'instance'),
1285
+ allInstances: getBodyValue(body, 'allInstances') === true,
1286
+ },
1057
1287
  }
1058
1288
  : {}),
1059
1289
  });
1060
1290
  return operationName === 'applyConfiguredServerEdit'
1061
- ? `configured_server_apply_${createHash('sha256').update(normalized).digest('hex')}`
1291
+ ? `configured_server_apply_${keyedRequestFingerprint(previewFingerprint, 'configured-server-apply', normalized)}`
1062
1292
  : normalized;
1063
1293
  }
1294
+ function keyedRequestFingerprint(key, domain, value) {
1295
+ return createHmac('sha256', key).update(domain).update('\0').update(value).digest('hex');
1296
+ }
1297
+ function backendOAuthRequestFingerprint(operationName, serviceId) {
1298
+ return stableJsonStringify({
1299
+ schemaVersion: 1,
1300
+ operationName,
1301
+ target: {
1302
+ type: 'backend_oauth_service',
1303
+ id: serviceId ?? '',
1304
+ },
1305
+ });
1306
+ }
1064
1307
  function stableJsonStringify(value) {
1065
1308
  if (Array.isArray(value)) {
1066
1309
  return `[${value.map((item) => stableJsonStringify(item)).join(',')}]`;
@@ -1130,6 +1373,12 @@ function cliOperationErrorDetails(result) {
1130
1373
  return details;
1131
1374
  }
1132
1375
  function operationNameForRequest(req) {
1376
+ if (req.path.startsWith('/api/oauth/')) {
1377
+ return req.path.endsWith('/restart') ? 'restartBackendOAuth' : 'authorizeBackendOAuth';
1378
+ }
1379
+ if (req.path.endsWith('/restart-server')) {
1380
+ return 'restartBackend';
1381
+ }
1133
1382
  if (req.path.endsWith('/enable') || req.path.endsWith('/enable-server')) {
1134
1383
  return 'enableConfiguredServer';
1135
1384
  }
@@ -1179,10 +1428,19 @@ function sanitizeOAuthDashboard(dashboard) {
1179
1428
  ...dashboard,
1180
1429
  services: dashboard.services.map((service) => ({
1181
1430
  ...service,
1431
+ id: service.name,
1432
+ displayName: backendOAuthServiceDisplayName(service.name),
1182
1433
  lastError: service.lastError ? sanitizeErrorMessage(service.lastError) : undefined,
1183
1434
  })),
1184
1435
  };
1185
1436
  }
1437
+ function backendOAuthServiceDisplayName(serviceId) {
1438
+ const identity = parseTemplateConnectionKey(serviceId);
1439
+ if (identity.kind !== 'rendered' || identity.renderedHash.length <= TEMPLATE_INSTANCE_ID_DISPLAY_LENGTH) {
1440
+ return serviceId;
1441
+ }
1442
+ return `${identity.templateName}:${identity.renderedHash.slice(0, TEMPLATE_INSTANCE_ID_DISPLAY_LENGTH)}`;
1443
+ }
1186
1444
  function getBodyValue(body, key) {
1187
1445
  if (!body || typeof body !== 'object') {
1188
1446
  return undefined;