From 2aea7be8d83a51681d8173dc80be14abfbd50ac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Fri, 31 Oct 2025 13:24:10 +0100 Subject: [PATCH 1/3] Bump mongodb-build-info to 1.8.1 --- package-lock.json | 44 ++++++++++++++++----- packages/service-provider-core/package.json | 2 +- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index af8fb80fd..c2883e79a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25812,15 +25812,6 @@ } } }, - "node_modules/mongodb-build-info": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/mongodb-build-info/-/mongodb-build-info-1.7.2.tgz", - "integrity": "sha512-eoLFZvCIjcwijYJdxvYupj1c+55VAVm0o4gBJjrcDxxmmpm+bC4Ix9ayZbyhQdVXDZAGDi03NA0GghXjBVXnxg==", - "license": "Apache-2.0", - "dependencies": { - "mongodb-connection-string-url": "^3.0.0" - } - }, "node_modules/mongodb-client-encryption": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-6.5.0.tgz", @@ -36193,7 +36184,7 @@ "@mongosh/shell-bson": "1.0.2", "bson": "^6.10.4", "mongodb": "^6.19.0", - "mongodb-build-info": "^1.7.2", + "mongodb-build-info": "^1.8.1", "mongodb-connection-string-url": "^3.0.2" }, "devDependencies": { @@ -36208,6 +36199,39 @@ "node": ">=14.15.1" } }, + "packages/service-provider-core/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "packages/service-provider-core/node_modules/mongodb-build-info": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/mongodb-build-info/-/mongodb-build-info-1.8.1.tgz", + "integrity": "sha512-O6bWoFnDRyDS/ki9cTkYqh2EWITYAqnVrkaGWhbEVuzDhqoNYLtMgukEyusmsJV+5wpO3lAUiyBbKNq1g4vl3g==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.0", + "mongodb-connection-string-url": "^3.0.0" + } + }, + "packages/service-provider-core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "packages/service-provider-node-driver": { "name": "@mongosh/service-provider-node-driver", "version": "3.17.3", diff --git a/packages/service-provider-core/package.json b/packages/service-provider-core/package.json index 5f6971b40..556bf5cc7 100644 --- a/packages/service-provider-core/package.json +++ b/packages/service-provider-core/package.json @@ -40,7 +40,7 @@ "@mongosh/shell-bson": "1.0.2", "bson": "^6.10.4", "mongodb": "^6.19.0", - "mongodb-build-info": "^1.7.2", + "mongodb-build-info": "^1.8.1", "mongodb-connection-string-url": "^3.0.2" }, "devDependencies": { From 02f8b80f05d883b0e2d260b19976cc6333648056 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Fri, 31 Oct 2025 13:24:40 +0100 Subject: [PATCH 2/3] Map null to undefined to match types --- packages/service-provider-core/src/connect-info.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/service-provider-core/src/connect-info.ts b/packages/service-provider-core/src/connect-info.ts index 62601974d..bab6595e9 100644 --- a/packages/service-provider-core/src/connect-info.ts +++ b/packages/service-provider-core/src/connect-info.ts @@ -80,11 +80,10 @@ export default function getConnectExtraInfo({ const { isGenuine: is_genuine, serverName: non_genuine_server_name } = getBuildInfo.getGenuineMongoDB(uri); // Atlas Data Lake has been renamed to Atlas Data Federation - const { isDataLake: is_data_federation, dlVersion: dl_version } = + const { isDataLake: is_data_federation, dlVersion } = getBuildInfo.getDataLake(buildInfo); - const { serverOs: server_os, serverArch: server_arch } = - getBuildInfo.getBuildEnv(buildInfo); + const { serverOs, serverArch } = getBuildInfo.getBuildEnv(buildInfo); const isAtlas = !!atlasVersion?.atlasVersion || getBuildInfo.isAtlas(uri); return { @@ -92,14 +91,14 @@ export default function getConnectExtraInfo({ is_atlas: isAtlas, server_version: buildInfo.version, node_version: process.version, - server_os, + server_os: serverOs || undefined, uri, - server_arch, + server_arch: serverArch || undefined, is_enterprise: getBuildInfo.isEnterprise(buildInfo), auth_type, is_data_federation, is_stream: getBuildInfo.isAtlasStream(uri), - dl_version, + dl_version: dlVersion || undefined, atlas_version: atlasVersion?.atlasVersion ?? null, is_genuine, non_genuine_server_name, From 0658657a8cca0eb0ea4a0ef70e83aa912eaebe04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Fri, 31 Oct 2025 16:32:41 +0100 Subject: [PATCH 3/3] Add call to identifyServerName in service-provider-node-driver --- package-lock.json | 67 ++++++++++--------- .../src/connect-info.spec.ts | 19 ++++-- .../service-provider-core/src/connect-info.ts | 10 +-- .../service-provider-node-driver/package.json | 1 + .../src/node-driver-service-provider.spec.ts | 2 +- .../src/node-driver-service-provider.ts | 64 ++++++++++++------ 6 files changed, 96 insertions(+), 67 deletions(-) diff --git a/package-lock.json b/package-lock.json index c2883e79a..5113a3ef5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25812,6 +25812,39 @@ } } }, + "node_modules/mongodb-build-info": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/mongodb-build-info/-/mongodb-build-info-1.8.1.tgz", + "integrity": "sha512-O6bWoFnDRyDS/ki9cTkYqh2EWITYAqnVrkaGWhbEVuzDhqoNYLtMgukEyusmsJV+5wpO3lAUiyBbKNq1g4vl3g==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.0", + "mongodb-connection-string-url": "^3.0.0" + } + }, + "node_modules/mongodb-build-info/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mongodb-build-info/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/mongodb-client-encryption": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-6.5.0.tgz", @@ -36199,39 +36232,6 @@ "node": ">=14.15.1" } }, - "packages/service-provider-core/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "packages/service-provider-core/node_modules/mongodb-build-info": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/mongodb-build-info/-/mongodb-build-info-1.8.1.tgz", - "integrity": "sha512-O6bWoFnDRyDS/ki9cTkYqh2EWITYAqnVrkaGWhbEVuzDhqoNYLtMgukEyusmsJV+5wpO3lAUiyBbKNq1g4vl3g==", - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.4.0", - "mongodb-connection-string-url": "^3.0.0" - } - }, - "packages/service-provider-core/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, "packages/service-provider-node-driver": { "name": "@mongosh/service-provider-node-driver", "version": "3.17.3", @@ -36244,6 +36244,7 @@ "@mongosh/types": "^3.14.0", "aws4": "^1.12.0", "mongodb": "^6.19.0", + "mongodb-build-info": "^1.8.1", "mongodb-connection-string-url": "^3.0.2", "socks": "^2.8.3" }, diff --git a/packages/service-provider-core/src/connect-info.spec.ts b/packages/service-provider-core/src/connect-info.spec.ts index 6fba89481..16b7b1956 100644 --- a/packages/service-provider-core/src/connect-info.spec.ts +++ b/packages/service-provider-core/src/connect-info.spec.ts @@ -64,7 +64,7 @@ describe('getConnectInfo', function () { auth_type: 'PLAIN', is_data_federation: false, is_stream: false, - dl_version: null, + dl_version: undefined, atlas_version: '20210330.0.0.1617063608', is_genuine: true, non_genuine_server_name: 'mongodb', @@ -81,6 +81,7 @@ describe('getConnectInfo', function () { atlasVersion: ATLAS_VERSION, resolvedHostname: 'test-data-sets-00-02-a011bb.mongodb.net', isLocalAtlas: false, + serverName: 'mongodb', }) ).to.deep.equal(output); }); @@ -96,7 +97,7 @@ describe('getConnectInfo', function () { auth_type: undefined, is_data_federation: false, is_stream: false, - dl_version: null, + dl_version: undefined, atlas_version: '20210330.0.0.1617063608', is_genuine: true, non_genuine_server_name: 'mongodb', @@ -113,6 +114,7 @@ describe('getConnectInfo', function () { atlasVersion: ATLAS_VERSION, resolvedHostname: 'test-data-sets-00-02-a011bb.mongodb.net', isLocalAtlas: false, + serverName: 'mongodb', }) ).to.deep.equal(output); }); @@ -130,7 +132,7 @@ describe('getConnectInfo', function () { auth_type: undefined, is_data_federation: false, is_stream: true, - dl_version: null, + dl_version: undefined, atlas_version: null, is_genuine: true, is_local_atlas: false, @@ -148,6 +150,7 @@ describe('getConnectInfo', function () { resolvedHostname: 'atlas-stream-67b8e1cd6d60357be377be7b-1dekw.virginia-usa.a.query.mongodb-dev.net', isLocalAtlas: false, + serverName: 'mongodb', }) ).to.deep.equal(output); }); @@ -163,7 +166,7 @@ describe('getConnectInfo', function () { auth_type: undefined, is_data_federation: false, is_stream: false, - dl_version: null, + dl_version: undefined, atlas_version: null, is_genuine: true, non_genuine_server_name: 'mongodb', @@ -179,6 +182,7 @@ describe('getConnectInfo', function () { atlasVersion: null, resolvedHostname: 'localhost', isLocalAtlas: true, + serverName: 'mongodb', }) ).to.deep.equal(output); }); @@ -194,13 +198,13 @@ describe('getConnectInfo', function () { auth_type: undefined, is_data_federation: false, is_stream: false, - dl_version: null, + dl_version: undefined, atlas_version: null, is_genuine: true, non_genuine_server_name: 'mongodb', - server_arch: null, node_version: process.version, - server_os: null, + server_os: undefined, + server_arch: undefined, uri: '', is_local_atlas: false, }; @@ -209,6 +213,7 @@ describe('getConnectInfo', function () { buildInfo: null, atlasVersion: null, isLocalAtlas: false, + serverName: 'mongodb', }) ).to.deep.equal(output); }); diff --git a/packages/service-provider-core/src/connect-info.ts b/packages/service-provider-core/src/connect-info.ts index bab6595e9..7c608556c 100644 --- a/packages/service-provider-core/src/connect-info.ts +++ b/packages/service-provider-core/src/connect-info.ts @@ -1,6 +1,6 @@ // ^ segment data is in snake_case: forgive me javascript, for i have sinned. -import getBuildInfo from 'mongodb-build-info'; +import * as getBuildInfo from 'mongodb-build-info'; import type { ConnectionString } from 'mongodb-connection-string-url'; export type ConnectionExtraInfo = { @@ -65,20 +65,20 @@ export default function getConnectExtraInfo({ atlasVersion, resolvedHostname, isLocalAtlas, + serverName = 'unknown', }: { connectionString?: ConnectionString; buildInfo: any; atlasVersion: any; resolvedHostname?: string; isLocalAtlas: boolean; + serverName?: string; }): ConnectionExtraInfo { const auth_type = connectionString?.searchParams.get('authMechanism') ?? undefined; const uri = connectionString?.toString() ?? ''; buildInfo ??= {}; // We're currently not getting buildInfo with --apiStrict. - const { isGenuine: is_genuine, serverName: non_genuine_server_name } = - getBuildInfo.getGenuineMongoDB(uri); // Atlas Data Lake has been renamed to Atlas Data Federation const { isDataLake: is_data_federation, dlVersion } = getBuildInfo.getDataLake(buildInfo); @@ -100,8 +100,8 @@ export default function getConnectExtraInfo({ is_stream: getBuildInfo.isAtlasStream(uri), dl_version: dlVersion || undefined, atlas_version: atlasVersion?.atlasVersion ?? null, - is_genuine, - non_genuine_server_name, + is_genuine: serverName === 'mongodb' || serverName === 'unknown', + non_genuine_server_name: serverName, is_local_atlas: isLocalAtlas, }; } diff --git a/packages/service-provider-node-driver/package.json b/packages/service-provider-node-driver/package.json index a2fd5ed4e..3fc921261 100644 --- a/packages/service-provider-node-driver/package.json +++ b/packages/service-provider-node-driver/package.json @@ -54,6 +54,7 @@ "@mongosh/types": "^3.14.0", "aws4": "^1.12.0", "mongodb": "^6.19.0", + "mongodb-build-info": "^1.8.1", "mongodb-connection-string-url": "^3.0.2", "socks": "^2.8.3", "mongodb-client-encryption": "^6.5.0", diff --git a/packages/service-provider-node-driver/src/node-driver-service-provider.spec.ts b/packages/service-provider-node-driver/src/node-driver-service-provider.spec.ts index aa5bd3da2..f90e37a71 100644 --- a/packages/service-provider-node-driver/src/node-driver-service-provider.spec.ts +++ b/packages/service-provider-node-driver/src/node-driver-service-provider.spec.ts @@ -1007,7 +1007,7 @@ describe('NodeDriverServiceProvider', function () { expect(info.extraInfo?.is_local_atlas).to.equal(false); expect(info.extraInfo?.is_localhost).to.equal(true); expect(info.extraInfo?.fcv).to.equal(undefined); - expect(dbStub.command).to.have.callCount(3); + expect(dbStub.command).to.have.callCount(4); expect( dbStub.collection, 'calls countDocument on collection to check local atlas cli support' diff --git a/packages/service-provider-node-driver/src/node-driver-service-provider.ts b/packages/service-provider-node-driver/src/node-driver-service-provider.ts index 8f3921a2a..05a5c703d 100644 --- a/packages/service-provider-node-driver/src/node-driver-service-provider.ts +++ b/packages/service-provider-node-driver/src/node-driver-service-provider.ts @@ -93,6 +93,7 @@ import { ClientEncryption, } from 'mongodb'; import { connectMongoClient } from '@mongodb-js/devtools-connect'; +import { identifyServerName } from 'mongodb-build-info'; const bsonlib = () => { const { @@ -472,27 +473,47 @@ export class NodeDriverServiceProvider } async getConnectionInfo(): Promise { - const [buildInfo = null, atlasVersion = null, fcv = null, atlascliInfo] = - await Promise.all([ - this.runCommandWithCheck( - 'admin', - { buildInfo: 1 }, - this.baseCmdOptions - ).catch(() => {}), - this.runCommandWithCheck( - 'admin', - { atlasVersion: 1 }, - this.baseCmdOptions - ).catch(() => {}), - this.runCommandWithCheck( - 'admin', - { getParameter: 1, featureCompatibilityVersion: 1 }, - this.baseCmdOptions - ).catch(() => {}), - this.countDocuments('admin', 'atlascli', { - managedClusterType: 'atlasCliLocalDevCluster', - }).catch(() => 0), - ]); + const buildInfoPromise = this.runCommandWithCheck( + 'admin', + { buildInfo: 1 }, + this.baseCmdOptions + ).catch(() => ({})); + + const [ + buildInfo, + atlasVersion = null, + fcv = null, + atlascliInfo, + serverName, + ] = await Promise.all([ + buildInfoPromise, + this.runCommandWithCheck( + 'admin', + { atlasVersion: 1 }, + this.baseCmdOptions + ).catch(() => {}), + this.runCommandWithCheck( + 'admin', + { getParameter: 1, featureCompatibilityVersion: 1 }, + this.baseCmdOptions + ).catch(() => {}), + this.countDocuments('admin', 'atlascli', { + managedClusterType: 'atlasCliLocalDevCluster', + }).catch(() => 0), + identifyServerName({ + connectionString: this.uri?.toString() ?? '', + adminCommand: (command) => { + if (command.buildInfo) { + return buildInfoPromise; + } + return this.runCommandWithCheck( + 'admin', + command, + this.baseCmdOptions + ); + }, + }), + ]); const resolvedHostname = this._getHostnameForConnection( this._lastSeenTopology @@ -504,6 +525,7 @@ export class NodeDriverServiceProvider atlasVersion, resolvedHostname, isLocalAtlas: !!atlascliInfo, + serverName, }); return {