From 8b1de0a9fb3fb038f1f67a6257890b565a2e6739 Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Fri, 21 Nov 2025 20:36:12 -0500 Subject: [PATCH 1/8] chore(compass-web): build devtools-connect into compass web COMPASS-9793 --- package-lock.json | 42 +++++++++++++++++++ packages/compass-web/.depcheckrc | 1 + .../devtools-connect-original.d.ts | 3 ++ .../@mongodb-js/devtools-connect/index.ts | 28 +++++++------ .../devtools-proxy-support/index.ts | 16 ++++--- .../@mongodb-js/oidc-plugin/index.ts | 10 +++++ packages/compass-web/polyfills/net/index.ts | 8 ++-- .../polyfills/os-dns-native/index.ts | 7 ++++ packages/compass-web/webpack.config.js | 13 ++++-- 9 files changed, 103 insertions(+), 25 deletions(-) create mode 100644 packages/compass-web/polyfills/@mongodb-js/devtools-connect/devtools-connect-original.d.ts create mode 100644 packages/compass-web/polyfills/@mongodb-js/oidc-plugin/index.ts create mode 100644 packages/compass-web/polyfills/os-dns-native/index.ts diff --git a/package-lock.json b/package-lock.json index bdc99fb6d24..ecea8017ec7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51700,6 +51700,31 @@ "react-dom": "^17.0.2" } }, + "packages/compass-web/node_modules/@mongodb-js/devtools-connect": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.10.0.tgz", + "integrity": "sha512-RcHUT/vyhMz7dJ8IWwRu6AHJXDHoq7xRXNIbHtTAJSEgqbvo5megx6JdTx08LDFZitO0sn5mwPFHRGA3FsFPDQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/devtools-proxy-support": "^0.5.5", + "@mongodb-js/oidc-http-server-pages": "1.1.8", + "lodash.merge": "^4.6.2", + "mongodb-connection-string-url": "^3.0.0", + "socks": "^2.7.3" + }, + "optionalDependencies": { + "kerberos": "^2.1.0", + "mongodb-client-encryption": "^6.1.0", + "os-dns-native": "^1.2.0", + "resolve-mongodb-srv": "^1.1.1" + }, + "peerDependencies": { + "@mongodb-js/oidc-plugin": "^2.0.0", + "mongodb": "^6.9.0", + "mongodb-log-writer": "^2.4.4" + } + }, "packages/compass-web/node_modules/@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", @@ -64129,6 +64154,23 @@ "ws": "^8.16.0" }, "dependencies": { + "@mongodb-js/devtools-connect": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.10.0.tgz", + "integrity": "sha512-RcHUT/vyhMz7dJ8IWwRu6AHJXDHoq7xRXNIbHtTAJSEgqbvo5megx6JdTx08LDFZitO0sn5mwPFHRGA3FsFPDQ==", + "dev": true, + "requires": { + "@mongodb-js/devtools-proxy-support": "^0.5.5", + "@mongodb-js/oidc-http-server-pages": "1.1.8", + "kerberos": "^2.1.0", + "lodash.merge": "^4.6.2", + "mongodb-client-encryption": "^6.1.0", + "mongodb-connection-string-url": "^3.0.0", + "os-dns-native": "^1.2.0", + "resolve-mongodb-srv": "^1.1.1", + "socks": "^2.7.3" + } + }, "@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", diff --git a/packages/compass-web/.depcheckrc b/packages/compass-web/.depcheckrc index 15781132757..3a6217f0081 100644 --- a/packages/compass-web/.depcheckrc +++ b/packages/compass-web/.depcheckrc @@ -8,6 +8,7 @@ ignores: - '@types/chai-dom' - '@types/react' - '@types/react-dom' + - 'devtools-connect-original' # Used in electron-proxy through @ts-check, but depcheckrc can't detect it - '@types/express-http-proxy' # Used in webpack config as polyfills, depcheck can't detect that because of `/` diff --git a/packages/compass-web/polyfills/@mongodb-js/devtools-connect/devtools-connect-original.d.ts b/packages/compass-web/polyfills/@mongodb-js/devtools-connect/devtools-connect-original.d.ts new file mode 100644 index 00000000000..c73689119b0 --- /dev/null +++ b/packages/compass-web/polyfills/@mongodb-js/devtools-connect/devtools-connect-original.d.ts @@ -0,0 +1,3 @@ +declare module 'devtools-connect-original' { + export * from '@mongodb-js/devtools-connect'; +} diff --git a/packages/compass-web/polyfills/@mongodb-js/devtools-connect/index.ts b/packages/compass-web/polyfills/@mongodb-js/devtools-connect/index.ts index 046692f9a4e..f89668a7405 100644 --- a/packages/compass-web/polyfills/@mongodb-js/devtools-connect/index.ts +++ b/packages/compass-web/polyfills/@mongodb-js/devtools-connect/index.ts @@ -1,6 +1,10 @@ +import * as devtools_connect from 'devtools-connect-original'; +import { createMongoDBOIDCPlugin } from '../oidc-plugin'; + export function hookLogger() { /* no-op */ } + export async function connectMongoClient( url: string, options: any, @@ -16,23 +20,21 @@ export async function connectMongoClient( delete options.parentState; delete options.parentHandle; options.__skipPingOnConnect = true; - const client = new MongoClient(url, options); - await client.connect(); + const { client } = await devtools_connect.connectMongoClient( + url, + options, + logger, + MongoClient + ); return { client, state: { - getStateShareServer() { - return Promise.resolve('Not Available'); - }, - oidcPlugin: { - logger, - serialize() { - return Promise.resolve(undefined); - }, - }, - destroy() { - return Promise.resolve(); + // eslint-disable-next-line @typescript-eslint/require-await + async getStateShareServer() { + return 'Not Available'; }, + oidcPlugin: createMongoDBOIDCPlugin({ logger }), + async destroy() {}, }, }; } diff --git a/packages/compass-web/polyfills/@mongodb-js/devtools-proxy-support/index.ts b/packages/compass-web/polyfills/@mongodb-js/devtools-proxy-support/index.ts index 33189348b98..8b13a1b2a81 100644 --- a/packages/compass-web/polyfills/@mongodb-js/devtools-proxy-support/index.ts +++ b/packages/compass-web/polyfills/@mongodb-js/devtools-proxy-support/index.ts @@ -10,14 +10,20 @@ export function createSocks5Tunnel(): void { export function hookLogger(): void { // no-op } -export function createFetch(): never { - throw new Error('node-fetch like-API not available in compass-web'); +export function createFetch(): typeof fetch { + // eslint-disable-next-line @typescript-eslint/require-await + return async () => { + throw new Error('node-fetch not available in compass web'); + }; } -export function systemCA(): never { - throw new Error('system CA access not available in compass-web'); +// eslint-disable-next-line @typescript-eslint/require-await +export async function systemCA(): Promise { + const error = new Error('system CA access not available in compass-web'); + (error as unknown as { code: 'OUT_OF_MEM' }).code = 'OUT_OF_MEM'; // This is a "tls" error code that makes devtools-connect not use the systemCA + throw error; } export function resetSystemCACache(): never { - throw new Error('system CA access not available in compass-web'); + throw new Error('reset system CA access not available in compass-web'); } // Explicitly web-compatible diff --git a/packages/compass-web/polyfills/@mongodb-js/oidc-plugin/index.ts b/packages/compass-web/polyfills/@mongodb-js/oidc-plugin/index.ts new file mode 100644 index 00000000000..bfe64886334 --- /dev/null +++ b/packages/compass-web/polyfills/@mongodb-js/oidc-plugin/index.ts @@ -0,0 +1,10 @@ +export function hookLoggerToMongoLogWriter() {} +export function createMongoDBOIDCPlugin({ logger }: any) { + return { + mongoClientOptions: {}, + logger, + /* eslint-disable @typescript-eslint/require-await */ + serialize: async () => '', + destroy: () => {}, + }; +} diff --git a/packages/compass-web/polyfills/net/index.ts b/packages/compass-web/polyfills/net/index.ts index ad90f48579a..898bb03a5c8 100644 --- a/packages/compass-web/polyfills/net/index.ts +++ b/packages/compass-web/polyfills/net/index.ts @@ -28,8 +28,12 @@ class Socket extends Duplex { lookup?: ConnectionOptions['lookup']; tls?: boolean; }) { + // WS does not support callback lookup + if ((lookup?.length ?? 0) > 0) lookup = undefined; + const { wsURL, ...atlasOptions } = lookup?.() ?? ({} as { wsURL?: string; clusterName?: string }); + this._ws = new WebSocket(wsURL ?? '/ws-proxy'); this._ws.binaryType = 'arraybuffer'; this._ws.addEventListener( @@ -157,8 +161,6 @@ export { isIPv4, isIPv6 } from 'is-ip'; export const isIP = (input: string) => ipVersion(input) ?? 0; export const createConnection = (options: { host: string; port: number }) => { const socket = new Socket(); - setTimeout(() => { - socket.connect(options); - }); + socket.connect(options); return socket; }; diff --git a/packages/compass-web/polyfills/os-dns-native/index.ts b/packages/compass-web/polyfills/os-dns-native/index.ts new file mode 100644 index 00000000000..612046acb46 --- /dev/null +++ b/packages/compass-web/polyfills/os-dns-native/index.ts @@ -0,0 +1,7 @@ +import { resolveSrv, resolveTxt } from '../dns'; + +export const wasNativelyLookedUp = () => false; +export const withNodeFallback = { + resolveSrv, + resolveTxt, +}; diff --git a/packages/compass-web/webpack.config.js b/packages/compass-web/webpack.config.js index bff3ec5ad3b..c2bbf2cba32 100644 --- a/packages/compass-web/webpack.config.js +++ b/packages/compass-web/webpack.config.js @@ -45,6 +45,7 @@ module.exports = (env, args) => { '@mongodb-js/devtools-proxy-support': localPolyfill( '@mongodb-js/devtools-proxy-support' ), + '@mongodb-js/oidc-plugin': localPolyfill('@mongodb-js/oidc-plugin'), ...(config.mode === 'production' ? { @@ -56,14 +57,17 @@ module.exports = (env, args) => { } : {}), - // Replace 'devtools-connect' with a package that just directly connects - // using the driver (= web-compatible driver) logic, because devtools-connect - // contains a lot of logic that makes sense in a desktop application/CLI but - // not in a web environment (DNS resolution, OIDC, CSFLE/QE, etc.) + // We replace the direct import without own the sanitizes unsupported options + // from the web env that are never relevant to connecting on web. '@mongodb-js/devtools-connect': localPolyfill( '@mongodb-js/devtools-connect' ), + // Then we call into the real devtools-connect package + 'devtools-connect-original': require.resolve( + '@mongodb-js/devtools-connect' + ), + // TODO(COMPASS-7407): compass-logging // hard to disable the whole thing while there are direct dependencies // on log-writer @@ -124,6 +128,7 @@ module.exports = (env, args) => { os: require.resolve('os-browserify/browser'), crypto: require.resolve('crypto-browserify'), dns: localPolyfill('dns'), + 'os-dns-native': localPolyfill('os-dns-native'), // Built-in Node.js modules imported by the driver directly and used in // ways that requires us to provide a no-op polyfill zlib: localPolyfill('zlib'), From e77b2d0157540632c000a2a81d90e4dbb637978e Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Mon, 24 Nov 2025 15:55:42 -0500 Subject: [PATCH 2/8] removing devtools-connect indirection --- .../devtools-connect-original.d.ts | 3 -- .../@mongodb-js/devtools-connect/index.ts | 40 ------------------- .../devtools-proxy-support/index.ts | 15 +++---- .../compass-web/src/connection-storage.tsx | 1 + packages/compass-web/webpack.config.js | 11 ----- .../data-service/src/connection-options.ts | 3 +- 6 files changed, 9 insertions(+), 64 deletions(-) delete mode 100644 packages/compass-web/polyfills/@mongodb-js/devtools-connect/devtools-connect-original.d.ts delete mode 100644 packages/compass-web/polyfills/@mongodb-js/devtools-connect/index.ts diff --git a/packages/compass-web/polyfills/@mongodb-js/devtools-connect/devtools-connect-original.d.ts b/packages/compass-web/polyfills/@mongodb-js/devtools-connect/devtools-connect-original.d.ts deleted file mode 100644 index c73689119b0..00000000000 --- a/packages/compass-web/polyfills/@mongodb-js/devtools-connect/devtools-connect-original.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -declare module 'devtools-connect-original' { - export * from '@mongodb-js/devtools-connect'; -} diff --git a/packages/compass-web/polyfills/@mongodb-js/devtools-connect/index.ts b/packages/compass-web/polyfills/@mongodb-js/devtools-connect/index.ts deleted file mode 100644 index f89668a7405..00000000000 --- a/packages/compass-web/polyfills/@mongodb-js/devtools-connect/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -import * as devtools_connect from 'devtools-connect-original'; -import { createMongoDBOIDCPlugin } from '../oidc-plugin'; - -export function hookLogger() { - /* no-op */ -} - -export async function connectMongoClient( - url: string, - options: any, - logger: any, - MongoClient: any -): Promise { - // Remove options not understood by the plain Node.js driver - delete options.proxy; - delete options.applyProxyToOIDC; - delete options.productDocsLink; - delete options.productName; - delete options.oidc; - delete options.parentState; - delete options.parentHandle; - options.__skipPingOnConnect = true; - const { client } = await devtools_connect.connectMongoClient( - url, - options, - logger, - MongoClient - ); - return { - client, - state: { - // eslint-disable-next-line @typescript-eslint/require-await - async getStateShareServer() { - return 'Not Available'; - }, - oidcPlugin: createMongoDBOIDCPlugin({ logger }), - async destroy() {}, - }, - }; -} diff --git a/packages/compass-web/polyfills/@mongodb-js/devtools-proxy-support/index.ts b/packages/compass-web/polyfills/@mongodb-js/devtools-proxy-support/index.ts index 8b13a1b2a81..c70772271b9 100644 --- a/packages/compass-web/polyfills/@mongodb-js/devtools-proxy-support/index.ts +++ b/packages/compass-web/polyfills/@mongodb-js/devtools-proxy-support/index.ts @@ -11,16 +11,13 @@ export function hookLogger(): void { // no-op } export function createFetch(): typeof fetch { - // eslint-disable-next-line @typescript-eslint/require-await - return async () => { - throw new Error('node-fetch not available in compass web'); - }; + return async () => + Promise.reject(new Error('node-fetch not available in compass web')); } -// eslint-disable-next-line @typescript-eslint/require-await -export async function systemCA(): Promise { - const error = new Error('system CA access not available in compass-web'); - (error as unknown as { code: 'OUT_OF_MEM' }).code = 'OUT_OF_MEM'; // This is a "tls" error code that makes devtools-connect not use the systemCA - throw error; +export async function systemCA() { + await Promise.reject( + new Error('system CA access not available in compass-web') + ); } export function resetSystemCACache(): never { throw new Error('reset system CA access not available in compass-web'); diff --git a/packages/compass-web/src/connection-storage.tsx b/packages/compass-web/src/connection-storage.tsx index 5bc824d5c65..3b3bd5eda9d 100644 --- a/packages/compass-web/src/connection-storage.tsx +++ b/packages/compass-web/src/connection-storage.tsx @@ -138,6 +138,7 @@ export class AtlasCloudConnectionStorage ...connectionInfo, connectionOptions: { ...connectionInfo.connectionOptions, + useSystemCA: false, lookup: () => { return { wsURL: this.atlasService.driverProxyEndpoint( diff --git a/packages/compass-web/webpack.config.js b/packages/compass-web/webpack.config.js index c2bbf2cba32..ff1e308c6b0 100644 --- a/packages/compass-web/webpack.config.js +++ b/packages/compass-web/webpack.config.js @@ -57,17 +57,6 @@ module.exports = (env, args) => { } : {}), - // We replace the direct import without own the sanitizes unsupported options - // from the web env that are never relevant to connecting on web. - '@mongodb-js/devtools-connect': localPolyfill( - '@mongodb-js/devtools-connect' - ), - - // Then we call into the real devtools-connect package - 'devtools-connect-original': require.resolve( - '@mongodb-js/devtools-connect' - ), - // TODO(COMPASS-7407): compass-logging // hard to disable the whole thing while there are direct dependencies // on log-writer diff --git a/packages/data-service/src/connection-options.ts b/packages/data-service/src/connection-options.ts index cc284f32fa5..d006dfce230 100644 --- a/packages/data-service/src/connection-options.ts +++ b/packages/data-service/src/connection-options.ts @@ -19,7 +19,8 @@ export type OIDCOptions = Omit< >[]; }; -export interface ConnectionOptions { +export interface ConnectionOptions + extends Pick { /** * The connection string to connect to the MongoDB instance including all options set by the user. */ From 8e9bb441c03263d1b6eb0d191991e48f4f152306 Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Mon, 1 Dec 2025 13:01:40 -0500 Subject: [PATCH 3/8] chore: update devtools-connect --- package-lock.json | 110 ++++++++++++++++++++++++---- packages/atlas-service/package.json | 2 +- packages/compass-web/package.json | 1 + packages/data-service/package.json | 2 +- 4 files changed, 99 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index ecea8017ec7..a7f9bfbf4d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47168,7 +47168,7 @@ "@mongodb-js/compass-user-data": "^0.11.2", "@mongodb-js/compass-utils": "^0.9.23", "@mongodb-js/connection-info": "^0.24.0", - "@mongodb-js/devtools-connect": "^3.9.7", + "@mongodb-js/devtools-connect": "^3.11.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/oidc-plugin": "^2.0.4", "compass-preferences-model": "^2.66.3", @@ -47197,6 +47197,30 @@ "typescript": "^5.9.3" } }, + "packages/atlas-service/node_modules/@mongodb-js/devtools-connect": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.11.0.tgz", + "integrity": "sha512-vXxBJ8kgcHcomI0P4NamT2X9EMN5VmLfDnwsL4jM2MgMVJnjNUh49re87vA/t+8BAuj853Db1WCgP+YBTTq/Hw==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/devtools-proxy-support": "^0.5.5", + "@mongodb-js/oidc-http-server-pages": "1.1.8", + "lodash.merge": "^4.6.2", + "mongodb-connection-string-url": "^3.0.0", + "socks": "^2.7.3" + }, + "optionalDependencies": { + "kerberos": "^2.1.0", + "mongodb-client-encryption": "^6.1.0", + "os-dns-native": "^1.2.0", + "resolve-mongodb-srv": "^1.1.1" + }, + "peerDependencies": { + "@mongodb-js/oidc-plugin": "^2.0.0", + "mongodb": "^6.9.0", + "mongodb-log-writer": "^2.4.4" + } + }, "packages/atlas-service/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -51649,6 +51673,7 @@ "@mongodb-js/compass-workspaces": "^0.70.0", "@mongodb-js/connection-info": "^0.24.0", "@mongodb-js/connection-storage": "^0.63.0", + "@mongodb-js/devtools-connect": "^3.11.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/eslint-config-compass": "^1.4.12", "@mongodb-js/mocha-config-compass": "^1.7.2", @@ -51701,9 +51726,9 @@ } }, "packages/compass-web/node_modules/@mongodb-js/devtools-connect": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.10.0.tgz", - "integrity": "sha512-RcHUT/vyhMz7dJ8IWwRu6AHJXDHoq7xRXNIbHtTAJSEgqbvo5megx6JdTx08LDFZitO0sn5mwPFHRGA3FsFPDQ==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.11.0.tgz", + "integrity": "sha512-vXxBJ8kgcHcomI0P4NamT2X9EMN5VmLfDnwsL4jM2MgMVJnjNUh49re87vA/t+8BAuj853Db1WCgP+YBTTq/Hw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -52595,7 +52620,7 @@ "license": "SSPL", "dependencies": { "@mongodb-js/compass-utils": "^0.9.23", - "@mongodb-js/devtools-connect": "^3.9.7", + "@mongodb-js/devtools-connect": "^3.11.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "bson": "^6.10.4", "debug": "^4.3.4", @@ -52630,6 +52655,30 @@ "mongodb-client-encryption": "^6.5.0" } }, + "packages/data-service/node_modules/@mongodb-js/devtools-connect": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.11.0.tgz", + "integrity": "sha512-vXxBJ8kgcHcomI0P4NamT2X9EMN5VmLfDnwsL4jM2MgMVJnjNUh49re87vA/t+8BAuj853Db1WCgP+YBTTq/Hw==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/devtools-proxy-support": "^0.5.5", + "@mongodb-js/oidc-http-server-pages": "1.1.8", + "lodash.merge": "^4.6.2", + "mongodb-connection-string-url": "^3.0.0", + "socks": "^2.7.3" + }, + "optionalDependencies": { + "kerberos": "^2.1.0", + "mongodb-client-encryption": "^6.1.0", + "os-dns-native": "^1.2.0", + "resolve-mongodb-srv": "^1.1.1" + }, + "peerDependencies": { + "@mongodb-js/oidc-plugin": "^2.0.0", + "mongodb": "^6.9.0", + "mongodb-log-writer": "^2.4.4" + } + }, "packages/data-service/node_modules/@mongodb-js/devtools-docker-test-envs": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-docker-test-envs/-/devtools-docker-test-envs-1.3.3.tgz", @@ -52692,7 +52741,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/kerberos/-/kerberos-2.2.1.tgz", "integrity": "sha512-Vlyv1tjAPb0y2VIJ03dKkUjsneGIBuTkH24uGRx6/DrKpFlVuGPmct3m5aEotljVUlw7PAGWABwR5aNeW7y8Zw==", - "dev": true, + "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -52707,7 +52756,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "packages/data-service/node_modules/sinon": { @@ -60781,7 +60830,7 @@ "@mongodb-js/compass-user-data": "^0.11.2", "@mongodb-js/compass-utils": "^0.9.23", "@mongodb-js/connection-info": "^0.24.0", - "@mongodb-js/devtools-connect": "^3.9.7", + "@mongodb-js/devtools-connect": "^3.11.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/eslint-config-compass": "^1.4.12", "@mongodb-js/mocha-config-compass": "^1.7.2", @@ -60808,6 +60857,22 @@ "typescript": "^5.9.3" }, "dependencies": { + "@mongodb-js/devtools-connect": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.11.0.tgz", + "integrity": "sha512-vXxBJ8kgcHcomI0P4NamT2X9EMN5VmLfDnwsL4jM2MgMVJnjNUh49re87vA/t+8BAuj853Db1WCgP+YBTTq/Hw==", + "requires": { + "@mongodb-js/devtools-proxy-support": "^0.5.5", + "@mongodb-js/oidc-http-server-pages": "1.1.8", + "kerberos": "^2.1.0", + "lodash.merge": "^4.6.2", + "mongodb-client-encryption": "^6.1.0", + "mongodb-connection-string-url": "^3.0.0", + "os-dns-native": "^1.2.0", + "resolve-mongodb-srv": "^1.1.1", + "socks": "^2.7.3" + } + }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -64107,6 +64172,7 @@ "@mongodb-js/compass-workspaces": "^0.70.0", "@mongodb-js/connection-info": "^0.24.0", "@mongodb-js/connection-storage": "^0.63.0", + "@mongodb-js/devtools-connect": "^3.11.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/eslint-config-compass": "^1.4.12", "@mongodb-js/mocha-config-compass": "^1.7.2", @@ -64155,9 +64221,9 @@ }, "dependencies": { "@mongodb-js/devtools-connect": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.10.0.tgz", - "integrity": "sha512-RcHUT/vyhMz7dJ8IWwRu6AHJXDHoq7xRXNIbHtTAJSEgqbvo5megx6JdTx08LDFZitO0sn5mwPFHRGA3FsFPDQ==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.11.0.tgz", + "integrity": "sha512-vXxBJ8kgcHcomI0P4NamT2X9EMN5VmLfDnwsL4jM2MgMVJnjNUh49re87vA/t+8BAuj853Db1WCgP+YBTTq/Hw==", "dev": true, "requires": { "@mongodb-js/devtools-proxy-support": "^0.5.5", @@ -85660,7 +85726,7 @@ "requires": { "@mongodb-js/compass-test-server": "^0.3.25", "@mongodb-js/compass-utils": "^0.9.23", - "@mongodb-js/devtools-connect": "^3.9.7", + "@mongodb-js/devtools-connect": "^3.11.0", "@mongodb-js/devtools-docker-test-envs": "^1.3.3", "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/eslint-config-compass": "^1.4.12", @@ -85690,6 +85756,22 @@ "typescript": "^5.9.3" }, "dependencies": { + "@mongodb-js/devtools-connect": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.11.0.tgz", + "integrity": "sha512-vXxBJ8kgcHcomI0P4NamT2X9EMN5VmLfDnwsL4jM2MgMVJnjNUh49re87vA/t+8BAuj853Db1WCgP+YBTTq/Hw==", + "requires": { + "@mongodb-js/devtools-proxy-support": "^0.5.5", + "@mongodb-js/oidc-http-server-pages": "1.1.8", + "kerberos": "^2.1.0", + "lodash.merge": "^4.6.2", + "mongodb-client-encryption": "^6.1.0", + "mongodb-connection-string-url": "^3.0.0", + "os-dns-native": "^1.2.0", + "resolve-mongodb-srv": "^1.1.1", + "socks": "^2.7.3" + } + }, "@mongodb-js/devtools-docker-test-envs": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-docker-test-envs/-/devtools-docker-test-envs-1.3.3.tgz", @@ -85739,7 +85821,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/kerberos/-/kerberos-2.2.1.tgz", "integrity": "sha512-Vlyv1tjAPb0y2VIJ03dKkUjsneGIBuTkH24uGRx6/DrKpFlVuGPmct3m5aEotljVUlw7PAGWABwR5aNeW7y8Zw==", - "dev": true, + "devOptional": true, "requires": { "node-addon-api": "^6.1.0", "prebuild-install": "^7.1.2" @@ -85749,7 +85831,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true + "devOptional": true }, "sinon": { "version": "9.2.4", diff --git a/packages/atlas-service/package.json b/packages/atlas-service/package.json index 38b4ecb9c19..c8e2feb0d0f 100644 --- a/packages/atlas-service/package.json +++ b/packages/atlas-service/package.json @@ -76,7 +76,7 @@ "@mongodb-js/compass-user-data": "^0.11.2", "@mongodb-js/compass-utils": "^0.9.23", "@mongodb-js/connection-info": "^0.24.0", - "@mongodb-js/devtools-connect": "^3.9.7", + "@mongodb-js/devtools-connect": "^3.11.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/oidc-plugin": "^2.0.4", "compass-preferences-model": "^2.66.3", diff --git a/packages/compass-web/package.json b/packages/compass-web/package.json index c48c1cd9938..4b924b43512 100644 --- a/packages/compass-web/package.json +++ b/packages/compass-web/package.json @@ -99,6 +99,7 @@ "@mongodb-js/compass-workspaces": "^0.70.0", "@mongodb-js/connection-info": "^0.24.0", "@mongodb-js/connection-storage": "^0.63.0", + "@mongodb-js/devtools-connect": "^3.11.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/eslint-config-compass": "^1.4.12", "@mongodb-js/mocha-config-compass": "^1.7.2", diff --git a/packages/data-service/package.json b/packages/data-service/package.json index dba53b69d12..0c7d3b452ee 100644 --- a/packages/data-service/package.json +++ b/packages/data-service/package.json @@ -53,7 +53,7 @@ }, "dependencies": { "@mongodb-js/compass-utils": "^0.9.23", - "@mongodb-js/devtools-connect": "^3.9.7", + "@mongodb-js/devtools-connect": "^3.11.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "bson": "^6.10.4", "debug": "^4.3.4", From e32c23bbcc374989ce4975923c97d7344c9da8a7 Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Tue, 2 Dec 2025 15:20:39 -0500 Subject: [PATCH 4/8] chore: pass through useSystemCA --- packages/compass-web/.depcheckrc | 1 - .../src/compass-main-connection-storage.spec.ts | 1 + packages/data-service/src/connect-mongo-client.ts | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/compass-web/.depcheckrc b/packages/compass-web/.depcheckrc index 3a6217f0081..15781132757 100644 --- a/packages/compass-web/.depcheckrc +++ b/packages/compass-web/.depcheckrc @@ -8,7 +8,6 @@ ignores: - '@types/chai-dom' - '@types/react' - '@types/react-dom' - - 'devtools-connect-original' # Used in electron-proxy through @ts-check, but depcheckrc can't detect it - '@types/express-http-proxy' # Used in webpack config as polyfills, depcheck can't detect that because of `/` diff --git a/packages/connection-storage/src/compass-main-connection-storage.spec.ts b/packages/connection-storage/src/compass-main-connection-storage.spec.ts index 3cb992a386d..d88700f5e69 100644 --- a/packages/connection-storage/src/compass-main-connection-storage.spec.ts +++ b/packages/connection-storage/src/compass-main-connection-storage.spec.ts @@ -795,6 +795,7 @@ describe('ConnectionStorage', function () { oidc: {}, fleOptions: { storeCredentials: false }, lookup: () => ({} as any), + useSystemCA: true, }; await connectionStorage.save({ connectionInfo: { diff --git a/packages/data-service/src/connect-mongo-client.ts b/packages/data-service/src/connect-mongo-client.ts index e3726a6dce0..3eecc07458a 100644 --- a/packages/data-service/src/connect-mongo-client.ts +++ b/packages/data-service/src/connect-mongo-client.ts @@ -164,6 +164,7 @@ export async function connectMongoClientDataService({ productDocsLink: productDocsLink ?? 'https://www.mongodb.com/docs/compass/', monitorCommands: true, autoEncryption: connectionOptions.fleOptions?.autoEncryption, + useSystemCA: connectionOptions.useSystemCA ?? true, ...oidcOptions, }; From de44e19c8a406879a2d505d3e17d52a6430f59b8 Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Tue, 2 Dec 2025 16:53:40 -0500 Subject: [PATCH 5/8] rm unused --- package-lock.json | 44 ------------------------------- packages/compass-web/package.json | 1 - 2 files changed, 45 deletions(-) diff --git a/package-lock.json b/package-lock.json index a7f9bfbf4d8..999bb1e28ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51673,7 +51673,6 @@ "@mongodb-js/compass-workspaces": "^0.70.0", "@mongodb-js/connection-info": "^0.24.0", "@mongodb-js/connection-storage": "^0.63.0", - "@mongodb-js/devtools-connect": "^3.11.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/eslint-config-compass": "^1.4.12", "@mongodb-js/mocha-config-compass": "^1.7.2", @@ -51725,31 +51724,6 @@ "react-dom": "^17.0.2" } }, - "packages/compass-web/node_modules/@mongodb-js/devtools-connect": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.11.0.tgz", - "integrity": "sha512-vXxBJ8kgcHcomI0P4NamT2X9EMN5VmLfDnwsL4jM2MgMVJnjNUh49re87vA/t+8BAuj853Db1WCgP+YBTTq/Hw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/devtools-proxy-support": "^0.5.5", - "@mongodb-js/oidc-http-server-pages": "1.1.8", - "lodash.merge": "^4.6.2", - "mongodb-connection-string-url": "^3.0.0", - "socks": "^2.7.3" - }, - "optionalDependencies": { - "kerberos": "^2.1.0", - "mongodb-client-encryption": "^6.1.0", - "os-dns-native": "^1.2.0", - "resolve-mongodb-srv": "^1.1.1" - }, - "peerDependencies": { - "@mongodb-js/oidc-plugin": "^2.0.0", - "mongodb": "^6.9.0", - "mongodb-log-writer": "^2.4.4" - } - }, "packages/compass-web/node_modules/@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", @@ -64172,7 +64146,6 @@ "@mongodb-js/compass-workspaces": "^0.70.0", "@mongodb-js/connection-info": "^0.24.0", "@mongodb-js/connection-storage": "^0.63.0", - "@mongodb-js/devtools-connect": "^3.11.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/eslint-config-compass": "^1.4.12", "@mongodb-js/mocha-config-compass": "^1.7.2", @@ -64220,23 +64193,6 @@ "ws": "^8.16.0" }, "dependencies": { - "@mongodb-js/devtools-connect": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.11.0.tgz", - "integrity": "sha512-vXxBJ8kgcHcomI0P4NamT2X9EMN5VmLfDnwsL4jM2MgMVJnjNUh49re87vA/t+8BAuj853Db1WCgP+YBTTq/Hw==", - "dev": true, - "requires": { - "@mongodb-js/devtools-proxy-support": "^0.5.5", - "@mongodb-js/oidc-http-server-pages": "1.1.8", - "kerberos": "^2.1.0", - "lodash.merge": "^4.6.2", - "mongodb-client-encryption": "^6.1.0", - "mongodb-connection-string-url": "^3.0.0", - "os-dns-native": "^1.2.0", - "resolve-mongodb-srv": "^1.1.1", - "socks": "^2.7.3" - } - }, "@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", diff --git a/packages/compass-web/package.json b/packages/compass-web/package.json index 4b924b43512..c48c1cd9938 100644 --- a/packages/compass-web/package.json +++ b/packages/compass-web/package.json @@ -99,7 +99,6 @@ "@mongodb-js/compass-workspaces": "^0.70.0", "@mongodb-js/connection-info": "^0.24.0", "@mongodb-js/connection-storage": "^0.63.0", - "@mongodb-js/devtools-connect": "^3.11.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/eslint-config-compass": "^1.4.12", "@mongodb-js/mocha-config-compass": "^1.7.2", From 0db004094c57b4e4dba77b732e004ceb02b5aa8a Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Wed, 3 Dec 2025 15:41:49 -0500 Subject: [PATCH 6/8] chore: update devtools-connect and add necessary proxy api stub --- package-lock.json | 32 +++++++++---------- packages/atlas-service/package.json | 2 +- .../devtools-proxy-support/index.ts | 3 ++ packages/data-service/package.json | 2 +- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 999bb1e28ea..2ad349e1ad1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47168,7 +47168,7 @@ "@mongodb-js/compass-user-data": "^0.11.2", "@mongodb-js/compass-utils": "^0.9.23", "@mongodb-js/connection-info": "^0.24.0", - "@mongodb-js/devtools-connect": "^3.11.0", + "@mongodb-js/devtools-connect": "^3.12.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/oidc-plugin": "^2.0.4", "compass-preferences-model": "^2.66.3", @@ -47198,9 +47198,9 @@ } }, "packages/atlas-service/node_modules/@mongodb-js/devtools-connect": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.11.0.tgz", - "integrity": "sha512-vXxBJ8kgcHcomI0P4NamT2X9EMN5VmLfDnwsL4jM2MgMVJnjNUh49re87vA/t+8BAuj853Db1WCgP+YBTTq/Hw==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.12.0.tgz", + "integrity": "sha512-/aiGAKE5k6y1noI6hFo3pkLarNCNjEn+J3iqWTAMBuX4SpKUWsDdpMAyyxkqou7qH97gvon4A7wQafWFgWTXvA==", "license": "Apache-2.0", "dependencies": { "@mongodb-js/devtools-proxy-support": "^0.5.5", @@ -52594,7 +52594,7 @@ "license": "SSPL", "dependencies": { "@mongodb-js/compass-utils": "^0.9.23", - "@mongodb-js/devtools-connect": "^3.11.0", + "@mongodb-js/devtools-connect": "^3.12.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "bson": "^6.10.4", "debug": "^4.3.4", @@ -52630,9 +52630,9 @@ } }, "packages/data-service/node_modules/@mongodb-js/devtools-connect": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.11.0.tgz", - "integrity": "sha512-vXxBJ8kgcHcomI0P4NamT2X9EMN5VmLfDnwsL4jM2MgMVJnjNUh49re87vA/t+8BAuj853Db1WCgP+YBTTq/Hw==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.12.0.tgz", + "integrity": "sha512-/aiGAKE5k6y1noI6hFo3pkLarNCNjEn+J3iqWTAMBuX4SpKUWsDdpMAyyxkqou7qH97gvon4A7wQafWFgWTXvA==", "license": "Apache-2.0", "dependencies": { "@mongodb-js/devtools-proxy-support": "^0.5.5", @@ -60804,7 +60804,7 @@ "@mongodb-js/compass-user-data": "^0.11.2", "@mongodb-js/compass-utils": "^0.9.23", "@mongodb-js/connection-info": "^0.24.0", - "@mongodb-js/devtools-connect": "^3.11.0", + "@mongodb-js/devtools-connect": "^3.12.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/eslint-config-compass": "^1.4.12", "@mongodb-js/mocha-config-compass": "^1.7.2", @@ -60832,9 +60832,9 @@ }, "dependencies": { "@mongodb-js/devtools-connect": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.11.0.tgz", - "integrity": "sha512-vXxBJ8kgcHcomI0P4NamT2X9EMN5VmLfDnwsL4jM2MgMVJnjNUh49re87vA/t+8BAuj853Db1WCgP+YBTTq/Hw==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.12.0.tgz", + "integrity": "sha512-/aiGAKE5k6y1noI6hFo3pkLarNCNjEn+J3iqWTAMBuX4SpKUWsDdpMAyyxkqou7qH97gvon4A7wQafWFgWTXvA==", "requires": { "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/oidc-http-server-pages": "1.1.8", @@ -85682,7 +85682,7 @@ "requires": { "@mongodb-js/compass-test-server": "^0.3.25", "@mongodb-js/compass-utils": "^0.9.23", - "@mongodb-js/devtools-connect": "^3.11.0", + "@mongodb-js/devtools-connect": "^3.12.0", "@mongodb-js/devtools-docker-test-envs": "^1.3.3", "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/eslint-config-compass": "^1.4.12", @@ -85713,9 +85713,9 @@ }, "dependencies": { "@mongodb-js/devtools-connect": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.11.0.tgz", - "integrity": "sha512-vXxBJ8kgcHcomI0P4NamT2X9EMN5VmLfDnwsL4jM2MgMVJnjNUh49re87vA/t+8BAuj853Db1WCgP+YBTTq/Hw==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.12.0.tgz", + "integrity": "sha512-/aiGAKE5k6y1noI6hFo3pkLarNCNjEn+J3iqWTAMBuX4SpKUWsDdpMAyyxkqou7qH97gvon4A7wQafWFgWTXvA==", "requires": { "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/oidc-http-server-pages": "1.1.8", diff --git a/packages/atlas-service/package.json b/packages/atlas-service/package.json index c8e2feb0d0f..6ddb36983c4 100644 --- a/packages/atlas-service/package.json +++ b/packages/atlas-service/package.json @@ -76,7 +76,7 @@ "@mongodb-js/compass-user-data": "^0.11.2", "@mongodb-js/compass-utils": "^0.9.23", "@mongodb-js/connection-info": "^0.24.0", - "@mongodb-js/devtools-connect": "^3.11.0", + "@mongodb-js/devtools-connect": "^3.12.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "@mongodb-js/oidc-plugin": "^2.0.4", "compass-preferences-model": "^2.66.3", diff --git a/packages/compass-web/polyfills/@mongodb-js/devtools-proxy-support/index.ts b/packages/compass-web/polyfills/@mongodb-js/devtools-proxy-support/index.ts index c70772271b9..b356c5a39c3 100644 --- a/packages/compass-web/polyfills/@mongodb-js/devtools-proxy-support/index.ts +++ b/packages/compass-web/polyfills/@mongodb-js/devtools-proxy-support/index.ts @@ -1,6 +1,9 @@ export function createAgent(): void { // The original can return 'undefined' as well } +export function isExistingAgentInstance(): boolean { + return false; +} export function useOrCreateAgent(): void { // The original can return 'undefined' as well } diff --git a/packages/data-service/package.json b/packages/data-service/package.json index 0c7d3b452ee..0b4220fb265 100644 --- a/packages/data-service/package.json +++ b/packages/data-service/package.json @@ -53,7 +53,7 @@ }, "dependencies": { "@mongodb-js/compass-utils": "^0.9.23", - "@mongodb-js/devtools-connect": "^3.11.0", + "@mongodb-js/devtools-connect": "^3.12.0", "@mongodb-js/devtools-proxy-support": "^0.5.5", "bson": "^6.10.4", "debug": "^4.3.4", From f0602fa5fe9e46f024a9043c389f42c951ca4454 Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Wed, 3 Dec 2025 16:16:37 -0500 Subject: [PATCH 7/8] test: fix! --- packages/data-service/src/connect-mongo-client.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/data-service/src/connect-mongo-client.spec.ts b/packages/data-service/src/connect-mongo-client.spec.ts index f5349d5634f..f6edb830f39 100644 --- a/packages/data-service/src/connect-mongo-client.spec.ts +++ b/packages/data-service/src/connect-mongo-client.spec.ts @@ -14,6 +14,7 @@ import ConnectionString from 'mongodb-connection-string-url'; const defaultOptions = { productDocsLink: 'https://www.mongodb.com/docs/compass/', productName: 'MongoDB Compass', + useSystemCA: true, }; const setupListeners = () => { From eb0aba90c173463f39dfc241faca877c809e1ab2 Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Wed, 3 Dec 2025 21:46:25 -0500 Subject: [PATCH 8/8] more useSystemCA false changes --- .../helpers/compass-web-sandbox.ts | 6 ++++- .../sandbox/sandbox-connection-storage.tsx | 24 +++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/packages/compass-e2e-tests/helpers/compass-web-sandbox.ts b/packages/compass-e2e-tests/helpers/compass-web-sandbox.ts index caccb9f9608..6b00e234dc6 100644 --- a/packages/compass-e2e-tests/helpers/compass-web-sandbox.ts +++ b/packages/compass-e2e-tests/helpers/compass-web-sandbox.ts @@ -208,7 +208,11 @@ export const getAtlasCloudSandboxDefaultConnections = ( str.password = dbPassword; return { id: name, - connectionOptions: { connectionString: String(str) }, + connectionOptions: { + connectionString: String(str), + // System CA certificates are not available in the browser environment + useSystemCA: false, + }, favorite: { name }, }; }); diff --git a/packages/compass-web/sandbox/sandbox-connection-storage.tsx b/packages/compass-web/sandbox/sandbox-connection-storage.tsx index aae40bd3da4..38ee6c9f126 100644 --- a/packages/compass-web/sandbox/sandbox-connection-storage.tsx +++ b/packages/compass-web/sandbox/sandbox-connection-storage.tsx @@ -36,11 +36,31 @@ class SandboxConnectionStorage implements ConnectionStorage { return [info.id, info]; }) ); + + // Ensure useSystemCA is set to false for all connections since system CA + // certificates are not available in the browser environment + private normalizeConnectionInfo(info: ConnectionInfo): ConnectionInfo { + return { + ...info, + connectionOptions: { + ...info.connectionOptions, + useSystemCA: false, + }, + }; + } + loadAll(): Promise { - return Promise.resolve(Array.from(this._connections.values())); + return Promise.resolve( + Array.from(this._connections.values()).map((info) => + this.normalizeConnectionInfo(info) + ) + ); } load({ id }: { id: string }): Promise { - return Promise.resolve(this._connections.get(id)); + const info = this._connections.get(id); + return Promise.resolve( + info ? this.normalizeConnectionInfo(info) : undefined + ); } save({ connectionInfo }: { connectionInfo: ConnectionInfo }): Promise { this._connections.set(connectionInfo.id, connectionInfo);