@samanhappy/mcphub 0.10.6 → 0.11.1

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 (126) hide show
  1. package/README.fr.md +36 -152
  2. package/README.md +34 -255
  3. package/README.zh.md +33 -212
  4. package/dist/config/DaoConfigService.js +3 -3
  5. package/dist/config/DaoConfigService.js.map +1 -1
  6. package/dist/controllers/authController.js +2 -2
  7. package/dist/controllers/authController.js.map +1 -1
  8. package/dist/controllers/configController.js +32 -5
  9. package/dist/controllers/configController.js.map +1 -1
  10. package/dist/controllers/groupController.js +24 -24
  11. package/dist/controllers/groupController.js.map +1 -1
  12. package/dist/controllers/oauthClientController.js +13 -13
  13. package/dist/controllers/oauthClientController.js.map +1 -1
  14. package/dist/controllers/oauthDynamicRegistrationController.js +9 -9
  15. package/dist/controllers/oauthDynamicRegistrationController.js.map +1 -1
  16. package/dist/controllers/oauthServerController.js +1 -1
  17. package/dist/controllers/oauthServerController.js.map +1 -1
  18. package/dist/controllers/openApiController.js +1 -1
  19. package/dist/controllers/openApiController.js.map +1 -1
  20. package/dist/controllers/serverController.js +134 -96
  21. package/dist/controllers/serverController.js.map +1 -1
  22. package/dist/controllers/userController.js +22 -21
  23. package/dist/controllers/userController.js.map +1 -1
  24. package/dist/dao/DaoFactory.js +43 -0
  25. package/dist/dao/DaoFactory.js.map +1 -1
  26. package/dist/dao/DatabaseDaoFactory.js +86 -0
  27. package/dist/dao/DatabaseDaoFactory.js.map +1 -0
  28. package/dist/dao/GroupDaoDbImpl.js +131 -0
  29. package/dist/dao/GroupDaoDbImpl.js.map +1 -0
  30. package/dist/dao/OAuthClientDao.js +100 -0
  31. package/dist/dao/OAuthClientDao.js.map +1 -0
  32. package/dist/dao/OAuthClientDaoDbImpl.js +83 -0
  33. package/dist/dao/OAuthClientDaoDbImpl.js.map +1 -0
  34. package/dist/dao/OAuthTokenDao.js +161 -0
  35. package/dist/dao/OAuthTokenDao.js.map +1 -0
  36. package/dist/dao/OAuthTokenDaoDbImpl.js +92 -0
  37. package/dist/dao/OAuthTokenDaoDbImpl.js.map +1 -0
  38. package/dist/dao/ServerDaoDbImpl.js +109 -0
  39. package/dist/dao/ServerDaoDbImpl.js.map +1 -0
  40. package/dist/dao/SystemConfigDaoDbImpl.js +56 -0
  41. package/dist/dao/SystemConfigDaoDbImpl.js.map +1 -0
  42. package/dist/dao/UserConfigDaoDbImpl.js +61 -0
  43. package/dist/dao/UserConfigDaoDbImpl.js.map +1 -0
  44. package/dist/dao/UserDaoDbImpl.js +90 -0
  45. package/dist/dao/UserDaoDbImpl.js.map +1 -0
  46. package/dist/dao/index.js +11 -0
  47. package/dist/dao/index.js.map +1 -1
  48. package/dist/db/entities/Group.js +49 -0
  49. package/dist/db/entities/Group.js.map +1 -0
  50. package/dist/db/entities/OAuthClient.js +66 -0
  51. package/dist/db/entities/OAuthClient.js.map +1 -0
  52. package/dist/db/entities/OAuthToken.js +66 -0
  53. package/dist/db/entities/OAuthToken.js.map +1 -0
  54. package/dist/db/entities/Server.js +93 -0
  55. package/dist/db/entities/Server.js.map +1 -0
  56. package/dist/db/entities/SystemConfig.js +66 -0
  57. package/dist/db/entities/SystemConfig.js.map +1 -0
  58. package/dist/db/entities/User.js +45 -0
  59. package/dist/db/entities/User.js.map +1 -0
  60. package/dist/db/entities/UserConfig.js +45 -0
  61. package/dist/db/entities/UserConfig.js.map +1 -0
  62. package/dist/db/entities/index.js +18 -2
  63. package/dist/db/entities/index.js.map +1 -1
  64. package/dist/db/repositories/GroupRepository.js +81 -0
  65. package/dist/db/repositories/GroupRepository.js.map +1 -0
  66. package/dist/db/repositories/OAuthClientRepository.js +68 -0
  67. package/dist/db/repositories/OAuthClientRepository.js.map +1 -0
  68. package/dist/db/repositories/OAuthTokenRepository.js +159 -0
  69. package/dist/db/repositories/OAuthTokenRepository.js.map +1 -0
  70. package/dist/db/repositories/ServerRepository.js +80 -0
  71. package/dist/db/repositories/ServerRepository.js.map +1 -0
  72. package/dist/db/repositories/SystemConfigRepository.js +64 -0
  73. package/dist/db/repositories/SystemConfigRepository.js.map +1 -0
  74. package/dist/db/repositories/UserConfigRepository.js +69 -0
  75. package/dist/db/repositories/UserConfigRepository.js.map +1 -0
  76. package/dist/db/repositories/UserRepository.js +68 -0
  77. package/dist/db/repositories/UserRepository.js.map +1 -0
  78. package/dist/db/repositories/index.js +8 -1
  79. package/dist/db/repositories/index.js.map +1 -1
  80. package/dist/index.js +12 -0
  81. package/dist/index.js.map +1 -1
  82. package/dist/middlewares/auth.js +2 -2
  83. package/dist/middlewares/auth.js.map +1 -1
  84. package/dist/middlewares/userContext.js +1 -1
  85. package/dist/middlewares/userContext.js.map +1 -1
  86. package/dist/models/OAuth.js +90 -122
  87. package/dist/models/OAuth.js.map +1 -1
  88. package/dist/models/User.js +29 -48
  89. package/dist/models/User.js.map +1 -1
  90. package/dist/routes/index.js +2 -1
  91. package/dist/routes/index.js.map +1 -1
  92. package/dist/scripts/migrate-to-database.js +5 -0
  93. package/dist/scripts/migrate-to-database.js.map +1 -0
  94. package/dist/server.js +2 -2
  95. package/dist/server.js.map +1 -1
  96. package/dist/services/groupService.js +87 -113
  97. package/dist/services/groupService.js.map +1 -1
  98. package/dist/services/keepAliveService.js +58 -0
  99. package/dist/services/keepAliveService.js.map +1 -0
  100. package/dist/services/mcpOAuthProvider.js +22 -28
  101. package/dist/services/mcpOAuthProvider.js.map +1 -1
  102. package/dist/services/mcpService.js +73 -92
  103. package/dist/services/mcpService.js.map +1 -1
  104. package/dist/services/oauthServerService.js +26 -20
  105. package/dist/services/oauthServerService.js.map +1 -1
  106. package/dist/services/oauthService.js +11 -10
  107. package/dist/services/oauthService.js.map +1 -1
  108. package/dist/services/oauthSettingsStore.js +17 -12
  109. package/dist/services/oauthSettingsStore.js.map +1 -1
  110. package/dist/services/openApiGeneratorService.js +6 -7
  111. package/dist/services/openApiGeneratorService.js.map +1 -1
  112. package/dist/services/sseService.js +20 -62
  113. package/dist/services/sseService.js.map +1 -1
  114. package/dist/services/userService.js +38 -45
  115. package/dist/services/userService.js.map +1 -1
  116. package/dist/utils/migration.js +235 -0
  117. package/dist/utils/migration.js.map +1 -0
  118. package/dist/utils/oauthBearer.js +4 -4
  119. package/dist/utils/oauthBearer.js.map +1 -1
  120. package/frontend/dist/assets/index-BiA4eB7l.js +251 -0
  121. package/frontend/dist/assets/index-BiA4eB7l.js.map +1 -0
  122. package/frontend/dist/index.html +1 -1
  123. package/mcp_settings.json +23 -1
  124. package/package.json +1 -1
  125. package/frontend/dist/assets/index-DDht0WYq.js +0 -251
  126. package/frontend/dist/assets/index-DDht0WYq.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,8 +1,20 @@
