@samanhappy/mcphub 1.0.31 → 1.0.33
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/README.md +11 -1
- package/README.zh.md +12 -2
- package/dist/betterAuth.js +13 -5
- package/dist/betterAuth.js.map +1 -1
- package/dist/cli/commands/cache.js.map +1 -1
- package/dist/cli/commands/call.js +2 -2
- package/dist/cli/commands/call.js.map +1 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/discover.js.map +1 -1
- package/dist/cli/commands/export.js.map +1 -1
- package/dist/cli/commands/groups.js.map +1 -1
- package/dist/cli/commands/install.js +1 -1
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/keys.js.map +1 -1
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/servers.js.map +1 -1
- package/dist/cli/commands/tools.js +2 -2
- package/dist/cli/commands/tools.js.map +1 -1
- package/dist/cli/context.js +1 -1
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/http.js +3 -1
- package/dist/cli/http.js.map +1 -1
- package/dist/clients/openapi.js +498 -76
- package/dist/clients/openapi.js.map +1 -1
- package/dist/config/DaoConfigService.js +3 -2
- package/dist/config/DaoConfigService.js.map +1 -1
- package/dist/config/configManager.js +9 -8
- package/dist/config/configManager.js.map +1 -1
- package/dist/config/index.js +54 -8
- package/dist/config/index.js.map +1 -1
- package/dist/config/jwt.js +2 -1
- package/dist/config/jwt.js.map +1 -1
- package/dist/config/migrationUtils.js +46 -45
- package/dist/config/migrationUtils.js.map +1 -1
- package/dist/constants/oauthServerDefaults.js +5 -0
- package/dist/constants/oauthServerDefaults.js.map +1 -1
- package/dist/controllers/activityController.js +6 -5
- package/dist/controllers/activityController.js.map +1 -1
- package/dist/controllers/authController.js +5 -4
- package/dist/controllers/authController.js.map +1 -1
- package/dist/controllers/bearerKeyController.js +7 -6
- package/dist/controllers/bearerKeyController.js.map +1 -1
- package/dist/controllers/betterAuthController.js +2 -1
- package/dist/controllers/betterAuthController.js.map +1 -1
- package/dist/controllers/builtinPromptController.js +13 -5
- package/dist/controllers/builtinPromptController.js.map +1 -1
- package/dist/controllers/builtinResourceController.js +14 -6
- package/dist/controllers/builtinResourceController.js.map +1 -1
- package/dist/controllers/changelogController.js +5 -2
- package/dist/controllers/changelogController.js.map +1 -1
- package/dist/controllers/cloudController.js +11 -10
- package/dist/controllers/cloudController.js.map +1 -1
- package/dist/controllers/configController.js +4 -3
- package/dist/controllers/configController.js.map +1 -1
- package/dist/controllers/contextCostController.js +3 -2
- package/dist/controllers/contextCostController.js.map +1 -1
- package/dist/controllers/groupController.js +2 -1
- package/dist/controllers/groupController.js.map +1 -1
- package/dist/controllers/healthController.js +2 -1
- package/dist/controllers/healthController.js.map +1 -1
- package/dist/controllers/hostedInternalController.js +2 -1
- package/dist/controllers/hostedInternalController.js.map +1 -1
- package/dist/controllers/logController.js +5 -4
- package/dist/controllers/logController.js.map +1 -1
- package/dist/controllers/mcpbController.js +23 -20
- package/dist/controllers/mcpbController.js.map +1 -1
- package/dist/controllers/oauthCallbackController.js +54 -27
- package/dist/controllers/oauthCallbackController.js.map +1 -1
- package/dist/controllers/oauthClientController.js +7 -6
- package/dist/controllers/oauthClientController.js.map +1 -1
- package/dist/controllers/oauthDynamicRegistrationController.js +22 -4
- package/dist/controllers/oauthDynamicRegistrationController.js.map +1 -1
- package/dist/controllers/oauthServerController.js +62 -15
- package/dist/controllers/oauthServerController.js.map +1 -1
- package/dist/controllers/openApiController.js +7 -6
- package/dist/controllers/openApiController.js.map +1 -1
- package/dist/controllers/promptController.js +2 -1
- package/dist/controllers/promptController.js.map +1 -1
- package/dist/controllers/registryController.js +4 -3
- package/dist/controllers/registryController.js.map +1 -1
- package/dist/controllers/serverController.js +154 -65
- package/dist/controllers/serverController.js.map +1 -1
- package/dist/controllers/templateController.js +3 -2
- package/dist/controllers/templateController.js.map +1 -1
- package/dist/controllers/toolController.js +2 -1
- package/dist/controllers/toolController.js.map +1 -1
- package/dist/dao/DaoFactory.js +3 -2
- package/dist/dao/DaoFactory.js.map +1 -1
- package/dist/dao/ServerDao.js.map +1 -1
- package/dist/dao/UserConfigDaoDbImpl.js.map +1 -1
- package/dist/dao/UserDao.js.map +1 -1
- package/dist/dao/base/JsonFileBaseDao.js +3 -2
- package/dist/dao/base/JsonFileBaseDao.js.map +1 -1
- package/dist/dao/examples.js +35 -34
- package/dist/dao/examples.js.map +1 -1
- package/dist/db/connection.js +59 -58
- package/dist/db/connection.js.map +1 -1
- package/dist/db/index.js +2 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/repositories/ServerRepository.js +3 -3
- package/dist/db/repositories/ServerRepository.js.map +1 -1
- package/dist/db/repositories/SystemConfigRepository.js +2 -1
- package/dist/db/repositories/SystemConfigRepository.js.map +1 -1
- package/dist/db/repositories/UserConfigRepository.js.map +1 -1
- package/dist/db/repositories/VectorEmbeddingRepository.js +6 -5
- package/dist/db/repositories/VectorEmbeddingRepository.js.map +1 -1
- package/dist/index.js +28 -19
- package/dist/index.js.map +1 -1
- package/dist/middlewares/auth.js +4 -3
- package/dist/middlewares/auth.js.map +1 -1
- package/dist/middlewares/index.js +2 -1
- package/dist/middlewares/index.js.map +1 -1
- package/dist/middlewares/userContext.js +7 -6
- package/dist/middlewares/userContext.js.map +1 -1
- package/dist/models/OAuth.js +7 -6
- package/dist/models/OAuth.js.map +1 -1
- package/dist/models/User.js +13 -12
- package/dist/models/User.js.map +1 -1
- package/dist/routes/index.js +11 -10
- package/dist/routes/index.js.map +1 -1
- package/dist/scripts/dao-demo.js +28 -27
- package/dist/scripts/dao-demo.js.map +1 -1
- package/dist/server.js +36 -30
- package/dist/server.js.map +1 -1
- package/dist/services/activityLoggingService.js +3 -2
- package/dist/services/activityLoggingService.js.map +1 -1
- package/dist/services/authorizationService.js +28 -0
- package/dist/services/authorizationService.js.map +1 -0
- package/dist/services/betterAuthConfig.js +1 -4
- package/dist/services/betterAuthConfig.js.map +1 -1
- package/dist/services/betterAuthSession.js +8 -7
- package/dist/services/betterAuthSession.js.map +1 -1
- package/dist/services/changelogService.js +5 -2
- package/dist/services/changelogService.js.map +1 -1
- package/dist/services/cimdClientService.js +195 -0
- package/dist/services/cimdClientService.js.map +1 -0
- package/dist/services/cloudService.js +10 -9
- package/dist/services/cloudService.js.map +1 -1
- package/dist/services/contextCostService.js +6 -2
- package/dist/services/contextCostService.js.map +1 -1
- package/dist/services/groupService.js +8 -7
- package/dist/services/groupService.js.map +1 -1
- package/dist/services/hostedAuthService.js +3 -2
- package/dist/services/hostedAuthService.js.map +1 -1
- package/dist/services/hostedControlPlaneClient.js.map +1 -1
- package/dist/services/hostedEventSubscriber.js +9 -8
- package/dist/services/hostedEventSubscriber.js.map +1 -1
- package/dist/services/hostedRuntimeCatalogNames.js +1 -3
- package/dist/services/hostedRuntimeCatalogNames.js.map +1 -1
- package/dist/services/keepAliveService.js +7 -6
- package/dist/services/keepAliveService.js.map +1 -1
- package/dist/services/marketService.js +2 -1
- package/dist/services/marketService.js.map +1 -1
- package/dist/services/mcpOAuthProvider.js +22 -21
- package/dist/services/mcpOAuthProvider.js.map +1 -1
- package/dist/services/mcpService.js +239 -130
- package/dist/services/mcpService.js.map +1 -1
- package/dist/services/oauthClientRegistration.js +30 -29
- package/dist/services/oauthClientRegistration.js.map +1 -1
- package/dist/services/oauthServerService.js +39 -18
- package/dist/services/oauthServerService.js.map +1 -1
- package/dist/services/oauthService.js +16 -15
- package/dist/services/oauthService.js.map +1 -1
- package/dist/services/oauthSettingsStore.js +4 -3
- package/dist/services/oauthSettingsStore.js.map +1 -1
- package/dist/services/openApiGeneratorService.js +1 -3
- package/dist/services/openApiGeneratorService.js.map +1 -1
- package/dist/services/openApiToolStatsService.js +37 -0
- package/dist/services/openApiToolStatsService.js.map +1 -0
- package/dist/services/registry.js +2 -1
- package/dist/services/registry.js.map +1 -1
- package/dist/services/requestContextService.js.map +1 -1
- package/dist/services/serverConfigPresenter.js +85 -0
- package/dist/services/serverConfigPresenter.js.map +1 -0
- package/dist/services/smartRoutingService.js +6 -5
- package/dist/services/smartRoutingService.js.map +1 -1
- package/dist/services/sseService.js +52 -51
- package/dist/services/sseService.js.map +1 -1
- package/dist/services/templateService.js +105 -23
- package/dist/services/templateService.js.map +1 -1
- package/dist/services/toolResultCompressionService.js +8 -5
- package/dist/services/toolResultCompressionService.js.map +1 -1
- package/dist/services/upstreamOAuthDisconnectService.js +9 -6
- package/dist/services/upstreamOAuthDisconnectService.js.map +1 -1
- package/dist/services/userService.js +5 -4
- package/dist/services/userService.js.map +1 -1
- package/dist/services/vectorSearchService.js +126 -112
- package/dist/services/vectorSearchService.js.map +1 -1
- package/dist/utils/cacheUtils.js +5 -4
- package/dist/utils/cacheUtils.js.map +1 -1
- package/dist/utils/corsOrigin.js +42 -0
- package/dist/utils/corsOrigin.js.map +1 -0
- package/dist/utils/dbRetry.js +2 -5
- package/dist/utils/dbRetry.js.map +1 -1
- package/dist/utils/frontendShell.js +2 -1
- package/dist/utils/frontendShell.js.map +1 -1
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/logger.js +170 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/migration.js +51 -50
- package/dist/utils/migration.js.map +1 -1
- package/dist/utils/oauthIssuer.js +57 -0
- package/dist/utils/oauthIssuer.js.map +1 -0
- package/dist/utils/openApiRequestBody.js +220 -0
- package/dist/utils/openApiRequestBody.js.map +1 -0
- package/dist/utils/parameterConversion.js +2 -1
- package/dist/utils/parameterConversion.js.map +1 -1
- package/dist/utils/path.js +9 -8
- package/dist/utils/path.js.map +1 -1
- package/dist/utils/processTree.js +47 -0
- package/dist/utils/processTree.js.map +1 -0
- package/dist/utils/proxyTrust.js.map +1 -1
- package/dist/utils/rateLimit.js +8 -0
- package/dist/utils/rateLimit.js.map +1 -1
- package/dist/utils/requireAdmin.js +15 -0
- package/dist/utils/requireAdmin.js.map +1 -0
- package/dist/utils/serverConfigPersistence.js +3 -0
- package/dist/utils/serverConfigPersistence.js.map +1 -1
- package/dist/utils/serverConfigValidation.js +13 -0
- package/dist/utils/serverConfigValidation.js.map +1 -0
- package/dist/utils/serverNameValidation.js +56 -0
- package/dist/utils/serverNameValidation.js.map +1 -0
- package/dist/utils/serverShutdown.js +3 -2
- package/dist/utils/serverShutdown.js.map +1 -1
- package/dist/utils/smartRouting.js +4 -3
- package/dist/utils/smartRouting.js.map +1 -1
- package/dist/utils/ssrf.js +23 -10
- package/dist/utils/ssrf.js.map +1 -1
- package/dist/utils/systemConfigCache.js +40 -2
- package/dist/utils/systemConfigCache.js.map +1 -1
- package/dist/utils/tokenCost.js.map +1 -1
- package/dist/utils/tokenTruncation.js +9 -4
- package/dist/utils/tokenTruncation.js.map +1 -1
- package/dist/utils/version.js +3 -2
- package/dist/utils/version.js.map +1 -1
- package/frontend/dist/assets/{ActivityPage-Dx53zxEM.js → ActivityPage-Du9Nh-Jy.js} +2 -2
- package/frontend/dist/assets/{ActivityPage-Dx53zxEM.js.map → ActivityPage-Du9Nh-Jy.js.map} +1 -1
- package/frontend/dist/assets/ConfirmDialog-3APts2Y9.js +2 -0
- package/frontend/dist/assets/ConfirmDialog-3APts2Y9.js.map +1 -0
- package/frontend/dist/assets/Dashboard-J4G-AZkI.js +2 -0
- package/frontend/dist/assets/{Dashboard-ZYVsSvOw.js.map → Dashboard-J4G-AZkI.js.map} +1 -1
- package/frontend/dist/assets/{DeleteDialog-DNe-zTEl.js → DeleteDialog-D9ycSRvn.js} +2 -2
- package/frontend/dist/assets/{DeleteDialog-DNe-zTEl.js.map → DeleteDialog-D9ycSRvn.js.map} +1 -1
- package/frontend/dist/assets/{EndpointCopy-ngxLPeDF.js → EndpointCopy-DFeLcU9A.js} +2 -2
- package/frontend/dist/assets/{EndpointCopy-ngxLPeDF.js.map → EndpointCopy-DFeLcU9A.js.map} +1 -1
- package/frontend/dist/assets/GroupsPage-CGMZBiXd.js +33 -0
- package/frontend/dist/assets/{GroupsPage-JPtupGpI.js.map → GroupsPage-CGMZBiXd.js.map} +1 -1
- package/frontend/dist/assets/{LoginPage-B6rU3Ugr.js → LoginPage-g5pJLBk0.js} +2 -2
- package/frontend/dist/assets/{LoginPage-B6rU3Ugr.js.map → LoginPage-g5pJLBk0.js.map} +1 -1
- package/frontend/dist/assets/{LogsPage-CXq382fb.js → LogsPage-Bkv7xhNf.js} +2 -2
- package/frontend/dist/assets/{LogsPage-CXq382fb.js.map → LogsPage-Bkv7xhNf.js.map} +1 -1
- package/frontend/dist/assets/MarketPage-WkLrckIr.js +3 -0
- package/frontend/dist/assets/MarketPage-WkLrckIr.js.map +1 -0
- package/frontend/dist/assets/{OAuthConsentPage-C-n6tv3-.js → OAuthConsentPage-CA35XoBK.js} +2 -2
- package/frontend/dist/assets/{OAuthConsentPage-C-n6tv3-.js.map → OAuthConsentPage-CA35XoBK.js.map} +1 -1
- package/frontend/dist/assets/{Pagination-DLSuQ8hw.js → Pagination-Dwko3g48.js} +2 -2
- package/frontend/dist/assets/{Pagination-DLSuQ8hw.js.map → Pagination-Dwko3g48.js.map} +1 -1
- package/frontend/dist/assets/{PromptsPage-BLpy76K4.js → PromptsPage-BuDdW69R.js} +2 -2
- package/frontend/dist/assets/{PromptsPage-BLpy76K4.js.map → PromptsPage-BuDdW69R.js.map} +1 -1
- package/frontend/dist/assets/{ResourcesPage-C5nynRqE.js → ResourcesPage-Cu-eD5e2.js} +2 -2
- package/frontend/dist/assets/{ResourcesPage-C5nynRqE.js.map → ResourcesPage-Cu-eD5e2.js.map} +1 -1
- package/frontend/dist/assets/{ServersPage-Ca5W9cPW.js → ServersPage-B1Np5x3N.js} +8 -8
- package/frontend/dist/assets/ServersPage-B1Np5x3N.js.map +1 -0
- package/frontend/dist/assets/{SettingsPage-DgFBjp_O.js → SettingsPage-BQN8-ZQh.js} +4 -4
- package/frontend/dist/assets/SettingsPage-BQN8-ZQh.js.map +1 -0
- package/frontend/dist/assets/{StatusDot-CmSkukx0.js → StatusDot-WyvgqplP.js} +2 -2
- package/frontend/dist/assets/{StatusDot-CmSkukx0.js.map → StatusDot-WyvgqplP.js.map} +1 -1
- package/frontend/dist/assets/{ToggleGroup-sG_2LQom.js → ToggleGroup-CmeedsZU.js} +2 -2
- package/frontend/dist/assets/{ToggleGroup-sG_2LQom.js.map → ToggleGroup-CmeedsZU.js.map} +1 -1
- package/frontend/dist/assets/UsersPage-DqDFrIIW.js +2 -0
- package/frontend/dist/assets/UsersPage-DqDFrIIW.js.map +1 -0
- package/frontend/dist/assets/contextCost-CilWqGWT.js +2 -0
- package/frontend/dist/assets/contextCost-CilWqGWT.js.map +1 -0
- package/frontend/dist/assets/{framework-vendor-I9Y6AgD5.js → framework-vendor-BHAQX05P.js} +3 -3
- package/frontend/dist/assets/{framework-vendor-I9Y6AgD5.js.map → framework-vendor-BHAQX05P.js.map} +1 -1
- package/frontend/dist/assets/{i18n-vendor-y9bLzIeh.js → i18n-vendor-CMcB7XUR.js} +2 -2
- package/frontend/dist/assets/{i18n-vendor-y9bLzIeh.js.map → i18n-vendor-CMcB7XUR.js.map} +1 -1
- package/frontend/dist/assets/{icons-vendor-BFl4A9fq.js → icons-vendor-HZHHWeTa.js} +2 -2
- package/frontend/dist/assets/{icons-vendor-BFl4A9fq.js.map → icons-vendor-HZHHWeTa.js.map} +1 -1
- package/frontend/dist/assets/index-BvU2-VT8.js +3 -0
- package/frontend/dist/assets/{index-CLugsCsy.js.map → index-BvU2-VT8.js.map} +1 -1
- package/frontend/dist/assets/index-DtrCVU1h.css +1 -0
- package/frontend/dist/assets/passwordValidation-DTLWgUy9.js +2 -0
- package/frontend/dist/assets/passwordValidation-DTLWgUy9.js.map +1 -0
- package/frontend/dist/assets/{resourceService-33rS8QGJ.js → resourceService-BFH4w47h.js} +2 -2
- package/frontend/dist/assets/{resourceService-33rS8QGJ.js.map → resourceService-BFH4w47h.js.map} +1 -1
- package/frontend/dist/assets/useCostData-CoM1SxdS.js +2 -0
- package/frontend/dist/assets/useCostData-CoM1SxdS.js.map +1 -0
- package/frontend/dist/assets/useSettingsData-DKrECrG1.js +2 -0
- package/frontend/dist/assets/{useSettingsData-fK2bv9oN.js.map → useSettingsData-DKrECrG1.js.map} +1 -1
- package/frontend/dist/assets/variableDetection-CIrYDjrq.js +16 -0
- package/frontend/dist/assets/variableDetection-CIrYDjrq.js.map +1 -0
- package/frontend/dist/index.html +5 -5
- package/package.json +2 -2
- package/frontend/dist/assets/ConfirmDialog-CYfXEuyU.js +0 -2
- package/frontend/dist/assets/ConfirmDialog-CYfXEuyU.js.map +0 -1
- package/frontend/dist/assets/Dashboard-ZYVsSvOw.js +0 -2
- package/frontend/dist/assets/GroupsPage-JPtupGpI.js +0 -33
- package/frontend/dist/assets/MarketPage-BGnQQyXK.js +0 -3
- package/frontend/dist/assets/MarketPage-BGnQQyXK.js.map +0 -1
- package/frontend/dist/assets/ServersPage-Ca5W9cPW.js.map +0 -1
- package/frontend/dist/assets/SettingsPage-DgFBjp_O.js.map +0 -1
- package/frontend/dist/assets/UsersPage-PHkFXLL8.js +0 -2
- package/frontend/dist/assets/UsersPage-PHkFXLL8.js.map +0 -1
- package/frontend/dist/assets/contextCost-D_iNNbhX.js +0 -2
- package/frontend/dist/assets/contextCost-D_iNNbhX.js.map +0 -1
- package/frontend/dist/assets/index-CGvImZ3F.css +0 -1
- package/frontend/dist/assets/index-CLugsCsy.js +0 -3
- package/frontend/dist/assets/useSettingsData-fK2bv9oN.js +0 -2
- package/frontend/dist/assets/variableDetection-ByJ_cnxa.js +0 -16
- package/frontend/dist/assets/variableDetection-ByJ_cnxa.js.map +0 -1
package/dist/utils/migration.js
CHANGED
|
@@ -12,18 +12,19 @@ import { OAuthTokenRepository } from '../db/repositories/OAuthTokenRepository.js
|
|
|
12
12
|
import { BearerKeyRepository } from '../db/repositories/BearerKeyRepository.js';
|
|
13
13
|
import { BuiltinPromptRepository } from '../db/repositories/BuiltinPromptRepository.js';
|
|
14
14
|
import { BuiltinResourceRepository } from '../db/repositories/BuiltinResourceRepository.js';
|
|
15
|
+
import { logger } from './logger.js';
|
|
15
16
|
/**
|
|
16
17
|
* Migrate from file-based configuration to database
|
|
17
18
|
*/
|
|
18
19
|
export async function migrateToDatabase() {
|
|
19
20
|
try {
|
|
20
|
-
|
|
21
|
+
logger.log('Starting migration from file to database...');
|
|
21
22
|
// Initialize database connection
|
|
22
23
|
await initializeDatabase();
|
|
23
|
-
|
|
24
|
+
logger.log('Database connection established');
|
|
24
25
|
// Load current settings from file
|
|
25
26
|
const settings = loadOriginalSettings();
|
|
26
|
-
|
|
27
|
+
logger.log('Loaded settings from file');
|
|
27
28
|
// Create repositories
|
|
28
29
|
const userRepo = new UserRepository();
|
|
29
30
|
const serverRepo = new ServerRepository();
|
|
@@ -37,7 +38,7 @@ export async function migrateToDatabase() {
|
|
|
37
38
|
const builtinResourceRepo = new BuiltinResourceRepository();
|
|
38
39
|
// Migrate users
|
|
39
40
|
if (settings.users && settings.users.length > 0) {
|
|
40
|
-
|
|
41
|
+
logger.log(`Migrating ${settings.users.length} users...`);
|
|
41
42
|
for (const user of settings.users) {
|
|
42
43
|
const exists = await userRepo.exists(user.username);
|
|
43
44
|
if (!exists) {
|
|
@@ -48,17 +49,17 @@ export async function migrateToDatabase() {
|
|
|
48
49
|
email: user.email ?? null,
|
|
49
50
|
ssoUserId: user.ssoUserId ?? null,
|
|
50
51
|
});
|
|
51
|
-
|
|
52
|
+
logger.log(` - Created user: ${user.username}`);
|
|
52
53
|
}
|
|
53
54
|
else {
|
|
54
|
-
|
|
55
|
+
logger.log(` - User already exists: ${user.username}`);
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
}
|
|
58
59
|
// Migrate servers
|
|
59
60
|
if (settings.mcpServers) {
|
|
60
61
|
const serverNames = Object.keys(settings.mcpServers);
|
|
61
|
-
|
|
62
|
+
logger.log(`Migrating ${serverNames.length} servers...`);
|
|
62
63
|
for (const [name, config] of Object.entries(settings.mcpServers)) {
|
|
63
64
|
const exists = await serverRepo.exists(name);
|
|
64
65
|
if (!exists) {
|
|
@@ -86,16 +87,16 @@ export async function migrateToDatabase() {
|
|
|
86
87
|
passthroughHeaders: config.passthroughHeaders,
|
|
87
88
|
perSessionClient: config.perSessionClient,
|
|
88
89
|
});
|
|
89
|
-
|
|
90
|
+
logger.log(` - Created server: ${name}`);
|
|
90
91
|
}
|
|
91
92
|
else {
|
|
92
|
-
|
|
93
|
+
logger.log(` - Server already exists: ${name}`);
|
|
93
94
|
}
|
|
94
95
|
}
|
|
95
96
|
}
|
|
96
97
|
// Migrate groups
|
|
97
98
|
if (settings.groups && settings.groups.length > 0) {
|
|
98
|
-
|
|
99
|
+
logger.log(`Migrating ${settings.groups.length} groups...`);
|
|
99
100
|
for (const group of settings.groups) {
|
|
100
101
|
const exists = await groupRepo.existsByName(group.name);
|
|
101
102
|
if (!exists) {
|
|
@@ -105,16 +106,16 @@ export async function migrateToDatabase() {
|
|
|
105
106
|
servers: Array.isArray(group.servers) ? group.servers : [],
|
|
106
107
|
owner: group.owner,
|
|
107
108
|
});
|
|
108
|
-
|
|
109
|
+
logger.log(` - Created group: ${group.name}`);
|
|
109
110
|
}
|
|
110
111
|
else {
|
|
111
|
-
|
|
112
|
+
logger.log(` - Group already exists: ${group.name}`);
|
|
112
113
|
}
|
|
113
114
|
}
|
|
114
115
|
}
|
|
115
116
|
// Migrate system config
|
|
116
117
|
if (settings.systemConfig) {
|
|
117
|
-
|
|
118
|
+
logger.log('Migrating system configuration...');
|
|
118
119
|
const systemConfig = {
|
|
119
120
|
routing: settings.systemConfig.routing || {},
|
|
120
121
|
install: settings.systemConfig.install || {},
|
|
@@ -129,10 +130,10 @@ export async function migrateToDatabase() {
|
|
|
129
130
|
discovery: settings.systemConfig.discovery || {},
|
|
130
131
|
};
|
|
131
132
|
await systemConfigRepo.update(systemConfig);
|
|
132
|
-
|
|
133
|
+
logger.log(' - System configuration updated');
|
|
133
134
|
}
|
|
134
135
|
// Migrate bearer auth keys
|
|
135
|
-
|
|
136
|
+
logger.log('Migrating bearer authentication keys...');
|
|
136
137
|
// Prefer explicit bearerKeys if present in settings
|
|
137
138
|
if (Array.isArray(settings.bearerKeys) && settings.bearerKeys.length > 0) {
|
|
138
139
|
for (const key of settings.bearerKeys) {
|
|
@@ -146,7 +147,7 @@ export async function migrateToDatabase() {
|
|
|
146
147
|
allowedGroups: key.allowedGroups ?? [],
|
|
147
148
|
allowedServers: key.allowedServers ?? [],
|
|
148
149
|
});
|
|
149
|
-
|
|
150
|
+
logger.log(` - Migrated bearer key: ${key.name} (${key.id ?? 'no-id'})`);
|
|
150
151
|
}
|
|
151
152
|
}
|
|
152
153
|
else if (settings.systemConfig?.routing) {
|
|
@@ -169,31 +170,31 @@ export async function migrateToDatabase() {
|
|
|
169
170
|
allowedGroups: [],
|
|
170
171
|
allowedServers: [],
|
|
171
172
|
});
|
|
172
|
-
|
|
173
|
+
logger.log(` - Migrated legacy bearer auth config to key: default (enabled=${enableBearerAuth})`);
|
|
173
174
|
}
|
|
174
175
|
else {
|
|
175
|
-
|
|
176
|
+
logger.log(' - No legacy bearer auth key found, skipping bearer key migration');
|
|
176
177
|
}
|
|
177
178
|
}
|
|
178
179
|
else {
|
|
179
|
-
|
|
180
|
+
logger.log(' - No bearer auth configuration found, skipping bearer key migration');
|
|
180
181
|
}
|
|
181
182
|
// Migrate user configs
|
|
182
183
|
if (settings.userConfigs) {
|
|
183
184
|
const usernames = Object.keys(settings.userConfigs);
|
|
184
|
-
|
|
185
|
+
logger.log(`Migrating ${usernames.length} user configurations...`);
|
|
185
186
|
for (const [username, config] of Object.entries(settings.userConfigs)) {
|
|
186
187
|
const userConfig = {
|
|
187
188
|
routing: config.routing || {},
|
|
188
189
|
additionalConfig: config,
|
|
189
190
|
};
|
|
190
191
|
await userConfigRepo.update(username, userConfig);
|
|
191
|
-
|
|
192
|
+
logger.log(` - Updated configuration for user: ${username}`);
|
|
192
193
|
}
|
|
193
194
|
}
|
|
194
195
|
// Migrate OAuth clients
|
|
195
196
|
if (settings.oauthClients && settings.oauthClients.length > 0) {
|
|
196
|
-
|
|
197
|
+
logger.log(`Migrating ${settings.oauthClients.length} OAuth clients...`);
|
|
197
198
|
for (const client of settings.oauthClients) {
|
|
198
199
|
const exists = await oauthClientRepo.exists(client.clientId);
|
|
199
200
|
if (!exists) {
|
|
@@ -207,16 +208,16 @@ export async function migrateToDatabase() {
|
|
|
207
208
|
owner: client.owner,
|
|
208
209
|
metadata: client.metadata,
|
|
209
210
|
});
|
|
210
|
-
|
|
211
|
+
logger.log(` - Created OAuth client: ${client.clientId}`);
|
|
211
212
|
}
|
|
212
213
|
else {
|
|
213
|
-
|
|
214
|
+
logger.log(` - OAuth client already exists: ${client.clientId}`);
|
|
214
215
|
}
|
|
215
216
|
}
|
|
216
217
|
}
|
|
217
218
|
// Migrate OAuth tokens
|
|
218
219
|
if (settings.oauthTokens && settings.oauthTokens.length > 0) {
|
|
219
|
-
|
|
220
|
+
logger.log(`Migrating ${settings.oauthTokens.length} OAuth tokens...`);
|
|
220
221
|
for (const token of settings.oauthTokens) {
|
|
221
222
|
const exists = await oauthTokenRepo.exists(token.accessToken);
|
|
222
223
|
if (!exists) {
|
|
@@ -231,16 +232,16 @@ export async function migrateToDatabase() {
|
|
|
231
232
|
clientId: token.clientId,
|
|
232
233
|
username: token.username,
|
|
233
234
|
});
|
|
234
|
-
|
|
235
|
+
logger.log(` - Created OAuth token for client: ${token.clientId}`);
|
|
235
236
|
}
|
|
236
237
|
else {
|
|
237
|
-
|
|
238
|
+
logger.log(` - OAuth token already exists: ${token.accessToken.substring(0, 8)}...`);
|
|
238
239
|
}
|
|
239
240
|
}
|
|
240
241
|
}
|
|
241
242
|
// Migrate built-in prompts
|
|
242
243
|
if (settings.prompts && settings.prompts.length > 0) {
|
|
243
|
-
|
|
244
|
+
logger.log(`Migrating ${settings.prompts.length} built-in prompts...`);
|
|
244
245
|
for (const prompt of settings.prompts) {
|
|
245
246
|
const exists = await builtinPromptRepo.findByName(prompt.name);
|
|
246
247
|
if (!exists) {
|
|
@@ -252,16 +253,16 @@ export async function migrateToDatabase() {
|
|
|
252
253
|
arguments: prompt.arguments,
|
|
253
254
|
enabled: prompt.enabled !== false,
|
|
254
255
|
});
|
|
255
|
-
|
|
256
|
+
logger.log(` - Created built-in prompt: ${prompt.name}`);
|
|
256
257
|
}
|
|
257
258
|
else {
|
|
258
|
-
|
|
259
|
+
logger.log(` - Built-in prompt already exists: ${prompt.name}`);
|
|
259
260
|
}
|
|
260
261
|
}
|
|
261
262
|
}
|
|
262
263
|
// Migrate built-in resources
|
|
263
264
|
if (settings.resources && settings.resources.length > 0) {
|
|
264
|
-
|
|
265
|
+
logger.log(`Migrating ${settings.resources.length} built-in resources...`);
|
|
265
266
|
for (const resource of settings.resources) {
|
|
266
267
|
const exists = await builtinResourceRepo.findByUri(resource.uri);
|
|
267
268
|
if (!exists) {
|
|
@@ -273,18 +274,18 @@ export async function migrateToDatabase() {
|
|
|
273
274
|
content: resource.content,
|
|
274
275
|
enabled: resource.enabled !== false,
|
|
275
276
|
});
|
|
276
|
-
|
|
277
|
+
logger.log(` - Created built-in resource: ${resource.uri}`);
|
|
277
278
|
}
|
|
278
279
|
else {
|
|
279
|
-
|
|
280
|
+
logger.log(` - Built-in resource already exists: ${resource.uri}`);
|
|
280
281
|
}
|
|
281
282
|
}
|
|
282
283
|
}
|
|
283
|
-
|
|
284
|
+
logger.log('✅ Migration completed successfully');
|
|
284
285
|
return true;
|
|
285
286
|
}
|
|
286
287
|
catch (error) {
|
|
287
|
-
|
|
288
|
+
logger.error('❌ Migration failed:', error);
|
|
288
289
|
return false;
|
|
289
290
|
}
|
|
290
291
|
}
|
|
@@ -294,32 +295,32 @@ export async function migrateToDatabase() {
|
|
|
294
295
|
*/
|
|
295
296
|
export async function initializeDatabaseMode() {
|
|
296
297
|
try {
|
|
297
|
-
|
|
298
|
+
logger.log('Initializing database mode...');
|
|
298
299
|
// Initialize database connection
|
|
299
300
|
await initializeDatabase();
|
|
300
|
-
|
|
301
|
+
logger.log('Database connection established');
|
|
301
302
|
// Switch to database factory
|
|
302
303
|
setDaoFactory(DatabaseDaoFactory.getInstance());
|
|
303
|
-
|
|
304
|
+
logger.log('Switched to database-backed DAO implementations');
|
|
304
305
|
// Check if migration is needed
|
|
305
306
|
const userRepo = new UserRepository();
|
|
306
307
|
const bearerKeyRepo = new BearerKeyRepository();
|
|
307
308
|
const systemConfigRepo = new SystemConfigRepository();
|
|
308
309
|
const userCount = await userRepo.count();
|
|
309
310
|
if (userCount === 0) {
|
|
310
|
-
|
|
311
|
+
logger.log('No users found in database, running migration...');
|
|
311
312
|
const migrated = await migrateToDatabase();
|
|
312
313
|
if (!migrated) {
|
|
313
314
|
throw new Error('Migration failed');
|
|
314
315
|
}
|
|
315
316
|
}
|
|
316
317
|
else {
|
|
317
|
-
|
|
318
|
+
logger.log(`Database already contains ${userCount} users, skipping migration`);
|
|
318
319
|
// One-time migration for legacy bearer auth config stored inside DB routing settings.
|
|
319
320
|
// If bearerKeys table already has data, do nothing.
|
|
320
321
|
const bearerKeyCount = await bearerKeyRepo.count();
|
|
321
322
|
if (bearerKeyCount > 0) {
|
|
322
|
-
|
|
323
|
+
logger.log(`Bearer keys table already contains ${bearerKeyCount} keys, skipping legacy bearer auth migration`);
|
|
323
324
|
}
|
|
324
325
|
else {
|
|
325
326
|
const systemConfig = await systemConfigRepo.get();
|
|
@@ -336,18 +337,18 @@ export async function initializeDatabaseMode() {
|
|
|
336
337
|
allowedGroups: [],
|
|
337
338
|
allowedServers: [],
|
|
338
339
|
});
|
|
339
|
-
|
|
340
|
+
logger.log(` - Migrated legacy DB routing bearer auth config to key: default (enabled=${enableBearerAuth})`);
|
|
340
341
|
}
|
|
341
342
|
else {
|
|
342
|
-
|
|
343
|
+
logger.log('No legacy DB routing bearer auth key found, skipping bearer key migration');
|
|
343
344
|
}
|
|
344
345
|
}
|
|
345
346
|
}
|
|
346
|
-
|
|
347
|
+
logger.log('✅ Database mode initialized successfully');
|
|
347
348
|
return true;
|
|
348
349
|
}
|
|
349
350
|
catch (error) {
|
|
350
|
-
|
|
351
|
+
logger.error('❌ Failed to initialize database mode:', error);
|
|
351
352
|
return false;
|
|
352
353
|
}
|
|
353
354
|
}
|
|
@@ -355,16 +356,16 @@ export async function initializeDatabaseMode() {
|
|
|
355
356
|
* CLI tool for migration
|
|
356
357
|
*/
|
|
357
358
|
export async function runMigrationCli() {
|
|
358
|
-
|
|
359
|
-
|
|
359
|
+
logger.log('MCPHub Configuration Migration Tool');
|
|
360
|
+
logger.log('====================================\n');
|
|
360
361
|
const success = await migrateToDatabase();
|
|
361
362
|
if (success) {
|
|
362
|
-
|
|
363
|
-
|
|
363
|
+
logger.log('\n✅ Migration completed successfully!');
|
|
364
|
+
logger.log('You can now set USE_DB=true to use database-backed configuration');
|
|
364
365
|
process.exit(0);
|
|
365
366
|
}
|
|
366
367
|
else {
|
|
367
|
-
|
|
368
|
+
logger.log('\n❌ Migration failed!');
|
|
368
369
|
process.exit(1);
|
|
369
370
|
}
|
|
370
371
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/utils/migration.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/utils/migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC 9207 (OAuth 2.0 Authorization Server Issuer Identification) helpers.
|
|
3
|
+
*
|
|
4
|
+
* When MCPHub acts as an OAuth *client* toward upstream MCP servers, the
|
|
5
|
+
* authorization response redirect may carry an `iss` parameter. Per RFC 9207 /
|
|
6
|
+
* SEP-2468 the client must validate it against the issuer it sent the
|
|
7
|
+
* authorization request to before redeeming the code — this closes the
|
|
8
|
+
* authorization-server mix-up attack where a malicious AS's code is replayed
|
|
9
|
+
* at another AS's token endpoint under the same redirect URI.
|
|
10
|
+
*/
|
|
11
|
+
const originOf = (url) => {
|
|
12
|
+
if (!url) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
return new URL(url).origin;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Expected `iss` values for an upstream authorization flow: the explicitly
|
|
24
|
+
* configured issuer plus the origin of the authorization endpoint actually used.
|
|
25
|
+
*/
|
|
26
|
+
export const expectedIssValues = (ctx) => {
|
|
27
|
+
const candidates = [ctx.configuredIssuer, originOf(ctx.authorizationUrl)];
|
|
28
|
+
return [...new Set(candidates.filter((c) => Boolean(c)))];
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Validate the `iss` authorization-response parameter.
|
|
32
|
+
*
|
|
33
|
+
* - Absent `iss` → valid but unchecked (older servers do not send it).
|
|
34
|
+
* - Present `iss` with nothing to compare against → unchecked fail-safe pass,
|
|
35
|
+
* since we cannot establish what the client expected (no mix-up possible
|
|
36
|
+
* when only one AS is involved in a flow keyed by our own state parameter).
|
|
37
|
+
* - Present `iss` → must exactly match one of the expected values.
|
|
38
|
+
*/
|
|
39
|
+
export const validateAuthorizationIss = (ctx) => {
|
|
40
|
+
const { iss } = ctx;
|
|
41
|
+
if (!iss) {
|
|
42
|
+
return { valid: true, checked: false };
|
|
43
|
+
}
|
|
44
|
+
const expected = expectedIssValues(ctx);
|
|
45
|
+
if (expected.length === 0) {
|
|
46
|
+
return { valid: true, checked: false };
|
|
47
|
+
}
|
|
48
|
+
if (expected.includes(iss)) {
|
|
49
|
+
return { valid: true, checked: true };
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
valid: false,
|
|
53
|
+
checked: true,
|
|
54
|
+
reason: 'iss parameter does not match the expected authorization server issuer',
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=oauthIssuer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauthIssuer.js","sourceRoot":"","sources":["../../src/utils/oauthIssuer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH,MAAM,QAAQ,GAAG,CAAC,GAAuB,EAAsB,EAAE;IAC/D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAoC,EAAY,EAAE;IAClF,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,GAAoC,EACf,EAAE;IACvB,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAEpB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACxC,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,uEAAuE;KAChF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request-body handling for OpenAPI tool operations: resolving an operation's
|
|
3
|
+
* declared body content type, advertising it in a model-friendly tool schema,
|
|
4
|
+
* and serializing outgoing bodies per content type (#1078).
|
|
5
|
+
*
|
|
6
|
+
* Schema advertisement (OpenAPIClient.generateInputSchema) and outgoing
|
|
7
|
+
* serialization (OpenAPIClient.callTool) both resolve the operation's body
|
|
8
|
+
* through selectRequestBodyContent so they can never drift apart.
|
|
9
|
+
*/
|
|
10
|
+
// Request-body content types the hub can advertise and serialize, in the order
|
|
11
|
+
// they are preferred when an operation declares several.
|
|
12
|
+
const REQUEST_BODY_CONTENT_TYPE_PRIORITY = [
|
|
13
|
+
'application/json',
|
|
14
|
+
'application/x-www-form-urlencoded',
|
|
15
|
+
'multipart/form-data',
|
|
16
|
+
];
|
|
17
|
+
// Media type keys may carry parameters ('application/json; charset=utf-8');
|
|
18
|
+
// compare on the bare type so those declarations still match.
|
|
19
|
+
function normalizeMediaTypeKey(key) {
|
|
20
|
+
return key.split(';')[0].trim().toLowerCase();
|
|
21
|
+
}
|
|
22
|
+
export function selectRequestBodyContent(requestBody) {
|
|
23
|
+
const content = requestBody?.content;
|
|
24
|
+
if (!content) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
for (const contentType of REQUEST_BODY_CONTENT_TYPE_PRIORITY) {
|
|
28
|
+
const key = Object.keys(content).find((k) => normalizeMediaTypeKey(k) === contentType);
|
|
29
|
+
if (!key) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const mediaType = content[key];
|
|
33
|
+
if (mediaType) {
|
|
34
|
+
return { contentType, mediaType };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
// Rewrites a multipart/form-data body schema for model consumption. Binary
|
|
40
|
+
// fields (`type: string, format: binary`) become plain strings carrying
|
|
41
|
+
// base64-encoded contents, because tool arguments arrive as JSON — a model
|
|
42
|
+
// cannot produce raw bytes. The rewrite must tolerate the circular references
|
|
43
|
+
// SwaggerParser.dereference leaves behind (#959), hence the memoized walk.
|
|
44
|
+
const MULTIPART_BINARY_FIELD_HINT = 'Provide base64-encoded file contents; MCPHub decodes them and uploads the bytes as this file part. An object {content, filename, contentType} may be supplied instead of a bare string to control the uploaded filename and MIME type.';
|
|
45
|
+
export function makeMultipartBodySchemaModelFriendly(schema) {
|
|
46
|
+
const cache = new Map();
|
|
47
|
+
const transform = (node) => {
|
|
48
|
+
if (!node || typeof node !== 'object' || Array.isArray(node)) {
|
|
49
|
+
return node;
|
|
50
|
+
}
|
|
51
|
+
const cached = cache.get(node);
|
|
52
|
+
if (cached !== undefined) {
|
|
53
|
+
return cached;
|
|
54
|
+
}
|
|
55
|
+
const source = node;
|
|
56
|
+
const clone = { ...source };
|
|
57
|
+
cache.set(node, clone);
|
|
58
|
+
if (source.type === 'string' && source.format === 'binary') {
|
|
59
|
+
delete clone.format;
|
|
60
|
+
const ownDescription = typeof source.description === 'string' ? `${source.description.trim()} ` : '';
|
|
61
|
+
clone.description = `${ownDescription}${MULTIPART_BINARY_FIELD_HINT}`;
|
|
62
|
+
}
|
|
63
|
+
if (clone.items) {
|
|
64
|
+
clone.items = transform(clone.items);
|
|
65
|
+
}
|
|
66
|
+
if (clone.additionalProperties && typeof clone.additionalProperties === 'object') {
|
|
67
|
+
clone.additionalProperties = transform(clone.additionalProperties);
|
|
68
|
+
}
|
|
69
|
+
for (const keyword of ['properties', 'patternProperties']) {
|
|
70
|
+
const nested = clone[keyword];
|
|
71
|
+
if (nested && typeof nested === 'object') {
|
|
72
|
+
const transformed = {};
|
|
73
|
+
for (const [key, value] of Object.entries(nested)) {
|
|
74
|
+
transformed[key] = transform(value);
|
|
75
|
+
}
|
|
76
|
+
clone[keyword] = transformed;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
for (const keyword of ['anyOf', 'oneOf', 'allOf', 'prefixItems']) {
|
|
80
|
+
if (Array.isArray(clone[keyword])) {
|
|
81
|
+
clone[keyword] = clone[keyword].map(transform);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return clone;
|
|
85
|
+
};
|
|
86
|
+
return transform(schema);
|
|
87
|
+
}
|
|
88
|
+
const DEFAULT_UPLOAD_FILENAME = 'upload';
|
|
89
|
+
const DEFAULT_UPLOAD_CONTENT_TYPE = 'application/octet-stream';
|
|
90
|
+
const MULTIPART_FILE_DESCRIPTOR_KEYS = new Set(['content', 'filename', 'contentType']);
|
|
91
|
+
// base64 (standard or URL-safe alphabet), whitespace allowed around the value
|
|
92
|
+
const BASE64_PATTERN = /^[A-Za-z0-9+/\-_]+={0,2}$/;
|
|
93
|
+
function decodeBase64FileContents(fieldName, value) {
|
|
94
|
+
const compact = value.replace(/\s+/g, '');
|
|
95
|
+
if (!BASE64_PATTERN.test(compact)) {
|
|
96
|
+
throw new Error(`Multipart field '${fieldName}' must be a base64-encoded string of the file contents`);
|
|
97
|
+
}
|
|
98
|
+
const buffer = Buffer.from(compact, 'base64');
|
|
99
|
+
if (buffer.length === 0) {
|
|
100
|
+
throw new Error(`Multipart field '${fieldName}' does not contain any decodable base64 file contents`);
|
|
101
|
+
}
|
|
102
|
+
return buffer;
|
|
103
|
+
}
|
|
104
|
+
function appendMultipartField(parts, name, value, isBinaryField) {
|
|
105
|
+
if (value === undefined || value === null) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Arrays expand into repeated parts, matching how form fields repeat keys.
|
|
109
|
+
if (Array.isArray(value)) {
|
|
110
|
+
for (const item of value) {
|
|
111
|
+
appendMultipartField(parts, name, item, isBinaryField);
|
|
112
|
+
}
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (isBinaryField) {
|
|
116
|
+
let contents;
|
|
117
|
+
let filename;
|
|
118
|
+
let contentType;
|
|
119
|
+
if (typeof value === 'string') {
|
|
120
|
+
contents = value;
|
|
121
|
+
}
|
|
122
|
+
else if (typeof value === 'object' &&
|
|
123
|
+
typeof value.content === 'string') {
|
|
124
|
+
const descriptor = value;
|
|
125
|
+
contents = descriptor.content;
|
|
126
|
+
if (typeof descriptor.filename === 'string') {
|
|
127
|
+
filename = descriptor.filename;
|
|
128
|
+
}
|
|
129
|
+
if (typeof descriptor.contentType === 'string') {
|
|
130
|
+
contentType = descriptor.contentType;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
throw new Error(`Multipart field '${name}' expects a base64-encoded string or an object {content, filename, contentType}`);
|
|
135
|
+
}
|
|
136
|
+
parts.push({
|
|
137
|
+
name,
|
|
138
|
+
value: decodeBase64FileContents(name, contents),
|
|
139
|
+
filename: filename ?? DEFAULT_UPLOAD_FILENAME,
|
|
140
|
+
contentType: contentType ?? DEFAULT_UPLOAD_CONTENT_TYPE,
|
|
141
|
+
});
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// Defensive: honor explicit file descriptors even when the spec did not mark
|
|
145
|
+
// the field binary, then fall back to text serialization.
|
|
146
|
+
if (typeof value === 'object') {
|
|
147
|
+
const record = value;
|
|
148
|
+
if (typeof record.content === 'string' &&
|
|
149
|
+
Object.keys(record).every((key) => MULTIPART_FILE_DESCRIPTOR_KEYS.has(key))) {
|
|
150
|
+
appendMultipartField(parts, name, value, true);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
parts.push({ name, value: JSON.stringify(record) });
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
parts.push({ name, value: String(value) });
|
|
157
|
+
}
|
|
158
|
+
export function buildMultipartParts(bodyValue, schema) {
|
|
159
|
+
if (!bodyValue || typeof bodyValue !== 'object' || Array.isArray(bodyValue)) {
|
|
160
|
+
throw new Error('multipart/form-data request body must be provided as an object of form fields');
|
|
161
|
+
}
|
|
162
|
+
const properties = schema?.properties;
|
|
163
|
+
const isBinaryField = (name) => {
|
|
164
|
+
const propertySchema = properties?.[name];
|
|
165
|
+
return !!propertySchema && propertySchema.type === 'string' && propertySchema.format === 'binary';
|
|
166
|
+
};
|
|
167
|
+
const parts = [];
|
|
168
|
+
for (const [name, value] of Object.entries(bodyValue)) {
|
|
169
|
+
appendMultipartField(parts, name, value, isBinaryField(name));
|
|
170
|
+
}
|
|
171
|
+
return parts;
|
|
172
|
+
}
|
|
173
|
+
// Quotes/newlines in part names or filenames would corrupt the multipart
|
|
174
|
+
// framing; replace them rather than trusting upstream spec names.
|
|
175
|
+
function sanitizeHeaderToken(token) {
|
|
176
|
+
return token.replace(/[\r\n"]/g, '_');
|
|
177
|
+
}
|
|
178
|
+
export function serializeMultipartBody(parts, boundary) {
|
|
179
|
+
const chunks = [];
|
|
180
|
+
for (const part of parts) {
|
|
181
|
+
chunks.push(Buffer.from(`--${boundary}\r\n`, 'utf8'));
|
|
182
|
+
if (part.filename !== undefined) {
|
|
183
|
+
chunks.push(Buffer.from(`Content-Disposition: form-data; name="${sanitizeHeaderToken(part.name)}"; filename="${sanitizeHeaderToken(part.filename)}"\r\n`, 'utf8'));
|
|
184
|
+
chunks.push(Buffer.from(`Content-Type: ${part.contentType ?? DEFAULT_UPLOAD_CONTENT_TYPE}\r\n\r\n`, 'utf8'));
|
|
185
|
+
chunks.push(part.value);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
chunks.push(Buffer.from(`Content-Disposition: form-data; name="${sanitizeHeaderToken(part.name)}"\r\n\r\n`, 'utf8'));
|
|
189
|
+
chunks.push(Buffer.from(String(part.value), 'utf8'));
|
|
190
|
+
}
|
|
191
|
+
chunks.push(Buffer.from('\r\n', 'utf8'));
|
|
192
|
+
}
|
|
193
|
+
chunks.push(Buffer.from(`--${boundary}--\r\n`, 'utf8'));
|
|
194
|
+
return Buffer.concat(chunks);
|
|
195
|
+
}
|
|
196
|
+
// Serializes an application/x-www-form-urlencoded body: arrays become repeated
|
|
197
|
+
// keys, nested objects are JSON-stringified, primitives use their string form.
|
|
198
|
+
export function encodeFormUrlEncoded(bodyValue) {
|
|
199
|
+
if (!bodyValue || typeof bodyValue !== 'object' || Array.isArray(bodyValue)) {
|
|
200
|
+
throw new Error('application/x-www-form-urlencoded request body must be provided as an object of form fields');
|
|
201
|
+
}
|
|
202
|
+
const params = new URLSearchParams();
|
|
203
|
+
const append = (key, value) => {
|
|
204
|
+
if (value === undefined || value === null) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
if (Array.isArray(value)) {
|
|
208
|
+
for (const item of value) {
|
|
209
|
+
append(key, item);
|
|
210
|
+
}
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
params.append(key, typeof value === 'object' ? JSON.stringify(value) : String(value));
|
|
214
|
+
};
|
|
215
|
+
for (const [key, value] of Object.entries(bodyValue)) {
|
|
216
|
+
append(key, value);
|
|
217
|
+
}
|
|
218
|
+
return params.toString();
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=openApiRequestBody.js.map
|