@samanhappy/mcphub 0.9.5 → 0.9.7
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.
- package/dist/config/DaoConfigService.js +210 -0
- package/dist/config/DaoConfigService.js.map +1 -0
- package/dist/config/configManager.js +123 -0
- package/dist/config/configManager.js.map +1 -0
- package/dist/config/migrationUtils.js +206 -0
- package/dist/config/migrationUtils.js.map +1 -0
- package/dist/controllers/logController.js +1 -1
- package/dist/controllers/logController.js.map +1 -1
- package/dist/controllers/marketController.js +1 -1
- package/dist/controllers/marketController.js.map +1 -1
- package/dist/controllers/openApiController.js +158 -7
- package/dist/controllers/openApiController.js.map +1 -1
- package/dist/controllers/promptController.js +1 -1
- package/dist/controllers/serverController.js +8 -9
- package/dist/controllers/serverController.js.map +1 -1
- package/dist/dao/DaoFactory.js +102 -0
- package/dist/dao/DaoFactory.js.map +1 -0
- package/dist/dao/GroupDao.js +156 -0
- package/dist/dao/GroupDao.js.map +1 -0
- package/dist/dao/ServerDao.js +117 -0
- package/dist/dao/ServerDao.js.map +1 -0
- package/dist/dao/SystemConfigDao.js +55 -0
- package/dist/dao/SystemConfigDao.js.map +1 -0
- package/dist/dao/UserConfigDao.js +72 -0
- package/dist/dao/UserConfigDao.js.map +1 -0
- package/dist/dao/UserDao.js +107 -0
- package/dist/dao/UserDao.js.map +1 -0
- package/dist/dao/base/BaseDao.js +49 -0
- package/dist/dao/base/BaseDao.js.map +1 -0
- package/dist/dao/base/JsonFileBaseDao.js +84 -0
- package/dist/dao/base/JsonFileBaseDao.js.map +1 -0
- package/dist/dao/examples.js +172 -0
- package/dist/dao/examples.js.map +1 -0
- package/dist/dao/index.js +11 -0
- package/dist/dao/index.js.map +1 -0
- package/dist/routes/index.js +4 -1
- package/dist/routes/index.js.map +1 -1
- package/dist/scripts/dao-demo.js +226 -0
- package/dist/scripts/dao-demo.js.map +1 -0
- package/dist/services/mcpService.js +49 -71
- package/dist/services/mcpService.js.map +1 -1
- package/dist/services/openApiGeneratorService.js +44 -8
- package/dist/services/openApiGeneratorService.js.map +1 -1
- package/dist/services/sseService.js.map +1 -1
- package/dist/services/vectorSearchService.js +1 -1
- package/dist/services/vectorSearchService.js.map +1 -1
- package/frontend/dist/assets/index-ISu9ai3k.js +212 -0
- package/frontend/dist/assets/index-ISu9ai3k.js.map +1 -0
- package/frontend/dist/index.html +1 -1
- package/package.json +3 -1
- package/frontend/dist/assets/index-dsw9o-29.js +0 -212
- package/frontend/dist/assets/index-dsw9o-29.js.map +0 -1
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { UserDaoImpl, ServerDaoImpl, GroupDaoImpl, SystemConfigDaoImpl, UserConfigDaoImpl, } from '../dao/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration service using DAO layer
|
|
4
|
+
*/
|
|
5
|
+
export class DaoConfigService {
|
|
6
|
+
constructor(userDao, serverDao, groupDao, systemConfigDao, userConfigDao) {
|
|
7
|
+
this.userDao = userDao;
|
|
8
|
+
this.serverDao = serverDao;
|
|
9
|
+
this.groupDao = groupDao;
|
|
10
|
+
this.systemConfigDao = systemConfigDao;
|
|
11
|
+
this.userConfigDao = userConfigDao;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Load complete settings using DAO layer
|
|
15
|
+
*/
|
|
16
|
+
async loadSettings(user) {
|
|
17
|
+
const [users, servers, groups, systemConfig, userConfigs] = await Promise.all([
|
|
18
|
+
this.userDao.findAll(),
|
|
19
|
+
this.serverDao.findAll(),
|
|
20
|
+
this.groupDao.findAll(),
|
|
21
|
+
this.systemConfigDao.get(),
|
|
22
|
+
this.userConfigDao.getAll(),
|
|
23
|
+
]);
|
|
24
|
+
// Convert servers back to the original format
|
|
25
|
+
const mcpServers = {};
|
|
26
|
+
for (const server of servers) {
|
|
27
|
+
const { name, ...config } = server;
|
|
28
|
+
mcpServers[name] = config;
|
|
29
|
+
}
|
|
30
|
+
const settings = {
|
|
31
|
+
users,
|
|
32
|
+
mcpServers,
|
|
33
|
+
groups,
|
|
34
|
+
systemConfig,
|
|
35
|
+
userConfigs,
|
|
36
|
+
};
|
|
37
|
+
// Apply user-specific filtering if needed
|
|
38
|
+
if (user && !user.isAdmin) {
|
|
39
|
+
return this.filterSettingsForUser(settings, user);
|
|
40
|
+
}
|
|
41
|
+
return settings;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Save settings using DAO layer
|
|
45
|
+
*/
|
|
46
|
+
async saveSettings(settings, user) {
|
|
47
|
+
try {
|
|
48
|
+
// If user is not admin, merge with existing settings
|
|
49
|
+
if (user && !user.isAdmin) {
|
|
50
|
+
const currentSettings = await this.loadSettings();
|
|
51
|
+
settings = this.mergeSettingsForUser(currentSettings, settings, user);
|
|
52
|
+
}
|
|
53
|
+
// Save each component using respective DAOs
|
|
54
|
+
const promises = [];
|
|
55
|
+
// Save users
|
|
56
|
+
if (settings.users) {
|
|
57
|
+
// Note: For users, we need to handle creation/updates separately
|
|
58
|
+
// since passwords might need hashing
|
|
59
|
+
// This is a simplified approach - in practice, you'd want more sophisticated handling
|
|
60
|
+
const currentUsers = await this.userDao.findAll();
|
|
61
|
+
for (const user of settings.users) {
|
|
62
|
+
const existing = currentUsers.find((u) => u.username === user.username);
|
|
63
|
+
if (existing) {
|
|
64
|
+
promises.push(this.userDao.update(user.username, user));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
// For new users, we'd need to handle password hashing properly
|
|
68
|
+
// This is a placeholder - actual implementation would use createWithHashedPassword
|
|
69
|
+
console.warn('Creating new user requires special handling for password hashing');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Save servers
|
|
74
|
+
if (settings.mcpServers) {
|
|
75
|
+
const currentServers = await this.serverDao.findAll();
|
|
76
|
+
const currentServerNames = new Set(currentServers.map((s) => s.name));
|
|
77
|
+
for (const [name, config] of Object.entries(settings.mcpServers)) {
|
|
78
|
+
const serverWithName = { name, ...config };
|
|
79
|
+
if (currentServerNames.has(name)) {
|
|
80
|
+
promises.push(this.serverDao.update(name, serverWithName));
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
promises.push(this.serverDao.create(serverWithName));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Remove servers that are no longer in the settings
|
|
87
|
+
for (const existingServer of currentServers) {
|
|
88
|
+
if (!settings.mcpServers[existingServer.name]) {
|
|
89
|
+
promises.push(this.serverDao.delete(existingServer.name));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Save groups
|
|
94
|
+
if (settings.groups) {
|
|
95
|
+
const currentGroups = await this.groupDao.findAll();
|
|
96
|
+
const currentGroupIds = new Set(currentGroups.map((g) => g.id));
|
|
97
|
+
for (const group of settings.groups) {
|
|
98
|
+
if (group.id && currentGroupIds.has(group.id)) {
|
|
99
|
+
promises.push(this.groupDao.update(group.id, group));
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
promises.push(this.groupDao.create(group));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Remove groups that are no longer in the settings
|
|
106
|
+
const newGroupIds = new Set(settings.groups.map((g) => g.id).filter(Boolean));
|
|
107
|
+
for (const existingGroup of currentGroups) {
|
|
108
|
+
if (!newGroupIds.has(existingGroup.id)) {
|
|
109
|
+
promises.push(this.groupDao.delete(existingGroup.id));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Save system config
|
|
114
|
+
if (settings.systemConfig) {
|
|
115
|
+
promises.push(this.systemConfigDao.update(settings.systemConfig));
|
|
116
|
+
}
|
|
117
|
+
// Save user configs
|
|
118
|
+
if (settings.userConfigs) {
|
|
119
|
+
for (const [username, config] of Object.entries(settings.userConfigs)) {
|
|
120
|
+
promises.push(this.userConfigDao.update(username, config));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
await Promise.all(promises);
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
console.error('Failed to save settings using DAO layer:', error);
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Filter settings for non-admin users
|
|
133
|
+
*/
|
|
134
|
+
filterSettingsForUser(settings, user) {
|
|
135
|
+
if (user.isAdmin) {
|
|
136
|
+
return settings;
|
|
137
|
+
}
|
|
138
|
+
// Non-admin users can only see their own servers and groups
|
|
139
|
+
const filteredServers = {};
|
|
140
|
+
for (const [name, config] of Object.entries(settings.mcpServers || {})) {
|
|
141
|
+
if (config.owner === user.username || config.owner === undefined) {
|
|
142
|
+
filteredServers[name] = config;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const filteredGroups = (settings.groups || []).filter((group) => group.owner === user.username || group.owner === undefined);
|
|
146
|
+
return {
|
|
147
|
+
...settings,
|
|
148
|
+
mcpServers: filteredServers,
|
|
149
|
+
groups: filteredGroups,
|
|
150
|
+
users: [], // Non-admin users can't see user list
|
|
151
|
+
systemConfig: {}, // Non-admin users can't see system config
|
|
152
|
+
userConfigs: { [user.username]: settings.userConfigs?.[user.username] || {} },
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Merge settings for non-admin users
|
|
157
|
+
*/
|
|
158
|
+
mergeSettingsForUser(currentSettings, newSettings, user) {
|
|
159
|
+
if (user.isAdmin) {
|
|
160
|
+
return newSettings;
|
|
161
|
+
}
|
|
162
|
+
// Non-admin users can only modify their own servers, groups, and user config
|
|
163
|
+
const mergedSettings = { ...currentSettings };
|
|
164
|
+
// Merge servers (only user's own servers)
|
|
165
|
+
if (newSettings.mcpServers) {
|
|
166
|
+
for (const [name, config] of Object.entries(newSettings.mcpServers)) {
|
|
167
|
+
const existingConfig = currentSettings.mcpServers?.[name];
|
|
168
|
+
if (!existingConfig || existingConfig.owner === user.username) {
|
|
169
|
+
mergedSettings.mcpServers = mergedSettings.mcpServers || {};
|
|
170
|
+
mergedSettings.mcpServers[name] = { ...config, owner: user.username };
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Merge groups (only user's own groups)
|
|
175
|
+
if (newSettings.groups) {
|
|
176
|
+
const userGroups = newSettings.groups
|
|
177
|
+
.filter((group) => !group.owner || group.owner === user.username)
|
|
178
|
+
.map((group) => ({ ...group, owner: user.username }));
|
|
179
|
+
const otherGroups = (currentSettings.groups || []).filter((group) => group.owner !== user.username);
|
|
180
|
+
mergedSettings.groups = [...otherGroups, ...userGroups];
|
|
181
|
+
}
|
|
182
|
+
// Merge user config (only user's own config)
|
|
183
|
+
if (newSettings.userConfigs?.[user.username]) {
|
|
184
|
+
mergedSettings.userConfigs = mergedSettings.userConfigs || {};
|
|
185
|
+
mergedSettings.userConfigs[user.username] = newSettings.userConfigs[user.username];
|
|
186
|
+
}
|
|
187
|
+
return mergedSettings;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Clear all caches
|
|
191
|
+
*/
|
|
192
|
+
async clearCache() {
|
|
193
|
+
// DAO implementations handle their own caching
|
|
194
|
+
// This could be extended to clear DAO-level caches if needed
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Get cache info for debugging
|
|
198
|
+
*/
|
|
199
|
+
getCacheInfo() {
|
|
200
|
+
// DAO implementations handle their own caching
|
|
201
|
+
return { hasCache: false };
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Create a DaoConfigService with default DAO implementations
|
|
206
|
+
*/
|
|
207
|
+
export function createDaoConfigService() {
|
|
208
|
+
return new DaoConfigService(new UserDaoImpl(), new ServerDaoImpl(), new GroupDaoImpl(), new SystemConfigDaoImpl(), new UserConfigDaoImpl());
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=DaoConfigService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DaoConfigService.js","sourceRoot":"","sources":["../../src/config/DaoConfigService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import dotenv from 'dotenv';
|
|
2
|
+
import { getPackageVersion } from '../utils/version.js';
|
|
3
|
+
import { getDataService } from '../services/services.js';
|
|
4
|
+
import { createDaoConfigService } from './DaoConfigService.js';
|
|
5
|
+
import { loadOriginalSettings as legacyLoadSettings, saveSettings as legacySaveSettings, clearSettingsCache as legacyClearCache, } from './index.js';
|
|
6
|
+
dotenv.config();
|
|
7
|
+
const defaultConfig = {
|
|
8
|
+
port: process.env.PORT || 3000,
|
|
9
|
+
initTimeout: process.env.INIT_TIMEOUT || 300000,
|
|
10
|
+
basePath: process.env.BASE_PATH || '',
|
|
11
|
+
readonly: 'true' === process.env.READONLY || false,
|
|
12
|
+
mcpHubName: 'mcphub',
|
|
13
|
+
mcpHubVersion: getPackageVersion(),
|
|
14
|
+
};
|
|
15
|
+
// Configuration for which data access method to use
|
|
16
|
+
const USE_DAO_LAYER = process.env.USE_DAO_LAYER === 'true';
|
|
17
|
+
// Services
|
|
18
|
+
const dataService = getDataService();
|
|
19
|
+
const daoConfigService = createDaoConfigService();
|
|
20
|
+
/**
|
|
21
|
+
* Load settings using either DAO layer or legacy file-based approach
|
|
22
|
+
*/
|
|
23
|
+
export const loadSettings = async (user) => {
|
|
24
|
+
if (USE_DAO_LAYER) {
|
|
25
|
+
console.log('Loading settings using DAO layer');
|
|
26
|
+
return await daoConfigService.loadSettings(user);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
console.log('Loading settings using legacy approach');
|
|
30
|
+
const settings = legacyLoadSettings();
|
|
31
|
+
return dataService.filterSettings(settings, user);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Save settings using either DAO layer or legacy file-based approach
|
|
36
|
+
*/
|
|
37
|
+
export const saveSettings = async (settings, user) => {
|
|
38
|
+
if (USE_DAO_LAYER) {
|
|
39
|
+
console.log('Saving settings using DAO layer');
|
|
40
|
+
return await daoConfigService.saveSettings(settings, user);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log('Saving settings using legacy approach');
|
|
44
|
+
const mergedSettings = dataService.mergeSettings(legacyLoadSettings(), settings, user);
|
|
45
|
+
return legacySaveSettings(mergedSettings, user);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Clear settings cache
|
|
50
|
+
*/
|
|
51
|
+
export const clearSettingsCache = () => {
|
|
52
|
+
if (USE_DAO_LAYER) {
|
|
53
|
+
daoConfigService.clearCache();
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
legacyClearCache();
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Get current cache status (for debugging)
|
|
61
|
+
*/
|
|
62
|
+
export const getSettingsCacheInfo = () => {
|
|
63
|
+
if (USE_DAO_LAYER) {
|
|
64
|
+
const daoInfo = daoConfigService.getCacheInfo();
|
|
65
|
+
return {
|
|
66
|
+
...daoInfo,
|
|
67
|
+
usingDao: true,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
return {
|
|
72
|
+
hasCache: false, // Legacy method doesn't expose cache info here
|
|
73
|
+
usingDao: false,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Switch to DAO layer at runtime (for testing/migration purposes)
|
|
79
|
+
*/
|
|
80
|
+
export const switchToDao = () => {
|
|
81
|
+
process.env.USE_DAO_LAYER = 'true';
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Switch to legacy file-based approach at runtime (for testing/rollback purposes)
|
|
85
|
+
*/
|
|
86
|
+
export const switchToLegacy = () => {
|
|
87
|
+
process.env.USE_DAO_LAYER = 'false';
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Get DAO config service for direct access
|
|
91
|
+
*/
|
|
92
|
+
export const getDaoConfigService = () => {
|
|
93
|
+
return daoConfigService;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Migration utility to migrate from legacy format to DAO layer
|
|
97
|
+
*/
|
|
98
|
+
export const migrateToDao = async () => {
|
|
99
|
+
try {
|
|
100
|
+
console.log('Starting migration from legacy format to DAO layer...');
|
|
101
|
+
// Load data using legacy method
|
|
102
|
+
const legacySettings = legacyLoadSettings();
|
|
103
|
+
// Save using DAO layer
|
|
104
|
+
switchToDao();
|
|
105
|
+
const success = await saveSettings(legacySettings);
|
|
106
|
+
if (success) {
|
|
107
|
+
console.log('Migration completed successfully');
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
console.error('Migration failed during save operation');
|
|
112
|
+
switchToLegacy();
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.error('Migration failed:', error);
|
|
118
|
+
switchToLegacy();
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
export default defaultConfig;
|
|
123
|
+
//# sourceMappingURL=configManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configManager.js","sourceRoot":"","sources":["../../src/config/configManager.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAoB,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EACL,oBAAoB,IAAI,kBAAkB,EAC1C,YAAY,IAAI,kBAAkB,EAClC,kBAAkB,IAAI,gBAAgB,GACvC,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,aAAa,GAAG;IACpB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI;IAC9B,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM;IAC/C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE;IACrC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,KAAK;IAClD,UAAU,EAAE,QAAQ;IACpB,aAAa,EAAE,iBAAiB,EAAE;CACnC,CAAC;AAEF,oDAAoD;AACpD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,CAAC;AAE3D,WAAW;AACX,MAAM,WAAW,GAAgB,cAAc,EAAE,CAAC;AAClD,MAAM,gBAAgB,GAAqB,sBAAsB,EAAE,CAAC;AAEpE;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,IAAY,EAAwB,EAAE;IACvE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO,MAAM,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;QACtC,OAAO,WAAW,CAAC,cAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,QAAqB,EAAE,IAAY,EAAoB,EAAE;IAC1F,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,MAAM,gBAAgB,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,WAAW,CAAC,aAAc,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxF,OAAO,kBAAkB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAS,EAAE;IAC3C,IAAI,aAAa,EAAE,CAAC;QAClB,gBAAgB,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,gBAAgB,EAAE,CAAC;IACrB,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAA6C,EAAE;IACjF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAY,EAAE,CAAC;QAChD,OAAO;YACL,GAAG,OAAO;YACV,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO;YACL,QAAQ,EAAE,KAAK,EAAE,+CAA+C;YAChE,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAS,EAAE;IACpC,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC;AACrC,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAS,EAAE;IACvC,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,OAAO,CAAC;AACtC,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAqB,EAAE;IACxD,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,IAAsB,EAAE;IACvD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QAErE,gCAAgC;QAChC,MAAM,cAAc,GAAG,kBAAkB,EAAE,CAAC;QAE5C,uBAAuB;QACvB,WAAW,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,CAAC;QAEnD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACxD,cAAc,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAC1C,cAAc,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration utilities for moving from legacy file-based config to DAO layer
|
|
3
|
+
*/
|
|
4
|
+
import { loadSettings, migrateToDao, switchToDao, switchToLegacy } from './configManager.js';
|
|
5
|
+
import { UserDaoImpl, ServerDaoImpl, GroupDaoImpl } from '../dao/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Validate data integrity after migration
|
|
8
|
+
*/
|
|
9
|
+
export async function validateMigration() {
|
|
10
|
+
try {
|
|
11
|
+
console.log('Validating migration...');
|
|
12
|
+
// Load settings using DAO layer
|
|
13
|
+
switchToDao();
|
|
14
|
+
const daoSettings = await loadSettings();
|
|
15
|
+
// Load settings using legacy method
|
|
16
|
+
switchToLegacy();
|
|
17
|
+
const legacySettings = await loadSettings();
|
|
18
|
+
// Compare key metrics
|
|
19
|
+
const daoUserCount = daoSettings.users?.length || 0;
|
|
20
|
+
const legacyUserCount = legacySettings.users?.length || 0;
|
|
21
|
+
const daoServerCount = Object.keys(daoSettings.mcpServers || {}).length;
|
|
22
|
+
const legacyServerCount = Object.keys(legacySettings.mcpServers || {}).length;
|
|
23
|
+
const daoGroupCount = daoSettings.groups?.length || 0;
|
|
24
|
+
const legacyGroupCount = legacySettings.groups?.length || 0;
|
|
25
|
+
console.log('Data comparison:');
|
|
26
|
+
console.log(`Users: DAO=${daoUserCount}, Legacy=${legacyUserCount}`);
|
|
27
|
+
console.log(`Servers: DAO=${daoServerCount}, Legacy=${legacyServerCount}`);
|
|
28
|
+
console.log(`Groups: DAO=${daoGroupCount}, Legacy=${legacyGroupCount}`);
|
|
29
|
+
const isValid = daoUserCount === legacyUserCount &&
|
|
30
|
+
daoServerCount === legacyServerCount &&
|
|
31
|
+
daoGroupCount === legacyGroupCount;
|
|
32
|
+
if (isValid) {
|
|
33
|
+
console.log('✅ Migration validation passed');
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log('❌ Migration validation failed');
|
|
37
|
+
}
|
|
38
|
+
return isValid;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.error('Migration validation error:', error);
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Perform a complete migration with validation
|
|
47
|
+
*/
|
|
48
|
+
export async function performMigration() {
|
|
49
|
+
try {
|
|
50
|
+
console.log('🚀 Starting migration to DAO layer...');
|
|
51
|
+
// Step 1: Backup current data
|
|
52
|
+
console.log('📁 Creating backup of current data...');
|
|
53
|
+
switchToLegacy();
|
|
54
|
+
const _backupData = await loadSettings();
|
|
55
|
+
// Step 2: Perform migration
|
|
56
|
+
console.log('🔄 Migrating data to DAO layer...');
|
|
57
|
+
const migrationSuccess = await migrateToDao();
|
|
58
|
+
if (!migrationSuccess) {
|
|
59
|
+
console.error('❌ Migration failed');
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
// Step 3: Validate migration
|
|
63
|
+
console.log('🔍 Validating migration...');
|
|
64
|
+
const validationSuccess = await validateMigration();
|
|
65
|
+
if (!validationSuccess) {
|
|
66
|
+
console.error('❌ Migration validation failed');
|
|
67
|
+
// Could implement rollback here if needed
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
console.log('✅ Migration completed successfully!');
|
|
71
|
+
console.log('💡 You can now use the DAO layer by setting USE_DAO_LAYER=true');
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
console.error('Migration error:', error);
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Test DAO operations with sample data
|
|
81
|
+
*/
|
|
82
|
+
export async function testDaoOperations() {
|
|
83
|
+
try {
|
|
84
|
+
console.log('🧪 Testing DAO operations...');
|
|
85
|
+
switchToDao();
|
|
86
|
+
const userDao = new UserDaoImpl();
|
|
87
|
+
const serverDao = new ServerDaoImpl();
|
|
88
|
+
const groupDao = new GroupDaoImpl();
|
|
89
|
+
// Test user operations
|
|
90
|
+
console.log('Testing user operations...');
|
|
91
|
+
const testUser = await userDao.createWithHashedPassword('test-dao-user', 'password123', false);
|
|
92
|
+
console.log(`✅ Created test user: ${testUser.username}`);
|
|
93
|
+
const foundUser = await userDao.findByUsername('test-dao-user');
|
|
94
|
+
console.log(`✅ Found user: ${foundUser?.username}`);
|
|
95
|
+
const isValidPassword = await userDao.validateCredentials('test-dao-user', 'password123');
|
|
96
|
+
console.log(`✅ Password validation: ${isValidPassword}`);
|
|
97
|
+
// Test server operations
|
|
98
|
+
console.log('Testing server operations...');
|
|
99
|
+
const testServer = await serverDao.create({
|
|
100
|
+
name: 'test-dao-server',
|
|
101
|
+
command: 'node',
|
|
102
|
+
args: ['test.js'],
|
|
103
|
+
enabled: true,
|
|
104
|
+
owner: 'test-dao-user',
|
|
105
|
+
});
|
|
106
|
+
console.log(`✅ Created test server: ${testServer.name}`);
|
|
107
|
+
const userServers = await serverDao.findByOwner('test-dao-user');
|
|
108
|
+
console.log(`✅ Found ${userServers.length} servers for user`);
|
|
109
|
+
// Test group operations
|
|
110
|
+
console.log('Testing group operations...');
|
|
111
|
+
const testGroup = await groupDao.create({
|
|
112
|
+
name: 'test-dao-group',
|
|
113
|
+
description: 'Test group for DAO operations',
|
|
114
|
+
servers: ['test-dao-server'],
|
|
115
|
+
owner: 'test-dao-user',
|
|
116
|
+
});
|
|
117
|
+
console.log(`✅ Created test group: ${testGroup.name} (ID: ${testGroup.id})`);
|
|
118
|
+
const userGroups = await groupDao.findByOwner('test-dao-user');
|
|
119
|
+
console.log(`✅ Found ${userGroups.length} groups for user`);
|
|
120
|
+
// Cleanup test data
|
|
121
|
+
console.log('Cleaning up test data...');
|
|
122
|
+
await groupDao.delete(testGroup.id);
|
|
123
|
+
await serverDao.delete('test-dao-server');
|
|
124
|
+
await userDao.delete('test-dao-user');
|
|
125
|
+
console.log('✅ Test data cleaned up');
|
|
126
|
+
console.log('🎉 All DAO operations test passed!');
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.error('DAO operations test error:', error);
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Performance comparison between legacy and DAO approaches
|
|
136
|
+
*/
|
|
137
|
+
export async function performanceComparison() {
|
|
138
|
+
try {
|
|
139
|
+
console.log('⚡ Performance comparison...');
|
|
140
|
+
// Test legacy approach
|
|
141
|
+
console.log('Testing legacy approach...');
|
|
142
|
+
switchToLegacy();
|
|
143
|
+
const legacyStart = Date.now();
|
|
144
|
+
await loadSettings();
|
|
145
|
+
const legacyTime = Date.now() - legacyStart;
|
|
146
|
+
console.log(`Legacy load time: ${legacyTime}ms`);
|
|
147
|
+
// Test DAO approach
|
|
148
|
+
console.log('Testing DAO approach...');
|
|
149
|
+
switchToDao();
|
|
150
|
+
const daoStart = Date.now();
|
|
151
|
+
await loadSettings();
|
|
152
|
+
const daoTime = Date.now() - daoStart;
|
|
153
|
+
console.log(`DAO load time: ${daoTime}ms`);
|
|
154
|
+
// Comparison
|
|
155
|
+
const difference = daoTime - legacyTime;
|
|
156
|
+
const percentage = ((difference / legacyTime) * 100).toFixed(2);
|
|
157
|
+
console.log(`Performance difference: ${difference}ms (${percentage}%)`);
|
|
158
|
+
if (difference > 0) {
|
|
159
|
+
console.log(`DAO approach is ${percentage}% slower`);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
console.log(`DAO approach is ${Math.abs(parseFloat(percentage))}% faster`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
console.error('Performance comparison error:', error);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Generate migration report
|
|
171
|
+
*/
|
|
172
|
+
export async function generateMigrationReport() {
|
|
173
|
+
try {
|
|
174
|
+
console.log('📊 Generating migration report...');
|
|
175
|
+
// Collect statistics from both approaches
|
|
176
|
+
switchToLegacy();
|
|
177
|
+
const legacySettings = await loadSettings();
|
|
178
|
+
switchToDao();
|
|
179
|
+
const daoSettings = await loadSettings();
|
|
180
|
+
const report = {
|
|
181
|
+
timestamp: new Date().toISOString(),
|
|
182
|
+
legacy: {
|
|
183
|
+
users: legacySettings.users?.length || 0,
|
|
184
|
+
servers: Object.keys(legacySettings.mcpServers || {}).length,
|
|
185
|
+
groups: legacySettings.groups?.length || 0,
|
|
186
|
+
systemConfigSections: Object.keys(legacySettings.systemConfig || {}).length,
|
|
187
|
+
userConfigs: Object.keys(legacySettings.userConfigs || {}).length,
|
|
188
|
+
},
|
|
189
|
+
dao: {
|
|
190
|
+
users: daoSettings.users?.length || 0,
|
|
191
|
+
servers: Object.keys(daoSettings.mcpServers || {}).length,
|
|
192
|
+
groups: daoSettings.groups?.length || 0,
|
|
193
|
+
systemConfigSections: Object.keys(daoSettings.systemConfig || {}).length,
|
|
194
|
+
userConfigs: Object.keys(daoSettings.userConfigs || {}).length,
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
console.log('📈 Migration Report:');
|
|
198
|
+
console.log(JSON.stringify(report, null, 2));
|
|
199
|
+
return report;
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
console.error('Report generation error:', error);
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=migrationUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrationUtils.js","sourceRoot":"","sources":["../../src/config/migrationUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ export const streamLogs = (req, res) => {
|
|
|
28
28
|
res.writeHead(200, {
|
|
29
29
|
'Content-Type': 'text/event-stream',
|
|
30
30
|
'Cache-Control': 'no-cache',
|
|
31
|
-
|
|
31
|
+
Connection: 'keep-alive',
|
|
32
32
|
});
|
|
33
33
|
// Send initial data
|
|
34
34
|
const logs = logService.getLogs();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logController.js","sourceRoot":"","sources":["../../src/controllers/logController.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,MAAM,2BAA2B,CAAC;AAEnD,eAAe;AACf,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;IAC9D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;QAClC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC5C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC,CAAC;AAEF,iBAAiB;AACjB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;IAC7D,IAAI,CAAC;QACH,UAAU,CAAC,SAAS,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAC7C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC,CAAC;AAEF,sBAAsB;AACtB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;IAC9D,IAAI,CAAC;QACH,sBAAsB;QACtB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,cAAc,EAAE,mBAAmB;YACnC,eAAe,EAAE,UAAU;YAC3B,
|
|
1
|
+
{"version":3,"file":"logController.js","sourceRoot":"","sources":["../../src/controllers/logController.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,MAAM,2BAA2B,CAAC;AAEnD,eAAe;AACf,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;IAC9D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;QAClC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC5C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC,CAAC;AAEF,iBAAiB;AACjB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;IAC7D,IAAI,CAAC;QACH,UAAU,CAAC,SAAS,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAC7C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC,CAAC;AAEF,sBAAsB;AACtB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;IAC9D,IAAI,CAAC;QACH,sBAAsB;QACtB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,cAAc,EAAE,mBAAmB;YACnC,eAAe,EAAE,UAAU;YAC3B,UAAU,EAAE,YAAY;SACzB,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;QAClC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;QAEpE,0BAA0B;QAC1B,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/C,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,2BAA2B;QAC3B,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,WAAW,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getMarketServers, getMarketServerByName, getMarketCategories, getMarketTags, searchMarketServers, filterMarketServersByCategory, filterMarketServersByTag } from '../services/marketService.js';
|
|
1
|
+
import { getMarketServers, getMarketServerByName, getMarketCategories, getMarketTags, searchMarketServers, filterMarketServersByCategory, filterMarketServersByTag, } from '../services/marketService.js';
|
|
2
2
|
// Get all market servers
|
|
3
3
|
export const getAllMarketServers = (_, res) => {
|
|
4
4
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketController.js","sourceRoot":"","sources":["../../src/controllers/marketController.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,6BAA6B,EAC7B,wBAAwB,
|
|
1
|
+
{"version":3,"file":"marketController.js","sourceRoot":"","sources":["../../src/controllers/marketController.ts"],"names":[],"mappings":"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"}
|