@samanhappy/mcphub 0.8.6 → 0.9.0
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/index.js +5 -4
- package/dist/config/index.js.map +1 -1
- package/dist/controllers/authController.js +27 -5
- package/dist/controllers/authController.js.map +1 -1
- package/dist/controllers/cloudController.js +245 -0
- package/dist/controllers/cloudController.js.map +1 -0
- package/dist/controllers/configController.js +12 -0
- package/dist/controllers/configController.js.map +1 -1
- package/dist/controllers/healthController.js +34 -0
- package/dist/controllers/healthController.js.map +1 -0
- package/dist/controllers/serverController.js +38 -4
- package/dist/controllers/serverController.js.map +1 -1
- package/dist/controllers/userController.js +5 -0
- package/dist/controllers/userController.js.map +1 -1
- package/dist/middlewares/auth.js +18 -0
- package/dist/middlewares/auth.js.map +1 -1
- package/dist/middlewares/i18n.js +36 -0
- package/dist/middlewares/i18n.js.map +1 -0
- package/dist/middlewares/index.js +5 -2
- package/dist/middlewares/index.js.map +1 -1
- package/dist/routes/index.js +14 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/server.js +4 -0
- package/dist/server.js.map +1 -1
- package/dist/services/cloudService.js +218 -0
- package/dist/services/cloudService.js.map +1 -0
- package/dist/services/dataService.js +3 -3
- package/dist/services/dataService.js.map +1 -1
- package/dist/services/mcpService.js +23 -12
- package/dist/services/mcpService.js.map +1 -1
- package/dist/services/registry.js +26 -10
- package/dist/services/registry.js.map +1 -1
- package/dist/utils/i18n.js +34 -0
- package/dist/utils/i18n.js.map +1 -0
- package/frontend/dist/assets/index-DHL_5Rv9.css +1 -0
- package/frontend/dist/assets/index-Di8bumN2.js +203 -0
- package/frontend/dist/assets/index-Di8bumN2.js.map +1 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +3 -1
- package/frontend/dist/assets/index-CjT98mwq.css +0 -1
- package/frontend/dist/assets/index-Pdqvi7T6.js +0 -202
- package/frontend/dist/assets/index-Pdqvi7T6.js.map +0 -1
package/dist/config/index.js
CHANGED
|
@@ -9,6 +9,7 @@ const defaultConfig = {
|
|
|
9
9
|
initTimeout: process.env.INIT_TIMEOUT || 300000,
|
|
10
10
|
timeout: process.env.REQUEST_TIMEOUT || 60000,
|
|
11
11
|
basePath: process.env.BASE_PATH || '',
|
|
12
|
+
readonly: 'true' === process.env.READONLY || false,
|
|
12
13
|
mcpHubName: 'mcphub',
|
|
13
14
|
mcpHubVersion: getPackageVersion(),
|
|
14
15
|
};
|
|
@@ -40,13 +41,13 @@ export const loadOriginalSettings = () => {
|
|
|
40
41
|
return defaultSettings;
|
|
41
42
|
}
|
|
42
43
|
};
|
|
43
|
-
export const loadSettings = () => {
|
|
44
|
-
return dataService.filterSettings(loadOriginalSettings());
|
|
44
|
+
export const loadSettings = (user) => {
|
|
45
|
+
return dataService.filterSettings(loadOriginalSettings(), user);
|
|
45
46
|
};
|
|
46
|
-
export const saveSettings = (settings) => {
|
|
47
|
+
export const saveSettings = (settings, user) => {
|
|
47
48
|
const settingsPath = getSettingsPath();
|
|
48
49
|
try {
|
|
49
|
-
const mergedSettings = dataService.mergeSettings(loadOriginalSettings(), settings);
|
|
50
|
+
const mergedSettings = dataService.mergeSettings(loadOriginalSettings(), settings, user);
|
|
50
51
|
fs.writeFileSync(settingsPath, JSON.stringify(mergedSettings, null, 2), 'utf8');
|
|
51
52
|
// Update cache after successful save
|
|
52
53
|
settingsCache = mergedSettings;
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAGzD,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,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,KAAK;IAC7C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE;IACrC,UAAU,EAAE,QAAQ;IACpB,aAAa,EAAE,iBAAiB,EAAE;CACnC,CAAC;AAEF,MAAM,WAAW,GAAgB,cAAc,EAAE,CAAC;AAElD,iBAAiB;AACjB,IAAI,aAAa,GAAuB,IAAI,CAAC;AAE7C,MAAM,CAAC,MAAM,eAAe,GAAG,GAAW,EAAE;IAC1C,OAAO,iBAAiB,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAgB,EAAE;IACpD,+CAA+C;IAC/C,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAE1C,eAAe;QACf,aAAa,GAAG,QAAQ,CAAC;QAEzB,OAAO,CAAC,GAAG,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,YAAY,GAAG,EAAE,KAAK,CAAC,CAAC;QACtE,MAAM,eAAe,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAEtD,yBAAyB;QACzB,aAAa,GAAG,eAAe,CAAC;QAEhC,OAAO,eAAe,CAAC;IACzB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,10 +8,16 @@ const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key-change-this';
|
|
|
8
8
|
const TOKEN_EXPIRY = '24h';
|
|
9
9
|
// Login user
|
|
10
10
|
export const login = async (req, res) => {
|
|
11
|
+
// Get translation function from request
|
|
12
|
+
const t = req.t;
|
|
11
13
|
// Validate request
|
|
12
14
|
const errors = validationResult(req);
|
|
13
15
|
if (!errors.isEmpty()) {
|
|
14
|
-
res.status(400).json({
|
|
16
|
+
res.status(400).json({
|
|
17
|
+
success: false,
|
|
18
|
+
message: t('api.errors.validation_failed'),
|
|
19
|
+
errors: errors.array(),
|
|
20
|
+
});
|
|
15
21
|
return;
|
|
16
22
|
}
|
|
17
23
|
const { username, password } = req.body;
|
|
@@ -19,13 +25,19 @@ export const login = async (req, res) => {
|
|
|
19
25
|
// Find user by username
|
|
20
26
|
const user = findUserByUsername(username);
|
|
21
27
|
if (!user) {
|
|
22
|
-
res.status(401).json({
|
|
28
|
+
res.status(401).json({
|
|
29
|
+
success: false,
|
|
30
|
+
message: t('api.errors.invalid_credentials'),
|
|
31
|
+
});
|
|
23
32
|
return;
|
|
24
33
|
}
|
|
25
34
|
// Verify password
|
|
26
35
|
const isPasswordValid = await verifyPassword(password, user.password);
|
|
27
36
|
if (!isPasswordValid) {
|
|
28
|
-
res.status(401).json({
|
|
37
|
+
res.status(401).json({
|
|
38
|
+
success: false,
|
|
39
|
+
message: t('api.errors.invalid_credentials'),
|
|
40
|
+
});
|
|
29
41
|
return;
|
|
30
42
|
}
|
|
31
43
|
// Generate JWT token
|
|
@@ -40,6 +52,7 @@ export const login = async (req, res) => {
|
|
|
40
52
|
throw err;
|
|
41
53
|
res.json({
|
|
42
54
|
success: true,
|
|
55
|
+
message: t('api.success.login_successful'),
|
|
43
56
|
token,
|
|
44
57
|
user: {
|
|
45
58
|
username: user.username,
|
|
@@ -51,15 +64,24 @@ export const login = async (req, res) => {
|
|
|
51
64
|
}
|
|
52
65
|
catch (error) {
|
|
53
66
|
console.error('Login error:', error);
|
|
54
|
-
res.status(500).json({
|
|
67
|
+
res.status(500).json({
|
|
68
|
+
success: false,
|
|
69
|
+
message: t('api.errors.server_error'),
|
|
70
|
+
});
|
|
55
71
|
}
|
|
56
72
|
};
|
|
57
73
|
// Register new user
|
|
58
74
|
export const register = async (req, res) => {
|
|
75
|
+
// Get translation function from request
|
|
76
|
+
const t = req.t;
|
|
59
77
|
// Validate request
|
|
60
78
|
const errors = validationResult(req);
|
|
61
79
|
if (!errors.isEmpty()) {
|
|
62
|
-
res.status(400).json({
|
|
80
|
+
res.status(400).json({
|
|
81
|
+
success: false,
|
|
82
|
+
message: t('api.errors.validation_failed'),
|
|
83
|
+
errors: errors.array(),
|
|
84
|
+
});
|
|
63
85
|
return;
|
|
64
86
|
}
|
|
65
87
|
const { username, password, isAdmin } = req.body;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authController.js","sourceRoot":"","sources":["../../src/controllers/authController.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAGzD,MAAM,WAAW,GAAgB,cAAc,EAAE,CAAC;AAElD,kEAAkE;AAClE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,6BAA6B,CAAC;AAC3E,MAAM,YAAY,GAAG,KAAK,CAAC;AAE3B,aAAa;AACb,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;IACxE,mBAAmB;IACnB,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACtB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"authController.js","sourceRoot":"","sources":["../../src/controllers/authController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { getCloudServers, getCloudServerByName, getCloudServerTools, callCloudServerTool, getCloudCategories, getCloudTags, searchCloudServers, filterCloudServersByCategory, filterCloudServersByTag, } from '../services/cloudService.js';
|
|
2
|
+
// Get all cloud market servers
|
|
3
|
+
export const getAllCloudServers = async (_, res) => {
|
|
4
|
+
try {
|
|
5
|
+
const cloudServers = await getCloudServers();
|
|
6
|
+
const response = {
|
|
7
|
+
success: true,
|
|
8
|
+
data: cloudServers,
|
|
9
|
+
};
|
|
10
|
+
res.json(response);
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
console.error('Error getting cloud market servers:', error);
|
|
14
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to get cloud market servers';
|
|
15
|
+
res.status(500).json({
|
|
16
|
+
success: false,
|
|
17
|
+
message: errorMessage,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
// Get a specific cloud market server by name
|
|
22
|
+
export const getCloudServer = async (req, res) => {
|
|
23
|
+
try {
|
|
24
|
+
const { name } = req.params;
|
|
25
|
+
if (!name) {
|
|
26
|
+
res.status(400).json({
|
|
27
|
+
success: false,
|
|
28
|
+
message: 'Server name is required',
|
|
29
|
+
});
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const server = await getCloudServerByName(name);
|
|
33
|
+
if (!server) {
|
|
34
|
+
res.status(404).json({
|
|
35
|
+
success: false,
|
|
36
|
+
message: 'Cloud server not found',
|
|
37
|
+
});
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
// Fetch tools for this server
|
|
41
|
+
try {
|
|
42
|
+
const tools = await getCloudServerTools(server.server_key);
|
|
43
|
+
server.tools = tools;
|
|
44
|
+
}
|
|
45
|
+
catch (toolError) {
|
|
46
|
+
console.warn(`Failed to fetch tools for server ${server.name}:`, toolError);
|
|
47
|
+
// Continue without tools
|
|
48
|
+
}
|
|
49
|
+
const response = {
|
|
50
|
+
success: true,
|
|
51
|
+
data: server,
|
|
52
|
+
};
|
|
53
|
+
res.json(response);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.error('Error getting cloud market server:', error);
|
|
57
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to get cloud market server';
|
|
58
|
+
res.status(500).json({
|
|
59
|
+
success: false,
|
|
60
|
+
message: errorMessage,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
// Get all cloud market categories
|
|
65
|
+
export const getAllCloudCategories = async (_, res) => {
|
|
66
|
+
try {
|
|
67
|
+
const categories = await getCloudCategories();
|
|
68
|
+
const response = {
|
|
69
|
+
success: true,
|
|
70
|
+
data: categories,
|
|
71
|
+
};
|
|
72
|
+
res.json(response);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
console.error('Error getting cloud market categories:', error);
|
|
76
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to get cloud market categories';
|
|
77
|
+
res.status(500).json({
|
|
78
|
+
success: false,
|
|
79
|
+
message: errorMessage,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
// Get all cloud market tags
|
|
84
|
+
export const getAllCloudTags = async (_, res) => {
|
|
85
|
+
try {
|
|
86
|
+
const tags = await getCloudTags();
|
|
87
|
+
const response = {
|
|
88
|
+
success: true,
|
|
89
|
+
data: tags,
|
|
90
|
+
};
|
|
91
|
+
res.json(response);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error('Error getting cloud market tags:', error);
|
|
95
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to get cloud market tags';
|
|
96
|
+
res.status(500).json({
|
|
97
|
+
success: false,
|
|
98
|
+
message: errorMessage,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
// Search cloud market servers
|
|
103
|
+
export const searchCloudServersByQuery = async (req, res) => {
|
|
104
|
+
try {
|
|
105
|
+
const query = req.query.query;
|
|
106
|
+
if (!query || query.trim() === '') {
|
|
107
|
+
res.status(400).json({
|
|
108
|
+
success: false,
|
|
109
|
+
message: 'Search query is required',
|
|
110
|
+
});
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const servers = await searchCloudServers(query);
|
|
114
|
+
const response = {
|
|
115
|
+
success: true,
|
|
116
|
+
data: servers,
|
|
117
|
+
};
|
|
118
|
+
res.json(response);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.error('Error searching cloud market servers:', error);
|
|
122
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to search cloud market servers';
|
|
123
|
+
res.status(500).json({
|
|
124
|
+
success: false,
|
|
125
|
+
message: errorMessage,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
// Get cloud market servers by category
|
|
130
|
+
export const getCloudServersByCategory = async (req, res) => {
|
|
131
|
+
try {
|
|
132
|
+
const { category } = req.params;
|
|
133
|
+
if (!category) {
|
|
134
|
+
res.status(400).json({
|
|
135
|
+
success: false,
|
|
136
|
+
message: 'Category is required',
|
|
137
|
+
});
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const servers = await filterCloudServersByCategory(category);
|
|
141
|
+
const response = {
|
|
142
|
+
success: true,
|
|
143
|
+
data: servers,
|
|
144
|
+
};
|
|
145
|
+
res.json(response);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
console.error('Error getting cloud market servers by category:', error);
|
|
149
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to get cloud market servers by category';
|
|
150
|
+
res.status(500).json({
|
|
151
|
+
success: false,
|
|
152
|
+
message: errorMessage,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
// Get cloud market servers by tag
|
|
157
|
+
export const getCloudServersByTag = async (req, res) => {
|
|
158
|
+
try {
|
|
159
|
+
const { tag } = req.params;
|
|
160
|
+
if (!tag) {
|
|
161
|
+
res.status(400).json({
|
|
162
|
+
success: false,
|
|
163
|
+
message: 'Tag is required',
|
|
164
|
+
});
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const servers = await filterCloudServersByTag(tag);
|
|
168
|
+
const response = {
|
|
169
|
+
success: true,
|
|
170
|
+
data: servers,
|
|
171
|
+
};
|
|
172
|
+
res.json(response);
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
console.error('Error getting cloud market servers by tag:', error);
|
|
176
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to get cloud market servers by tag';
|
|
177
|
+
res.status(500).json({
|
|
178
|
+
success: false,
|
|
179
|
+
message: errorMessage,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
// Get tools for a specific cloud server
|
|
184
|
+
export const getCloudServerToolsList = async (req, res) => {
|
|
185
|
+
try {
|
|
186
|
+
const { serverName } = req.params;
|
|
187
|
+
if (!serverName) {
|
|
188
|
+
res.status(400).json({
|
|
189
|
+
success: false,
|
|
190
|
+
message: 'Server name is required',
|
|
191
|
+
});
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const tools = await getCloudServerTools(serverName);
|
|
195
|
+
const response = {
|
|
196
|
+
success: true,
|
|
197
|
+
data: tools,
|
|
198
|
+
};
|
|
199
|
+
res.json(response);
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
console.error('Error getting cloud server tools:', error);
|
|
203
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to get cloud server tools';
|
|
204
|
+
res.status(500).json({
|
|
205
|
+
success: false,
|
|
206
|
+
message: errorMessage,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
// Call a tool on a cloud server
|
|
211
|
+
export const callCloudTool = async (req, res) => {
|
|
212
|
+
try {
|
|
213
|
+
const { serverName, toolName } = req.params;
|
|
214
|
+
const { arguments: args } = req.body;
|
|
215
|
+
if (!serverName) {
|
|
216
|
+
res.status(400).json({
|
|
217
|
+
success: false,
|
|
218
|
+
message: 'Server name is required',
|
|
219
|
+
});
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
if (!toolName) {
|
|
223
|
+
res.status(400).json({
|
|
224
|
+
success: false,
|
|
225
|
+
message: 'Tool name is required',
|
|
226
|
+
});
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const result = await callCloudServerTool(serverName, toolName, args || {});
|
|
230
|
+
const response = {
|
|
231
|
+
success: true,
|
|
232
|
+
data: result,
|
|
233
|
+
};
|
|
234
|
+
res.json(response);
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
console.error('Error calling cloud server tool:', error);
|
|
238
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to call cloud server tool';
|
|
239
|
+
res.status(500).json({
|
|
240
|
+
success: false,
|
|
241
|
+
message: errorMessage,
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
//# sourceMappingURL=cloudController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudController.js","sourceRoot":"","sources":["../../src/controllers/cloudController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import config from '../config/index.js';
|
|
2
2
|
import { loadSettings } from '../config/index.js';
|
|
3
|
+
import { getDataService } from '../services/services.js';
|
|
4
|
+
const dataService = getDataService();
|
|
3
5
|
/**
|
|
4
6
|
* Get runtime configuration for frontend
|
|
5
7
|
*/
|
|
@@ -34,6 +36,15 @@ export const getPublicConfig = (req, res) => {
|
|
|
34
36
|
try {
|
|
35
37
|
const settings = loadSettings();
|
|
36
38
|
const skipAuth = settings.systemConfig?.routing?.skipAuth || false;
|
|
39
|
+
let permissions = {};
|
|
40
|
+
if (skipAuth) {
|
|
41
|
+
const user = {
|
|
42
|
+
username: 'guest',
|
|
43
|
+
password: '',
|
|
44
|
+
isAdmin: true,
|
|
45
|
+
};
|
|
46
|
+
permissions = dataService.getPermissions(user);
|
|
47
|
+
}
|
|
37
48
|
res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
|
|
38
49
|
res.setHeader('Pragma', 'no-cache');
|
|
39
50
|
res.setHeader('Expires', '0');
|
|
@@ -41,6 +52,7 @@ export const getPublicConfig = (req, res) => {
|
|
|
41
52
|
success: true,
|
|
42
53
|
data: {
|
|
43
54
|
skipAuth,
|
|
55
|
+
permissions,
|
|
44
56
|
},
|
|
45
57
|
});
|
|
46
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configController.js","sourceRoot":"","sources":["../../src/controllers/configController.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;IACpE,IAAI,CAAC;QACH,MAAM,aAAa,GAAG;YACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,MAAM,CAAC,aAAa;YAC7B,IAAI,EAAE,MAAM,CAAC,UAAU;SACxB,CAAC;QAEF,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,qCAAqC,CAAC,CAAC;QACtE,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACpC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAE9B,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,qCAAqC;SAC/C,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;IACnE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"configController.js","sourceRoot":"","sources":["../../src/controllers/configController.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAIzD,MAAM,WAAW,GAAgB,cAAc,EAAE,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;IACpE,IAAI,CAAC;QACH,MAAM,aAAa,GAAG;YACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,MAAM,CAAC,aAAa;YAC7B,IAAI,EAAE,MAAM,CAAC,UAAU;SACxB,CAAC;QAEF,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,qCAAqC,CAAC,CAAC;QACtE,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACpC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAE9B,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,qCAAqC;SAC/C,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;IACnE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC;QACnE,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,GAAU;gBAClB,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE,IAAI;aACd,CAAC;YACF,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;QAED,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,qCAAqC,CAAC,CAAC;QACtE,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACpC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAE9B,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,QAAQ;gBACR,WAAW;aACZ;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,oCAAoC;SAC9C,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { connected } from '../services/mcpService.js';
|
|
2
|
+
/**
|
|
3
|
+
* Health check endpoint
|
|
4
|
+
* Returns 200 OK when all MCPs are loaded and connected
|
|
5
|
+
* Returns 503 Service Unavailable when MCPs are not ready
|
|
6
|
+
*/
|
|
7
|
+
export const healthCheck = (_req, res) => {
|
|
8
|
+
try {
|
|
9
|
+
const allConnected = connected();
|
|
10
|
+
if (allConnected) {
|
|
11
|
+
res.status(200).json({
|
|
12
|
+
status: 'healthy',
|
|
13
|
+
message: 'All enabled MCP servers are ready',
|
|
14
|
+
timestamp: new Date().toISOString(),
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
res.status(503).json({
|
|
19
|
+
status: 'unhealthy',
|
|
20
|
+
message: 'Not all enabled MCP servers are ready',
|
|
21
|
+
timestamp: new Date().toISOString(),
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error('Health check error:', error);
|
|
27
|
+
res.status(500).json({
|
|
28
|
+
status: 'error',
|
|
29
|
+
message: 'Internal server error during health check',
|
|
30
|
+
timestamp: new Date().toISOString(),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=healthController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"healthController.js","sourceRoot":"","sources":["../../src/controllers/healthController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAa,EAAE,GAAa,EAAQ,EAAE;IAChE,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,SAAS,EAAE,CAAC;QACjC,IAAI,YAAY,EAAE,CAAC;YACjB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,mCAAmC;gBAC5C,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,MAAM,EAAE,WAAW;gBACnB,OAAO,EAAE,uCAAuC;gBAChD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;IACH,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;YACnB,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,2CAA2C;YACpD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -244,7 +244,7 @@ export const updateServer = async (req, res) => {
|
|
|
244
244
|
}
|
|
245
245
|
const result = await addOrUpdateServer(name, config, true); // Allow override for updates
|
|
246
246
|
if (result.success) {
|
|
247
|
-
notifyToolChanged();
|
|
247
|
+
notifyToolChanged(name);
|
|
248
248
|
res.json({
|
|
249
249
|
success: true,
|
|
250
250
|
message: 'Server updated successfully',
|
|
@@ -449,7 +449,8 @@ export const updateToolDescription = async (req, res) => {
|
|
|
449
449
|
};
|
|
450
450
|
export const updateSystemConfig = (req, res) => {
|
|
451
451
|
try {
|
|
452
|
-
const { routing, install, smartRouting } = req.body;
|
|
452
|
+
const { routing, install, smartRouting, mcpRouter } = req.body;
|
|
453
|
+
const currentUser = req.user;
|
|
453
454
|
if ((!routing ||
|
|
454
455
|
(typeof routing.enableGlobalRoute !== 'boolean' &&
|
|
455
456
|
typeof routing.enableGroupNameRoute !== 'boolean' &&
|
|
@@ -465,7 +466,12 @@ export const updateSystemConfig = (req, res) => {
|
|
|
465
466
|
typeof smartRouting.dbUrl !== 'string' &&
|
|
466
467
|
typeof smartRouting.openaiApiBaseUrl !== 'string' &&
|
|
467
468
|
typeof smartRouting.openaiApiKey !== 'string' &&
|
|
468
|
-
typeof smartRouting.openaiApiEmbeddingModel !== 'string'))
|
|
469
|
+
typeof smartRouting.openaiApiEmbeddingModel !== 'string')) &&
|
|
470
|
+
(!mcpRouter ||
|
|
471
|
+
(typeof mcpRouter.apiKey !== 'string' &&
|
|
472
|
+
typeof mcpRouter.referer !== 'string' &&
|
|
473
|
+
typeof mcpRouter.title !== 'string' &&
|
|
474
|
+
typeof mcpRouter.baseUrl !== 'string'))) {
|
|
469
475
|
res.status(400).json({
|
|
470
476
|
success: false,
|
|
471
477
|
message: 'Invalid system configuration provided',
|
|
@@ -494,6 +500,12 @@ export const updateSystemConfig = (req, res) => {
|
|
|
494
500
|
openaiApiKey: '',
|
|
495
501
|
openaiApiEmbeddingModel: '',
|
|
496
502
|
},
|
|
503
|
+
mcpRouter: {
|
|
504
|
+
apiKey: '',
|
|
505
|
+
referer: 'https://mcphub.app',
|
|
506
|
+
title: 'MCPHub',
|
|
507
|
+
baseUrl: 'https://api.mcprouter.to/v1',
|
|
508
|
+
},
|
|
497
509
|
};
|
|
498
510
|
}
|
|
499
511
|
if (!settings.systemConfig.routing) {
|
|
@@ -521,6 +533,14 @@ export const updateSystemConfig = (req, res) => {
|
|
|
521
533
|
openaiApiEmbeddingModel: '',
|
|
522
534
|
};
|
|
523
535
|
}
|
|
536
|
+
if (!settings.systemConfig.mcpRouter) {
|
|
537
|
+
settings.systemConfig.mcpRouter = {
|
|
538
|
+
apiKey: '',
|
|
539
|
+
referer: 'https://mcphub.app',
|
|
540
|
+
title: 'MCPHub',
|
|
541
|
+
baseUrl: 'https://api.mcprouter.to/v1',
|
|
542
|
+
};
|
|
543
|
+
}
|
|
524
544
|
if (routing) {
|
|
525
545
|
if (typeof routing.enableGlobalRoute === 'boolean') {
|
|
526
546
|
settings.systemConfig.routing.enableGlobalRoute = routing.enableGlobalRoute;
|
|
@@ -599,7 +619,21 @@ export const updateSystemConfig = (req, res) => {
|
|
|
599
619
|
// Sync if: first time enabling OR smart routing is enabled and any config changed
|
|
600
620
|
needsSync = (!wasSmartRoutingEnabled && isNowEnabled) || (isNowEnabled && hasConfigChanged);
|
|
601
621
|
}
|
|
602
|
-
if (
|
|
622
|
+
if (mcpRouter) {
|
|
623
|
+
if (typeof mcpRouter.apiKey === 'string') {
|
|
624
|
+
settings.systemConfig.mcpRouter.apiKey = mcpRouter.apiKey;
|
|
625
|
+
}
|
|
626
|
+
if (typeof mcpRouter.referer === 'string') {
|
|
627
|
+
settings.systemConfig.mcpRouter.referer = mcpRouter.referer;
|
|
628
|
+
}
|
|
629
|
+
if (typeof mcpRouter.title === 'string') {
|
|
630
|
+
settings.systemConfig.mcpRouter.title = mcpRouter.title;
|
|
631
|
+
}
|
|
632
|
+
if (typeof mcpRouter.baseUrl === 'string') {
|
|
633
|
+
settings.systemConfig.mcpRouter.baseUrl = mcpRouter.baseUrl;
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
if (saveSettings(settings, currentUser)) {
|
|
603
637
|
res.json({
|
|
604
638
|
success: true,
|
|
605
639
|
data: settings.systemConfig,
|