From 900b3546904ad1d47f242d42bc6063d639b5a86f Mon Sep 17 00:00:00 2001 From: gagik Date: Tue, 18 Nov 2025 14:34:19 +0100 Subject: [PATCH 1/6] WIP - chore: use redact package --- packages/history/src/history.ts | 16 ++++----- packages/history/src/index.ts | 7 ++-- packages/history/src/redact.ts | 35 ++++++++++++++++++ .../logging/src/logging-and-telemetry.spec.ts | 36 +++++++++++++++++++ packages/logging/src/logging-and-telemetry.ts | 13 ++++--- .../shell-api/src/shell-instance-state.ts | 4 +-- 6 files changed, 93 insertions(+), 18 deletions(-) create mode 100644 packages/history/src/redact.ts diff --git a/packages/history/src/history.ts b/packages/history/src/history.ts index 0fda38a64e..94409160fb 100644 --- a/packages/history/src/history.ts +++ b/packages/history/src/history.ts @@ -1,6 +1,5 @@ -import redactSensitiveData from 'mongodb-redact'; - -export const HIDDEN_COMMANDS = String.raw`\b(createUser|auth|updateUser|changeUserPassword|connect|Mongo)\b`; +import { shouldRedactCommand } from './redact'; +import { redact } from 'mongodb-redact'; /** * Modifies the most recent command in history based on sensitive information. @@ -11,16 +10,13 @@ export const HIDDEN_COMMANDS = String.raw`\b(createUser|auth|updateUser|changeUs */ export function changeHistory( history: string[], - redact: 'redact-sensitive-data' | 'keep-sensitive-data' + redactMode: 'redact-sensitive-data' | 'keep-sensitive-data' ): void { if (history.length === 0) return; - const hiddenCommands = new RegExp(HIDDEN_COMMANDS, 'g'); - if (hiddenCommands.test(history[0])) { + if (shouldRedactCommand(history[0])) { history.shift(); - } else if (redact === 'redact-sensitive-data') { - history[0] = redactSensitiveData(history[0]); + } else if (redactMode === 'redact-sensitive-data') { + history[0] = redact(history[0]); } } - -export { redactSensitiveData }; diff --git a/packages/history/src/index.ts b/packages/history/src/index.ts index c2e5c24f07..26d68c84b4 100644 --- a/packages/history/src/index.ts +++ b/packages/history/src/index.ts @@ -1,2 +1,5 @@ -export { changeHistory, redactSensitiveData, HIDDEN_COMMANDS } from './history'; -export { redactConnectionString as redactURICredentials } from 'mongodb-connection-string-url'; +export { changeHistory } from './history'; +export { + shouldRedactCommand, + redactUriCredentials as redactURICredentials, +} from './redact'; diff --git a/packages/history/src/redact.ts b/packages/history/src/redact.ts new file mode 100644 index 0000000000..bd2d929e2e --- /dev/null +++ b/packages/history/src/redact.ts @@ -0,0 +1,35 @@ +// TODO: This will completely be replaced by mongodb-redact once it is released + +/** + * Regex pattern for commands that contain sensitive information and should be + * completely removed from history rather than redacted. + * + * These commands typically involve authentication or connection strings with credentials. + */ +const HIDDEN_COMMANDS = String.raw`\b(createUser|auth|updateUser|changeUserPassword|connect|Mongo)\b`; + +/** + * Checks if a mongosh command should be redacted because it often contains sensitive information like credentials. + * + * @param input - The command string to check + * @returns true if the command should be hidden/redacted, false otherwise + * + * @example + * ```typescript + * shouldRedactCommand('db.createUser({user: "admin", pwd: "secret"})') + * // Returns: true + * + * shouldRedactCommand('db.getUsers()') + * // Returns: false + * ``` + */ +export function shouldRedactCommand(input: string): boolean { + const hiddenCommands = new RegExp(HIDDEN_COMMANDS, 'g'); + return hiddenCommands.test(input); +} + +import { redactConnectionString } from 'mongodb-connection-string-url'; + +export function redactUriCredentials(uri: string): string { + return redactConnectionString(uri); +} diff --git a/packages/logging/src/logging-and-telemetry.spec.ts b/packages/logging/src/logging-and-telemetry.spec.ts index ef9f22be20..7d5aa7843a 100644 --- a/packages/logging/src/logging-and-telemetry.spec.ts +++ b/packages/logging/src/logging-and-telemetry.spec.ts @@ -1132,6 +1132,42 @@ describe('MongoshLoggingAndTelemetry', function () { expect(analyticsOutput).to.be.empty; }); + it('does not log sensitive commands', async function () { + loggingAndTelemetry.attachLogger(logger); + await (loggingAndTelemetry as LoggingAndTelemetry).setupTelemetryPromise; + + expect(logOutput).to.have.lengthOf(0); + + // Test that sensitive commands are not logged + bus.emit('mongosh:evaluate-input', { + input: 'db.createUser({user: "admin", pwd: "password", roles: []})', + }); + bus.emit('mongosh:evaluate-input', { input: 'db.auth("user", "pass")' }); + bus.emit('mongosh:evaluate-input', { + input: 'db.updateUser("user", {pwd: "newpass"})', + }); + bus.emit('mongosh:evaluate-input', { + input: 'db.changeUserPassword("user", "newpass")', + }); + bus.emit('mongosh:evaluate-input', { + input: 'connect("mongodb://user:pass@localhost/")', + }); + bus.emit('mongosh:evaluate-input', { + input: 'new Mongo("mongodb://user:pass@localhost/")', + }); + + // Test that non-sensitive commands are still logged + bus.emit('mongosh:evaluate-input', { input: 'db.getUsers()' }); + bus.emit('mongosh:evaluate-input', { input: 'show dbs' }); + + // Should only have logged the non-sensitive commands + expect(logOutput).to.have.lengthOf(2); + expect(logOutput[0].msg).to.equal('Evaluating input'); + expect(logOutput[0].attr.input).to.equal('db.getUsers()'); + expect(logOutput[1].msg).to.equal('Evaluating input'); + expect(logOutput[1].attr.input).to.equal('show dbs'); + }); + it('tracks custom logging events', async function () { expect(logOutput).to.have.lengthOf(0); expect(analyticsOutput).to.be.empty; diff --git a/packages/logging/src/logging-and-telemetry.ts b/packages/logging/src/logging-and-telemetry.ts index 77ab51bfcd..441d85348c 100644 --- a/packages/logging/src/logging-and-telemetry.ts +++ b/packages/logging/src/logging-and-telemetry.ts @@ -1,5 +1,5 @@ -import redactInfo from 'mongodb-redact'; -import { redactURICredentials } from '@mongosh/history'; +import { redact } from 'mongodb-redact'; +import { shouldRedactCommand } from '@mongosh/history'; import type { MongoshBus, ApiEventWithArguments, @@ -460,6 +460,11 @@ export class LoggingAndTelemetry implements MongoshLoggingAndTelemetry { }); onBus('mongosh:evaluate-input', (args: EvaluateInputEvent) => { + // Skip logging sensitive commands + if (shouldRedactCommand(args.input)) { + return; + } + this.log.info( 'MONGOSH', mongoLogId(1_000_000_007), @@ -523,7 +528,7 @@ export class LoggingAndTelemetry implements MongoshLoggingAndTelemetry { mongoLogId(1_000_000_011), 'shell-api', 'Performed API call', - redactInfo(arg) + redact(arg) ); }); @@ -848,7 +853,7 @@ export class LoggingAndTelemetry implements MongoshLoggingAndTelemetry { mongoLogId(1_000_000_047), 'editor', 'Open external editor', - redactInfo(ev) + redact(ev) ); } ); diff --git a/packages/shell-api/src/shell-instance-state.ts b/packages/shell-api/src/shell-instance-state.ts index f2f402f4a1..709b1de2a5 100644 --- a/packages/shell-api/src/shell-instance-state.ts +++ b/packages/shell-api/src/shell-instance-state.ts @@ -17,7 +17,7 @@ import type { ShellUserConfig, } from '@mongosh/types'; import { EventEmitter } from 'events'; -import redactInfo from 'mongodb-redact'; +import { redactURICredentials } from '@mongosh/history'; import { toIgnore } from './decorators'; import { ALL_PLATFORMS, @@ -304,7 +304,7 @@ export class ShellInstanceState { api_version: apiVersionInfo?.version, api_strict: apiVersionInfo?.strict, api_deprecation_errors: apiVersionInfo?.deprecationErrors, - uri: redactInfo(connectionInfo?.extraInfo?.uri), + uri: redactURICredentials(connectionInfo?.extraInfo?.uri ?? ''), }); return connectionInfo; } From 6e38fe8060c8e5820d6c6931c616d2c092b113b3 Mon Sep 17 00:00:00 2001 From: gagik Date: Wed, 19 Nov 2025 10:53:07 +0100 Subject: [PATCH 2/6] chore: refactor to use the new library --- package-lock.json | 858 +++++++++++++----- packages/cli-repl/package.json | 8 +- packages/cli-repl/src/cli-repl.ts | 7 +- packages/cli-repl/src/run.ts | 4 +- packages/cli-repl/src/smoke-tests.ts | 4 +- packages/history/package.json | 4 +- packages/history/src/history.ts | 3 +- packages/history/src/index.ts | 4 - packages/history/src/redact.ts | 35 - packages/logging/package.json | 3 +- packages/logging/src/logging-and-telemetry.ts | 15 +- packages/shell-api/package.json | 4 +- packages/shell-api/src/collection.ts | 5 +- .../shell-api/src/field-level-encryption.ts | 6 +- packages/shell-api/src/mongo.ts | 6 +- packages/shell-api/src/replica-set.ts | 4 +- packages/shell-api/src/shard.ts | 4 +- .../shell-api/src/shell-instance-state.ts | 4 +- 18 files changed, 670 insertions(+), 308 deletions(-) delete mode 100644 packages/history/src/redact.ts diff --git a/package-lock.json b/package-lock.json index c1a943708c..c1bce2255b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13620,14 +13620,13 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -13754,6 +13753,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -13899,6 +13919,15 @@ "devOptional": true, "license": "MIT" }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -15201,16 +15230,15 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -16507,6 +16535,57 @@ "node": ">= 14" } }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/date-format": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.6.tgz", @@ -18011,44 +18090,65 @@ } }, "node_modules/es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -18175,14 +18275,14 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -19504,12 +19604,18 @@ } }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/foreground-child": { @@ -19708,15 +19814,17 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -19894,13 +20002,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -20232,12 +20341,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -20512,10 +20622,13 @@ } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -21383,14 +21496,14 @@ } }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -21491,13 +21604,14 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -21513,13 +21627,35 @@ "devOptional": true, "license": "MIT" }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -21539,13 +21675,13 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -21594,13 +21730,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -21641,6 +21795,21 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -21729,7 +21898,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -21762,9 +21930,9 @@ "license": "MIT" }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -21796,12 +21964,13 @@ } }, "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -21879,13 +22048,15 @@ } }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -21907,7 +22078,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -21917,12 +22087,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -21948,12 +22121,13 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -21970,12 +22144,14 @@ "license": "MIT" }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -21998,16 +22174,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -22038,7 +22210,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -22048,12 +22219,15 @@ } }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -22063,7 +22237,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -26027,6 +26200,16 @@ "license": "MIT", "optional": true }, + "node_modules/mongodb-redact": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mongodb-redact/-/mongodb-redact-1.3.0.tgz", + "integrity": "sha512-6qMkQ9RnB7Z92G8c4mCkrDGaqwekuaUreaX+XnjAl/t3oKHJ+u7C+kfFLxSueJIBc1qtI4AtK0TO4yxOHyJqTw==", + "license": "Apache-2.0", + "dependencies": { + "mongodb-connection-string-url": "^3.0.1 || ^7.0.0", + "regexp.escape": "^2.0.1" + } + }, "node_modules/mongodb-runner": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-6.0.0.tgz", @@ -27614,14 +27797,16 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -27926,6 +28111,23 @@ "node": ">=6" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-cancelable": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", @@ -30120,6 +30322,28 @@ "node": ">=8" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -30153,15 +30377,37 @@ "@babel/runtime": "^7.8.4" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", - "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "node_modules/regexp.escape": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexp.escape/-/regexp.escape-2.0.1.tgz", + "integrity": "sha512-JItRb4rmyTzmERBkAf6J87LjDPy/RscIwmaJQ3gsFlAzrmZbZU8LwBw5IydFZXW9hqpgbPlGbMhtpqtuAhMgtg==", "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", "es-errors": "^1.3.0", + "for-each": "^0.3.3", + "safe-regex-test": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "set-function-name": "^2.0.2" }, "engines": { @@ -30772,6 +31018,31 @@ "license": "0BSD", "optional": true }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -30792,15 +31063,40 @@ ], "license": "MIT" }, - "node_modules/safe-regex-test": { + "node_modules/safe-push-apply": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -31143,6 +31439,20 @@ "node": ">= 0.4" } }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -32075,13 +32385,13 @@ } }, "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "license": "MIT", "dependencies": { - "internal-slot": "^1.0.4" + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -32260,15 +32570,18 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -32278,28 +32591,35 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -33321,15 +33641,75 @@ "node": ">= 0.6" } }, - "node_modules/typed-array-length": { + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -33399,15 +33779,18 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -34474,26 +34857,61 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, "node_modules/which-collection": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, "license": "MIT", "dependencies": { "is-map": "^2.0.3", @@ -34516,15 +34934,17 @@ "license": "ISC" }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -35756,6 +36176,7 @@ "js-yaml": "^4.1.0", "mongodb-connection-string-url": "^3.0.2", "mongodb-log-writer": "^2.4.3", + "mongodb-redact": "^1.3.0", "numeral": "^2.0.6", "pretty-repl": "^4.0.1", "semver": "^7.5.4", @@ -35935,8 +36356,7 @@ "version": "2.4.9", "license": "Apache-2.0", "dependencies": { - "mongodb-connection-string-url": "^3.0.2", - "mongodb-redact": "^1.1.5" + "mongodb-redact": "^1.3.0" }, "devDependencies": { "@mongodb-js/eslint-config-mongosh": "^1.0.0", @@ -35944,19 +36364,12 @@ "@mongodb-js/tsconfig-mongosh": "^1.0.0", "depcheck": "^1.4.7", "eslint": "^7.25.0", - "mongodb-connection-string-url": "^3.0.2", "prettier": "^2.8.8" }, "engines": { "node": ">=14.15.1" } }, - "packages/history/node_modules/mongodb-redact": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/mongodb-redact/-/mongodb-redact-1.1.5.tgz", - "integrity": "sha512-bLTHIHviJvTGJDvCECDBEDMk7beJQ4Fvoec50hgIax98ojzyTk9xIyrewFPM7yzlDVKTkkh864uxlkkTTLVsbg==", - "license": "Apache-2.0" - }, "packages/i18n": { "name": "@mongosh/i18n", "version": "2.19.0", @@ -36072,10 +36485,9 @@ "@mongodb-js/device-id": "^0.2.1", "@mongodb-js/devtools-connect": "^3.9.4", "@mongosh/errors": "2.4.4", - "@mongosh/history": "2.4.9", "@mongosh/types": "^3.14.0", "mongodb-log-writer": "^2.4.3", - "mongodb-redact": "^1.1.5", + "mongodb-redact": "^1.3.0", "native-machine-id": "^0.1.1" }, "devDependencies": { @@ -36158,12 +36570,6 @@ "dev": true, "license": "MIT" }, - "packages/logging/node_modules/mongodb-redact": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/mongodb-redact/-/mongodb-redact-1.1.5.tgz", - "integrity": "sha512-bLTHIHviJvTGJDvCECDBEDMk7beJQ4Fvoec50hgIax98ojzyTk9xIyrewFPM7yzlDVKTkkh864uxlkkTTLVsbg==", - "license": "Apache-2.0" - }, "packages/logging/node_modules/nise": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz", @@ -36321,7 +36727,7 @@ "@mongosh/i18n": "^2.19.0", "@mongosh/service-provider-core": "3.6.3", "@mongosh/shell-bson": "1.0.4", - "mongodb-redact": "^1.1.5", + "mongodb-redact": "^1.3.0", "mongodb-schema": "^12.6.2" }, "devDependencies": { @@ -36342,12 +36748,6 @@ "node": ">=14.15.1" } }, - "packages/shell-api/node_modules/mongodb-redact": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/mongodb-redact/-/mongodb-redact-1.1.5.tgz", - "integrity": "sha512-bLTHIHviJvTGJDvCECDBEDMk7beJQ4Fvoec50hgIax98ojzyTk9xIyrewFPM7yzlDVKTkkh864uxlkkTTLVsbg==", - "license": "Apache-2.0" - }, "packages/shell-bson": { "name": "@mongosh/shell-bson", "version": "1.0.4", diff --git a/packages/cli-repl/package.json b/packages/cli-repl/package.json index 2bad45ae67..f6b2570ed3 100644 --- a/packages/cli-repl/package.json +++ b/packages/cli-repl/package.json @@ -87,30 +87,30 @@ "js-yaml": "^4.1.0", "mongodb-connection-string-url": "^3.0.2", "mongodb-log-writer": "^2.4.3", + "mongodb-redact": "^1.3.0", "numeral": "^2.0.6", "pretty-repl": "^4.0.1", "semver": "^7.5.4", "strip-ansi": "^6.0.0", "text-table": "^0.2.0", - "yargs-parser": "^20.2.4", - "glibc-version": "^1.0.0" + "yargs-parser": "^20.2.4" }, "devDependencies": { - "mongodb": "^6.19.0", "@mongodb-js/eslint-config-mongosh": "^1.0.0", "@mongodb-js/prettier-config-devtools": "^1.0.1", "@mongodb-js/sbom-tools": "^0.8.1", "@mongodb-js/tsconfig-mongosh": "^1.0.0", "@types/ansi-escape-sequences": "^4.0.0", + "@types/chai-as-promised": "^7.1.3", "@types/js-yaml": "^4.0.5", "@types/node": "^22.15.30", "@types/numeral": "^2.0.2", "@types/text-table": "^0.2.1", "@types/yargs-parser": "^15.0.0", - "@types/chai-as-promised": "^7.1.3", "chai-as-promised": "^7.1.1", "depcheck": "^1.4.7", "eslint": "^7.25.0", + "mongodb": "^6.19.0", "mongodb-crypt-library-dummy": "^1.0.2", "prettier": "^2.8.8", "webpack-merge": "^5.8.0" diff --git a/packages/cli-repl/src/cli-repl.ts b/packages/cli-repl/src/cli-repl.ts index b9a5b30c70..7c24961ff1 100644 --- a/packages/cli-repl/src/cli-repl.ts +++ b/packages/cli-repl/src/cli-repl.ts @@ -3,7 +3,7 @@ import { MongoshRuntimeError, MongoshWarning, } from '@mongosh/errors'; -import { redactURICredentials } from '@mongosh/history'; +import { redactConnectionString, redact } from 'mongodb-redact'; import i18n from '@mongosh/i18n'; import type { AutoEncryptionOptions } from '@mongosh/service-provider-core'; import { EJSON, ObjectId } from 'bson'; @@ -11,7 +11,6 @@ import { NodeDriverServiceProvider } from '@mongosh/service-provider-node-driver import type { CliOptions, DevtoolsConnectOptions } from '@mongosh/arg-parser'; import { SnippetManager } from '@mongosh/snippet-manager'; import { Editor } from '@mongosh/editor'; -import { redactSensitiveData } from '@mongosh/history'; import type { Analytics as SegmentAnalytics } from '@segment/analytics-node'; import askpassword from 'askpassword'; import { EventEmitter, once } from 'events'; @@ -306,7 +305,7 @@ export class CliRepl implements MongoshIOProvider { 'Starting log', { execPath: process.execPath, - envInfo: redactSensitiveData(this.getLoggedEnvironmentVariables()), + envInfo: redact(this.getLoggedEnvironmentVariables()), ...(await buildInfo()), } ); @@ -905,7 +904,7 @@ export class CliRepl implements MongoshIOProvider { this.output.write( i18n.__(CONNECTING) + '\t\t' + - this.clr(redactURICredentials(driverUri), 'mongosh:uri') + + this.clr(redactConnectionString(driverUri), 'mongosh:uri') + '\n' ); } diff --git a/packages/cli-repl/src/run.ts b/packages/cli-repl/src/run.ts index f5360604f4..7e18e526bf 100644 --- a/packages/cli-repl/src/run.ts +++ b/packages/cli-repl/src/run.ts @@ -23,7 +23,7 @@ import { getStoragePaths, getGlobalConfigPaths } from './config-directory'; import { getCryptLibraryPaths } from './crypt-library-paths'; import { getTlsCertificateSelector } from './tls-certificate-selector'; import { applyPacProxyS390XPatch } from './pac-proxy-s390x-patch'; -import { redactURICredentials } from '@mongosh/history'; +import { redactConnectionString } from 'mongodb-redact'; import { generateConnectionInfoFromCliArgs } from '@mongosh/arg-parser'; import askcharacter from 'askcharacter'; import { PassThrough } from 'stream'; @@ -218,7 +218,7 @@ async function main() { driverInfo: { name: 'mongosh', version }, }; - const title = `mongosh ${redactURICredentials( + const title = `mongosh ${redactConnectionString( connectionInfo.connectionString )}`; process.title = title; diff --git a/packages/cli-repl/src/smoke-tests.ts b/packages/cli-repl/src/smoke-tests.ts index 6b880c356e..d7c71cbba7 100644 --- a/packages/cli-repl/src/smoke-tests.ts +++ b/packages/cli-repl/src/smoke-tests.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import { promises as fs } from 'fs'; import { once } from 'events'; -import { redactURICredentials } from '@mongosh/history'; +import { redactConnectionString } from 'mongodb-redact'; import fleSmokeTestScript from './smoke-tests-fle'; import { baseBuildInfo, buildInfo } from './build-info'; import escapeRegexp from 'escape-string-regexp'; @@ -469,7 +469,7 @@ async function runSmokeTest({ stderr: includeStderr ? stderr : '', executable, actualExitCode, - args: args.map((arg) => redactURICredentials(arg)), + args: args.map((arg) => redactConnectionString(arg)), }; try { assert.match(includeStderr ? `${stdout}\n${stderr}` : stdout, output); diff --git a/packages/history/package.json b/packages/history/package.json index b33e5dd900..532367fb19 100644 --- a/packages/history/package.json +++ b/packages/history/package.json @@ -35,8 +35,7 @@ "unitTestsOnly": true }, "dependencies": { - "mongodb-connection-string-url": "^3.0.2", - "mongodb-redact": "^1.1.5" + "mongodb-redact": "^1.3.0" }, "devDependencies": { "@mongodb-js/eslint-config-mongosh": "^1.0.0", @@ -44,7 +43,6 @@ "@mongodb-js/tsconfig-mongosh": "^1.0.0", "depcheck": "^1.4.7", "eslint": "^7.25.0", - "mongodb-connection-string-url": "^3.0.2", "prettier": "^2.8.8" } } diff --git a/packages/history/src/history.ts b/packages/history/src/history.ts index 94409160fb..ffc2fd9afa 100644 --- a/packages/history/src/history.ts +++ b/packages/history/src/history.ts @@ -1,5 +1,4 @@ -import { shouldRedactCommand } from './redact'; -import { redact } from 'mongodb-redact'; +import { shouldRedactCommand, redact } from 'mongodb-redact'; /** * Modifies the most recent command in history based on sensitive information. diff --git a/packages/history/src/index.ts b/packages/history/src/index.ts index 26d68c84b4..37b2bd95ef 100644 --- a/packages/history/src/index.ts +++ b/packages/history/src/index.ts @@ -1,5 +1 @@ export { changeHistory } from './history'; -export { - shouldRedactCommand, - redactUriCredentials as redactURICredentials, -} from './redact'; diff --git a/packages/history/src/redact.ts b/packages/history/src/redact.ts deleted file mode 100644 index bd2d929e2e..0000000000 --- a/packages/history/src/redact.ts +++ /dev/null @@ -1,35 +0,0 @@ -// TODO: This will completely be replaced by mongodb-redact once it is released - -/** - * Regex pattern for commands that contain sensitive information and should be - * completely removed from history rather than redacted. - * - * These commands typically involve authentication or connection strings with credentials. - */ -const HIDDEN_COMMANDS = String.raw`\b(createUser|auth|updateUser|changeUserPassword|connect|Mongo)\b`; - -/** - * Checks if a mongosh command should be redacted because it often contains sensitive information like credentials. - * - * @param input - The command string to check - * @returns true if the command should be hidden/redacted, false otherwise - * - * @example - * ```typescript - * shouldRedactCommand('db.createUser({user: "admin", pwd: "secret"})') - * // Returns: true - * - * shouldRedactCommand('db.getUsers()') - * // Returns: false - * ``` - */ -export function shouldRedactCommand(input: string): boolean { - const hiddenCommands = new RegExp(HIDDEN_COMMANDS, 'g'); - return hiddenCommands.test(input); -} - -import { redactConnectionString } from 'mongodb-connection-string-url'; - -export function redactUriCredentials(uri: string): string { - return redactConnectionString(uri); -} diff --git a/packages/logging/package.json b/packages/logging/package.json index 90ca4f7752..7a47adad61 100644 --- a/packages/logging/package.json +++ b/packages/logging/package.json @@ -20,10 +20,9 @@ "@mongodb-js/device-id": "^0.2.1", "@mongodb-js/devtools-connect": "^3.9.4", "@mongosh/errors": "2.4.4", - "@mongosh/history": "2.4.9", "@mongosh/types": "^3.14.0", "mongodb-log-writer": "^2.4.3", - "mongodb-redact": "^1.1.5", + "mongodb-redact": "^1.3.0", "native-machine-id": "^0.1.1" }, "devDependencies": { diff --git a/packages/logging/src/logging-and-telemetry.ts b/packages/logging/src/logging-and-telemetry.ts index 441d85348c..918516a5e1 100644 --- a/packages/logging/src/logging-and-telemetry.ts +++ b/packages/logging/src/logging-and-telemetry.ts @@ -1,5 +1,8 @@ -import { redact } from 'mongodb-redact'; -import { shouldRedactCommand } from '@mongosh/history'; +import { + redact, + redactConnectionString, + shouldRedactCommand, +} from 'mongodb-redact'; import type { MongoshBus, ApiEventWithArguments, @@ -326,7 +329,7 @@ export class LoggingAndTelemetry implements MongoshLoggingAndTelemetry { onBus('mongosh:connect', (args: ConnectEvent) => { const { uri, resolved_hostname, ...argsWithoutUriAndHostname } = args; - const connectionUri = uri && redactURICredentials(uri); + const connectionUri = uri && redactConnectionString(uri); const atlasHostname = { atlas_hostname: args.is_atlas ? resolved_hostname : null, }; @@ -516,6 +519,10 @@ export class LoggingAndTelemetry implements MongoshLoggingAndTelemetry { }); onBus('mongosh:api-call-with-arguments', (args: ApiEventWithArguments) => { + if (shouldRedactCommand(args.method)) { + return; + } + // TODO: redactInfo cannot handle circular or otherwise nontrivial input let arg; try { @@ -937,7 +944,7 @@ export class LoggingAndTelemetry implements MongoshLoggingAndTelemetry { }, }, 'mongosh', - (uri) => redactURICredentials(uri) + (uri) => redactConnectionString(uri) ); } } diff --git a/packages/shell-api/package.json b/packages/shell-api/package.json index 87c787e028..5d8947ae38 100644 --- a/packages/shell-api/package.json +++ b/packages/shell-api/package.json @@ -54,12 +54,12 @@ "@babel/core": "^7.26.10", "@babel/types": "^7.26.10", "@mongosh/arg-parser": "^3.22.0", - "@mongosh/shell-bson": "1.0.4", "@mongosh/errors": "2.4.4", "@mongosh/history": "2.4.9", "@mongosh/i18n": "^2.19.0", "@mongosh/service-provider-core": "3.6.3", - "mongodb-redact": "^1.1.5", + "@mongosh/shell-bson": "1.0.4", + "mongodb-redact": "^1.3.0", "mongodb-schema": "^12.6.2" }, "devDependencies": { diff --git a/packages/shell-api/src/collection.ts b/packages/shell-api/src/collection.ts index 3836231685..a0825ff36c 100644 --- a/packages/shell-api/src/collection.ts +++ b/packages/shell-api/src/collection.ts @@ -92,11 +92,11 @@ import { MongoshInternalError, } from '@mongosh/errors'; import Bulk from './bulk'; -import { HIDDEN_COMMANDS } from '@mongosh/history'; import PlanCache from './plan-cache'; import ChangeStreamCursor from './change-stream-cursor'; import { ShellApiErrors } from './error-codes'; import type { MQLDocument, MQLQuery, MQLPipeline } from './mql-types'; +import { shouldRedactCommand } from 'mongodb-redact'; export type CollectionWithSchema< M extends GenericServerSideSchema = GenericServerSideSchema, @@ -1625,8 +1625,7 @@ export class Collection< } } - const hiddenCommands = new RegExp(HIDDEN_COMMANDS); - if (typeof commandName === 'string' && !hiddenCommands.test(commandName)) { + if (typeof commandName === 'string' && !shouldRedactCommand(commandName)) { this._emitCollectionApiCall('runCommand', { commandName }); } const cmd = diff --git a/packages/shell-api/src/field-level-encryption.ts b/packages/shell-api/src/field-level-encryption.ts index 884d97e3eb..c4749ee5aa 100644 --- a/packages/shell-api/src/field-level-encryption.ts +++ b/packages/shell-api/src/field-level-encryption.ts @@ -24,7 +24,7 @@ import Cursor from './cursor'; import type { DeleteResult } from './result'; import { assertArgsDefinedType, assertKeysDefined } from './helpers'; import { asPrintable } from './enums'; -import { redactURICredentials } from '@mongosh/history'; +import { redactConnectionString } from 'mongodb-redact'; import type Mongo from './mongo'; import { CommonErrors, @@ -111,7 +111,7 @@ export class ClientEncryption extends ShellApiWithMongoClass { } [asPrintable](): string { - return `ClientEncryption class for ${redactURICredentials( + return `ClientEncryption class for ${redactConnectionString( this._mongo._uri )}`; } @@ -280,7 +280,7 @@ export class KeyVault extends ShellApiWithMongoClass { } [asPrintable](): string { - return `KeyVault class for ${redactURICredentials(this._mongo._uri)}`; + return `KeyVault class for ${redactConnectionString(this._mongo._uri)}`; } createKey(kms: 'local', keyAltNames?: string[]): Promise; diff --git a/packages/shell-api/src/mongo.ts b/packages/shell-api/src/mongo.ts index 76ee229807..df45366d2f 100644 --- a/packages/shell-api/src/mongo.ts +++ b/packages/shell-api/src/mongo.ts @@ -49,7 +49,7 @@ import { Database } from './database'; import type ShellInstanceState from './shell-instance-state'; import { ClientBulkWriteResult } from './result'; import { CommandResult } from './result'; -import { redactURICredentials } from '@mongosh/history'; +import { redactConnectionString } from 'mongodb-redact'; import { asPrintable, ServerVersions, Topologies } from './enums'; import Session from './session'; import type { GenericServerSideSchema, StringKey } from './helpers'; @@ -196,7 +196,7 @@ export default class Mongo< * Internal method to determine what is printed for this class. */ [asPrintable](): string { - return redactURICredentials(this._uri); + return redactConnectionString(this._uri); } /** @@ -859,7 +859,7 @@ export default class Mongo< this._emitMongoApiCall('watch', { pipeline, options }); const cursor = new ChangeStreamCursor( this._serviceProvider.watch(pipeline, options), - redactURICredentials(this._uri), + redactConnectionString(this._uri), this ); if ( diff --git a/packages/shell-api/src/replica-set.ts b/packages/shell-api/src/replica-set.ts index 064b502118..65c7788186 100644 --- a/packages/shell-api/src/replica-set.ts +++ b/packages/shell-api/src/replica-set.ts @@ -4,7 +4,7 @@ import { MongoshInvalidInputError, MongoshRuntimeError, } from '@mongosh/errors'; -import { redactURICredentials } from '@mongosh/history'; +import { redactConnectionString } from 'mongodb-redact'; import type { Document } from '@mongosh/service-provider-core'; import type Mongo from './mongo'; import type { Database, DatabaseWithSchema } from './database'; @@ -419,7 +419,7 @@ export default class ReplicaSet< * Internal method to determine what is printed for this class. */ [asPrintable](): string { - return `ReplicaSet class connected to ${redactURICredentials( + return `ReplicaSet class connected to ${redactConnectionString( this._database._mongo._uri )} via db ${this._database._name}`; } diff --git a/packages/shell-api/src/shard.ts b/packages/shell-api/src/shard.ts index 8f09ad0193..633b497187 100644 --- a/packages/shell-api/src/shard.ts +++ b/packages/shell-api/src/shard.ts @@ -26,7 +26,7 @@ import { import { ServerVersions, asPrintable } from './enums'; import type { UpdateResult } from './result'; import { CommandResult } from './result'; -import { redactURICredentials } from '@mongosh/history'; +import { redactConnectionString } from 'mongodb-redact'; import type Mongo from './mongo'; import type AggregationCursor from './aggregation-cursor'; import type RunCommandCursor from './run-command-cursor'; @@ -53,7 +53,7 @@ export default class Shard< * Internal method to determine what is printed for this class. */ [asPrintable](): string { - return `Shard class connected to ${redactURICredentials( + return `Shard class connected to ${redactConnectionString( this._database._mongo._uri )} via db ${this._database._name}`; } diff --git a/packages/shell-api/src/shell-instance-state.ts b/packages/shell-api/src/shell-instance-state.ts index 709b1de2a5..17bd39dd13 100644 --- a/packages/shell-api/src/shell-instance-state.ts +++ b/packages/shell-api/src/shell-instance-state.ts @@ -17,7 +17,7 @@ import type { ShellUserConfig, } from '@mongosh/types'; import { EventEmitter } from 'events'; -import { redactURICredentials } from '@mongosh/history'; +import { redactConnectionString } from 'mongodb-redact'; import { toIgnore } from './decorators'; import { ALL_PLATFORMS, @@ -304,7 +304,7 @@ export class ShellInstanceState { api_version: apiVersionInfo?.version, api_strict: apiVersionInfo?.strict, api_deprecation_errors: apiVersionInfo?.deprecationErrors, - uri: redactURICredentials(connectionInfo?.extraInfo?.uri ?? ''), + uri: redactConnectionString(connectionInfo?.extraInfo?.uri ?? ''), }); return connectionInfo; } From a202007cc4bf43bbd7c86878a942c76451d74f24 Mon Sep 17 00:00:00 2001 From: gagik Date: Wed, 19 Nov 2025 10:57:42 +0100 Subject: [PATCH 3/6] chore: fixup --- packages/shell-api/src/database.ts | 8 +++----- packages/shell-evaluator/src/shell-evaluator.ts | 7 +++---- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/packages/shell-api/src/database.ts b/packages/shell-api/src/database.ts index 4826b9b5e7..2841fbf5fd 100644 --- a/packages/shell-api/src/database.ts +++ b/packages/shell-api/src/database.ts @@ -50,7 +50,7 @@ import { MongoshUnimplementedError, MongoshInternalError, } from '@mongosh/errors'; -import { HIDDEN_COMMANDS } from '@mongosh/history'; +import { shouldRedactCommand } from 'mongodb-redact'; import type Session from './session'; import ChangeStreamCursor from './change-stream-cursor'; import { ShellApiErrors } from './error-codes'; @@ -401,8 +401,7 @@ export class Database< } try { - const hiddenCommands = new RegExp(HIDDEN_COMMANDS); - if (!Object.keys(cmd).some((k) => hiddenCommands.test(k))) { + if (!Object.keys(cmd).some((k) => shouldRedactCommand(k))) { this._emitDatabaseApiCall('runCommand', { cmd, options }); } return await this._runCommand(cmd, options); @@ -435,8 +434,7 @@ export class Database< cmd = { [cmd]: 1 }; } - const hiddenCommands = new RegExp(HIDDEN_COMMANDS); - if (!Object.keys(cmd).some((k) => hiddenCommands.test(k))) { + if (!Object.keys(cmd).some((k) => shouldRedactCommand(k))) { this._emitDatabaseApiCall('adminCommand', { cmd }); } return await this._runAdminCommand(cmd, {}); diff --git a/packages/shell-evaluator/src/shell-evaluator.ts b/packages/shell-evaluator/src/shell-evaluator.ts index 75ac1966a3..ab5f87448b 100644 --- a/packages/shell-evaluator/src/shell-evaluator.ts +++ b/packages/shell-evaluator/src/shell-evaluator.ts @@ -12,7 +12,7 @@ type EvaluationFunction = ( filename: string ) => Promise; -import { HIDDEN_COMMANDS, redactSensitiveData } from '@mongosh/history'; +import { shouldRedactCommand, redact } from 'mongodb-redact'; import { TimingCategories, type TimingCategory } from '@mongosh/types'; let hasAlreadyRunGlobalRuntimeSupportEval = false; @@ -101,10 +101,9 @@ class ShellEvaluator { let rewrittenInput = this.asyncWriter.process(input); this.markTime?.(TimingCategories.AsyncRewrite, 'done async rewrite'); - const hiddenCommands = RegExp(HIDDEN_COMMANDS, 'g'); - if (!hiddenCommands.test(input) && !hiddenCommands.test(rewrittenInput)) { + if (!shouldRedactCommand(input) && !shouldRedactCommand(rewrittenInput)) { this.instanceState.messageBus.emit('mongosh:evaluate-input', { - input: redactSensitiveData(trimmedInput), + input: redact(trimmedInput), }); } From 3cf5d52e913a49c3e0d2717330b6041270b7133f Mon Sep 17 00:00:00 2001 From: gagik Date: Wed, 19 Nov 2025 11:24:41 +0100 Subject: [PATCH 4/6] chore: remove redundant history packages --- package-lock.json | 2 -- packages/cli-repl/package.json | 1 + packages/shell-api/package.json | 1 - packages/shell-evaluator/package.json | 1 - 4 files changed, 1 insertion(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index c1bce2255b..547b67b20a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36723,7 +36723,6 @@ "@babel/types": "^7.26.10", "@mongosh/arg-parser": "^3.22.0", "@mongosh/errors": "2.4.4", - "@mongosh/history": "2.4.9", "@mongosh/i18n": "^2.19.0", "@mongosh/service-provider-core": "3.6.3", "@mongosh/shell-bson": "1.0.4", @@ -36777,7 +36776,6 @@ "license": "Apache-2.0", "dependencies": { "@mongosh/async-rewriter2": "2.4.10", - "@mongosh/history": "2.4.9", "@mongosh/shell-api": "^3.26.2" }, "devDependencies": { diff --git a/packages/cli-repl/package.json b/packages/cli-repl/package.json index f6b2570ed3..0a0ea898bb 100644 --- a/packages/cli-repl/package.json +++ b/packages/cli-repl/package.json @@ -93,6 +93,7 @@ "semver": "^7.5.4", "strip-ansi": "^6.0.0", "text-table": "^0.2.0", + "glibc-version": "^1.0.0", "yargs-parser": "^20.2.4" }, "devDependencies": { diff --git a/packages/shell-api/package.json b/packages/shell-api/package.json index 5d8947ae38..ad6d5ca76d 100644 --- a/packages/shell-api/package.json +++ b/packages/shell-api/package.json @@ -55,7 +55,6 @@ "@babel/types": "^7.26.10", "@mongosh/arg-parser": "^3.22.0", "@mongosh/errors": "2.4.4", - "@mongosh/history": "2.4.9", "@mongosh/i18n": "^2.19.0", "@mongosh/service-provider-core": "3.6.3", "@mongosh/shell-bson": "1.0.4", diff --git a/packages/shell-evaluator/package.json b/packages/shell-evaluator/package.json index 36e2b0d520..6d2faa121e 100644 --- a/packages/shell-evaluator/package.json +++ b/packages/shell-evaluator/package.json @@ -46,7 +46,6 @@ }, "dependencies": { "@mongosh/async-rewriter2": "2.4.10", - "@mongosh/history": "2.4.9", "@mongosh/shell-api": "^3.26.2" } } From 34e7852f72acd54bb81169f01fce4e4c103e7eff Mon Sep 17 00:00:00 2001 From: gagik Date: Wed, 19 Nov 2025 12:34:28 +0100 Subject: [PATCH 5/6] chore: redact instead of avoiding --- .../logging/src/logging-and-telemetry.spec.ts | 22 ++++++++++++++----- packages/logging/src/logging-and-telemetry.ts | 12 +++++----- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/packages/logging/src/logging-and-telemetry.spec.ts b/packages/logging/src/logging-and-telemetry.spec.ts index 7d5aa7843a..92ab7a6244 100644 --- a/packages/logging/src/logging-and-telemetry.spec.ts +++ b/packages/logging/src/logging-and-telemetry.spec.ts @@ -1132,13 +1132,13 @@ describe('MongoshLoggingAndTelemetry', function () { expect(analyticsOutput).to.be.empty; }); - it('does not log sensitive commands', async function () { + it('redacts logging of sensitive commands', async function () { loggingAndTelemetry.attachLogger(logger); await (loggingAndTelemetry as LoggingAndTelemetry).setupTelemetryPromise; expect(logOutput).to.have.lengthOf(0); - // Test that sensitive commands are not logged + // Test that sensitive commands are redacted bus.emit('mongosh:evaluate-input', { input: 'db.createUser({user: "admin", pwd: "password", roles: []})', }); @@ -1161,11 +1161,23 @@ describe('MongoshLoggingAndTelemetry', function () { bus.emit('mongosh:evaluate-input', { input: 'show dbs' }); // Should only have logged the non-sensitive commands - expect(logOutput).to.have.lengthOf(2); + expect(logOutput).to.have.lengthOf(8); expect(logOutput[0].msg).to.equal('Evaluating input'); - expect(logOutput[0].attr.input).to.equal('db.getUsers()'); + expect(logOutput[0].attr.input).to.equal(''); expect(logOutput[1].msg).to.equal('Evaluating input'); - expect(logOutput[1].attr.input).to.equal('show dbs'); + expect(logOutput[1].attr.input).to.equal(''); + expect(logOutput[2].msg).to.equal('Evaluating input'); + expect(logOutput[2].attr.input).to.equal(''); + expect(logOutput[3].msg).to.equal('Evaluating input'); + expect(logOutput[3].attr.input).to.equal(''); + expect(logOutput[4].msg).to.equal('Evaluating input'); + expect(logOutput[4].attr.input).to.equal(''); + expect(logOutput[5].msg).to.equal('Evaluating input'); + expect(logOutput[5].attr.input).to.equal(''); + expect(logOutput[6].msg).to.equal('Evaluating input'); + expect(logOutput[6].attr.input).to.equal('db.getUsers()'); + expect(logOutput[7].msg).to.equal('Evaluating input'); + expect(logOutput[7].attr.input).to.equal('show dbs'); }); it('tracks custom logging events', async function () { diff --git a/packages/logging/src/logging-and-telemetry.ts b/packages/logging/src/logging-and-telemetry.ts index 918516a5e1..649c114124 100644 --- a/packages/logging/src/logging-and-telemetry.ts +++ b/packages/logging/src/logging-and-telemetry.ts @@ -463,8 +463,14 @@ export class LoggingAndTelemetry implements MongoshLoggingAndTelemetry { }); onBus('mongosh:evaluate-input', (args: EvaluateInputEvent) => { - // Skip logging sensitive commands if (shouldRedactCommand(args.input)) { + this.log.info( + 'MONGOSH', + mongoLogId(1_000_000_007), + 'repl', + 'Evaluating input', + { input: '' } + ); return; } @@ -519,10 +525,6 @@ export class LoggingAndTelemetry implements MongoshLoggingAndTelemetry { }); onBus('mongosh:api-call-with-arguments', (args: ApiEventWithArguments) => { - if (shouldRedactCommand(args.method)) { - return; - } - // TODO: redactInfo cannot handle circular or otherwise nontrivial input let arg; try { From 64132af0d5128166063082b3500ddc14f12d688d Mon Sep 17 00:00:00 2001 From: gagik Date: Wed, 19 Nov 2025 17:09:50 +0100 Subject: [PATCH 6/6] chore: add shell evauator --- package-lock.json | 3 ++- packages/shell-evaluator/package.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 547b67b20a..374e74f063 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36776,7 +36776,8 @@ "license": "Apache-2.0", "dependencies": { "@mongosh/async-rewriter2": "2.4.10", - "@mongosh/shell-api": "^3.26.2" + "@mongosh/shell-api": "^3.26.2", + "mongodb-redact": "^1.3.0" }, "devDependencies": { "@mongodb-js/eslint-config-mongosh": "^1.0.0", diff --git a/packages/shell-evaluator/package.json b/packages/shell-evaluator/package.json index 6d2faa121e..c5d3742c53 100644 --- a/packages/shell-evaluator/package.json +++ b/packages/shell-evaluator/package.json @@ -46,6 +46,7 @@ }, "dependencies": { "@mongosh/async-rewriter2": "2.4.10", - "@mongosh/shell-api": "^3.26.2" + "@mongosh/shell-api": "^3.26.2", + "mongodb-redact": "^1.3.0" } }