@samanhappy/mcphub 1.0.31 → 1.0.32

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 (267) hide show
  1. package/dist/betterAuth.js +13 -5
  2. package/dist/betterAuth.js.map +1 -1
  3. package/dist/cli/commands/cache.js.map +1 -1
  4. package/dist/cli/commands/call.js +2 -2
  5. package/dist/cli/commands/call.js.map +1 -1
  6. package/dist/cli/commands/config.js.map +1 -1
  7. package/dist/cli/commands/discover.js.map +1 -1
  8. package/dist/cli/commands/export.js.map +1 -1
  9. package/dist/cli/commands/groups.js.map +1 -1
  10. package/dist/cli/commands/install.js +1 -1
  11. package/dist/cli/commands/install.js.map +1 -1
  12. package/dist/cli/commands/keys.js.map +1 -1
  13. package/dist/cli/commands/login.js.map +1 -1
  14. package/dist/cli/commands/servers.js.map +1 -1
  15. package/dist/cli/commands/tools.js +2 -2
  16. package/dist/cli/commands/tools.js.map +1 -1
  17. package/dist/cli/context.js +1 -1
  18. package/dist/cli/context.js.map +1 -1
  19. package/dist/cli/http.js +3 -1
  20. package/dist/cli/http.js.map +1 -1
  21. package/dist/clients/openapi.js +62 -7
  22. package/dist/clients/openapi.js.map +1 -1
  23. package/dist/config/DaoConfigService.js +3 -2
  24. package/dist/config/DaoConfigService.js.map +1 -1
  25. package/dist/config/configManager.js +9 -8
  26. package/dist/config/configManager.js.map +1 -1
  27. package/dist/config/index.js +30 -6
  28. package/dist/config/index.js.map +1 -1
  29. package/dist/config/jwt.js +2 -1
  30. package/dist/config/jwt.js.map +1 -1
  31. package/dist/config/migrationUtils.js +46 -45
  32. package/dist/config/migrationUtils.js.map +1 -1
  33. package/dist/constants/oauthServerDefaults.js.map +1 -1
  34. package/dist/controllers/activityController.js +6 -5
  35. package/dist/controllers/activityController.js.map +1 -1
  36. package/dist/controllers/authController.js +5 -4
  37. package/dist/controllers/authController.js.map +1 -1
  38. package/dist/controllers/bearerKeyController.js +7 -6
  39. package/dist/controllers/bearerKeyController.js.map +1 -1
  40. package/dist/controllers/betterAuthController.js +2 -1
  41. package/dist/controllers/betterAuthController.js.map +1 -1
  42. package/dist/controllers/builtinPromptController.js +13 -5
  43. package/dist/controllers/builtinPromptController.js.map +1 -1
  44. package/dist/controllers/builtinResourceController.js +14 -6
  45. package/dist/controllers/builtinResourceController.js.map +1 -1
  46. package/dist/controllers/changelogController.js +5 -2
  47. package/dist/controllers/changelogController.js.map +1 -1
  48. package/dist/controllers/cloudController.js +11 -10
  49. package/dist/controllers/cloudController.js.map +1 -1
  50. package/dist/controllers/configController.js +4 -3
  51. package/dist/controllers/configController.js.map +1 -1
  52. package/dist/controllers/contextCostController.js +3 -2
  53. package/dist/controllers/contextCostController.js.map +1 -1
  54. package/dist/controllers/groupController.js +2 -1
  55. package/dist/controllers/groupController.js.map +1 -1
  56. package/dist/controllers/healthController.js +2 -1
  57. package/dist/controllers/healthController.js.map +1 -1
  58. package/dist/controllers/hostedInternalController.js +2 -1
  59. package/dist/controllers/hostedInternalController.js.map +1 -1
  60. package/dist/controllers/logController.js +5 -4
  61. package/dist/controllers/logController.js.map +1 -1
  62. package/dist/controllers/mcpbController.js +17 -7
  63. package/dist/controllers/mcpbController.js.map +1 -1
  64. package/dist/controllers/oauthCallbackController.js +28 -27
  65. package/dist/controllers/oauthCallbackController.js.map +1 -1
  66. package/dist/controllers/oauthClientController.js +7 -6
  67. package/dist/controllers/oauthClientController.js.map +1 -1
  68. package/dist/controllers/oauthDynamicRegistrationController.js +22 -4
  69. package/dist/controllers/oauthDynamicRegistrationController.js.map +1 -1
  70. package/dist/controllers/oauthServerController.js +22 -11
  71. package/dist/controllers/oauthServerController.js.map +1 -1
  72. package/dist/controllers/openApiController.js +7 -6
  73. package/dist/controllers/openApiController.js.map +1 -1
  74. package/dist/controllers/promptController.js +2 -1
  75. package/dist/controllers/promptController.js.map +1 -1
  76. package/dist/controllers/registryController.js +4 -3
  77. package/dist/controllers/registryController.js.map +1 -1
  78. package/dist/controllers/serverController.js +46 -34
  79. package/dist/controllers/serverController.js.map +1 -1
  80. package/dist/controllers/templateController.js +2 -1
  81. package/dist/controllers/templateController.js.map +1 -1
  82. package/dist/controllers/toolController.js +2 -1
  83. package/dist/controllers/toolController.js.map +1 -1
  84. package/dist/dao/DaoFactory.js +3 -2
  85. package/dist/dao/DaoFactory.js.map +1 -1
  86. package/dist/dao/ServerDao.js.map +1 -1
  87. package/dist/dao/UserConfigDaoDbImpl.js.map +1 -1
  88. package/dist/dao/UserDao.js.map +1 -1
  89. package/dist/dao/base/JsonFileBaseDao.js +3 -2
  90. package/dist/dao/base/JsonFileBaseDao.js.map +1 -1
  91. package/dist/dao/examples.js +35 -34
  92. package/dist/dao/examples.js.map +1 -1
  93. package/dist/db/connection.js +59 -58
  94. package/dist/db/connection.js.map +1 -1
  95. package/dist/db/index.js +2 -1
  96. package/dist/db/index.js.map +1 -1
  97. package/dist/db/repositories/ServerRepository.js +3 -3
  98. package/dist/db/repositories/ServerRepository.js.map +1 -1
  99. package/dist/db/repositories/SystemConfigRepository.js +2 -1
  100. package/dist/db/repositories/SystemConfigRepository.js.map +1 -1
  101. package/dist/db/repositories/UserConfigRepository.js.map +1 -1
  102. package/dist/db/repositories/VectorEmbeddingRepository.js +6 -5
  103. package/dist/db/repositories/VectorEmbeddingRepository.js.map +1 -1
  104. package/dist/index.js +28 -19
  105. package/dist/index.js.map +1 -1
  106. package/dist/middlewares/auth.js +4 -3
  107. package/dist/middlewares/auth.js.map +1 -1
  108. package/dist/middlewares/index.js +2 -1
  109. package/dist/middlewares/index.js.map +1 -1
  110. package/dist/middlewares/userContext.js +7 -6
  111. package/dist/middlewares/userContext.js.map +1 -1
  112. package/dist/models/OAuth.js +7 -6
  113. package/dist/models/OAuth.js.map +1 -1
  114. package/dist/models/User.js +13 -12
  115. package/dist/models/User.js.map +1 -1
  116. package/dist/routes/index.js +9 -9
  117. package/dist/routes/index.js.map +1 -1
  118. package/dist/scripts/dao-demo.js +28 -27
  119. package/dist/scripts/dao-demo.js.map +1 -1
  120. package/dist/server.js +36 -30
  121. package/dist/server.js.map +1 -1
  122. package/dist/services/activityLoggingService.js +3 -2
  123. package/dist/services/activityLoggingService.js.map +1 -1
  124. package/dist/services/betterAuthConfig.js +1 -4
  125. package/dist/services/betterAuthConfig.js.map +1 -1
  126. package/dist/services/betterAuthSession.js +8 -7
  127. package/dist/services/betterAuthSession.js.map +1 -1
  128. package/dist/services/changelogService.js +5 -2
  129. package/dist/services/changelogService.js.map +1 -1
  130. package/dist/services/cloudService.js +10 -9
  131. package/dist/services/cloudService.js.map +1 -1
  132. package/dist/services/contextCostService.js +6 -2
  133. package/dist/services/contextCostService.js.map +1 -1
  134. package/dist/services/groupService.js +8 -7
  135. package/dist/services/groupService.js.map +1 -1
  136. package/dist/services/hostedAuthService.js +3 -2
  137. package/dist/services/hostedAuthService.js.map +1 -1
  138. package/dist/services/hostedControlPlaneClient.js.map +1 -1
  139. package/dist/services/hostedEventSubscriber.js +9 -8
  140. package/dist/services/hostedEventSubscriber.js.map +1 -1
  141. package/dist/services/hostedRuntimeCatalogNames.js +1 -3
  142. package/dist/services/hostedRuntimeCatalogNames.js.map +1 -1
  143. package/dist/services/keepAliveService.js +7 -6
  144. package/dist/services/keepAliveService.js.map +1 -1
  145. package/dist/services/marketService.js +2 -1
  146. package/dist/services/marketService.js.map +1 -1
  147. package/dist/services/mcpOAuthProvider.js +22 -21
  148. package/dist/services/mcpOAuthProvider.js.map +1 -1
  149. package/dist/services/mcpService.js +133 -121
  150. package/dist/services/mcpService.js.map +1 -1
  151. package/dist/services/oauthClientRegistration.js +30 -29
  152. package/dist/services/oauthClientRegistration.js.map +1 -1
  153. package/dist/services/oauthServerService.js +22 -17
  154. package/dist/services/oauthServerService.js.map +1 -1
  155. package/dist/services/oauthService.js +16 -15
  156. package/dist/services/oauthService.js.map +1 -1
  157. package/dist/services/oauthSettingsStore.js +4 -3
  158. package/dist/services/oauthSettingsStore.js.map +1 -1
  159. package/dist/services/openApiGeneratorService.js +1 -3
  160. package/dist/services/openApiGeneratorService.js.map +1 -1
  161. package/dist/services/registry.js +2 -1
  162. package/dist/services/registry.js.map +1 -1
  163. package/dist/services/requestContextService.js.map +1 -1
  164. package/dist/services/smartRoutingService.js +6 -5
  165. package/dist/services/smartRoutingService.js.map +1 -1
  166. package/dist/services/sseService.js +52 -51
  167. package/dist/services/sseService.js.map +1 -1
  168. package/dist/services/templateService.js +57 -12
  169. package/dist/services/templateService.js.map +1 -1
  170. package/dist/services/toolResultCompressionService.js +8 -5
  171. package/dist/services/toolResultCompressionService.js.map +1 -1
  172. package/dist/services/upstreamOAuthDisconnectService.js +9 -6
  173. package/dist/services/upstreamOAuthDisconnectService.js.map +1 -1
  174. package/dist/services/userService.js +5 -4
  175. package/dist/services/userService.js.map +1 -1
  176. package/dist/services/vectorSearchService.js +126 -112
  177. package/dist/services/vectorSearchService.js.map +1 -1
  178. package/dist/utils/cacheUtils.js +5 -4
  179. package/dist/utils/cacheUtils.js.map +1 -1
  180. package/dist/utils/corsOrigin.js +42 -0
  181. package/dist/utils/corsOrigin.js.map +1 -0
  182. package/dist/utils/dbRetry.js +2 -5
  183. package/dist/utils/dbRetry.js.map +1 -1
  184. package/dist/utils/frontendShell.js +2 -1
  185. package/dist/utils/frontendShell.js.map +1 -1
  186. package/dist/utils/i18n.js.map +1 -1
  187. package/dist/utils/logger.js +170 -0
  188. package/dist/utils/logger.js.map +1 -0
  189. package/dist/utils/migration.js +51 -50
  190. package/dist/utils/migration.js.map +1 -1
  191. package/dist/utils/parameterConversion.js +2 -1
  192. package/dist/utils/parameterConversion.js.map +1 -1
  193. package/dist/utils/path.js +9 -8
  194. package/dist/utils/path.js.map +1 -1
  195. package/dist/utils/proxyTrust.js.map +1 -1
  196. package/dist/utils/rateLimit.js +8 -0
  197. package/dist/utils/rateLimit.js.map +1 -1
  198. package/dist/utils/requireAdmin.js +15 -0
  199. package/dist/utils/requireAdmin.js.map +1 -0
  200. package/dist/utils/serverConfigPersistence.js.map +1 -1
  201. package/dist/utils/serverShutdown.js +3 -2
  202. package/dist/utils/serverShutdown.js.map +1 -1
  203. package/dist/utils/smartRouting.js +4 -3
  204. package/dist/utils/smartRouting.js.map +1 -1
  205. package/dist/utils/ssrf.js +19 -6
  206. package/dist/utils/ssrf.js.map +1 -1
  207. package/dist/utils/tokenCost.js.map +1 -1
  208. package/dist/utils/tokenTruncation.js +9 -4
  209. package/dist/utils/tokenTruncation.js.map +1 -1
  210. package/dist/utils/version.js +3 -2
  211. package/dist/utils/version.js.map +1 -1
  212. package/frontend/dist/assets/{ActivityPage-Dx53zxEM.js → ActivityPage-C6m1hGLq.js} +2 -2
  213. package/frontend/dist/assets/{ActivityPage-Dx53zxEM.js.map → ActivityPage-C6m1hGLq.js.map} +1 -1
  214. package/frontend/dist/assets/{ConfirmDialog-CYfXEuyU.js → ConfirmDialog-BCMNzi21.js} +2 -2
  215. package/frontend/dist/assets/{ConfirmDialog-CYfXEuyU.js.map → ConfirmDialog-BCMNzi21.js.map} +1 -1
  216. package/frontend/dist/assets/{Dashboard-ZYVsSvOw.js → Dashboard-DFKfjPff.js} +2 -2
  217. package/frontend/dist/assets/{Dashboard-ZYVsSvOw.js.map → Dashboard-DFKfjPff.js.map} +1 -1
  218. package/frontend/dist/assets/{DeleteDialog-DNe-zTEl.js → DeleteDialog-D9ycSRvn.js} +2 -2
  219. package/frontend/dist/assets/{DeleteDialog-DNe-zTEl.js.map → DeleteDialog-D9ycSRvn.js.map} +1 -1
  220. package/frontend/dist/assets/{EndpointCopy-ngxLPeDF.js → EndpointCopy-CP_Fb1To.js} +2 -2
  221. package/frontend/dist/assets/{EndpointCopy-ngxLPeDF.js.map → EndpointCopy-CP_Fb1To.js.map} +1 -1
  222. package/frontend/dist/assets/{GroupsPage-JPtupGpI.js → GroupsPage-Cwfm5q-a.js} +2 -2
  223. package/frontend/dist/assets/{GroupsPage-JPtupGpI.js.map → GroupsPage-Cwfm5q-a.js.map} +1 -1
  224. package/frontend/dist/assets/{LoginPage-B6rU3Ugr.js → LoginPage-CnF44h_n.js} +2 -2
  225. package/frontend/dist/assets/{LoginPage-B6rU3Ugr.js.map → LoginPage-CnF44h_n.js.map} +1 -1
  226. package/frontend/dist/assets/{LogsPage-CXq382fb.js → LogsPage-BFIpICsM.js} +2 -2
  227. package/frontend/dist/assets/{LogsPage-CXq382fb.js.map → LogsPage-BFIpICsM.js.map} +1 -1
  228. package/frontend/dist/assets/{MarketPage-BGnQQyXK.js → MarketPage-Du-NqiEl.js} +2 -2
  229. package/frontend/dist/assets/{MarketPage-BGnQQyXK.js.map → MarketPage-Du-NqiEl.js.map} +1 -1
  230. package/frontend/dist/assets/{OAuthConsentPage-C-n6tv3-.js → OAuthConsentPage-zqXUvKMF.js} +2 -2
  231. package/frontend/dist/assets/{OAuthConsentPage-C-n6tv3-.js.map → OAuthConsentPage-zqXUvKMF.js.map} +1 -1
  232. package/frontend/dist/assets/{Pagination-DLSuQ8hw.js → Pagination-Dwko3g48.js} +2 -2
  233. package/frontend/dist/assets/{Pagination-DLSuQ8hw.js.map → Pagination-Dwko3g48.js.map} +1 -1
  234. package/frontend/dist/assets/{PromptsPage-BLpy76K4.js → PromptsPage-Cm8ykiI4.js} +2 -2
  235. package/frontend/dist/assets/{PromptsPage-BLpy76K4.js.map → PromptsPage-Cm8ykiI4.js.map} +1 -1
  236. package/frontend/dist/assets/{ResourcesPage-C5nynRqE.js → ResourcesPage-UMyO6mQ4.js} +2 -2
  237. package/frontend/dist/assets/{ResourcesPage-C5nynRqE.js.map → ResourcesPage-UMyO6mQ4.js.map} +1 -1
  238. package/frontend/dist/assets/{ServersPage-Ca5W9cPW.js → ServersPage-B0RoM8ez.js} +8 -8
  239. package/frontend/dist/assets/ServersPage-B0RoM8ez.js.map +1 -0
  240. package/frontend/dist/assets/{SettingsPage-DgFBjp_O.js → SettingsPage-BTB-36-n.js} +2 -2
  241. package/frontend/dist/assets/{SettingsPage-DgFBjp_O.js.map → SettingsPage-BTB-36-n.js.map} +1 -1
  242. package/frontend/dist/assets/{StatusDot-CmSkukx0.js → StatusDot-BAMXeT2x.js} +2 -2
  243. package/frontend/dist/assets/{StatusDot-CmSkukx0.js.map → StatusDot-BAMXeT2x.js.map} +1 -1
  244. package/frontend/dist/assets/{ToggleGroup-sG_2LQom.js → ToggleGroup-Cfgt5lJo.js} +2 -2
  245. package/frontend/dist/assets/{ToggleGroup-sG_2LQom.js.map → ToggleGroup-Cfgt5lJo.js.map} +1 -1
  246. package/frontend/dist/assets/{UsersPage-PHkFXLL8.js → UsersPage-DlzYf7Su.js} +2 -2
  247. package/frontend/dist/assets/{UsersPage-PHkFXLL8.js.map → UsersPage-DlzYf7Su.js.map} +1 -1
  248. package/frontend/dist/assets/{contextCost-D_iNNbhX.js → contextCost-kp2vZYp7.js} +2 -2
  249. package/frontend/dist/assets/{contextCost-D_iNNbhX.js.map → contextCost-kp2vZYp7.js.map} +1 -1
  250. package/frontend/dist/assets/{framework-vendor-I9Y6AgD5.js → framework-vendor-BHAQX05P.js} +3 -3
  251. package/frontend/dist/assets/{framework-vendor-I9Y6AgD5.js.map → framework-vendor-BHAQX05P.js.map} +1 -1
  252. package/frontend/dist/assets/{i18n-vendor-y9bLzIeh.js → i18n-vendor-CMcB7XUR.js} +2 -2
  253. package/frontend/dist/assets/{i18n-vendor-y9bLzIeh.js.map → i18n-vendor-CMcB7XUR.js.map} +1 -1
  254. package/frontend/dist/assets/{icons-vendor-BFl4A9fq.js → icons-vendor-HZHHWeTa.js} +2 -2
  255. package/frontend/dist/assets/{icons-vendor-BFl4A9fq.js.map → icons-vendor-HZHHWeTa.js.map} +1 -1
  256. package/frontend/dist/assets/{index-CLugsCsy.js → index-CvXw771N.js} +3 -3
  257. package/frontend/dist/assets/{index-CLugsCsy.js.map → index-CvXw771N.js.map} +1 -1
  258. package/frontend/dist/assets/{resourceService-33rS8QGJ.js → resourceService-D2QmlFby.js} +2 -2
  259. package/frontend/dist/assets/{resourceService-33rS8QGJ.js.map → resourceService-D2QmlFby.js.map} +1 -1
  260. package/frontend/dist/assets/useSettingsData-CeCvZ2nU.js +2 -0
  261. package/frontend/dist/assets/{useSettingsData-fK2bv9oN.js.map → useSettingsData-CeCvZ2nU.js.map} +1 -1
  262. package/frontend/dist/assets/{variableDetection-ByJ_cnxa.js → variableDetection-DKPiHkxr.js} +2 -2
  263. package/frontend/dist/assets/{variableDetection-ByJ_cnxa.js.map → variableDetection-DKPiHkxr.js.map} +1 -1
  264. package/frontend/dist/index.html +4 -4
  265. package/package.json +2 -2
  266. package/frontend/dist/assets/ServersPage-Ca5W9cPW.js.map +0 -1
  267. package/frontend/dist/assets/useSettingsData-fK2bv9oN.js +0 -2
