@samanhappy/mcphub 0.9.5 → 0.9.6

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 (50) hide show
  1. package/dist/config/DaoConfigService.js +210 -0
  2. package/dist/config/DaoConfigService.js.map +1 -0
  3. package/dist/config/configManager.js +123 -0
  4. package/dist/config/configManager.js.map +1 -0
  5. package/dist/config/migrationUtils.js +206 -0
  6. package/dist/config/migrationUtils.js.map +1 -0
  7. package/dist/controllers/logController.js +1 -1
  8. package/dist/controllers/logController.js.map +1 -1
  9. package/dist/controllers/marketController.js +1 -1
  10. package/dist/controllers/marketController.js.map +1 -1
  11. package/dist/controllers/openApiController.js +158 -7
  12. package/dist/controllers/openApiController.js.map +1 -1
  13. package/dist/controllers/promptController.js +1 -1
  14. package/dist/controllers/serverController.js +8 -9
  15. package/dist/controllers/serverController.js.map +1 -1
  16. package/dist/dao/DaoFactory.js +102 -0
  17. package/dist/dao/DaoFactory.js.map +1 -0
  18. package/dist/dao/GroupDao.js +156 -0
  19. package/dist/dao/GroupDao.js.map +1 -0
  20. package/dist/dao/ServerDao.js +117 -0
  21. package/dist/dao/ServerDao.js.map +1 -0
  22. package/dist/dao/SystemConfigDao.js +55 -0
  23. package/dist/dao/SystemConfigDao.js.map +1 -0
  24. package/dist/dao/UserConfigDao.js +72 -0
  25. package/dist/dao/UserConfigDao.js.map +1 -0
  26. package/dist/dao/UserDao.js +107 -0
  27. package/dist/dao/UserDao.js.map +1 -0
  28. package/dist/dao/base/BaseDao.js +49 -0
  29. package/dist/dao/base/BaseDao.js.map +1 -0
  30. package/dist/dao/base/JsonFileBaseDao.js +84 -0
  31. package/dist/dao/base/JsonFileBaseDao.js.map +1 -0
  32. package/dist/dao/examples.js +172 -0
  33. package/dist/dao/examples.js.map +1 -0
  34. package/dist/dao/index.js +11 -0
  35. package/dist/dao/index.js.map +1 -0
  36. package/dist/routes/index.js +2 -1
  37. package/dist/routes/index.js.map +1 -1
  38. package/dist/scripts/dao-demo.js +226 -0
  39. package/dist/scripts/dao-demo.js.map +1 -0
  40. package/dist/services/mcpService.js +49 -71
  41. package/dist/services/mcpService.js.map +1 -1
  42. package/dist/services/openApiGeneratorService.js +44 -8
  43. package/dist/services/openApiGeneratorService.js.map +1 -1
  44. package/dist/services/sseService.js.map +1 -1
  45. package/dist/services/vectorSearchService.js +1 -1
  46. package/dist/services/vectorSearchService.js.map +1 -1
  47. package/frontend/dist/assets/{index-dsw9o-29.js → index-BvXslwpV.js} +3 -3
  48. package/frontend/dist/assets/{index-dsw9o-29.js.map → index-BvXslwpV.js.map} +1 -1
  49. package/frontend/dist/index.html +1 -1
  50. package/package.json +3 -1
