@samanhappy/mcphub 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +170 -0
  3. package/README.zh.md +173 -0
  4. package/bin/mcphub.js +54 -0
  5. package/dist/config/index.js +41 -0
  6. package/dist/config/index.js.map +1 -0
  7. package/dist/controllers/authController.js +149 -0
  8. package/dist/controllers/authController.js.map +1 -0
  9. package/dist/controllers/groupController.js +312 -0
  10. package/dist/controllers/groupController.js.map +1 -0
  11. package/dist/controllers/marketController.js +140 -0
  12. package/dist/controllers/marketController.js.map +1 -0
  13. package/dist/controllers/serverController.js +283 -0
  14. package/dist/controllers/serverController.js.map +1 -0
  15. package/dist/index.js +15 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/middlewares/auth.js +24 -0
  18. package/dist/middlewares/auth.js.map +1 -0
  19. package/dist/middlewares/index.js +33 -0
  20. package/dist/middlewares/index.js.map +1 -0
  21. package/dist/models/User.js +80 -0
  22. package/dist/models/User.js.map +1 -0
  23. package/dist/routes/index.js +56 -0
  24. package/dist/routes/index.js.map +1 -0
  25. package/dist/server.js +58 -0
  26. package/dist/server.js.map +1 -0
  27. package/dist/services/groupService.js +189 -0
  28. package/dist/services/groupService.js.map +1 -0
  29. package/dist/services/marketService.js +98 -0
  30. package/dist/services/marketService.js.map +1 -0
  31. package/dist/services/mcpService.js +333 -0
  32. package/dist/services/mcpService.js.map +1 -0
  33. package/dist/services/sseService.js +103 -0
  34. package/dist/services/sseService.js.map +1 -0
  35. package/dist/types/index.js +2 -0
  36. package/dist/types/index.js.map +1 -0
  37. package/dist/utils/migration.js +47 -0
  38. package/dist/utils/migration.js.map +1 -0
  39. package/package.json +92 -0