@@ -1,3 +1,4 @@
1
+ import { logger } from '../utils/logger.js';
1
2
  /**
2
3
  * Data access layer example and test utilities
3
4
  *
@@ -12,22 +13,22 @@ export async function exampleUserOperations() {
12
13
  const userDao = getUserDao();
13
14
  // Create a new user
14
15
  const newUser = await userDao.createWithHashedPassword('testuser', 'password123', false);
15
- console.log('Created user:', newUser.username);
16
+ logger.log('Created user:', newUser.username);
16
17
  // Find user by username
17
18
  const foundUser = await userDao.findByUsername('testuser');
18
- console.log('Found user:', foundUser?.username);
19
+ logger.log('Found user:', foundUser?.username);
19
20
  // Validate credentials
20
21
  const isValid = await userDao.validateCredentials('testuser', 'password123');
21
- console.log('Credentials valid:', isValid);
22
+ logger.log('Credentials valid:', isValid);
22
23
  // Update user
23
24
  await userDao.update('testuser', { isAdmin: true });
24
- console.log('Updated user to admin');
25
+ logger.log('Updated user to admin');
25
26
  // Find all admin users
26
27
  const admins = await userDao.findAdmins();
27
- console.log('Admin users:', admins.map((u) => u.username));
28
+ logger.log('Admin users:', admins.map((u) => u.username));
28
29
  // Delete user
29
30
  await userDao.delete('testuser');
30
- console.log('Deleted test user');
31
+ logger.log('Deleted test user');
31
32
  }
32
33
  /**
33
34
  * Example usage of ServerDao
@@ -42,21 +43,21 @@ export async function exampleServerOperations() {
42
43
  enabled: true,
43
44
  owner: 'admin',
44
45
  });
45
- console.log('Created server:', newServer.name);
46
+ logger.log('Created server:', newServer.name);
46
47
  // Find servers by owner
47
48
  const userServers = await serverDao.findByOwner('admin');
48
- console.log('Servers owned by admin:', userServers.map((s) => s.name));
49
+ logger.log('Servers owned by admin:', userServers.map((s) => s.name));
49
50
  // Find enabled servers
50
51
  const enabledServers = await serverDao.findEnabled();
51
- console.log('Enabled servers:', enabledServers.map((s) => s.name));
52
+ logger.log('Enabled servers:', enabledServers.map((s) => s.name));
52
53
  // Update server tools
53
54
  await serverDao.updateTools('test-server', {
54
55
  tool1: { enabled: true, description: 'Test tool' },
55
56
  });
56
- console.log('Updated server tools');
57
+ logger.log('Updated server tools');
57
58
  // Delete server
58
59
  await serverDao.delete('test-server');
59
- console.log('Deleted test server');
60
+ logger.log('Deleted test server');
60
61
  }
61
62
  /**
62
63
  * Example usage of GroupDao
@@ -70,22 +71,22 @@ export async function exampleGroupOperations() {
70
71
  servers: ['server1', 'server2'],
71
72
  owner: 'admin',
72
73
  });
73
- console.log('Created group:', newGroup.name, 'with ID:', newGroup.id);
74
+ logger.log('Created group:', newGroup.name, 'with ID:', newGroup.id);
74
75
  // Find groups by owner
75
76
  const userGroups = await groupDao.findByOwner('admin');
76
- console.log('Groups owned by admin:', userGroups.map((g) => g.name));
77
+ logger.log('Groups owned by admin:', userGroups.map((g) => g.name));
77
78
  // Add server to group
78
79
  await groupDao.addServerToGroup(newGroup.id, 'server3');
79
- console.log('Added server3 to group');
80
+ logger.log('Added server3 to group');
80
81
  // Find groups containing specific server
81
82
  const groupsWithServer = await groupDao.findByServer('server1');
82
- console.log('Groups containing server1:', groupsWithServer.map((g) => g.name));
83
+ logger.log('Groups containing server1:', groupsWithServer.map((g) => g.name));
83
84
  // Remove server from group
84
85
  await groupDao.removeServerFromGroup(newGroup.id, 'server2');
85
- console.log('Removed server2 from group');
86
+ logger.log('Removed server2 from group');
86
87
  // Delete group
87
88
  await groupDao.delete(newGroup.id);
88
- console.log('Deleted test group');
89
+ logger.log('Deleted test group');
89
90
  }
90
91
  /**
91
92
  * Example usage of SystemConfigDao
@@ -94,24 +95,24 @@ export async function exampleSystemConfigOperations() {
94
95
  const systemConfigDao = getSystemConfigDao();
95
96
  // Get current system config
96
97
  const currentConfig = await systemConfigDao.get();
97
- console.log('Current system config:', currentConfig);
98
+ logger.log('Current system config:', currentConfig);
98
99
  // Update routing configuration
99
100
  await systemConfigDao.updateSection('routing', {
100
101
  enableGlobalRoute: true,
101
102
  enableGroupNameRoute: true,
102
103
  enableBearerAuth: true,
103
104
  });
104
- console.log('Updated routing configuration');
105
+ logger.log('Updated routing configuration');
105
106
  // Update install configuration
106
107
  await systemConfigDao.updateSection('install', {
107
108
  pythonIndexUrl: 'https://pypi.org/simple/',
108
109
  npmRegistry: 'https://registry.npmjs.org/',
109
110
  baseUrl: 'https://mcphub.local',
110
111
  });
111
- console.log('Updated install configuration');
112
+ logger.log('Updated install configuration');
112
113
  // Get specific section
113
114
  const routingConfig = await systemConfigDao.getSection('routing');
114
- console.log('Routing config:', routingConfig);
115
+ logger.log('Routing config:', routingConfig);
115
116
  }
116
117
  /**
117
118
  * Example usage of UserConfigDao
@@ -125,40 +126,40 @@ export async function exampleUserConfigOperations() {
125
126
  enableGroupNameRoute: true,
126
127
  },
127
128
  });
128
- console.log('Updated admin user config');
129
+ logger.log('Updated admin user config');
129
130
  // Get user configuration
130
131
  const adminConfig = await userConfigDao.get('admin');
131
- console.log('Admin config:', adminConfig);
132
+ logger.log('Admin config:', adminConfig);
132
133
  // Get all user configurations
133
134
  const allUserConfigs = await userConfigDao.getAll();
134
- console.log('All user configs:', Object.keys(allUserConfigs));
135
+ logger.log('All user configs:', Object.keys(allUserConfigs));
135
136
  // Get specific section for user
136
137
  const userRoutingConfig = await userConfigDao.getSection('admin', 'routing');
137
- console.log('Admin routing config:', userRoutingConfig);
138
+ logger.log('Admin routing config:', userRoutingConfig);
138
139
  // Delete user configuration
139
140
  await userConfigDao.delete('admin');
140
- console.log('Deleted admin user config');
141
+ logger.log('Deleted admin user config');
141
142
  }
142
143
  /**
143
144
  * Test all DAO operations
144
145
  */