@@ -0,0 +1,84 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { getSettingsPath } from '../../config/index.js';
4
+ /**
5
+ * Abstract base class for JSON file-based DAO implementations
6
+ */
7
+ export class JsonFileBaseDao {
8
+ constructor() {
9
+ this.settingsCache = null;
10
+ this.lastModified = 0;
11
+ }
12
+ /**
13
+ * Load settings from JSON file with caching
14
+ */
15
+ async loadSettings() {
16
+ try {
17
+ const settingsPath = getSettingsPath();
18
+ const stats = fs.statSync(settingsPath);
19
+ const fileModified = stats.mtime.getTime();
20
+ // Check if cache is still valid
21
+ if (this.settingsCache && this.lastModified >= fileModified) {
22
+ return this.settingsCache;
23
+ }
24
+ const settingsData = fs.readFileSync(settingsPath, 'utf8');
25
+ const settings = JSON.parse(settingsData);
26
+ // Update cache
27
+ this.settingsCache = settings;
28
+ this.lastModified = fileModified;
29
+ return settings;
30
+ }
31
+ catch (error) {
32
+ console.error(`Failed to load settings:`, error);
33
+ const defaultSettings = {
34
+ mcpServers: {},
35
+ users: [],
36
+ groups: [],
37
+ systemConfig: {},
38
+ userConfigs: {},
39
+ };
40
+ // Cache default settings
41
+ this.settingsCache = defaultSettings;
42
+ this.lastModified = Date.now();
43
+ return defaultSettings;
44
+ }
45
+ }
46
+ /**
47
+ * Save settings to JSON file and update cache
48
+ */
49
+ async saveSettings(settings) {
50
+ try {
51
+ // Ensure directory exists
52
+ const settingsPath = getSettingsPath();
53
+ const dir = path.dirname(settingsPath);
54
+ if (!fs.existsSync(dir)) {
55
+ fs.mkdirSync(dir, { recursive: true });
56
+ }
57
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf8');
58
+ // Update cache
59
+ this.settingsCache = settings;
60
+ this.lastModified = Date.now();
61
+ }
62
+ catch (error) {
63
+ console.error(`Failed to save settings:`, error);
64
+ throw error;
65
+ }
66
+ }
67
+ /**
68
+ * Clear settings cache
69
+ */
70
+ clearCache() {
71
+ this.settingsCache = null;
72
+ this.lastModified = 0;
73
+ }
74
+ /**
75
+ * Get cache status for debugging
76
+ */
77
+ getCacheInfo() {
78
+ return {
79
+ hasCache: this.settingsCache !== null,
80
+ lastModified: this.lastModified,
81
+ };
82
+ }
83
+ }
84
+ //# sourceMappingURL=JsonFileBaseDao.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonFileBaseDao.js","sourceRoot":"","sources":["../../../src/dao/base/JsonFileBaseDao.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;GAEG;AACH,MAAM,OAAgB,eAAe;IAArC;QACU,kBAAa,GAAuB,IAAI,CAAC;QACzC,iBAAY,GAAW,CAAC,CAAC;IAkFnC,CAAC;IAhFC;;OAEG;IACO,KAAK,CAAC,YAAY;QAC1B,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACxC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAE3C,gCAAgC;YAChC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,IAAI,YAAY,EAAE,CAAC;gBAC5D,OAAO,IAAI,CAAC,aAAa,CAAC;YAC5B,CAAC;YAED,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAgB,CAAC;YAEzD,eAAe;YACf,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;YAC9B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;YAEjC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,eAAe,GAAgB;gBACnC,UAAU,EAAE,EAAE;gBACd,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,EAAE;gBACV,YAAY,EAAE,EAAE;gBAChB,WAAW,EAAE,EAAE;aAChB,CAAC;YAEF,yBAAyB;YACzB,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC;YACrC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE/B,OAAO,eAAe,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,YAAY,CAAC,QAAqB;QAChD,IAAI,CAAC;YACH,0BAA0B;YAC1B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;YAED,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAE1E,eAAe;YACf,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;YAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACO,UAAU;QAClB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;IAED;;OAEG;IACO,YAAY;QACpB,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,aAAa,KAAK,IAAI;YACrC,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Data access layer example and test utilities
3
+ *
4
+ * This file demonstrates how to use the DAO layer for managing different types of data
5
+ * in the MCPHub application.
6
+ */
7
+ import { getUserDao, getServerDao, getGroupDao, getSystemConfigDao, getUserConfigDao, JsonFileDaoFactory, setDaoFactory, } from './DaoFactory.js';
8
+ /**
9
+ * Example usage of UserDao
10
+ */
11
+ export async function exampleUserOperations() {
12
+ const userDao = getUserDao();
13
+ // Create a new user
14
+ const newUser = await userDao.createWithHashedPassword('testuser', 'password123', false);
15
+ console.log('Created user:', newUser.username);
16
+ // Find user by username
17
+ const foundUser = await userDao.findByUsername('testuser');
18
+ console.log('Found user:', foundUser?.username);
19
+ // Validate credentials
20
+ const isValid = await userDao.validateCredentials('testuser', 'password123');
21
+ console.log('Credentials valid:', isValid);
22
+ // Update user
23
+ await userDao.update('testuser', { isAdmin: true });
24
+ console.log('Updated user to admin');
25
+ // Find all admin users
26
+ const admins = await userDao.findAdmins();
27
+ console.log('Admin users:', admins.map((u) => u.username));
28
+ // Delete user
29
+ await userDao.delete('testuser');
30
+ console.log('Deleted test user');
31
+ }
32
+ /**
33
+ * Example usage of ServerDao
34
+ */
35
+ export async function exampleServerOperations() {
36
+ const serverDao = getServerDao();
37
+ // Create a new server
38
+ const newServer = await serverDao.create({
39
+ name: 'test-server',
40
+ command: 'node',
41
+ args: ['server.js'],
42
+ enabled: true,
43
+ owner: 'admin',
44
+ });
45
+ console.log('Created server:', newServer.name);
46
+ // Find servers by owner
47
+ const userServers = await serverDao.findByOwner('admin');
48
+ console.log('Servers owned by admin:', userServers.map((s) => s.name));
49
+ // Find enabled servers
50
+ const enabledServers = await serverDao.findEnabled();
51
+ console.log('Enabled servers:', enabledServers.map((s) => s.name));
52
+ // Update server tools
53
+ await serverDao.updateTools('test-server', {
54
+ tool1: { enabled: true, description: 'Test tool' },
55
+ });
56
+ console.log('Updated server tools');
57
+ // Delete server
58
+ await serverDao.delete('test-server');
59
+ console.log('Deleted test server');
60
+ }
61
+ /**
62
+ * Example usage of GroupDao
63
+ */
64
+ export async function exampleGroupOperations() {
65
+ const groupDao = getGroupDao();
66
+ // Create a new group
67
+ const newGroup = await groupDao.create({
68
+ name: 'test-group',
69
+ description: 'Test group for development',
70
+ servers: ['server1', 'server2'],
71
+ owner: 'admin',
72
+ });
73
+ console.log('Created group:', newGroup.name, 'with ID:', newGroup.id);
74
+ // Find groups by owner
75
+ const userGroups = await groupDao.findByOwner('admin');
76
+ console.log('Groups owned by admin:', userGroups.map((g) => g.name));
77
+ // Add server to group
78
+ await groupDao.addServerToGroup(newGroup.id, 'server3');
79
+ console.log('Added server3 to group');
80
+ // Find groups containing specific server
81
+ const groupsWithServer = await groupDao.findByServer('server1');
82
+ console.log('Groups containing server1:', groupsWithServer.map((g) => g.name));
83
+ // Remove server from group
84
+ await groupDao.removeServerFromGroup(newGroup.id, 'server2');
85
+ console.log('Removed server2 from group');
86
+ // Delete group
87
+ await groupDao.delete(newGroup.id);
88
+ console.log('Deleted test group');
89
+ }
90
+ /**
91
+ * Example usage of SystemConfigDao
92
+ */
93
+ export async function exampleSystemConfigOperations() {
94
+ const systemConfigDao = getSystemConfigDao();
95
+ // Get current system config
96
+ const currentConfig = await systemConfigDao.get();
97
+ console.log('Current system config:', currentConfig);
98
+ // Update routing configuration
99
+ await systemConfigDao.updateSection('routing', {
100
+ enableGlobalRoute: true,
101
+ enableGroupNameRoute: true,
102
+ enableBearerAuth: false,
103
+ });
104
+ console.log('Updated routing configuration');
105
+ // Update install configuration
106
+ await systemConfigDao.updateSection('install', {
107
+ pythonIndexUrl: 'https://pypi.org/simple/',
108
+ npmRegistry: 'https://registry.npmjs.org/',
109
+ baseUrl: 'https://mcphub.local',
110
+ });
111
+ console.log('Updated install configuration');
112
+ // Get specific section
113
+ const routingConfig = await systemConfigDao.getSection('routing');
114
+ console.log('Routing config:', routingConfig);
115
+ }
116
+ /**
117
+ * Example usage of UserConfigDao
118
+ */
119
+ export async function exampleUserConfigOperations() {
120
+ const userConfigDao = getUserConfigDao();
121
+ // Update user configuration
122
+ await userConfigDao.update('admin', {
123
+ routing: {
124
+ enableGlobalRoute: false,
125
+ enableGroupNameRoute: true,
126
+ },
127
+ });
128
+ console.log('Updated admin user config');
129
+ // Get user configuration
130
+ const adminConfig = await userConfigDao.get('admin');
131
+ console.log('Admin config:', adminConfig);
132
+ // Get all user configurations
133
+ const allUserConfigs = await userConfigDao.getAll();
134
+ console.log('All user configs:', Object.keys(allUserConfigs));
135
+ // Get specific section for user
136
+ const userRoutingConfig = await userConfigDao.getSection('admin', 'routing');
137
+ console.log('Admin routing config:', userRoutingConfig);
138
+ // Delete user configuration
139
+ await userConfigDao.delete('admin');
140
+ console.log('Deleted admin user config');
141
+ }
142
+ /**
143
+ * Test all DAO operations
144
+ */
145
+ export async function testAllDaoOperations() {
146
+ try {
147
+ console.log('=== Testing DAO Layer ===');
148
+ console.log('\n--- User Operations ---');
149
+ await exampleUserOperations();
150
+ console.log('\n--- Server Operations ---');
151
+ await exampleServerOperations();
152
+ console.log('\n--- Group Operations ---');
153
+ await exampleGroupOperations();
154
+ console.log('\n--- System Config Operations ---');
155
+ await exampleSystemConfigOperations();
156
+ console.log('\n--- User Config Operations ---');
157
+ await exampleUserConfigOperations();
158
+ console.log('\n=== DAO Layer Test Complete ===');
159
+ }
160
+ catch (error) {
161
+ console.error('Error during DAO testing:', error);
162
+ }
163
+ }
164
+ /**
165
+ * Reset DAO factory for testing purposes
166
+ */
167
+ export function resetDaoFactory() {
168
+ const factory = JsonFileDaoFactory.getInstance();
169
+ factory.resetInstances();
170
+ setDaoFactory(factory);
171
+ }
172
+ //# sourceMappingURL=examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.js","sourceRoot":"","sources":["../../src/dao/examples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ // Export all DAO interfaces and implementations
2
+ export * from './base/BaseDao.js';
3
+ export * from './base/JsonFileBaseDao.js';
4
+ export * from './UserDao.js';
5
+ export * from './ServerDao.js';
6
+ export * from './GroupDao.js';
7
+ export * from './SystemConfigDao.js';
8
+ export * from './UserConfigDao.js';
9
+ // Export the DAO factory and convenience functions
10
+ export * from './DaoFactory.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dao/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AAEnC,mDAAmD;AACnD,cAAc,iBAAiB,CAAC"}
@@ -13,7 +13,7 @@ import { callTool } from '../controllers/toolController.js';
13
13
  import { getPrompt } from '../controllers/promptController.js';
