Skip to content

Commit f2dce24

Browse files
chore: untangle driverOptions from config
1 parent 8498907 commit f2dce24

File tree

8 files changed

+42
-54
lines changed

8 files changed

+42
-54
lines changed

src/common/config.ts

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import argv from "yargs-parser";
2-
import type { CliOptions, ConnectionInfo } from "@mongosh/arg-parser";
2+
import type { CliOptions } from "@mongosh/arg-parser";
33
import { generateConnectionInfoFromCliArgs } from "@mongosh/arg-parser";
44
import { Keychain } from "./keychain.js";
55
import type { Secret } from "./keychain.js";
@@ -183,20 +183,6 @@ export const config = setupUserConfig({
183183
env: process.env,
184184
});
185185

186-
export type DriverOptions = ConnectionInfo["driverOptions"];
187-
export const defaultDriverOptions: DriverOptions = {
188-
readConcern: {
189-
level: "local",
190-
},
191-
readPreference: "secondaryPreferred",
192-
writeConcern: {
193-
w: "majority",
194-
},
195-
timeoutMS: 30_000,
196-
proxy: { useEnvironmentVariableProxies: true },
197-
applyProxyToOIDC: true,
198-
};
199-
200186
// Gets the config supplied by the user as environment variables. The variable names
201187
// are prefixed with `MDB_MCP_` and the keys match the UserConfig keys, but are converted
202188
// to SNAKE_UPPER_CASE.
@@ -414,17 +400,3 @@ export function setupUserConfig({ cli, env }: { cli: string[]; env: Record<strin
414400
registerKnownSecretsInRootKeychain(userConfig);
415401
return userConfig;
416402
}
417-
418-
export function setupDriverConfig({
419-
config,
420-
defaults,
421-
}: {
422-
config: UserConfig;
423-
defaults: Partial<DriverOptions>;
424-
}): DriverOptions {
425-
const { driverOptions } = generateConnectionInfoFromCliArgs(config);
426-
return {
427-
...defaults,
428-
...driverOptions,
429-
};
430-
}

src/common/config/driverOptions.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { generateConnectionInfoFromCliArgs, type ConnectionInfo } from "@mongosh/arg-parser";
2+
import type { UserConfig } from "../config.js";
3+
4+
export type DriverOptions = ConnectionInfo["driverOptions"];
5+
export const defaultDriverOptions: DriverOptions = {
6+
readConcern: {
7+
level: "local",
8+
},
9+
readPreference: "secondaryPreferred",
10+
writeConcern: {
11+
w: "majority",
12+
},
13+
timeoutMS: 30_000,
14+
proxy: { useEnvironmentVariableProxies: true },
15+
applyProxyToOIDC: true,
16+
};
17+
18+
export function createDriverOptions(
19+
config: UserConfig,
20+
defaults: Partial<DriverOptions> = defaultDriverOptions
21+
): DriverOptions {
22+
const { driverOptions } = generateConnectionInfoFromCliArgs(config);
23+
return {
24+
...defaults,
25+
...driverOptions,
26+
};
27+
}

src/common/connectionManager.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import { ConnectionString } from "mongodb-connection-string-url";
44
import { NodeDriverServiceProvider } from "@mongosh/service-provider-node-driver";
55
import { type ConnectionInfo, generateConnectionInfoFromCliArgs } from "@mongosh/arg-parser";
66
import type { DeviceId } from "../helpers/deviceId.js";
7-
import { defaultDriverOptions, setupDriverConfig, type DriverOptions, type UserConfig } from "./config.js";
7+
import { createDriverOptions, type DriverOptions } from "./config/driverOptions.js";
8+
import { type UserConfig } from "./config.js";
89
import { MongoDBError, ErrorCodes } from "./errors.js";
910
import { type LoggerBase, LogId } from "./logger.js";
1011
import { packageInfo } from "./packageInfo.js";
@@ -394,10 +395,7 @@ export type ConnectionManagerFactoryFn = (createParams: {
394395
}) => Promise<ConnectionManager>;
395396

396397
export const createMCPConnectionManager: ConnectionManagerFactoryFn = ({ logger, deviceId, userConfig }) => {
397-
const driverOptions = setupDriverConfig({
398-
config: userConfig,
399-
defaults: defaultDriverOptions,
400-
});
398+
const driverOptions = createDriverOptions(userConfig);
401399

402400
return Promise.resolve(new MCPConnectionManager(userConfig, driverOptions, logger, deviceId));
403401
};

src/resources/common/config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ReactiveResource } from "../resource.js";
2-
import { defaultDriverOptions } from "../../common/config.js";
2+
import { createDriverOptions } from "../../common/config/driverOptions.js";
33
import type { UserConfig } from "../../common/config.js";
44
import type { Telemetry } from "../../telemetry/telemetry.js";
55
import type { Session } from "../../lib.js";
@@ -38,7 +38,7 @@ export class ConfigResource extends ReactiveResource<UserConfig, readonly []> {
3838
connectionString: this.current.connectionString
3939
? "set; access to MongoDB tools are currently available to use"
4040
: "not set; before using any MongoDB tool, you need to configure a connection string, alternatively you can setup MongoDB Atlas access, more info at 'https://github.com/mongodb-js/mongodb-mcp-server'.",
41-
connectOptions: defaultDriverOptions,
41+
connectOptions: createDriverOptions(this.config),
4242
atlas:
4343
this.current.apiClientId && this.current.apiClientSecret
4444
? "set; MongoDB Atlas tools are currently available to use"

tests/integration/common/connectionManager.oidc.test.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { describeWithMongoDB, isCommunityServer, getServerVersion } from "../too
77
import { defaultTestConfig, responseAsText, timeout, waitUntil } from "../helpers.js";
88
import type { ConnectionStateConnected, ConnectionStateConnecting } from "../../../src/common/connectionManager.js";
99
import type { UserConfig } from "../../../src/common/config.js";
10-
import { setupDriverConfig } from "../../../src/common/config.js";
10+
import { createDriverOptions } from "../../../src/common/config/driverOptions.js";
1111
import path from "path";
1212
import type { OIDCMockProviderConfig } from "@mongodb-js/oidc-mock-provider";
1313
import { OIDCMockProvider } from "@mongodb-js/oidc-mock-provider";
@@ -142,11 +142,7 @@ describe.skipIf(process.platform !== "linux")("ConnectionManager OIDC Tests", as
142142
},
143143
{
144144
getUserConfig: () => oidcConfig,
145-
getDriverOptions: () =>
146-
setupDriverConfig({
147-
config: oidcConfig,
148-
defaults: {},
149-
}),
145+
getDriverOptions: () => createDriverOptions(oidcConfig),
150146
downloadOptions: {
151147
runner: true,
152148
downloadOptions: { enterprise: true, version: mongodbVersion },

tests/integration/helpers.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,9 @@ import { Telemetry } from "../../src/telemetry/telemetry.js";
66
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
77
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
88
import { InMemoryTransport } from "./inMemoryTransport.js";
9-
import type { UserConfig, DriverOptions } from "../../src/common/config.js";
9+
import { type UserConfig, config } from "../../src/common/config.js";
10+
import { type DriverOptions, createDriverOptions } from "../../src/common/config/driverOptions.js";
1011
import { McpError, ResourceUpdatedNotificationSchema } from "@modelcontextprotocol/sdk/types.js";
11-
import {
12-
config,
13-
setupDriverConfig,
14-
defaultDriverOptions as defaultDriverOptionsFromConfig,
15-
} from "../../src/common/config.js";
1612
import { afterAll, afterEach, beforeAll, describe, expect, it, vi } from "vitest";
1713
import type { ConnectionManager, ConnectionState } from "../../src/common/connectionManager.js";
1814
import { MCPConnectionManager } from "../../src/common/connectionManager.js";
@@ -24,10 +20,7 @@ import type { MockClientCapabilities, createMockElicitInput } from "../utils/eli
2420
import { VectorSearchEmbeddingsManager } from "../../src/common/search/vectorSearchEmbeddingsManager.js";
2521
import { defaultCreateAtlasLocalClient } from "../../src/common/atlasLocal.js";
2622

27-
export const driverOptions = setupDriverConfig({
28-
config,
29-
defaults: defaultDriverOptionsFromConfig,
30-
});
23+
export const driverOptions = createDriverOptions(config);
3124

3225
export const defaultDriverOptions: DriverOptions = { ...driverOptions };
3326

tests/integration/tools/mongodb/mongodbHelpers.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ import {
1111
defaultDriverOptions,
1212
getDataFromUntrustedContent,
1313
} from "../../helpers.js";
14-
import type { UserConfig, DriverOptions } from "../../../../src/common/config.js";
14+
import type { UserConfig } from "../../../../src/common/config.js";
15+
import type { DriverOptions } from "../../../../src/common/config/driverOptions.js";
1516
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
1617
import { EJSON } from "bson";
1718
import { MongoDBClusterProcess } from "./mongodbClusterProcess.js";

tests/integration/tools/mongodb/mongodbTool.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
44
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
55
import { MongoDBToolBase } from "../../../../src/tools/mongodb/mongodbTool.js";
66
import { type ToolBase, type ToolConstructorParams, type OperationType } from "../../../../src/tools/tool.js";
7-
import { defaultDriverOptions, type UserConfig } from "../../../../src/common/config.js";
7+
import { type UserConfig } from "../../../../src/common/config.js";
8+
import { defaultDriverOptions } from "../../../../src/common/config/driverOptions.js";
89
import { MCPConnectionManager } from "../../../../src/common/connectionManager.js";
910
import { Session } from "../../../../src/common/session.js";
1011
import { CompositeLogger } from "../../../../src/common/logger.js";

0 commit comments

Comments
 (0)