@samanhappy/mcphub 1.1.0 → 1.1.2
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/betterAuth.js +5 -0
- package/dist/betterAuth.js.map +1 -1
- package/dist/clients/legacyMcpClient.js +1 -1
- package/dist/clients/legacyMcpClient.js.map +1 -1
- package/dist/clients/mcpSdkClient.js +28359 -0
- package/dist/clients/mcpSdkClient.js.map +7 -0
- package/dist/config/index.js +13 -7
- package/dist/config/index.js.map +1 -1
- package/dist/constants/smartRoutingDefaults.js +23 -0
- package/dist/constants/smartRoutingDefaults.js.map +1 -0
- package/dist/controllers/authController.js +5 -0
- package/dist/controllers/authController.js.map +1 -1
- package/dist/controllers/betterAuthController.js +3 -1
- package/dist/controllers/betterAuthController.js.map +1 -1
- package/dist/controllers/serverController.js +99 -18
- package/dist/controllers/serverController.js.map +1 -1
- package/dist/dao/ServerDao.js.map +1 -1
- package/dist/dao/ServerDaoDbImpl.js +13 -1
- package/dist/dao/ServerDaoDbImpl.js.map +1 -1
- package/dist/dao/UserDao.js +57 -34
- package/dist/dao/UserDao.js.map +1 -1
- package/dist/dao/base/JsonFileBaseDao.js +11 -6
- package/dist/dao/base/JsonFileBaseDao.js.map +1 -1
- package/dist/db/entities/Server.js +4 -0
- package/dist/db/entities/Server.js.map +1 -1
- package/dist/middlewares/auth.js +17 -0
- package/dist/middlewares/auth.js.map +1 -1
- package/dist/routes/index.js +3 -5
- package/dist/routes/index.js.map +1 -1
- package/dist/services/betterAuthConfig.js +18 -95
- package/dist/services/betterAuthConfig.js.map +1 -1
- package/dist/services/betterAuthSession.js +19 -3
- package/dist/services/betterAuthSession.js.map +1 -1
- package/dist/services/credentialBindingService.js +42 -0
- package/dist/services/credentialBindingService.js.map +1 -1
- package/dist/services/forwardAuthService.js +277 -0
- package/dist/services/forwardAuthService.js.map +1 -0
- package/dist/services/keepAliveService.js +1 -1
- package/dist/services/keepAliveService.js.map +1 -1
- package/dist/services/mcpOAuthProvider.js +24 -0
- package/dist/services/mcpOAuthProvider.js.map +1 -1
- package/dist/services/mcpService.js +51 -15
- package/dist/services/mcpService.js.map +1 -1
- package/dist/services/oauthSettingsStore.js +1 -1
- package/dist/services/oauthSettingsStore.js.map +1 -1
- package/dist/services/smartRoutingService.js +54 -52
- package/dist/services/smartRoutingService.js.map +1 -1
- package/dist/services/sseService.js +20 -0
- package/dist/services/sseService.js.map +1 -1
- package/dist/services/templateService.js +10 -9
- package/dist/services/templateService.js.map +1 -1
- package/dist/utils/migration.js +8 -6
- package/dist/utils/migration.js.map +1 -1
- package/dist/utils/serverAvailability.js +9 -0
- package/dist/utils/serverAvailability.js.map +1 -0
- package/dist/utils/serverConfigPersistence.js +12 -1
- package/dist/utils/serverConfigPersistence.js.map +1 -1
- package/dist/utils/serverConfigValidation.js +5 -1
- package/dist/utils/serverConfigValidation.js.map +1 -1
- package/dist/utils/settingResolvers.js +97 -0
- package/dist/utils/settingResolvers.js.map +1 -0
- package/dist/utils/settingsSync.js +198 -0
- package/dist/utils/settingsSync.js.map +1 -0
- package/dist/utils/smartRouting.js +36 -0
- package/dist/utils/smartRouting.js.map +1 -1
- package/dist/utils/ssrf.js +1 -1
- package/dist/utils/ssrf.js.map +1 -1
- package/dist/utils/stdioOptions.js +11 -0
- package/dist/utils/stdioOptions.js.map +1 -0
- package/frontend/dist/assets/{ActivityPage-Dp0qfFJ7.js → ActivityPage-DFLMe7o2.js} +2 -2
- package/frontend/dist/assets/{ActivityPage-Dp0qfFJ7.js.map → ActivityPage-DFLMe7o2.js.map} +1 -1
- package/frontend/dist/assets/{CopyClientConfigDialog-Bj0FEskD.js → CopyClientConfigDialog-DukyyXVp.js} +2 -2
- package/frontend/dist/assets/{CopyClientConfigDialog-Bj0FEskD.js.map → CopyClientConfigDialog-DukyyXVp.js.map} +1 -1
- package/frontend/dist/assets/{CredentialsPage-C-yB8aQU.js → CredentialsPage-BpBCEmEE.js} +2 -2
- package/frontend/dist/assets/{CredentialsPage-C-yB8aQU.js.map → CredentialsPage-BpBCEmEE.js.map} +1 -1
- package/frontend/dist/assets/{Dashboard-cbalSWB1.js → Dashboard-DjZkbAPt.js} +2 -2
- package/frontend/dist/assets/{Dashboard-cbalSWB1.js.map → Dashboard-DjZkbAPt.js.map} +1 -1
- package/frontend/dist/assets/{EndpointCopy-V8MoW7SG.js → EndpointCopy-Bv-_FPmR.js} +2 -2
- package/frontend/dist/assets/{EndpointCopy-V8MoW7SG.js.map → EndpointCopy-Bv-_FPmR.js.map} +1 -1
- package/frontend/dist/assets/{GroupsPage-DTXuiuqc.js → GroupsPage-B8BWRIWv.js} +2 -2
- package/frontend/dist/assets/{GroupsPage-DTXuiuqc.js.map → GroupsPage-B8BWRIWv.js.map} +1 -1
- package/frontend/dist/assets/LoginPage-OH73zcbT.js +2 -0
- package/frontend/dist/assets/LoginPage-OH73zcbT.js.map +1 -0
- package/frontend/dist/assets/{LogsPage-Bwv0shjb.js → LogsPage-B6P_uQvL.js} +2 -2
- package/frontend/dist/assets/{LogsPage-Bwv0shjb.js.map → LogsPage-B6P_uQvL.js.map} +1 -1
- package/frontend/dist/assets/{MarketPage-3jMYsH4H.js → MarketPage-CKjkgZpe.js} +2 -2
- package/frontend/dist/assets/{MarketPage-3jMYsH4H.js.map → MarketPage-CKjkgZpe.js.map} +1 -1
- package/frontend/dist/assets/{OAuthConsentPage-DI-IQ2gj.js → OAuthConsentPage-DjvtbLnm.js} +2 -2
- package/frontend/dist/assets/{OAuthConsentPage-DI-IQ2gj.js.map → OAuthConsentPage-DjvtbLnm.js.map} +1 -1
- package/frontend/dist/assets/{PromptsPage-BuVTifDV.js → PromptsPage-CCMb9OH2.js} +2 -2
- package/frontend/dist/assets/{PromptsPage-BuVTifDV.js.map → PromptsPage-CCMb9OH2.js.map} +1 -1
- package/frontend/dist/assets/{ResourcesPage-COSY92pD.js → ResourcesPage-BERaKn0d.js} +2 -2
- package/frontend/dist/assets/{ResourcesPage-COSY92pD.js.map → ResourcesPage-BERaKn0d.js.map} +1 -1
- package/frontend/dist/assets/{ServersPage-BlZvDfZE.js → ServersPage-BNsFiZez.js} +4 -4
- package/frontend/dist/assets/{ServersPage-BlZvDfZE.js.map → ServersPage-BNsFiZez.js.map} +1 -1
- package/frontend/dist/assets/SettingsPage-PiL7o9b9.js +12 -0
- package/frontend/dist/assets/SettingsPage-PiL7o9b9.js.map +1 -0
- package/frontend/dist/assets/{StatusDot-BHfWZAic.js → StatusDot-IWYCjv_t.js} +2 -2
- package/frontend/dist/assets/{StatusDot-BHfWZAic.js.map → StatusDot-IWYCjv_t.js.map} +1 -1
- package/frontend/dist/assets/{ToggleGroup-C33UH_Ob.js → ToggleGroup-B_NGGU8p.js} +2 -2
- package/frontend/dist/assets/{ToggleGroup-C33UH_Ob.js.map → ToggleGroup-B_NGGU8p.js.map} +1 -1
- package/frontend/dist/assets/{UsersPage-BXjVPFoF.js → UsersPage-D9QdH-ma.js} +2 -2
- package/frontend/dist/assets/{UsersPage-BXjVPFoF.js.map → UsersPage-D9QdH-ma.js.map} +1 -1
- package/frontend/dist/assets/{clipboard-r7a9vj44.js → clipboard-CFeeSZ4D.js} +2 -2
- package/frontend/dist/assets/{clipboard-r7a9vj44.js.map → clipboard-CFeeSZ4D.js.map} +1 -1
- package/frontend/dist/assets/index--NhF_yyy.css +1 -0
- package/frontend/dist/assets/index-RTKBtgGw.js +3 -0
- package/frontend/dist/assets/index-RTKBtgGw.js.map +1 -0
- package/frontend/dist/assets/{resourceService-5J2x7MrD.js → resourceService-BoJqsssR.js} +2 -2
- package/frontend/dist/assets/{resourceService-5J2x7MrD.js.map → resourceService-BoJqsssR.js.map} +1 -1
- package/frontend/dist/assets/{useCostData-CjmWUnd9.js → useCostData-Dld-MisV.js} +2 -2
- package/frontend/dist/assets/{useCostData-CjmWUnd9.js.map → useCostData-Dld-MisV.js.map} +1 -1
- package/frontend/dist/assets/variableDetection-C1abuc-p.js +16 -0
- package/frontend/dist/assets/variableDetection-C1abuc-p.js.map +1 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +5 -3
- package/frontend/dist/assets/LoginPage-kfbiuyWa.js +0 -2
- package/frontend/dist/assets/LoginPage-kfbiuyWa.js.map +0 -1
- package/frontend/dist/assets/SettingsPage-V0TrX4k8.js +0 -12
- package/frontend/dist/assets/SettingsPage-V0TrX4k8.js.map +0 -1
- package/frontend/dist/assets/index-D-J2WUmj.css +0 -1
- package/frontend/dist/assets/index-pouDG4uY.js +0 -3
- package/frontend/dist/assets/index-pouDG4uY.js.map +0 -1
- package/frontend/dist/assets/variableDetection-CAv2g3qV.js +0 -16
- package/frontend/dist/assets/variableDetection-CAv2g3qV.js.map +0 -1
package/dist/config/index.js
CHANGED
|
@@ -34,18 +34,21 @@ const ensureOAuthServerDefaults = (settings) => {
|
|
|
34
34
|
// Settings cache
|
|
35
35
|
let settingsCache = null;
|
|
36
36
|
// mtime of the settings file our cache snapshot was read from. The file is
|
|
37
|
-
// re-read when it
|
|
37
|
+
// re-read when it changes, mirroring JsonFileBaseDao so system settings do
|
|
38
38
|
// not behave differently from server definitions on external edits (#1081).
|
|
39
39
|
let lastModified = 0;
|
|
40
|
+
// In-process writes can share the same filesystem mtime.
|
|
41
|
+
let settingsGeneration = 0;
|
|
42
|
+
export const getSettingsGeneration = () => settingsGeneration;
|
|
40
43
|
export const getSettingsPath = () => {
|
|
41
44
|
return getConfigFilePath('mcp_settings.json', 'Settings');
|
|
42
45
|
};
|
|
43
|
-
export const loadOriginalSettings = () => {
|
|
46
|
+
export const loadOriginalSettings = (persistDefaults = true) => {
|
|
44
47
|
// If cache exists and the file hasn't changed, return cached data directly.
|
|
45
48
|
if (settingsCache) {
|
|
46
49
|
try {
|
|
47
50
|
const stats = fs.statSync(getSettingsPath());
|
|
48
|
-
if (lastModified
|
|
51
|
+
if (lastModified === stats.mtimeMs) {
|
|
49
52
|
return settingsCache;
|
|
50
53
|
}
|
|
51
54
|
}
|
|
@@ -70,9 +73,10 @@ export const loadOriginalSettings = () => {
|
|
|
70
73
|
const settingsData = fs.readFileSync(settingsPath, 'utf8');
|
|
71
74
|
const settings = JSON.parse(settingsData);
|
|
72
75
|
const initialized = ensureOAuthServerDefaults(settings);
|
|
73
|
-
if (initialized) {
|
|
76
|
+
if (initialized && persistDefaults) {
|
|
74
77
|
try {
|
|
75
78
|
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf8');
|
|
79
|
+
clearSettingsCache();
|
|
76
80
|
}
|
|
77
81
|
catch (writeError) {
|
|
78
82
|
logger.error('Failed to persist default OAuth server configuration', {
|
|
@@ -84,7 +88,7 @@ export const loadOriginalSettings = () => {
|
|
|
84
88
|
// Update cache
|
|
85
89
|
settingsCache = settings;
|
|
86
90
|
try {
|
|
87
|
-
lastModified = fs.statSync(settingsPath).
|
|
91
|
+
lastModified = fs.statSync(settingsPath).mtimeMs;
|
|
88
92
|
}
|
|
89
93
|
catch {
|
|
90
94
|
lastModified = Date.now();
|
|
@@ -104,9 +108,10 @@ export const saveSettings = (settings, user) => {
|
|
|
104
108
|
try {
|
|
105
109
|
const mergedSettings = dataService.mergeSettings(loadOriginalSettings(), settings, user);
|
|
106
110
|
fs.writeFileSync(settingsPath, JSON.stringify(mergedSettings, null, 2), 'utf8');
|
|
107
|
-
//
|
|
111
|
+
// Invalidate every DAO snapshot, including writes in the same mtime tick.
|
|
112
|
+
clearSettingsCache();
|
|
108
113
|
settingsCache = mergedSettings;
|
|
109
|
-
lastModified =
|
|
114
|
+
lastModified = fs.statSync(settingsPath).mtimeMs;
|
|
110
115
|
return true;
|
|
111
116
|
}
|
|
112
117
|
catch (error) {
|
|
@@ -118,6 +123,7 @@ export const saveSettings = (settings, user) => {
|
|
|
118
123
|
* Clear settings cache, force next loadSettings call to re-read from file
|
|
119
124
|
*/
|
|
120
125
|
export const clearSettingsCache = () => {
|
|
126
|
+
settingsGeneration += 1;
|
|
121
127
|
settingsCache = null;
|
|
122
128
|
lastModified = 0;
|
|
123
129
|
};
|
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,sBAAsB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AAEpF,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,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAClD,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,KAAK;IAClD,UAAU,EAAE,QAAQ;IACpB,aAAa,EAAE,iBAAiB,EAAE;CACnC,CAAC;AAEF,MAAM,WAAW,GAAgB,cAAc,EAAE,CAAC;AAElD,MAAM,CAAC,MAAM,aAAa,GAAG,GAAY,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,yBAAyB,GAAG,CAAC,QAAqB,EAAW,EAAE;IACnE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC3B,QAAQ,CAAC,YAAY,GAAG;YACtB,WAAW,EAAE,6BAA6B,EAAE;SAC7C,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QACvC,QAAQ,CAAC,YAAY,CAAC,WAAW,GAAG,6BAA6B,EAAE,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,iBAAiB;AACjB,IAAI,aAAa,GAAuB,IAAI,CAAC;AAC7C,2EAA2E;AAC3E,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional MCP tool fields that search_tools and describe_tool can include in a
|
|
3
|
+
* result next to the name, description, inputSchema and serverName they always
|
|
4
|
+
* carry. Listed in the order they appear in a result.
|
|
5
|
+
*/
|
|
6
|
+
export const TOOL_DEFINITION_FIELDS = [
|
|
7
|
+
'title',
|
|
8
|
+
'annotations',
|
|
9
|
+
'outputSchema',
|
|
10
|
+
'execution',
|
|
11
|
+
'icons',
|
|
12
|
+
'_meta',
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* Fields included by default: short, and they help a model pick a tool
|
|
16
|
+
* (annotations carry readOnlyHint / destructiveHint). The rest are for clients
|
|
17
|
+
* rather than models and can be large (base64 icons, output schemas).
|
|
18
|
+
*/
|
|
19
|
+
export const DEFAULT_TOOL_DEFINITION_FIELDS = [
|
|
20
|
+
'title',
|
|
21
|
+
'annotations',
|
|
22
|
+
];
|
|
23
|
+
//# sourceMappingURL=smartRoutingDefaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smartRoutingDefaults.js","sourceRoot":"","sources":["../../src/constants/smartRoutingDefaults.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,OAAO;IACP,aAAa;IACb,cAAc;IACd,WAAW;IACX,OAAO;IACP,OAAO;CACC,CAAC;AAIX;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAmC;IAC5E,OAAO;IACP,aAAa;CACd,CAAC"}
|
|
@@ -6,12 +6,17 @@ import { JWT_SECRET } from '../config/jwt.js';
|
|
|
6
6
|
import { validatePasswordStrength, isDefaultPassword } from '../utils/passwordValidation.js';
|
|
7
7
|
import { getPackageVersion } from '../utils/version.js';
|
|
8
8
|
import { logger } from '../utils/logger.js';
|
|
9
|
+
import { getBetterAuthRuntimeConfig } from '../services/betterAuthConfig.js';
|
|
9
10
|
const dataService = getDataService();
|
|
10
11
|
const TOKEN_EXPIRY = '24h';
|
|
11
12
|
// Login user
|
|
12
13
|
export const login = async (req, res) => {
|
|
13
14
|
// Get translation function from request
|
|
14
15
|
const t = req.t;
|
|
16
|
+
if ((await getBetterAuthRuntimeConfig()).disablePasswordLogin) {
|
|
17
|
+
res.status(403).json({ success: false, message: t('api.errors.password_login_disabled') });
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
15
20
|
// Validate request
|
|
16
21
|
const errors = validationResult(req);
|
|
17
22
|
if (!errors.isEmpty()) {
|
|
@@ -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;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
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;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,MAAM,WAAW,GAAgB,cAAc,EAAE,CAAC;AAElD,MAAM,YAAY,GAAG,KAAK,CAAC;AAE3B,aAAa;AACb,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;IACxE,wCAAwC;IACxC,MAAM,CAAC,GAAI,GAAW,CAAC,CAAC,CAAC;IAEzB,IAAI,CAAC,MAAM,0BAA0B,EAAE,CAAC,CAAC,oBAAoB,EAAE,CAAC;QAC9D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,oCAAoC,CAAC,EAAE,CAAC,CAAC;QAC3F,OAAO;IACT,CAAC;IAED,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;YACnB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,CAAC,CAAC,8BAA8B,CAAC;YAC1C,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE;SACvB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAExC,IAAI,CAAC;QACH,wBAAwB;QACxB,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,CAAC,CAAC,gCAAgC,CAAC;aAC7C,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,kBAAkB;QAClB,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtE,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,CAAC,CAAC,gCAAgC,CAAC;aAC7C,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,qBAAqB;QACrB,MAAM,OAAO,GAAG;YACd,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK;aAC/B;SACF,CAAC;QAEF,+CAA+C;QAC/C,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,MAAM,sBAAsB,GAC1B,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,OAAO,KAAK,KAAK,CAAC;QAEhG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACxE,IAAI,GAAG;gBAAE,MAAM,GAAG,CAAC;YACnB,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,CAAC,CAAC,8BAA8B,CAAC;gBAC1C,KAAK;gBACL,IAAI,EAAE;oBACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,WAAW,EAAE,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC;iBAC9C;gBACD,sBAAsB;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACpC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,CAAC,CAAC,yBAAyB,CAAC;SACtC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,oBAAoB;AACpB,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;IAC3E,wCAAwC;IACxC,MAAM,CAAC,GAAI,GAAW,CAAC,CAAC,CAAC;IAEzB,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;YACnB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,CAAC,CAAC,8BAA8B,CAAC;YAC1C,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE;SACvB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAExC,IAAI,CAAC;QACH,kBAAkB;QAClB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAEzE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,qBAAqB;QACrB,MAAM,OAAO,GAAG;YACd,IAAI,EAAE;gBACJ,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;aAClC;SACF,CAAC;QAEF,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACxE,IAAI,GAAG;gBAAE,MAAM,GAAG,CAAC;YACnB,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO,EAAE,IAAI;gBACb,KAAK;gBACL,IAAI,EAAE;oBACJ,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,WAAW,EAAE,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC;iBACjD;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC3C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC,CAAC;AAEF,mBAAmB;AACnB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;IAClE,IAAI,CAAC;QACH,yDAAyD;QACzD,MAAM,IAAI,GAAI,GAAW,CAAC,IAAI,CAAC;QAE/B,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,WAAW,EAAE,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC;aAC9C;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAC/C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC,CAAC;AAEF,kBAAkB;AAClB,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;IACjF,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,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAClD,MAAM,QAAQ,GAAI,GAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;IAE5C,IAAI,CAAC;QACH,iCAAiC;QACjC,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,8CAA8C;gBACvD,MAAM,EAAE,gBAAgB,CAAC,MAAM;aAChC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,wBAAwB;QACxB,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,0BAA0B;QAC1B,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE7E,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC,CAAC;YACnF,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEhE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAC/E,OAAO;QACT,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC9C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -4,7 +4,9 @@ import { logger } from '../utils/logger.js';
|
|
|
4
4
|
const dataService = getDataService();
|
|
5
5
|
export const getBetterAuthUser = async (req, res) => {
|
|
6
6
|
try {
|
|
7
|
-
|
|
7
|
+
// The dashboard bootstraps through this endpoint when it holds no local
|
|
8
|
+
// token, so a gateway-authenticated (forward auth) user enters directly.
|
|
9
|
+
const user = req.forwardAuthUser || (await resolveBetterAuthUser(req));
|
|
8
10
|
if (!user) {
|
|
9
11
|
res.status(401).json({ success: false, message: 'Unauthorized' });
|
|
10
12
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"betterAuthController.js","sourceRoot":"","sources":["../../src/controllers/betterAuthController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"betterAuthController.js","sourceRoot":"","sources":["../../src/controllers/betterAuthController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;AAErC,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAiB,EAAE;IACpF,IAAI,CAAC;QACH,wEAAwE;QACxE,yEAAyE;QACzE,MAAM,IAAI,GAAkB,GAAW,CAAC,eAAe,IAAI,CAAC,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,WAAW,EAAE,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC;aAC9C;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACnD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { deleteCredentialBindings } from '../services/credentialBindingService.js';
|
|
1
|
+
import { copyCredentialBindings, deleteCredentialBindings, } from '../services/credentialBindingService.js';
|
|
2
|
+
import { StdioOptionsError } from '../utils/stdioOptions.js';
|
|
2
3
|
import { CredentialBindingError } from '../utils/credentialTemplate.js';
|
|
3
4
|
import { isDeepStrictEqual } from 'node:util';
|
|
4
5
|
import { getServersInfo, addServer, addOrUpdateServer, removeServer, closeServer, getServerByName, notifyToolChanged, broadcastToolListChanged, broadcastPromptListChanged, broadcastResourceListChanged, syncToolEmbedding, toggleServerStatus, reconnectServer, reinstallServer, updateServerInfoVisibility, } from '../services/mcpService.js';
|
|
@@ -14,11 +15,12 @@ import { authorizationService } from '../services/authorizationService.js';
|
|
|
14
15
|
import { presentServerForPrincipal, presentServerInfoForPrincipal, } from '../services/serverConfigPresenter.js';
|
|
15
16
|
import { disconnectUpstreamOAuth } from '../services/upstreamOAuthDisconnectService.js';
|
|
16
17
|
import { normalizeServerConfigForPersistence } from '../utils/serverConfigPersistence.js';
|
|
17
|
-
import { isPrivilegedServerConfig } from '../utils/serverConfigValidation.js';
|
|
18
|
+
import { isPrivilegedServerConfig, ServerConfigValidationError, } from '../utils/serverConfigValidation.js';
|
|
18
19
|
import { validateServerName } from '../utils/serverNameValidation.js';
|
|
19
20
|
import { setCachedSystemConfig } from '../utils/systemConfigCache.js';
|
|
20
21
|
import { DEFAULT_INSTALL_BASE_URL, withResolvedInstallBaseUrl } from '../utils/installBaseUrl.js';
|
|
21
|
-
import { getSmartRoutingConfig, parseBooleanEnvVar, parseFullSchemaTopN, parseSimilarityThreshold, } from '../utils/smartRouting.js';
|
|
22
|
+
import { getSmartRoutingConfig, parseBooleanEnvVar, parseFullSchemaTopN, parseSimilarityThreshold, parseToolDefinitionFields, } from '../utils/smartRouting.js';
|
|
23
|
+
import { TOOL_DEFINITION_FIELDS } from '../constants/smartRoutingDefaults.js';
|
|
22
24
|
import { previewOpenApiToolStats } from '../services/openApiToolStatsService.js';
|
|
23
25
|
import { logger } from '../utils/logger.js';
|
|
24
26
|
const getRequestUser = (req) => {
|
|
@@ -60,7 +62,9 @@ const ensureNonAdminCanManageConfig = (req, res, config) => {
|
|
|
60
62
|
if (isPrivilegedServerConfig(config)) {
|
|
61
63
|
res.status(403).json({
|
|
62
64
|
success: false,
|
|
63
|
-
message:
|
|
65
|
+
message: config.oauth?.allowInsecureTokenEndpoint === true
|
|
66
|
+
? 'Only admins can create or modify servers allowing HTTP OAuth token endpoints'
|
|
67
|
+
: 'Only admins can create or modify stdio-based servers',
|
|
64
68
|
});
|
|
65
69
|
return false;
|
|
66
70
|
}
|
|
@@ -131,7 +135,9 @@ const toConnectionRelevantConfig = (config) => {
|
|
|
131
135
|
const normalized = normalizeServerConfigForPersistence(config);
|
|
132
136
|
const picked = {};
|
|
133
137
|
for (const field of CONNECTION_RELEVANT_CONFIG_FIELDS) {
|
|
134
|
-
|
|
138
|
+
// Database mode reads unset columns (e.g. `proxy`) back as null, while a
|
|
139
|
+
// request leaves them out; both mean "not set".
|
|
140
|
+
picked[field] = normalized[field] ?? undefined;
|
|
135
141
|
}
|
|
136
142
|
const comparable = stripUndefinedDeep(picked);
|
|
137
143
|
// Treat the default request timeout (60000, the dashboard form default) as
|
|
@@ -506,9 +512,19 @@ export const createServer = async (req, res) => {
|
|
|
506
512
|
}
|
|
507
513
|
}
|
|
508
514
|
catch (error) {
|
|
509
|
-
res
|
|
515
|
+
res
|
|
516
|
+
.status(error instanceof CredentialBindingError ||
|
|
517
|
+
error instanceof StdioOptionsError ||
|
|
518
|
+
error instanceof ServerConfigValidationError
|
|
519
|
+
? 400
|
|
520
|
+
: 500)
|
|
521
|
+
.json({
|
|
510
522
|
success: false,
|
|
511
|
-
message: error instanceof CredentialBindingError
|
|
523
|
+
message: error instanceof CredentialBindingError ||
|
|
524
|
+
error instanceof StdioOptionsError ||
|
|
525
|
+
error instanceof ServerConfigValidationError
|
|
526
|
+
? error.message
|
|
527
|
+
: 'Internal server error',
|
|
512
528
|
});
|
|
513
529
|
}
|
|
514
530
|
};
|
|
@@ -595,7 +611,16 @@ export const batchCreateServers = async (req, res) => {
|
|
|
595
611
|
for (const server of servers) {
|
|
596
612
|
const { name, config } = server;
|
|
597
613
|
// Validate server configuration
|
|
598
|
-
|
|
614
|
+
let validation;
|
|
615
|
+
try {
|
|
616
|
+
validation = validateServerConfig(name, config);
|
|
617
|
+
}
|
|
618
|
+
catch (error) {
|
|
619
|
+
if (!(error instanceof StdioOptionsError) &&
|
|
620
|
+
!(error instanceof ServerConfigValidationError))
|
|
621
|
+
throw error;
|
|
622
|
+
validation = { valid: false, message: error.message };
|
|
623
|
+
}
|
|
599
624
|
if (!validation.valid) {
|
|
600
625
|
results.push({
|
|
601
626
|
name: name || 'unknown',
|
|
@@ -617,7 +642,9 @@ export const batchCreateServers = async (req, res) => {
|
|
|
617
642
|
results.push({
|
|
618
643
|
name: serverName,
|
|
619
644
|
success: false,
|
|
620
|
-
message:
|
|
645
|
+
message: normalizedConfig.oauth?.allowInsecureTokenEndpoint === true
|
|
646
|
+
? 'Only admins can create or modify servers allowing HTTP OAuth token endpoints'
|
|
647
|
+
: 'Only admins can create or modify stdio-based servers',
|
|
621
648
|
});
|
|
622
649
|
failureCount++;
|
|
623
650
|
continue;
|
|
@@ -845,7 +872,9 @@ export const updateServer = async (req, res) => {
|
|
|
845
872
|
if (!existingServer) {
|
|
846
873
|
return;
|
|
847
874
|
}
|
|
848
|
-
if (
|
|
875
|
+
if ((existingServer.oauth?.allowInsecureTokenEndpoint === true &&
|
|
876
|
+
!ensureNonAdminCanManageConfig(req, res, existingServer)) ||
|
|
877
|
+
!ensureNonAdminCanManageConfig(req, res, normalizedConfig)) {
|
|
849
878
|
return;
|
|
850
879
|
}
|
|
851
880
|
// Set default keep-alive interval for SSE servers if not specified
|
|
@@ -883,9 +912,28 @@ export const updateServer = async (req, res) => {
|
|
|
883
912
|
}
|
|
884
913
|
// Read the cached tool list before the runtime under the old name is closed
|
|
885
914
|
const isBareToolName = bareToolNameCheck(name);
|
|
915
|
+
// Personal credential bindings follow a plain rename. A rename that also
|
|
916
|
+
// changes the connection (target, headers, credential slots, ...) drops
|
|
917
|
+
// them, so users bind again against the new definition. They are copied
|
|
918
|
+
// before the definition moves, so a binding that cannot be copied fails
|
|
919
|
+
// the request with the server, its references and every binding unchanged.
|
|
920
|
+
const keepBindings = !hasConnectionRelevantChange(existingServer, normalizedConfig);
|
|
921
|
+
if (keepBindings) {
|
|
922
|
+
await copyCredentialBindings(name, targetName);
|
|
923
|
+
}
|
|
886
924
|
// Rename the server
|
|
887
|
-
|
|
925
|
+
let renamed;
|
|
926
|
+
try {
|
|
927
|
+
renamed = await serverDao.rename(name, targetName);
|
|
928
|
+
}
|
|
929
|
+
catch (error) {
|
|
930
|
+
if (keepBindings)
|
|
931
|
+
await deleteCredentialBindings({ serverName: targetName });
|
|
932
|
+
throw error;
|
|
933
|
+
}
|
|
888
934
|
if (!renamed) {
|
|
935
|
+
if (keepBindings)
|
|
936
|
+
await deleteCredentialBindings({ serverName: targetName });
|
|
889
937
|
res.status(404).json({
|
|
890
938
|
success: false,
|
|
891
939
|
message: 'Server not found',
|
|
@@ -898,6 +946,7 @@ export const updateServer = async (req, res) => {
|
|
|
898
946
|
// rebuilds serverInfos. Without this explicit close the old stdio child
|
|
899
947
|
// process tree is orphaned and leaks until the process restarts.
|
|
900
948
|
closeServer(name);
|
|
949
|
+
// Kept bindings now have their copies under the new name.
|
|
901
950
|
await deleteCredentialBindings({ serverName: name });
|
|
902
951
|
// Update references in groups
|
|
903
952
|
const groupDao = getGroupDao();
|
|
@@ -920,8 +969,8 @@ export const updateServer = async (req, res) => {
|
|
|
920
969
|
// Drop embeddings stored under the old name so search_tools does not
|
|
921
970
|
// advertise phantom tools; addOrUpdateServer below regenerates them
|
|
922
971
|
// under the new name. A credential server never connects globally, so
|
|
923
|
-
// its rows come back on the first per-user connect
|
|
924
|
-
//
|
|
972
|
+
// its rows come back on the first per-user connect under the new name
|
|
973
|
+
// (with a moved binding, or after a user binds again), or on a reindex.
|
|
925
974
|
// A failure here must not abort the rename.
|
|
926
975
|
try {
|
|
927
976
|
await removeServerToolEmbeddings(name);
|
|
@@ -985,9 +1034,19 @@ export const updateServer = async (req, res) => {
|
|
|
985
1034
|
}
|
|
986
1035
|
}
|
|
987
1036
|
catch (error) {
|
|
988
|
-
res
|
|
1037
|
+
res
|
|
1038
|
+
.status(error instanceof CredentialBindingError ||
|
|
1039
|
+
error instanceof StdioOptionsError ||
|
|
1040
|
+
error instanceof ServerConfigValidationError
|
|
1041
|
+
? 400
|
|
1042
|
+
: 500)
|
|
1043
|
+
.json({
|
|
989
1044
|
success: false,
|
|
990
|
-
message: error instanceof CredentialBindingError
|
|
1045
|
+
message: error instanceof CredentialBindingError ||
|
|
1046
|
+
error instanceof StdioOptionsError ||
|
|
1047
|
+
error instanceof ServerConfigValidationError
|
|
1048
|
+
? error.message
|
|
1049
|
+
: 'Internal server error',
|
|
991
1050
|
});
|
|
992
1051
|
}
|
|
993
1052
|
};
|
|
@@ -1453,7 +1512,8 @@ export const updateSystemConfig = async (req, res) => {
|
|
|
1453
1512
|
typeof smartRouting.embeddingMaxTokens === 'number' ||
|
|
1454
1513
|
smartRouting.embeddingMaxTokens === null ||
|
|
1455
1514
|
smartRouting.similarityThreshold !== undefined ||
|
|
1456
|
-
smartRouting.fullSchemaTopN !== undefined
|
|
1515
|
+
smartRouting.fullSchemaTopN !== undefined ||
|
|
1516
|
+
smartRouting.toolDefinitionFields !== undefined);
|
|
1457
1517
|
const hasToolResultCompressionUpdate = toolResultCompression &&
|
|
1458
1518
|
(typeof toolResultCompression.enabled === 'boolean' ||
|
|
1459
1519
|
typeof toolResultCompression.minTokens === 'number' ||
|
|
@@ -1485,6 +1545,7 @@ export const updateSystemConfig = async (req, res) => {
|
|
|
1485
1545
|
typeof auth.betterAuth.baseUrl === 'string' ||
|
|
1486
1546
|
typeof auth.betterAuth.basePath === 'string' ||
|
|
1487
1547
|
Array.isArray(auth.betterAuth.trustedOrigins) ||
|
|
1548
|
+
typeof auth.betterAuth.disablePasswordLogin === 'boolean' ||
|
|
1488
1549
|
(auth.betterAuth.providers &&
|
|
1489
1550
|
(typeof auth.betterAuth.providers.google?.enabled === 'boolean' ||
|
|
1490
1551
|
typeof auth.betterAuth.providers.github?.enabled === 'boolean' ||
|
|
@@ -1811,8 +1872,8 @@ export const updateSystemConfig = async (req, res) => {
|
|
|
1811
1872
|
// null explicitly clears the override, restoring the per-model default
|
|
1812
1873
|
systemConfig.smartRouting.embeddingMaxTokens = undefined;
|
|
1813
1874
|
}
|
|
1814
|
-
// Search-time settings: null clears them back to the default, and
|
|
1815
|
-
//
|
|
1875
|
+
// Search-time settings: null clears them back to the default, and none of
|
|
1876
|
+
// them touches the stored embeddings, so they do not trigger a re-sync.
|
|
1816
1877
|
if (smartRouting.similarityThreshold === null) {
|
|
1817
1878
|
systemConfig.smartRouting.similarityThreshold = undefined;
|
|
1818
1879
|
}
|
|
@@ -1841,6 +1902,23 @@ export const updateSystemConfig = async (req, res) => {
|
|
|
1841
1902
|
}
|
|
1842
1903
|
systemConfig.smartRouting.fullSchemaTopN = topN;
|
|
1843
1904
|
}
|
|
1905
|
+
if (smartRouting.toolDefinitionFields === null) {
|
|
1906
|
+
systemConfig.smartRouting.toolDefinitionFields = undefined;
|
|
1907
|
+
}
|
|
1908
|
+
else if (smartRouting.toolDefinitionFields !== undefined) {
|
|
1909
|
+
// An array only: the comma-separated form is for the env var
|
|
1910
|
+
const fields = Array.isArray(smartRouting.toolDefinitionFields)
|
|
1911
|
+
? parseToolDefinitionFields(smartRouting.toolDefinitionFields)
|
|
1912
|
+
: undefined;
|
|
1913
|
+
if (fields === undefined) {
|
|
1914
|
+
res.status(400).json({
|
|
1915
|
+
success: false,
|
|
1916
|
+
message: `smartRouting.toolDefinitionFields must be an array of: ${TOOL_DEFINITION_FIELDS.join(', ')}`,
|
|
1917
|
+
});
|
|
1918
|
+
return;
|
|
1919
|
+
}
|
|
1920
|
+
systemConfig.smartRouting.toolDefinitionFields = fields;
|
|
1921
|
+
}
|
|
1844
1922
|
// Check if we need to sync embeddings
|
|
1845
1923
|
const isNowEnabled = systemConfig.smartRouting.enabled || false;
|
|
1846
1924
|
const hasConfigChanged = previousSmartRoutingConfig.dbUrl !== systemConfig.smartRouting.dbUrl ||
|
|
@@ -1975,6 +2053,9 @@ export const updateSystemConfig = async (req, res) => {
|
|
|
1975
2053
|
if (typeof auth.betterAuth.basePath === 'string') {
|
|
1976
2054
|
target.basePath = auth.betterAuth.basePath.trim();
|
|
1977
2055
|
}
|
|
2056
|
+
if (typeof auth.betterAuth.disablePasswordLogin === 'boolean') {
|
|
2057
|
+
target.disablePasswordLogin = auth.betterAuth.disablePasswordLogin;
|
|
2058
|
+
}
|
|
1978
2059
|
if (Array.isArray(auth.betterAuth.trustedOrigins)) {
|
|
1979
2060
|
target.trustedOrigins = auth.betterAuth.trustedOrigins
|
|
1980
2061
|
.filter((origin) => typeof origin === 'string')
|