14
14
  import { uploadDxtFile, uploadMiddleware } from '../controllers/dxtController.js';
15
15
  import { healthCheck } from '../controllers/healthController.js';
16
- import { getOpenAPISpec, getOpenAPIServers, getOpenAPIStats, executeToolViaOpenAPI, } from '../controllers/openApiController.js';
16
+ import { getOpenAPISpec, getOpenAPIServers, getOpenAPIStats, executeToolViaOpenAPI, getGroupOpenAPISpec, } from '../controllers/openApiController.js';
17
17
  import { auth } from '../middlewares/auth.js';
18
18
  const router = express.Router();
19
19
  export const initRoutes = (app) => {
@@ -103,6 +103,7 @@ export const initRoutes = (app) => {
103
103
  app.get(`${config.basePath}/public-config`, getPublicConfig);
104
104
  // OpenAPI generation endpoints
105
105
  app.get(`${config.basePath}/api/openapi.json`, getOpenAPISpec);
106
+ app.get(`${config.basePath}/api/:name/openapi.json`, getGroupOpenAPISpec);
106
107
  app.get(`${config.basePath}/api/openapi/servers`, getOpenAPIServers);
107
108
  app.get(`${config.basePath}/api/openapi/stats`, getOpenAPIStats);
108
109
  // OpenAPI-compatible tool execution endpoints
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCPHub DAO Layer Demo Script
4
+ *
5
+ * This script demonstrates how to use the new DAO layer for managing
6
+ * MCPHub configuration data.
7
+ */
8
+ import { loadSettings, switchToDao, switchToLegacy, getDaoConfigService, } from '../config/configManager.js';
9
+ import { performMigration, validateMigration, testDaoOperations, performanceComparison, generateMigrationReport, } from '../config/migrationUtils.js';
10
+ async function main() {
11
+ const args = process.argv.slice(2);
12
+ const command = args[0];
13
+ switch (command) {
14
+ case 'migrate':
15
+ {
16
+ console.log('🚀 Starting migration to DAO layer...');
17
+ const success = await performMigration();
18
+ process.exit(success ? 0 : 1);
19
+ }
20
+ break;
21
+ case 'validate':
22
+ {
23
+ console.log('🔍 Validating migration...');
24
+ const isValid = await validateMigration();
25
+ process.exit(isValid ? 0 : 1);
26
+ }
27
+ break;
28
+ case 'test':
29
+ {
30
+ console.log('🧪 Testing DAO operations...');
31
+ const testSuccess = await testDaoOperations();
32
+ process.exit(testSuccess ? 0 : 1);
33
+ }
34
+ break;
35
+ case 'compare':
36
+ {
37
+ console.log('⚡ Comparing performance...');
38
+ await performanceComparison();
39
+ process.exit(0);
40
+ }
41
+ break;
42
+ case 'report':
43
+ {
44
+ console.log('📊 Generating migration report...');
45
+ await generateMigrationReport();
46
+ process.exit(0);
47
+ }
48
+ break;
49
+ case 'demo':
50
+ {
51
+ await runDemo();
52
+ process.exit(0);
53
+ }
54
+ break;
55
+ case 'switch-dao':
56
+ {
57
+ switchToDao();
58
+ console.log('✅ Switched to DAO layer');
59
+ process.exit(0);
60
+ }
61
+ break;
62
+ case 'switch-legacy':
63
+ {
64
+ switchToLegacy();
65
+ console.log('✅ Switched to legacy file-based approach');
66
+ process.exit(0);
67
+ }
68
+ break;
69
+ default: {
70
+ printHelp();
71
+ process.exit(1);
72
+ }
73
+ }
74
+ }
75
+ function printHelp() {
76
+ console.log(`
77
+ MCPHub DAO Layer Demo
78
+
79
+ Usage: node dao-demo.js <command>
80
+
81
+ Commands:
82
+ migrate - Migrate from legacy format to DAO layer
83
+ validate - Validate migration integrity
84
+ test - Test DAO operations with sample data
85
+ compare - Compare performance between legacy and DAO approaches
86
+ report - Generate migration report
87
+ demo - Run interactive demo
88
+ switch-dao - Switch to DAO layer
89
+ switch-legacy - Switch to legacy file-based approach
90
+
91
+ Examples:
92
+ node dao-demo.js migrate
93
+ node dao-demo.js test
94
+ node dao-demo.js compare
95
+ `);
96
+ }
97
+ async function runDemo() {
98
+ console.log('🎭 MCPHub DAO Layer Interactive Demo');
99
+ console.log('=====================================\n');
100
+ try {
101
+ // Step 1: Show current configuration
102
+ console.log('📋 Step 1: Loading current configuration...');
103
+ switchToLegacy();
104
+ const legacySettings = await loadSettings();
105
+ console.log(`Current data:
106
+ - Users: ${legacySettings.users?.length || 0}
107
+ - Servers: ${Object.keys(legacySettings.mcpServers || {}).length}
108
+ - Groups: ${legacySettings.groups?.length || 0}
109
+ - System Config Sections: ${Object.keys(legacySettings.systemConfig || {}).length}
110
+ - User Configs: ${Object.keys(legacySettings.userConfigs || {}).length}
111
+ `);
112
+ // Step 2: Switch to DAO and show same data
113
+ console.log('🔄 Step 2: Switching to DAO layer...');
114
+ switchToDao();
115
+ const daoService = getDaoConfigService();
116
+ const daoSettings = await daoService.loadSettings();
117
+ console.log(`DAO layer data:
118
+ - Users: ${daoSettings.users?.length || 0}
119
+ - Servers: ${Object.keys(daoSettings.mcpServers || {}).length}
120
+ - Groups: ${daoSettings.groups?.length || 0}
121
+ - System Config Sections: ${Object.keys(daoSettings.systemConfig || {}).length}
122
+ - User Configs: ${Object.keys(daoSettings.userConfigs || {}).length}
123
+ `);
124
+ // Step 3: Demonstrate CRUD operations
125
+ console.log('🛠️ Step 3: Demonstrating CRUD operations...');
126
+ // Test user creation (if not exists)
127
+ try {
128
+ // Add demo data if needed
129
+ if (!daoSettings.users?.length) {
130
+ console.log('Creating demo user...');
131
+ // Note: In practice, you'd use the UserDao directly for password hashing
132
+ const demoSettings = {
133
+ ...daoSettings,
134
+ users: [
135
+ {
136
+ username: 'demo-user',
137
+ password: 'hashed-password',
138
+ isAdmin: false,
139
+ },
140
+ ],
141
+ };
142
+ await daoService.saveSettings(demoSettings);
143
+ console.log('✅ Demo user created');
144
+ }
145
+ // Add demo server if needed
146
+ if (!Object.keys(daoSettings.mcpServers || {}).length) {
147
+ console.log('Creating demo server...');
148
+ const demoSettings = {
149
+ ...daoSettings,
150
+ mcpServers: {
151
+ 'demo-server': {
152
+ command: 'echo',
153
+ args: ['hello'],
154
+ enabled: true,
155
+ owner: 'admin',
156
+ },
157
+ },
158
+ };
159
+ await daoService.saveSettings(demoSettings);
160
+ console.log('✅ Demo server created');
161
+ }
162
+ // Add demo group if needed
163
+ if (!daoSettings.groups?.length) {
164
+ console.log('Creating demo group...');
165
+ const demoSettings = {
166
+ ...daoSettings,
167
+ groups: [
168
+ {
169
+ id: 'demo-group-1',
170
+ name: 'Demo Group',
171
+ description: 'A demo group for testing',
172
+ servers: ['demo-server'],
173
+ owner: 'admin',
174
+ },
175
+ ],
176
+ };
177
+ await daoService.saveSettings(demoSettings);
178
+ console.log('✅ Demo group created');
179
+ }
180
+ }
181
+ catch (error) {
182
+ console.log('⚠️ Some demo operations failed (this is expected for password hashing)');
183
+ console.log('In production, you would use individual DAO methods for proper handling');
184
+ }
185
+ // Step 4: Show benefits
186
+ console.log(`
187
+ 🌟 Benefits of the DAO Layer:
188
+
189
+ 1. 📦 Separation of Concerns
190
+ - Data access logic is separated from business logic
191
+ - Each data type has its own DAO with specific operations
192
+
193
+ 2. 🔄 Easy Database Migration
194
+ - Ready for switching from JSON files to database
195
+ - Interface remains the same, implementation changes
196
+
197
+ 3. 🧪 Better Testing
198
+ - Can easily mock DAO interfaces for unit tests
199
+ - Isolated testing of data access operations
200
+
201
+ 4. 🔒 Type Safety
202
+ - Strong typing for all data operations
203
+ - Compile-time checking of data structure changes
204
+
205
+ 5. 🚀 Enhanced Features
206
+ - User password hashing in UserDao
207
+ - Server filtering by owner/type in ServerDao
208
+ - Group membership management in GroupDao
209
+ - Section-based config updates in SystemConfigDao
210
+
211
+ 6. 🏗️ Future Extensibility
212
+ - Easy to add new data types
213
+ - Consistent interface across all data operations
214
+ - Support for complex queries and relationships
215
+ `);
216
+ console.log('✅ Demo completed successfully!');
217
+ }
218
+ catch (error) {
219
+ console.error('❌ Demo failed:', error);
220
+ }
221
+ }
222
+ // Run the main function
223
+ if (require.main === module) {
224
+ main().catch(console.error);
225
+ }
226
+ //# sourceMappingURL=dao-demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dao-demo.js","sourceRoot":"","sources":["../../src/scripts/dao-demo.ts"],"names":[],"mappings":"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"}