@@ -0,0 +1,149 @@
1
+ import jwt from 'jsonwebtoken';
2
+ import { validationResult } from 'express-validator';
3
+ import { findUserByUsername, verifyPassword, createUser, updateUserPassword } from '../models/User.js';
4
+ // Default secret key - in production, use an environment variable
5
+ const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key-change-this';
6
+ const TOKEN_EXPIRY = '24h';
7
+ // Login user
8
+ export const login = async (req, res) => {
9
+ // Validate request
10
+ const errors = validationResult(req);
11
+ if (!errors.isEmpty()) {
12
+ res.status(400).json({ success: false, errors: errors.array() });
13
+ return;
14
+ }
15
+ const { username, password } = req.body;
16
+ try {
17
+ // Find user by username
18
+ const user = findUserByUsername(username);
19
+ if (!user) {
20
+ res.status(401).json({ success: false, message: 'Invalid credentials' });
21
+ return;
22
+ }
23
+ // Verify password
24
+ const isPasswordValid = await verifyPassword(password, user.password);
25
+ if (!isPasswordValid) {
26
+ res.status(401).json({ success: false, message: 'Invalid credentials' });
27
+ return;
28
+ }
29
+ // Generate JWT token
30
+ const payload = {
31
+ user: {
32
+ username: user.username,
33
+ isAdmin: user.isAdmin || false
34
+ }
35
+ };
36
+ jwt.sign(payload, JWT_SECRET, { expiresIn: TOKEN_EXPIRY }, (err, token) => {
37
+ if (err)
38
+ throw err;
39
+ res.json({
40
+ success: true,
41
+ token,
42
+ user: {
43
+ username: user.username,
44
+ isAdmin: user.isAdmin
45
+ }
46
+ });
47
+ });
48
+ }
49
+ catch (error) {
50
+ console.error('Login error:', error);
51
+ res.status(500).json({ success: false, message: 'Server error' });
52
+ }
53
+ };
54
+ // Register new user
55
+ export const register = async (req, res) => {
56
+ // Validate request
57
+ const errors = validationResult(req);
58
+ if (!errors.isEmpty()) {
59
+ res.status(400).json({ success: false, errors: errors.array() });
60
+ return;
61
+ }
62
+ const { username, password, isAdmin } = req.body;
63
+ try {
64
+ // Create new user
65
+ const newUser = await createUser({ username, password, isAdmin });
66
+ if (!newUser) {
67
+ res.status(400).json({ success: false, message: 'User already exists' });
68
+ return;
69
+ }
70
+ // Generate JWT token
71
+ const payload = {
72
+ user: {
73
+ username: newUser.username,
74
+ isAdmin: newUser.isAdmin || false
75
+ }
76
+ };
77
+ jwt.sign(payload, JWT_SECRET, { expiresIn: TOKEN_EXPIRY }, (err, token) => {
78
+ if (err)
79
+ throw err;
80
+ res.json({
81
+ success: true,
82
+ token,
83
+ user: {
84
+ username: newUser.username,
85
+ isAdmin: newUser.isAdmin
86
+ }
87
+ });
88
+ });
89
+ }
90
+ catch (error) {
91
+ console.error('Registration error:', error);
92
+ res.status(500).json({ success: false, message: 'Server error' });
93
+ }
94
+ };
95
+ // Get current user
96
+ export const getCurrentUser = (req, res) => {
97
+ try {
98
+ // User is already attached to request by auth middleware
99
+ const user = req.user;
100
+ res.json({
101
+ success: true,
102
+ user: {
103
+ username: user.username,
104
+ isAdmin: user.isAdmin
105
+ }
106
+ });
107
+ }
108
+ catch (error) {
109
+ console.error('Get current user error:', error);
110
+ res.status(500).json({ success: false, message: 'Server error' });
111
+ }
112
+ };
113
+ // Change password
114
+ export const changePassword = async (req, res) => {
115
+ // Validate request
116
+ const errors = validationResult(req);
117
+ if (!errors.isEmpty()) {
118
+ res.status(400).json({ success: false, errors: errors.array() });
119
+ return;
120
+ }
121
+ const { currentPassword, newPassword } = req.body;
122
+ const username = req.user.username;
123
+ try {
124
+ // Find user by username
125
+ const user = findUserByUsername(username);
126
+ if (!user) {
127
+ res.status(404).json({ success: false, message: 'User not found' });
128
+ return;
129
+ }
130
+ // Verify current password
131
+ const isPasswordValid = await verifyPassword(currentPassword, user.password);
132
+ if (!isPasswordValid) {
133
+ res.status(401).json({ success: false, message: 'Current password is incorrect' });
134
+ return;
135
+ }
136
+ // Update the password
137
+ const updated = await updateUserPassword(username, newPassword);
138
+ if (!updated) {
139
+ res.status(500).json({ success: false, message: 'Failed to update password' });
140
+ return;
141
+ }
142
+ res.json({ success: true, message: 'Password updated successfully' });
143
+ }
144
+ catch (error) {
145
+ console.error('Change password error:', error);
146
+ res.status(500).json({ success: false, message: 'Server error' });
147
+ }
148
+ };
149
+ //# sourceMappingURL=authController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authController.js","sourceRoot":"","sources":["../../src/controllers/authController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,312 @@
1
+ import { getAllGroups, getGroupByIdOrName, createGroup, updateGroup, updateGroupServers, deleteGroup, addServerToGroup, removeServerFromGroup } from '../services/groupService.js';
2
+ // Get all groups
3
+ export const getGroups = (_, res) => {
4
+ try {
5
+ const groups = getAllGroups();
6
+ const response = {
7
+ success: true,
8
+ data: groups,
9
+ };
10
+ res.json(response);
11
+ }
12
+ catch (error) {
13
+ res.status(500).json({
14
+ success: false,
15
+ message: 'Failed to get groups information',
16
+ });
17
+ }
18
+ };
19
+ // Get a specific group by ID
20
+ export const getGroup = (req, res) => {
21
+ try {
22
+ const { id } = req.params;
23
+ if (!id) {
24
+ res.status(400).json({
25
+ success: false,
26
+ message: 'Group ID is required',
27
+ });
28
+ return;
29
+ }
30
+ const group = getGroupByIdOrName(id);
31
+ if (!group) {
32
+ res.status(404).json({
33
+ success: false,
34
+ message: 'Group not found',
35
+ });
36
+ return;
37
+ }
38
+ const response = {
39
+ success: true,
40
+ data: group,
41
+ };
42
+ res.json(response);
43
+ }
44
+ catch (error) {
45
+ res.status(500).json({
46
+ success: false,
47
+ message: 'Failed to get group information',
48
+ });
49
+ }
50
+ };
51
+ // Create a new group
52
+ export const createNewGroup = (req, res) => {
53
+ try {
54
+ const { name, description, servers } = req.body;
55
+ if (!name) {
56
+ res.status(400).json({
57
+ success: false,
58
+ message: 'Group name is required',
59
+ });
60
+ return;
61
+ }
62
+ const serverList = Array.isArray(servers) ? servers : [];
63
+ const newGroup = createGroup(name, description, serverList);
64
+ if (!newGroup) {
65
+ res.status(400).json({
66
+ success: false,
67
+ message: 'Failed to create group or group name already exists',
68
+ });
69
+ return;
70
+ }
71
+ const response = {
72
+ success: true,
73
+ data: newGroup,
74
+ message: 'Group created successfully',
75
+ };
76
+ res.status(201).json(response);
77
+ }
78
+ catch (error) {
79
+ res.status(500).json({
80
+ success: false,
81
+ message: 'Internal server error',
82
+ });
83
+ }
84
+ };
85
+ // Update an existing group
86
+ export const updateExistingGroup = (req, res) => {
87
+ try {
88
+ const { id } = req.params;
89
+ const { name, description, servers } = req.body;
90
+ if (!id) {
91
+ res.status(400).json({
92
+ success: false,
93
+ message: 'Group ID is required',
94
+ });
95
+ return;
96
+ }
97
+ // Allow updating servers along with other fields
98
+ const updateData = {};
99
+ if (name !== undefined)
100
+ updateData.name = name;
101
+ if (description !== undefined)
102
+ updateData.description = description;
103
+ if (servers !== undefined)
104
+ updateData.servers = servers;
105
+ if (Object.keys(updateData).length === 0) {
106
+ res.status(400).json({
107
+ success: false,
108
+ message: 'At least one field (name, description, or servers) is required to update',
109
+ });
110
+ return;
111
+ }
112
+ const updatedGroup = updateGroup(id, updateData);
113
+ if (!updatedGroup) {
114
+ res.status(404).json({
115
+ success: false,
116
+ message: 'Group not found or name already exists',
117
+ });
118
+ return;
119
+ }
120
+ const response = {
121
+ success: true,
122
+ data: updatedGroup,
123
+ message: 'Group updated successfully',
124
+ };
125
+ res.json(response);
126
+ }
127
+ catch (error) {
128
+ res.status(500).json({
129
+ success: false,
130
+ message: 'Internal server error',
131
+ });
132
+ }
133
+ };
134
+ // Update servers in a group (batch update)
135
+ export const updateGroupServersBatch = (req, res) => {
136
+ try {
137
+ const { id } = req.params;
138
+ const { servers } = req.body;
139
+ if (!id) {
140
+ res.status(400).json({
141
+ success: false,
142
+ message: 'Group ID is required',
143
+ });
144
+ return;
145
+ }
146
+ if (!Array.isArray(servers)) {
147
+ res.status(400).json({
148
+ success: false,
149
+ message: 'Servers must be an array of server names',
150
+ });
151
+ return;
152
+ }
153
+ const updatedGroup = updateGroupServers(id, servers);
154
+ if (!updatedGroup) {
155
+ res.status(404).json({
156
+ success: false,
157
+ message: 'Group not found',
158
+ });
159
+ return;
160
+ }
161
+ const response = {
162
+ success: true,
163
+ data: updatedGroup,
164
+ message: 'Group servers updated successfully',
165
+ };
166
+ res.json(response);
167
+ }
168
+ catch (error) {
169
+ res.status(500).json({
170
+ success: false,
171
+ message: 'Internal server error',
172
+ });
173
+ }
174
+ };
175
+ // Delete a group
176
+ export const deleteExistingGroup = (req, res) => {
177
+ try {
178
+ const { id } = req.params;
179
+ if (!id) {
180
+ res.status(400).json({
181
+ success: false,
182
+ message: 'Group ID is required',
183
+ });
184
+ return;
185
+ }
186
+ const success = deleteGroup(id);
187
+ if (!success) {
188
+ res.status(404).json({
189
+ success: false,
190
+ message: 'Group not found or failed to delete',
191
+ });
192
+ return;
193
+ }
194
+ res.json({
195
+ success: true,
196
+ message: 'Group deleted successfully',
197
+ });
198
+ }
199
+ catch (error) {
200
+ res.status(500).json({
201
+ success: false,
202
+ message: 'Internal server error',
203
+ });
204
+ }
205
+ };
206
+ // Add server to a group
207
+ export const addServerToExistingGroup = (req, res) => {
208
+ try {
209
+ const { id } = req.params;
210
+ const { serverName } = req.body;
211
+ if (!id) {
212
+ res.status(400).json({
213
+ success: false,
214
+ message: 'Group ID is required',
215
+ });
216
+ return;
217
+ }
218
+ if (!serverName) {
219
+ res.status(400).json({
220
+ success: false,
221
+ message: 'Server name is required',
222
+ });
223
+ return;
224
+ }
225
+ const updatedGroup = addServerToGroup(id, serverName);
226
+ if (!updatedGroup) {
227
+ res.status(404).json({
228
+ success: false,
229
+ message: 'Group or server not found',
230
+ });
231
+ return;
232
+ }
233
+ const response = {
234
+ success: true,
235
+ data: updatedGroup,
236
+ message: 'Server added to group successfully',
237
+ };
238
+ res.json(response);
239
+ }
240
+ catch (error) {
241
+ res.status(500).json({
242
+ success: false,
243
+ message: 'Internal server error',
244
+ });
245
+ }
246
+ };
247
+ // Remove server from a group
248
+ export const removeServerFromExistingGroup = (req, res) => {
249
+ try {
250
+ const { id, serverName } = req.params;
251
+ if (!id || !serverName) {
252
+ res.status(400).json({
253
+ success: false,
254
+ message: 'Group ID and server name are required',
255
+ });
256
+ return;
257
+ }
258
+ const updatedGroup = removeServerFromGroup(id, serverName);
259
+ if (!updatedGroup) {
260
+ res.status(404).json({
261
+ success: false,
262
+ message: 'Group not found',
263
+ });
264
+ return;
265
+ }
266
+ const response = {
267
+ success: true,
268
+ data: updatedGroup,
269
+ message: 'Server removed from group successfully',
270
+ };
271
+ res.json(response);
272
+ }
273
+ catch (error) {
274
+ res.status(500).json({
275
+ success: false,
276
+ message: 'Internal server error',
277
+ });
278
+ }
279
+ };
280
+ // Get servers in a group
281
+ export const getGroupServers = (req, res) => {
282
+ try {
283
+ const { id } = req.params;
284
+ if (!id) {
285
+ res.status(400).json({
286
+ success: false,
287
+ message: 'Group ID is required',
288
+ });
289
+ return;
290
+ }
291
+ const group = getGroupByIdOrName(id);
292
+ if (!group) {
293
+ res.status(404).json({
294
+ success: false,
295
+ message: 'Group not found',
296
+ });
297
+ return;
298
+ }
299
+ const response = {
300
+ success: true,
301
+ data: group.servers,
302
+ };
303
+ res.json(response);
304
+ }
305
+ catch (error) {
306
+ res.status(500).json({
307
+ success: false,
308
+ message: 'Failed to get group servers',
309
+ });
310
+ }
311
+ };
312
+ //# sourceMappingURL=groupController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupController.js","sourceRoot":"","sources":["../../src/controllers/groupController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ import { getMarketServers, getMarketServerByName, getMarketCategories, getMarketTags, searchMarketServers, filterMarketServersByCategory, filterMarketServersByTag } from '../services/marketService.js';
2
+ // Get all market servers
3
+ export const getAllMarketServers = (_, res) => {
4
+ try {
5
+ const marketServers = Object.values(getMarketServers());
6
+ const response = {
7
+ success: true,
8
+ data: marketServers,
9
+ };
10
+ res.json(response);
11
+ }
12
+ catch (error) {
13
+ res.status(500).json({
14
+ success: false,
15
+ message: 'Failed to get market servers information',
16
+ });
17
+ }
18
+ };
19
+ // Get a specific market server by name
20
+ export const getMarketServer = (req, res) => {
21
+ try {
22
+ const { name } = req.params;
23
+ if (!name) {
24
+ res.status(400).json({
25
+ success: false,
26
+ message: 'Server name is required',
27
+ });
28
+ return;
29
+ }
30
+ const server = getMarketServerByName(name);
31
+ if (!server) {
32
+ res.status(404).json({
33
+ success: false,
34
+ message: 'Market server not found',
35
+ });
36
+ return;
37
+ }
38
+ const response = {
39
+ success: true,
40
+ data: server,
41
+ };
42
+ res.json(response);
43
+ }
44
+ catch (error) {
45
+ res.status(500).json({
46
+ success: false,
47
+ message: 'Failed to get market server information',
48
+ });
49
+ }
50
+ };
51
+ // Get all market categories
52
+ export const getAllMarketCategories = (_, res) => {
53
+ try {
54
+ const categories = getMarketCategories();
55
+ const response = {
56
+ success: true,
57
+ data: categories,
58
+ };
59
+ res.json(response);
60
+ }
61
+ catch (error) {
62
+ res.status(500).json({
63
+ success: false,
64
+ message: 'Failed to get market categories',
65
+ });
66
+ }
67
+ };
68
+ // Get all market tags
69
+ export const getAllMarketTags = (_, res) => {
70
+ try {
71
+ const tags = getMarketTags();
72
+ const response = {
73
+ success: true,
74
+ data: tags,
75
+ };
76
+ res.json(response);
77
+ }
78
+ catch (error) {
79
+ res.status(500).json({
80
+ success: false,
81
+ message: 'Failed to get market tags',
82
+ });
83
+ }
84
+ };
85
+ // Search market servers
86
+ export const searchMarketServersByQuery = (req, res) => {
87
+ try {
88
+ const { query } = req.query;
89
+ const searchQuery = typeof query === 'string' ? query : '';
90
+ const servers = searchMarketServers(searchQuery);
91
+ const response = {
92
+ success: true,
93
+ data: servers,
94
+ };
95
+ res.json(response);
96
+ }
97
+ catch (error) {
98
+ res.status(500).json({
99
+ success: false,
100
+ message: 'Failed to search market servers',
101
+ });
102
+ }
103
+ };
104
+ // Filter market servers by category
105
+ export const getMarketServersByCategory = (req, res) => {
106
+ try {
107
+ const { category } = req.params;
108
+ const servers = filterMarketServersByCategory(category);
109
+ const response = {
110
+ success: true,
111
+ data: servers,
112
+ };
113
+ res.json(response);
114
+ }
115
+ catch (error) {
116
+ res.status(500).json({
117
+ success: false,
118
+ message: 'Failed to filter market servers by category',
119
+ });
120
+ }
121
+ };
122
+ // Filter market servers by tag
123
+ export const getMarketServersByTag = (req, res) => {
124
+ try {
125
+ const { tag } = req.params;
126
+ const servers = filterMarketServersByTag(tag);
127
+ const response = {
128
+ success: true,
129
+ data: servers,
130
+ };
131
+ res.json(response);
132
+ }
133
+ catch (error) {
134
+ res.status(500).json({
135
+ success: false,
136
+ message: 'Failed to filter market servers by tag',
137
+ });
138
+ }
139
+ };
140
+ //# sourceMappingURL=marketController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketController.js","sourceRoot":"","sources":["../../src/controllers/marketController.ts"],"names":[],"mappings":"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"}