145
146
  export async function testAllDaoOperations() {
146
147
  try {
147
- console.log('=== Testing DAO Layer ===');
148
- console.log('\n--- User Operations ---');
148
+ logger.log('=== Testing DAO Layer ===');
149
+ logger.log('\n--- User Operations ---');
149
150
  await exampleUserOperations();
150
- console.log('\n--- Server Operations ---');
151
+ logger.log('\n--- Server Operations ---');
151
152
  await exampleServerOperations();
152
- console.log('\n--- Group Operations ---');
153
+ logger.log('\n--- Group Operations ---');
153
154
  await exampleGroupOperations();
154
- console.log('\n--- System Config Operations ---');
155
+ logger.log('\n--- System Config Operations ---');
155
156
  await exampleSystemConfigOperations();
156
- console.log('\n--- User Config Operations ---');
157
+ logger.log('\n--- User Config Operations ---');
157
158
  await exampleUserConfigOperations();
158
- console.log('\n=== DAO Layer Test Complete ===');
159
+ logger.log('\n=== DAO Layer Test Complete ===');
159
160
  }
160
161
  catch (error) {
161
- console.error('Error during DAO testing:', error);
162
+ logger.error('Error during DAO testing:', error);
162
163
  }
163
164
  }
164
165
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"examples.js","sourceRoot":"","sources":["../../src/dao/examples.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"examples.js","sourceRoot":"","sources":["../../src/dao/examples.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import { VectorEmbeddingSubscriber } from './subscribers/VectorEmbeddingSubscrib
6
6
  import { getSmartRoutingConfig } from '../utils/smartRouting.js';
7
7
  import { createVectorIndex } from '../services/vectorSearchService.js';
8
8
  import { isRetryableDbError } from '../utils/dbRetry.js';
9
+ import { logger } from '../utils/logger.js';
9
10
  // Connection pool and retry configuration
10
11
  const CONNECTION_CONFIG = {
11
12
  // Connection pool settings
@@ -29,19 +30,19 @@ let reconnectionPromise = null;
29
30
  const createRequiredExtensions = async (dataSource) => {
30
31
  try {
31
32
  await dataSource.query('CREATE EXTENSION IF NOT EXISTS "uuid-ossp";');
32
- console.log('UUID extension created or already exists.');
33
+ logger.log('UUID extension created or already exists.');
33
34
  }
34
35
  catch (err) {
35
- console.warn('Failed to create uuid-ossp extension:', err.message);
36
- console.warn('UUID generation functionality may not be available.');
36
+ logger.warn('Failed to create uuid-ossp extension:', err.message);
37
+ logger.warn('UUID generation functionality may not be available.');
37
38
  }
38
39
  try {
39
40
  await dataSource.query('CREATE EXTENSION IF NOT EXISTS vector;');
40
- console.log('Vector extension created or already exists.');
41
+ logger.log('Vector extension created or already exists.');
41
42
  }
42
43
  catch (err) {
43
- console.warn('Failed to create vector extension:', err.message);
44
- console.warn('Vector functionality may not be available.');
44
+ logger.warn('Failed to create vector extension:', err.message);
45
+ logger.warn('Vector functionality may not be available.');
45
46
  }
46
47
  };
47
48
  // Get database URL from smart routing config or fallback to environment variable
@@ -60,7 +61,7 @@ const ensureEmbeddingColumnIsVector = async (dataSource) => {
60
61
  ALTER TABLE vector_embeddings
61
62
  ADD COLUMN embedding vector;
62
63
  `);
63
- console.log('Created missing embedding column with vector type.');
64
+ logger.log('Created missing embedding column with vector type.');
64
65
  return;
65
66
  }
66
67
  const isVectorType = columnType[0].udt_name === 'vector' || columnType[0].data_type === 'vector';
@@ -71,7 +72,7 @@ const ensureEmbeddingColumnIsVector = async (dataSource) => {
71
72
  ALTER TABLE vector_embeddings
72
73
  ALTER COLUMN embedding TYPE vector USING embedding::vector;
73
74
  `);
74
- console.log('Vector embedding column type updated successfully.');
75
+ logger.log('Vector embedding column type updated successfully.');
75
76
  };
76
77
  // Default database configuration with connection pooling
77
78
  const getDefaultConfig = async () => {
@@ -107,7 +108,7 @@ export const updateDataSourceConfig = async () => {
107
108
  const currentUrl = appDataSource.options.url;
108
109
  const newUrl = newConfig.url;
109
110
  if (currentUrl !== newUrl) {
110
- console.log('Database URL configuration changed, updating DataSource...');
111
+ logger.log('Database URL configuration changed, updating DataSource...');
111
112
  appDataSource = new DataSource(newConfig);
112
113
  // Reset initialization promise when configuration changes
113
114
  initializationPromise = null;
@@ -132,7 +133,7 @@ export const reconnectDatabase = async () => {
132
133
  return await attemptReconnection();
133
134
  }
134
135
  catch (error) {
135
- console.error('Error during database reconnection:', error);
136
+ logger.error('Error during database reconnection:', error);
136
137
  throw error;
137
138
  }
138
139
  };
@@ -140,19 +141,19 @@ export const reconnectDatabase = async () => {
140
141
  export const initializeDatabase = async () => {
141
142
  // If initialization is already in progress, wait for it to complete
142
143
  if (initializationPromise) {
143
- console.log('Database initialization already in progress, waiting for completion...');
144
+ logger.log('Database initialization already in progress, waiting for completion...');
144
145
  return initializationPromise;
145
146
  }
146
147
  // If already initialized, return the existing instance
147
148
  if (appDataSource && appDataSource.isInitialized) {
148
- console.log('Database already initialized, returning existing instance');
149
+ logger.log('Database already initialized, returning existing instance');
149
150
  return Promise.resolve(appDataSource);
150
151
  }
151
152
  // Create a new initialization promise
152
153
  initializationPromise = performDatabaseInitialization();
153
154
  try {
154
155
  const result = await initializationPromise;
155
- console.log('Database initialization completed successfully');
156
+ logger.log('Database initialization completed successfully');
156
157
  // Start health check after successful initialization
157
158
  isHealthy = true;
158
159
  startHealthCheck();
@@ -161,7 +162,7 @@ export const initializeDatabase = async () => {
161
162
  catch (error) {
162
163
  // Reset the promise on error so initialization can be retried
163
164
  initializationPromise = null;
164
- console.error('Database initialization failed:', error);
165
+ logger.error('Database initialization failed:', error);
165
166
  throw error;
166
167
  }
167
168
  };
@@ -171,7 +172,7 @@ const performDatabaseInitialization = async () => {
171
172
  // Update configuration before initializing
172
173
  appDataSource = await updateDataSourceConfig();
173
174
  if (!appDataSource.isInitialized) {
174
- console.log('Initializing database connection...');
175
+ logger.log('Initializing database connection...');
175
176
  // Register the vector type with TypeORM
176
177
  await appDataSource.initialize();
177
178
  registerPostgresVectorType(appDataSource);
@@ -197,7 +198,7 @@ const performDatabaseInitialization = async () => {
197
198
  // vector_embeddings has synchronize:false on the entity (prevents the
198
199
  // TypeORM DROP+ADD cycle that nulls stored embeddings on every startup).
199
200
  // Create the table manually so new installations work correctly.
200
- console.log('Creating vector_embeddings table...');
201
+ logger.log('Creating vector_embeddings table...');
201
202
  await appDataSource.query(`
202
203
  CREATE TABLE IF NOT EXISTS vector_embeddings (
203
204
  id uuid NOT NULL DEFAULT uuid_generate_v4() PRIMARY KEY,
@@ -232,25 +233,25 @@ const performDatabaseInitialization = async () => {
232
233
  `);
233
234
  }
234
235
  catch (idxError) {
235
- console.warn('Could not create unique index on vector_embeddings:', idxError.message);
236
+ logger.warn('Could not create unique index on vector_embeddings:', idxError.message);
236
237
  }
237
238
  if (tableExists[0].exists || justCreated) {
238
239
  // Add pgvector support via raw SQL commands
239
- console.log('Configuring vector support for embeddings table...');
240
+ logger.log('Configuring vector support for embeddings table...');
240
241
  // Step 1: Drop any existing index on the column
241
242
  try {
242
243
  await appDataSource.query(`DROP INDEX IF EXISTS idx_vector_embeddings_embedding;`);
243
244
  }
244
245
  catch (dropError) {
245
- console.warn('Note: Could not drop existing index:', dropError.message);
246
+ logger.warn('Note: Could not drop existing index:', dropError.message);
246
247
  }
247
248
  // Step 2: Ensure embedding column exists and uses vector type
248
249
  try {
249
250
  await ensureEmbeddingColumnIsVector(appDataSource);
250
251
  }
251
252
  catch (alterError) {
252
- console.warn('Could not alter embedding column type:', alterError.message);
253
- console.warn('Will try to recreate the table later.');
253
+ logger.warn('Could not alter embedding column type:', alterError.message);
254
+ logger.warn('Will try to recreate the table later.');
254
255
  }
255
256
  // Step 3: Try to create appropriate indices
256
257
  try {
@@ -261,10 +262,10 @@ const performDatabaseInitialization = async () => {
261
262
  let dimensions = 1536; // Default to common OpenAI embedding size
262
263
  if (records && records.length > 0 && records[0].dimensions) {
263
264
  dimensions = records[0].dimensions;
264
- console.log(`Found vector dimension from existing data: ${dimensions}`);
265
+ logger.log(`Found vector dimension from existing data: ${dimensions}`);
265
266
  }
266
267
  else {
267
- console.log(`Using default vector dimension: ${dimensions} (no existing data found)`);
268
+ logger.log(`Using default vector dimension: ${dimensions} (no existing data found)`);
268
269
  }
269
270
  // Set the vector dimensions explicitly only if table has data
270
271
  if (records && records.length > 0) {
@@ -275,29 +276,29 @@ const performDatabaseInitialization = async () => {
275
276
  // Create appropriate vector index using the helper function
276
277
  const result = await createVectorIndex(appDataSource, dimensions);
277
278
  if (!result.success) {
278
- console.log('Continuing without optimized vector index...');
279
+ logger.log('Continuing without optimized vector index...');
279
280
  }
280
281
  }
281
282
  else {
282
- console.log('No existing vector data found, skipping index creation - will be handled by vector service.');
283
+ logger.log('No existing vector data found, skipping index creation - will be handled by vector service.');
283
284
  }
284
285
  }
285
286
  catch (indexError) {
286
- console.warn('Vector index creation failed:', indexError.message);
287
- console.warn('Vector search will work but may be slower without an optimized index.');
287
+ logger.warn('Vector index creation failed:', indexError.message);
288
+ logger.warn('Vector search will work but may be slower without an optimized index.');
288
289
  }
289
290
  }
290
291
  }
291
292
  catch (error) {
292
- console.warn('Could not set up vector column/index:', error.message);
293
- console.warn('Will attempt again after schema synchronization.');
293
+ logger.warn('Could not set up vector column/index:', error.message);
294
+ logger.warn('Will attempt again after schema synchronization.');
294
295
  }
295
- console.log('Database connection established successfully.');
296
+ logger.log('Database connection established successfully.');
296
297
  // Run one final setup check after schema synchronization is done
297
298
  const config = await getDefaultConfig();
298
299
  if (config.synchronize) {
299
300
  try {
300
- console.log('Running final vector configuration check...');
301
+ logger.log('Running final vector configuration check...');
301
302
  // Try setup again with the same code from above
302
303
  const tableExists = await appDataSource.query(`
303
304
  SELECT EXISTS (
@@ -307,12 +308,12 @@ const performDatabaseInitialization = async () => {
307
308
  );
308
309
  `);
309
310
  if (tableExists[0].exists) {
310
- console.log('Vector embeddings table found, checking configuration...');
311
+ logger.log('Vector embeddings table found, checking configuration...');
311
312
  try {
312
313
  await ensureEmbeddingColumnIsVector(appDataSource);
313
314
  }
314
315
  catch (alterError) {
315
- console.warn('Could not ensure embedding column type in final check:', alterError.message);
316
+ logger.warn('Could not ensure embedding column type in final check:', alterError.message);
316
317
  }
317
318
  // Get the dimension size first
318
319
  try {
@@ -323,37 +324,37 @@ const performDatabaseInitialization = async () => {
323
324
  // Only proceed if we have existing data, otherwise let vector service handle it
324
325
  if (records && records.length > 0 && records[0].dimensions) {
325
326
  const dimensions = records[0].dimensions;
326
- console.log(`Found vector dimension from database: ${dimensions}`);
327
+ logger.log(`Found vector dimension from database: ${dimensions}`);
327
328
  // Ensure column type is vector with explicit dimensions
328
329
  await appDataSource.query(`
329
330
  ALTER TABLE vector_embeddings
330
331
  ALTER COLUMN embedding TYPE vector(${dimensions});
331
332
  `);
332
- console.log('Vector embedding column type updated in final check.');
333
+ logger.log('Vector embedding column type updated in final check.');
333
334
  // Create appropriate vector index using the helper function
334
335
  const result = await createVectorIndex(appDataSource, dimensions);
335
336
  if (!result.success) {
336
- console.log('Continuing without optimized vector index...');
337
+ logger.log('Continuing without optimized vector index...');
337
338
  }
338
339
  }
339
340
  else {
340
- console.log('No existing vector data found, vector dimensions will be configured by vector service.');
341
+ logger.log('No existing vector data found, vector dimensions will be configured by vector service.');
341
342
  }
342
343
  }
343
344
  catch (setupError) {
344
- console.warn('Vector setup in final check failed:', setupError.message);
345
+ logger.warn('Vector setup in final check failed:', setupError.message);
345
346
  }
346
347
  }
347
348
  }
348
349
  catch (error) {
349
- console.warn('Post-initialization vector setup failed:', error.message);
350
+ logger.warn('Post-initialization vector setup failed:', error.message);
350
351
  }
351
352
  }
352
353
  }
353
354
  return appDataSource;
354
355
  }
355
356
  catch (error) {
356
- console.error('Error during database initialization:', error);
357
+ logger.error('Error during database initialization:', error);
357
358
  throw error;
358
359
  }
359
360
  };
@@ -380,14 +381,14 @@ export const checkDatabaseHealth = async () => {
380
381
  if (!appDataSource.isInitialized) {
381
382
  isHealthy = false;
382
383
  lastHealthCheckError = new Error('Database not initialized');
383
- console.log('[DB Health] DataSource is disconnected, attempting reconnection...');
384
+ logger.log('[DB Health] DataSource is disconnected, attempting reconnection...');
384
385
  try {
385
386
  await attemptReconnection();
386
387
  return true;
387
388
  }
388
389
  catch (error) {
389
390
  lastHealthCheckError = error instanceof Error ? error : new Error(String(error));
390
- console.error('[DB Health] Reconnection attempt failed:', lastHealthCheckError.message);
391
+ logger.error('[DB Health] Reconnection attempt failed:', lastHealthCheckError.message);
391
392
  return false;
392
393
  }
393
394
  }
@@ -401,10 +402,10 @@ export const checkDatabaseHealth = async () => {
401
402
  catch (error) {
402
403
  isHealthy = false;
403
404
  lastHealthCheckError = error instanceof Error ? error : new Error(String(error));
404
- console.warn('[DB Health] Health check failed:', lastHealthCheckError.message);
405
+ logger.warn('[DB Health] Health check failed:', lastHealthCheckError.message);
405
406
  // If it's a retryable error, attempt reconnection
406
407
  if (isRetryableDbError(error)) {
407
- console.log('[DB Health] Detected connection issue, attempting reconnection...');
408
+ logger.log('[DB Health] Detected connection issue, attempting reconnection...');
408
409
  try {
409
410
  await attemptReconnection();
410
411
  return true;
@@ -412,7 +413,7 @@ export const checkDatabaseHealth = async () => {
412
413
  catch (reconnectError) {
413
414
  lastHealthCheckError =
414
415
  reconnectError instanceof Error ? reconnectError : new Error(String(reconnectError));
415
- console.error('[DB Health] Reconnection attempt failed:', lastHealthCheckError.message);
416
+ logger.error('[DB Health] Reconnection attempt failed:', lastHealthCheckError.message);
416
417
  }
417
418
  }
418
419
  return false;
@@ -423,7 +424,7 @@ export const startHealthCheck = () => {
423
424
  if (!CONNECTION_CONFIG.enableHealthCheck || healthCheckInterval) {
424
425
  return;
425
426
  }
426
- console.log(`[DB Health] Starting health check (interval: ${CONNECTION_CONFIG.healthCheckIntervalMs}ms)`);
427
+ logger.log(`[DB Health] Starting health check (interval: ${CONNECTION_CONFIG.healthCheckIntervalMs}ms)`);
427
428
  healthCheckInterval = setInterval(async () => {
428
429
  await checkDatabaseHealth();
429
430
  }, CONNECTION_CONFIG.healthCheckIntervalMs);
@@ -435,18 +436,18 @@ export const stopHealthCheck = () => {
435
436
  if (healthCheckInterval) {
436
437
  clearInterval(healthCheckInterval);
437
438
  healthCheckInterval = null;
438
- console.log('[DB Health] Health check stopped');
439
+ logger.log('[DB Health] Health check stopped');
439
440
  }
440
441
  };
441
442
  // Attempt to reconnect to the database with retries
442
443
  const attemptReconnection = () => {
443
444
  if (reconnectionPromise) {
444
- console.log('[DB Reconnect] Reconnection already in progress, waiting...');
445
+ logger.log('[DB Reconnect] Reconnection already in progress, waiting...');
445
446
  return reconnectionPromise;
446
447
  }
447
448
  const promise = (async () => {
448
449
  reconnectionInProgress = true;
449
- console.log('[DB Reconnect] Starting reconnection attempt...');
450
+ logger.log('[DB Reconnect] Starting reconnection attempt...');
450
451
  try {
451
452
  if (!appDataSource) {
452
453
  return await initializeDatabase();
@@ -454,11 +455,11 @@ const attemptReconnection = () => {
454
455
  const dataSource = appDataSource;
455
456
  if (dataSource.isInitialized) {
456
457
  try {
457
- console.log('[DB Reconnect] Closing existing connection...');
458
+ logger.log('[DB Reconnect] Closing existing connection...');
458
459
  await dataSource.destroy();
459
460
  }
460
461
  catch (closeError) {
461
- console.warn('[DB Reconnect] Error closing connection:', closeError.message);
462
+ logger.warn('[DB Reconnect] Error closing connection:', closeError.message);
462
463
  // TypeORM only clears this flag after driver.disconnect() succeeds.
463
464
  // If the driver pool is already gone, destroy() throws first and leaves
464
465
  // the DataSource incorrectly marked as initialized.
@@ -468,35 +469,35 @@ const attemptReconnection = () => {
468
469
  let lastError = null;
469
470
  for (let attempt = 1; attempt <= CONNECTION_CONFIG.maxConnectionRetries; attempt++) {
470
471
  try {
471
- console.log(`[DB Reconnect] Connection attempt ${attempt}/${CONNECTION_CONFIG.maxConnectionRetries}...`);
472
+ logger.log(`[DB Reconnect] Connection attempt ${attempt}/${CONNECTION_CONFIG.maxConnectionRetries}...`);
472
473
  await dataSource.initialize();
473
474
  registerPostgresVectorType(dataSource);
474
475
  appDataSource = dataSource;
475
- console.log('[DB Reconnect] Successfully reconnected to database');
476
+ logger.log('[DB Reconnect] Successfully reconnected to database');
476
477
  isHealthy = true;
477
478
  lastHealthCheckError = null;
478
479
  return dataSource;
479
480
  }
480
481
  catch (error) {
481
482
  lastError = error instanceof Error ? error : new Error(String(error));
482
- console.warn(`[DB Reconnect] Attempt ${attempt} failed: ${lastError.message}`);
483
+ logger.warn(`[DB Reconnect] Attempt ${attempt} failed: ${lastError.message}`);
483
484
  if (dataSource.isInitialized) {
484
485
  try {
485
486
  await dataSource.destroy();
486
487
  }
487
488
  catch (destroyError) {
488
- console.warn('[DB Reconnect] Error cleaning up partially initialized connection:', destroyError.message);
489
+ logger.warn('[DB Reconnect] Error cleaning up partially initialized connection:', destroyError.message);
489
490
  Object.assign(dataSource, { isInitialized: false });
490
491
  }
491
492
  }
492
493
  if (attempt < CONNECTION_CONFIG.maxConnectionRetries) {
493
494
  const delay = CONNECTION_CONFIG.connectionRetryDelayMs * Math.pow(2, attempt - 1);
494
- console.log(`[DB Reconnect] Waiting ${delay}ms before next attempt...`);
495
+ logger.log(`[DB Reconnect] Waiting ${delay}ms before next attempt...`);
495
496
  await new Promise((resolve) => setTimeout(resolve, delay));
496
497
  }
497
498
  }
498
499
  }
499
- console.error(`[DB Reconnect] Failed to reconnect after ${CONNECTION_CONFIG.maxConnectionRetries} attempts`);
500
+ logger.error(`[DB Reconnect] Failed to reconnect after ${CONNECTION_CONFIG.maxConnectionRetries} attempts`);
500
501
  lastHealthCheckError = lastError;
501
502
  throw lastError || new Error('Database reconnection failed');
502
503
  }
@@ -519,7 +520,7 @@ export const closeDatabase = async () => {
519
520
  stopHealthCheck();
520
521
  if (appDataSource && appDataSource.isInitialized) {
521
522
  await appDataSource.destroy();
522
- console.log('Database connection closed.');
523
+ logger.log('Database connection closed.');
523
524
  }
524
525
  isHealthy = false;
525
526
  };