1
1
  import 'reflect-metadata';
2
2
  import AppServer from './server.js';
3
+ import { initializeDatabaseMode } from './utils/migration.js';
3
4
  const appServer = new AppServer();
4
5
  async function boot() {
5
6
  try {
7
+ // Check if database mode is enabled
8
+ // If USE_DB is explicitly set, use its value; otherwise, auto-detect based on DB_URL presence
9
+ const useDatabase = process.env.USE_DB !== undefined ? process.env.USE_DB === 'true' : !!process.env.DB_URL;
10
+ if (useDatabase) {
11
+ console.log('Database mode enabled, initializing...');
12
+ const dbInitialized = await initializeDatabaseMode();
13
+ if (!dbInitialized) {
14
+ console.error('Failed to initialize database mode');
15
+ process.exit(1);
16
+ }
17
+ }
6
18
  await appServer.initialize();
7
19
  appServer.start();
8
20
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AAElC,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;QAC7B,SAAS,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC;AAEP,eAAe,SAAS,CAAC,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AAElC,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,oCAAoC;QACpC,8FAA8F;QAC9F,MAAM,WAAW,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAC1F,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACtD,MAAM,aAAa,GAAG,MAAM,sBAAsB,EAAE,CAAC;YACrD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;QAC7B,SAAS,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC;AAEP,eAAe,SAAS,CAAC,MAAM,EAAE,CAAC"}
@@ -54,11 +54,11 @@ export const auth = async (req, res, next) => {
54
54
  const authHeader = req.headers.authorization;
55
55
  if (authHeader && authHeader.startsWith('Bearer ') && isOAuthServerEnabled()) {
56
56
  const accessToken = authHeader.substring(7);
57
- const oauthToken = getToken(accessToken);
57
+ const oauthToken = await getToken(accessToken);
58
58
  if (oauthToken && oauthToken.accessToken === accessToken) {
59
59
  // Valid OAuth token - look up user to get admin status
60
60
  const { findUserByUsername } = await import('../models/User.js');
61
- const user = findUserByUsername(oauthToken.username);
61
+ const user = await findUserByUsername(oauthToken.username);
62
62
  // Set user context with proper admin status
63
63
  req.user = {
64
64
  username: oauthToken.username,
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middlewares/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middlewares/auth.ts"],"names":[],"mappings":"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"}
@@ -61,7 +61,7 @@ export const sseUserContextMiddleware = async (req, res, next) => {
61
61
  const rawAuthHeader = Array.isArray(req.headers.authorization)
62
62
  ? req.headers.authorization[0]
63
63
  : req.headers.authorization;
64
- const bearerUser = resolveOAuthUserFromAuthHeader(rawAuthHeader);
64
+ const bearerUser = await resolveOAuthUserFromAuthHeader(rawAuthHeader);
65
65
  if (bearerUser) {
66
66
  userContextService.setCurrentUser(bearerUser);
67
67
  attachCleanupHandlers();
@@ -1 +1 @@
1
- {"version":3,"file":"userContext.js","sourceRoot":"","sources":["../../src/middlewares/userContext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"userContext.js","sourceRoot":"","sources":["../../src/middlewares/userContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAEzE;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,GAAY,EACZ,GAAa,EACb,IAAkB,EACH,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,WAAW,GAAI,GAAW,CAAC,IAAa,CAAC;QAE/C,IAAI,WAAW,EAAE,CAAC;YAChB,mBAAmB;YACnB,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;YAC5D,kBAAkB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YAE/C,2CAA2C;YAC3C,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACpB,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;gBAC5D,kBAAkB,CAAC,gBAAgB,EAAE,CAAC;YACxC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,EAAE,CAAC;IACT,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC3C,GAAY,EACZ,GAAa,EACb,IAAkB,EACH,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;QAC5D,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QACjC,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YACD,SAAS,GAAG,IAAI,CAAC;YACjB,kBAAkB,CAAC,gBAAgB,EAAE,CAAC;QACxC,CAAC,CAAC;QACF,MAAM,qBAAqB,GAAG,GAAG,EAAE;YACjC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC1B,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,IAAI,QAAQ,EAAE,CAAC;YACb,+CAA+C;YAC/C,sEAAsE;YACtE,6BAA6B;YAC7B,MAAM,IAAI,GAAU;gBAClB,QAAQ;gBACR,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE,KAAK,EAAE,+CAA+C;aAChE,CAAC;YAEF,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACxC,qBAAqB,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;gBAC5D,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC9B,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;YAC9B,MAAM,UAAU,GAAG,MAAM,8BAA8B,CAAC,aAAa,CAAC,CAAC;YAEvE,IAAI,UAAU,EAAE,CAAC;gBACf,kBAAkB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC9C,qBAAqB,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,gDAAgD,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACrF,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAED,IAAI,EAAE,CAAC;IACT,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAWF,MAAM,OAAO,2BAA2B;IAC9B,qBAAqB;QAC3B,OAAO,kBAAkB,CAAC,WAAW,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,yBAAyB;QAC7B,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACxD,OAAO,kBAAkB,CAAC,cAAc,EAAE,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,QAAgB;QAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,kBAAkB,CAAC,cAAc,EAAE,CAAC;QAEjD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,mBAAmB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEnE,kDAAkD;QAClD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,+BAA+B;gBACrC,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,MAAM,EAAE,MAAM;aACf,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,8BAA8B;gBACpC,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,MAAM,EAAE,SAAS;aAClB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACxD,OAAO,kBAAkB,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC;CACF"}
@@ -1,96 +1,74 @@
1
1
  import crypto from 'crypto';
2
- import { loadSettings, saveSettings } from '../config/index.js';
3
- // In-memory storage for authorization codes and tokens
4
- // Authorization codes are short-lived and kept in memory only.
5
- // Tokens are mirrored to settings (mcp_settings.json) for persistence.
2
+ import { getOAuthClientDao, getOAuthTokenDao } from '../dao/index.js';
3
+ // In-memory storage for authorization codes (short-lived, no persistence needed)
6
4
  const authorizationCodes = new Map();
7
- const tokens = new Map();
8
- // Initialize token store from settings on first import
9
- (() => {
5
+ // In-memory cache for tokens (also persisted via DAO)
6
+ const tokensCache = new Map();
7
+ // Flag to track if we've initialized from DAO
8
+ let initialized = false;
9
+ /**
10
+ * Initialize token cache from DAO (async)
11
+ */
12
+ const initializeTokenCache = async () => {
13
+ if (initialized)
14
+ return;
15
+ initialized = true;
10
16
  try {
11
- const settings = loadSettings();
12
- if (Array.isArray(settings.oauthTokens)) {
13
- for (const stored of settings.oauthTokens) {
14
- const token = {
15
- ...stored,
16
- accessTokenExpiresAt: new Date(stored.accessTokenExpiresAt),
17
- refreshTokenExpiresAt: stored.refreshTokenExpiresAt
18
- ? new Date(stored.refreshTokenExpiresAt)
19
- : undefined,
20
- };
21
- tokens.set(token.accessToken, token);
22
- if (token.refreshToken) {
23
- tokens.set(token.refreshToken, token);
24
- }
17
+ const tokenDao = getOAuthTokenDao();
18
+ const allTokens = await tokenDao.findAll();
19
+ for (const token of allTokens) {
20
+ tokensCache.set(token.accessToken, token);
21
+ if (token.refreshToken) {
22
+ tokensCache.set(token.refreshToken, token);
25
23
  }
26
24
  }
27
25
  }
28
26
  catch (error) {
29
- console.error('Failed to initialize OAuth tokens from settings:', error);
27
+ console.error('Failed to initialize OAuth tokens from DAO:', error);
30
28
  }
31
- })();
29
+ };
30
+ // Initialize on module load (fire and forget for backward compatibility)
31
+ initializeTokenCache().catch(console.error);
32
32
  /**
33
33
  * Get all OAuth clients from configuration
34
34
  */
35
- export const getOAuthClients = () => {
36
- const settings = loadSettings();
37
- return settings.oauthClients || [];
35
+ export const getOAuthClients = async () => {
36
+ const clientDao = getOAuthClientDao();
37
+ return clientDao.findAll();
38
38
  };
39
39
  /**
40
40
  * Find OAuth client by client ID
41
41
  */
42
- export const findOAuthClientById = (clientId) => {
43
- const clients = getOAuthClients();
44
- return clients.find((c) => c.clientId === clientId);
42
+ export const findOAuthClientById = async (clientId) => {
43
+ const clientDao = getOAuthClientDao();
44
+ const client = await clientDao.findByClientId(clientId);
45
+ return client || undefined;
45
46
  };
46
47
  /**
47
48
  * Create a new OAuth client
48
49
  */
49
- export const createOAuthClient = (client) => {
50
- const settings = loadSettings();
51
- if (!settings.oauthClients) {
52
- settings.oauthClients = [];
53
- }
50
+ export const createOAuthClient = async (client) => {
51
+ const clientDao = getOAuthClientDao();
54
52
  // Check if client already exists
55
- const existing = settings.oauthClients.find((c) => c.clientId === client.clientId);
53
+ const existing = await clientDao.findByClientId(client.clientId);
56
54
  if (existing) {
57
55
  throw new Error(`OAuth client with ID ${client.clientId} already exists`);
58
56
  }
59
- settings.oauthClients.push(client);
60
- saveSettings(settings);
61
- return client;
57
+ return clientDao.create(client);
62
58
  };
63
59
  /**
64
60
  * Update an existing OAuth client
65
61
  */
66
- export const updateOAuthClient = (clientId, updates) => {
67
- const settings = loadSettings();
68
- if (!settings.oauthClients) {
69
- return null;
70
- }
71
- const index = settings.oauthClients.findIndex((c) => c.clientId === clientId);
72
- if (index === -1) {
73
- return null;
74
- }
75
- settings.oauthClients[index] = { ...settings.oauthClients[index], ...updates };
76
- saveSettings(settings);
77
- return settings.oauthClients[index];
62
+ export const updateOAuthClient = async (clientId, updates) => {
63
+ const clientDao = getOAuthClientDao();
64
+ return clientDao.update(clientId, updates);
78
65
  };
79
66
  /**
80
67
  * Delete an OAuth client
81
68
  */
82
- export const deleteOAuthClient = (clientId) => {
83
- const settings = loadSettings();
84
- if (!settings.oauthClients) {
85
- return false;
86
- }
87
- const index = settings.oauthClients.findIndex((c) => c.clientId === clientId);
88
- if (index === -1) {
89
- return false;
90
- }
91
- settings.oauthClients.splice(index, 1);
92
- saveSettings(settings);
93
- return true;
69
+ export const deleteOAuthClient = async (clientId) => {
70
+ const clientDao = getOAuthClientDao();
71
+ return clientDao.delete(clientId);
94
72
  };
95
73
  /**
96
74
  * Generate a secure random token
@@ -135,7 +113,7 @@ export const revokeAuthorizationCode = (code) => {
135
113
  /**
136
114
  * Save access token and optionally refresh token
137
115
  */
138
- export const saveToken = (tokenData, accessTokenLifetime = 3600, refreshTokenLifetime) => {
116
+ export const saveToken = async (tokenData, accessTokenLifetime = 3600, refreshTokenLifetime) => {
139
117
  const accessToken = generateToken();
140
118
  const accessTokenExpiresAt = new Date(Date.now() + accessTokenLifetime * 1000);
141
119
  let refreshToken;
@@ -151,36 +129,42 @@ export const saveToken = (tokenData, accessTokenLifetime = 3600, refreshTokenLif
151
129
  refreshTokenExpiresAt,
152
130
  ...tokenData,
153
131
  };
154
- tokens.set(accessToken, token);
132
+ // Update cache
133
+ tokensCache.set(accessToken, token);
155
134
  if (refreshToken) {
156
- tokens.set(refreshToken, token);
135
+ tokensCache.set(refreshToken, token);
157
136
  }
158
- // Persist tokens to settings
137
+ // Persist to DAO
159
138
  try {
160
- const settings = loadSettings();
161
- const existing = settings.oauthTokens || [];
162
- const filtered = existing.filter((t) => t.accessToken !== token.accessToken && t.refreshToken !== token.refreshToken);
163
- const updated = [
164
- ...filtered,
165
- {
166
- ...token,
167
- accessTokenExpiresAt: token.accessTokenExpiresAt,
168
- refreshTokenExpiresAt: token.refreshTokenExpiresAt,
169
- },
170
- ];
171
- settings.oauthTokens = updated;
172
- saveSettings(settings);
139
+ const tokenDao = getOAuthTokenDao();
140
+ await tokenDao.create(token);
173
141
  }
174
142
  catch (error) {
175
- console.error('Failed to persist OAuth token to settings:', error);
143
+ console.error('Failed to persist OAuth token to DAO:', error);
176
144
  }
177
145
  return token;
178
146
  };
179
147
  /**
180
148
  * Get token by access token or refresh token
181
149
  */
182
- export const getToken = (token) => {
183
- const tokenData = tokens.get(token);
150
+ export const getToken = async (token) => {
151
+ // First check cache
152
+ let tokenData = tokensCache.get(token);
153
+ // If not in cache, try DAO
154
+ if (!tokenData) {
155
+ const tokenDao = getOAuthTokenDao();
156
+ tokenData =
157
+ (await tokenDao.findByAccessToken(token)) ||
158
+ (await tokenDao.findByRefreshToken(token)) ||
159
+ undefined;
160
+ // Update cache if found
161
+ if (tokenData) {
162
+ tokensCache.set(tokenData.accessToken, tokenData);
163
+ if (tokenData.refreshToken) {
164
+ tokensCache.set(tokenData.refreshToken, tokenData);
165
+ }
166
+ }
167
+ }
184
168
  if (!tokenData) {
185
169
  return undefined;
186
170
  }
@@ -199,30 +183,27 @@ export const getToken = (token) => {
199
183
  /**
200
184
  * Revoke token (both access and refresh tokens)
201
185
  */
202
- export const revokeToken = (token) => {
203
- const tokenData = tokens.get(token);
186
+ export const revokeToken = async (token) => {
187
+ const tokenData = tokensCache.get(token);
204
188
  if (tokenData) {
205
- tokens.delete(tokenData.accessToken);
189
+ tokensCache.delete(tokenData.accessToken);
206
190
  if (tokenData.refreshToken) {
207
- tokens.delete(tokenData.refreshToken);
208
- }
209
- // Also remove from persisted settings
210
- try {
211
- const settings = loadSettings();
212
- if (Array.isArray(settings.oauthTokens)) {
213
- settings.oauthTokens = settings.oauthTokens.filter((t) => t.accessToken !== tokenData.accessToken && t.refreshToken !== tokenData.refreshToken);
214
- saveSettings(settings);
215
- }
216
- }
217
- catch (error) {
218
- console.error('Failed to remove OAuth token from settings:', error);
191
+ tokensCache.delete(tokenData.refreshToken);
219
192
  }
220
193
  }
194
+ // Also remove from DAO
195
+ try {
196
+ const tokenDao = getOAuthTokenDao();
197
+ await tokenDao.revokeToken(token);
198
+ }
199
+ catch (error) {
200
+ console.error('Failed to remove OAuth token from DAO:', error);
201
+ }
221
202
  };
222
203
  /**
223
204
  * Clean up expired codes and tokens (should be called periodically)
224
205
  */
225
- export const cleanupExpired = () => {
206
+ export const cleanupExpired = async () => {
226
207
  const now = new Date();
227
208
  // Clean up expired authorization codes
228
209
  for (const [code, authCode] of authorizationCodes.entries()) {
@@ -230,9 +211,9 @@ export const cleanupExpired = () => {
230
211
  authorizationCodes.delete(code);
231
212
  }
232
213
  }
233
- // Clean up expired tokens
214
+ // Clean up expired tokens from cache
234
215
  const processedTokens = new Set();
235
- for (const [_key, token] of tokens.entries()) {
216
+ for (const [_key, token] of tokensCache.entries()) {
236
217
  // Skip if we've already processed this token
237
218
  if (processedTokens.has(token.accessToken)) {
238
219
  continue;
@@ -240,33 +221,18 @@ export const cleanupExpired = () => {
240
221
  processedTokens.add(token.accessToken);
241
222
  const accessExpired = token.accessTokenExpiresAt < now;
242
223
  const refreshExpired = token.refreshTokenExpiresAt && token.refreshTokenExpiresAt < now;
243
- // If both are expired, remove the token
224
+ // If both are expired, remove from cache
244
225
  if (accessExpired && (!token.refreshToken || refreshExpired)) {
245
- tokens.delete(token.accessToken);
226
+ tokensCache.delete(token.accessToken);
246
227
  if (token.refreshToken) {
247
- tokens.delete(token.refreshToken);
228
+ tokensCache.delete(token.refreshToken);
248
229
  }
249
230
  }
250
231
  }
251
- // Sync persisted tokens: keep only non-expired ones
232
+ // Clean up expired tokens from DAO
252
233
  try {
253
- const settings = loadSettings();
254
- if (Array.isArray(settings.oauthTokens)) {
255
- const validTokens = [];
256
- for (const stored of settings.oauthTokens) {
257
- const accessExpiresAt = new Date(stored.accessTokenExpiresAt);
258
- const refreshExpiresAt = stored.refreshTokenExpiresAt
259
- ? new Date(stored.refreshTokenExpiresAt)
260
- : undefined;
261
- const accessExpired = accessExpiresAt < now;
262
- const refreshExpired = refreshExpiresAt && refreshExpiresAt < now;
263
- if (!accessExpired || (stored.refreshToken && !refreshExpired)) {
264
- validTokens.push(stored);
265
- }
266
- }
267
- settings.oauthTokens = validTokens;
268
- saveSettings(settings);
269
- }
234
+ const tokenDao = getOAuthTokenDao();
235
+ await tokenDao.cleanupExpired();
270
236
  }
271
237
  catch (error) {
272
238
  console.error('Failed to cleanup persisted OAuth tokens:', error);
@@ -275,7 +241,9 @@ export const cleanupExpired = () => {
275
241
  // Run cleanup every 5 minutes in production
276
242
  let cleanupIntervalId = null;
277
243
  if (process.env.NODE_ENV !== 'test') {
278
- cleanupIntervalId = setInterval(cleanupExpired, 5 * 60 * 1000);
244
+ cleanupIntervalId = setInterval(() => {
245
+ cleanupExpired().catch(console.error);
246
+ }, 5 * 60 * 1000);
279
247
  // Allow the interval to not keep the process alive
280
248
  cleanupIntervalId.unref();
281
249
  }
@@ -1 +1 @@
1
- {"version":3,"file":"OAuth.js","sourceRoot":"","sources":["../../src/models/OAuth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OAuth.js","sourceRoot":"","sources":["../../src/models/OAuth.ts"],"names":[],"mappings":"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"}
@@ -1,50 +1,38 @@
1
1
  import bcrypt from 'bcryptjs';
2
- import { loadSettings, saveSettings } from '../config/index.js';
2
+ import { getUserDao } from '../dao/index.js';
3
3
  // Get all users
4
- export const getUsers = () => {
4
+ export const getUsers = async () => {
5
5
  try {
6
- const settings = loadSettings();
7
- return settings.users || [];
6
+ const userDao = getUserDao();
7
+ return await userDao.findAll();
8
8
  }
9
9
  catch (error) {
10
- console.error('Error reading users from settings:', error);
10
+ console.error('Error reading users:', error);
11
11
  return [];
12
12
  }
13
13
  };
14
- // Save users to settings
15
- const saveUsers = (users) => {
14
+ // Create a new user
15
+ export const createUser = async (userData) => {
16
16
  try {
17
- const settings = loadSettings();
18
- settings.users = users;
19
- saveSettings(settings);
17
+ const userDao = getUserDao();
18
+ return await userDao.createWithHashedPassword(userData.username, userData.password, userData.isAdmin);
20
19
  }
21
20
  catch (error) {
22
- console.error('Error saving users to settings:', error);
23
- }
24
- };
25
- // Create a new user
26
- export const createUser = async (userData) => {
27
- const users = getUsers();
28
- // Check if username already exists
29
- if (users.some((user) => user.username === userData.username)) {
21
+ console.error('Error creating user:', error);
30
22
  return null;
31
23
  }
32
- // Hash the password
33
- const salt = await bcrypt.genSalt(10);
34
- const hashedPassword = await bcrypt.hash(userData.password, salt);
35
- const newUser = {
36
- username: userData.username,
37
- password: hashedPassword,
38
- isAdmin: userData.isAdmin || false,
39
- };
40
- users.push(newUser);
41
- saveUsers(users);
42
- return newUser;
43
24
  };
44
25
  // Find user by username
45
- export const findUserByUsername = (username) => {
46
- const users = getUsers();
47
- return users.find((user) => user.username === username);
26
+ export const findUserByUsername = async (username) => {
27
+ try {
28
+ const userDao = getUserDao();
29
+ const user = await userDao.findByUsername(username);
30
+ return user || undefined;
31
+ }
32
+ catch (error) {
33
+ console.error('Error finding user:', error);
34
+ return undefined;
35
+ }
48
36
  };
49
37
  // Verify user password
50
38
  export const verifyPassword = async (plainPassword, hashedPassword) => {
@@ -52,28 +40,21 @@ export const verifyPassword = async (plainPassword, hashedPassword) => {
52
40
  };
53
41
  // Update user password
54
42
  export const updateUserPassword = async (username, newPassword) => {
55
- const users = getUsers();
56
- const userIndex = users.findIndex((user) => user.username === username);
57
- if (userIndex === -1) {
43
+ try {
44
+ const userDao = getUserDao();
45
+ return await userDao.updatePassword(username, newPassword);
46
+ }
47
+ catch (error) {
48
+ console.error('Error updating password:', error);
58
49
  return false;
59
50
  }
60
- // Hash the new password
61
- const salt = await bcrypt.genSalt(10);
62
- const hashedPassword = await bcrypt.hash(newPassword, salt);
63
- // Update the user's password
64
- users[userIndex].password = hashedPassword;
65
- saveUsers(users);
66
- return true;
67
51
  };
68
52
  // Initialize with default admin user if no users exist
69
53
  export const initializeDefaultUser = async () => {
70
- const users = getUsers();
54
+ const userDao = getUserDao();
55
+ const users = await userDao.findAll();
71
56
  if (users.length === 0) {
72
- await createUser({
73
- username: 'admin',
74
- password: 'admin123',
75
- isAdmin: true,
76
- });
57
+ await userDao.createWithHashedPassword('admin', 'admin123', true);
77
58
  console.log('Default admin user created');
78
59
  }
79
60
  };
@@ -1 +1 @@
1
- {"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/models/User.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/models/User.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,gBAAgB;AAChB,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,IAAsB,EAAE;IACnD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,OAAO,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEF,oBAAoB;AACpB,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,QAAe,EAAyB,EAAE;IACzE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,OAAO,MAAM,OAAO,CAAC,wBAAwB,CAC3C,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,OAAO,CACjB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,wBAAwB;AACxB,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,QAAgB,EAA8B,EAAE;IACvF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO,IAAI,IAAI,SAAS,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,uBAAuB;AACvB,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,aAAqB,EACrB,cAAsB,EACJ,EAAE;IACpB,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,uBAAuB;AACvB,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,QAAgB,EAChB,WAAmB,EACD,EAAE;IACpB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,OAAO,MAAM,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,uDAAuD;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,IAAmB,EAAE;IAC7D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAEtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,CAAC,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import express from 'express';
2
2
  import { check } from 'express-validator';
3
3
  import config from '../config/index.js';
4
- import { getAllServers, getAllSettings, createServer, updateServer, deleteServer, toggleServer, toggleTool, updateToolDescription, togglePrompt, updatePromptDescription, updateSystemConfig, } from '../controllers/serverController.js';
4
+ import { getAllServers, getAllSettings, getServerConfig, createServer, updateServer, deleteServer, toggleServer, toggleTool, updateToolDescription, togglePrompt, updatePromptDescription, updateSystemConfig, } from '../controllers/serverController.js';
5
5
  import { getGroups, getGroup, createNewGroup, updateExistingGroup, deleteExistingGroup, addServerToExistingGroup, removeServerFromExistingGroup, getGroupServers, updateGroupServersBatch, getGroupServerConfigs, getGroupServerConfig, updateGroupServerTools, } from '../controllers/groupController.js';
6
6
  import { getUsers, getUser, createUser, updateExistingUser, deleteExistingUser, getUserStats, } from '../controllers/userController.js';
7
7
  import { getAllMarketServers, getMarketServer, getAllMarketCategories, getAllMarketTags, searchMarketServersByQuery, getMarketServersByCategory, getMarketServersByTag, } from '../controllers/marketController.js';
@@ -40,6 +40,7 @@ export const initRoutes = (app) => {
40
40
  app.delete('/oauth/register/:clientId', deleteClientRegistration); // Delete client registration
41
41
  // API routes protected by auth middleware in middlewares/index.ts
42
42
  router.get('/servers', getAllServers);
43
+ router.get('/servers/:name', getServerConfig);
43
44
  router.get('/settings', getAllSettings);
44
45
  router.post('/servers', createServer);
45
46
  router.put('/servers/:name', updateServer);