diff --git a/extensions/notification/configManager/MongoConfigManager.js b/extensions/notification/configManager/MongoConfigManager.js index 18eba3f1b..ce26da086 100644 --- a/extensions/notification/configManager/MongoConfigManager.js +++ b/extensions/notification/configManager/MongoConfigManager.js @@ -97,18 +97,13 @@ class MongoConfigManager extends BaseConfigManager { */ _setupMongoClient(cb) { const mongoUrl = constructConnectionString(this._mongoConfig); - MongoClient.connect(mongoUrl, { + const client = new MongoClient(mongoUrl, { replicaSet: this._mongoConfig.replicaSet, useNewUrlParser: true, - }, - (err, client) => { - if (err) { - this._logger.error('Could not connect to MongoDB', { - method: 'MongoConfigManager._setupMongoClient', - error: err.message, - }); - return cb(err); - } + readPreference: this._mongoConfig.readPreference, + }); + + return client.connect().then(client => { this._logger.debug('Connected to MongoDB', { method: 'MongoConfigManager._setupMongoClient', }); @@ -133,6 +128,12 @@ class MongoConfigManager extends BaseConfigManager { } catch (error) { return cb(error); } + }).catch(err => { + this._logger.error('Could not connect to MongoDB', { + method: 'MongoConfigManager._setupMongoClient', + error: err.message, + }); + return cb(err); }); } diff --git a/extensions/oplogPopulator/OplogPopulator.js b/extensions/oplogPopulator/OplogPopulator.js index cd4affb9b..788aea45a 100644 --- a/extensions/oplogPopulator/OplogPopulator.js +++ b/extensions/oplogPopulator/OplogPopulator.js @@ -80,11 +80,13 @@ class OplogPopulator { */ async _setupMongoClient() { try { - const client = await MongoClient.connect(this._mongoUrl, { + let client = new MongoClient(this._mongoUrl, { replicaSet: this._replicaSet, useNewUrlParser: true, useUnifiedTopology: true, + readPreference: this._mongoConfig.readPreference, }); + client = await client.connect(); // connect to metadata DB this._mongoClient = client.db(this._database, { ignoreUndefined: true, diff --git a/extensions/utils/LocationStatusStream.js b/extensions/utils/LocationStatusStream.js index 1dd0fb949..3f0b3a29a 100644 --- a/extensions/utils/LocationStatusStream.js +++ b/extensions/utils/LocationStatusStream.js @@ -63,18 +63,12 @@ class LocationStatusStream { */ _setupMongoClient(cb) { const mongoUrl = constructConnectionString(this._mongoConfig); - MongoClient.connect(mongoUrl, { + const client = new MongoClient(mongoUrl, { replicaSet: this._mongoConfig.replicaSet, useNewUrlParser: true, useUnifiedTopology: true, - }, (err, client) => { - if (err) { - this._log.error('Could not connect to MongoDB', { - method: 'ServiceStatusManager._setupMongoClient', - error: err.message, - }); - return cb(err); - } + }); + return client.connect().then(client => { // connect to metadata DB this._mongoClient = client.db(this._mongoConfig.database, { ignoreUndefined: true, @@ -96,6 +90,12 @@ class LocationStatusStream { return cb(); }); return undefined; + }).catch(err => { + this._log.error('Could not connect to MongoDB', { + method: 'ServiceStatusManager._setupMongoClient', + error: err.message, + }); + return cb(err); }); } diff --git a/lib/api/BackbeatAPI.js b/lib/api/BackbeatAPI.js index 8880b9a83..4abc64ca4 100644 --- a/lib/api/BackbeatAPI.js +++ b/lib/api/BackbeatAPI.js @@ -1335,21 +1335,14 @@ class BackbeatAPI { }); return cb(); } else { - // To be removed once the mongodb drivers are bumped - // BB-585 const mongoUrl = constructConnectionString(mongoConfig); - return MongoClient.connect(mongoUrl, { + const client = new MongoClient(mongoUrl, { replicaSet: mongoConfig.replicaSet, useNewUrlParser: true, useUnifiedTopology: true, - }, (err, client) => { - if (err) { - this._logger.error('Could not connect to MongoDB', { - method: 'BackbeatAPI._setupMongoClient', - error: err.message, - }); - return cb(err); - } + }); + + return client.connect().then(client => { // connect to metadata DB this._mongoClient = client.db(mongoConfig.database, { ignoreUndefined: true, @@ -1358,6 +1351,12 @@ class BackbeatAPI { method: 'BackbeatAPI._setupMongoClient', }); return cb(); + }).catch(err => { + this._logger.error('Could not connect to MongoDB', { + method: 'BackbeatAPI._setupMongoClient', + error: err.message, + }); + return cb(err); }); } } diff --git a/lib/util/LocationStatusManager.js b/lib/util/LocationStatusManager.js index a5f65fceb..6c9787868 100644 --- a/lib/util/LocationStatusManager.js +++ b/lib/util/LocationStatusManager.js @@ -68,19 +68,23 @@ class LocationStatusManager { * @return {undefined} */ _initCollection(cb) { - this._mongoClient.createCollection(locationStatusCollection, err => { - // in case the collection already exists, we ignore the error - if (err && err.codeName !== 'NamespaceExists') { - this._logger.error('Could not create mongo collection', { - method: 'LocationStatusManager._initCollection', - collection: locationStatusCollection, - error: err.message, - }); - return cb(err); - } - this._locationStatusColl = this._mongoClient.collection(locationStatusCollection); - return cb(); - }); + return this._mongoClient.createCollection(locationStatusCollection) + .then(() => { + this._locationStatusColl = this._mongoClient.collection(locationStatusCollection); + return cb(); + }) + .catch(err => { + if (err.codeName !== 'NamespaceExists') { + this._logger.error('Could not create mongo collection', { + method: 'LocationStatusManager._initCollection', + collection: locationStatusCollection, + error: err.message, + }); + return cb(err); + } + this._locationStatusColl = this._mongoClient.collection(locationStatusCollection); + return cb(); + }); } /** @@ -89,16 +93,17 @@ class LocationStatusManager { * @returns {undefined}} */ _listCollectionDocuments(cb) { - this._locationStatusColl.find({}, (err, cursor) => { - if (err) { + this._locationStatusColl.find({}) + .toArray() + .then(docs => cb(null, docs)) + .catch(err => { this._logger.error('Could not list documents', { method: 'LocationStatusManager._listCollectionDocuments', collection: locationStatusCollection, error: err.message, }); - } - return cursor.toArray(cb); - }); + cb(err); + }); } /** @@ -139,15 +144,14 @@ class LocationStatusManager { _id: { $in: invalidLocations } - }, err => { - if (err) { - this._logger.error('Could not delete invalid locations', { - method: 'LocationStatusManager._deleteInvalidLocations', - error: err.message, - }); - return cb(err); - } - return cb(null, locations); + }) + .then(() => cb(null, locations)) + .catch(err => { + this._logger.error('Could not delete invalid locations', { + method: 'LocationStatusManager._deleteInvalidLocations', + error: err.message, + }); + cb(err); }); } @@ -166,10 +170,10 @@ class LocationStatusManager { async.eachLimit(newLocations, 10, (location, next) => { const locationConfig = new LocationStatus(this._supportedServices); this._locationStatusStore[location] = locationConfig; - this._locationStatusColl.insert({ + this._locationStatusColl.insertOne({ _id: location, value: locationConfig.getValue(), - }, next); + }).finally(next); }, err => { if (err) { this._logger.error('Could not add new locations', { diff --git a/package.json b/package.json index 0d49f92b6..50f1c56aa 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "ioredis": "^4.9.5", "joi": "^17.6.0", "minimatch": "^3.0.4", - "mongodb": "^3.1.13", + "mongodb": "^6.10.0", "node-forge": "^0.7.6", "node-rdkafka": "^2.12.0", "node-rdkafka-prometheus": "^1.0.0", diff --git a/tests/config.json b/tests/config.json index 4536aa80f..83fcf16d1 100644 --- a/tests/config.json +++ b/tests/config.json @@ -23,7 +23,8 @@ }, "mongo": { "logName": "s3-recordlog", - "replicaSetHosts": "localhost:27018" + "replicaSetHosts": "localhost:27018", + "readPreference": "primary" }, "probeServer": { "bindAddress": "localhost", diff --git a/tests/functional/ingestion/IngestionReader.js b/tests/functional/ingestion/IngestionReader.js index 892b1b0e6..72e8cea9b 100644 --- a/tests/functional/ingestion/IngestionReader.js +++ b/tests/functional/ingestion/IngestionReader.js @@ -112,16 +112,14 @@ describe('ingestion reader tests with mock', function fD() { const topic = testConfig.extensions.ingestion.topic; async.waterfall([ next => { - MongoClient.connect(mongoUrl, {}, (err, client) => { - if (err) { - next(err); - } + const client = new MongoClient(mongoUrl, {}); + client.connect().then(client => { this.client = client; this.db = this.client.db('metadata', { ignoreUndefined: true, }); next(); - }); + }).catch(next); }, next => kafkaAdminClient.createTopic({ topic, @@ -153,10 +151,10 @@ describe('ingestion reader tests with mock', function fD() { consumer.subscribe([testConfig.extensions.ingestion.topic]); setTimeout(next, 2000); }, - next => this.db.createCollection('PENSIEVE', err => { + next => this.db.createCollection('PENSIEVE').catch(err => { assert.ifError(err); return next(); - }), + }).then(next), next => { this.m = this.db.collection('PENSIEVE'); this.m.insertOne(dummyPensieveCredentials, {}); diff --git a/tests/unit/api/BackbeatAPI.spec.js b/tests/unit/api/BackbeatAPI.spec.js index 668138dad..1974d379f 100644 --- a/tests/unit/api/BackbeatAPI.spec.js +++ b/tests/unit/api/BackbeatAPI.spec.js @@ -227,7 +227,7 @@ describe('BackbeatAPI', () => { let debugSpy; beforeEach(() => { - mongoClientStub = sinon.stub(MongoClient, 'connect'); + mongoClientStub = sinon.stub(MongoClient.prototype, 'connect'); infoSpy = sinon.spy(fakeLogger, 'info'); errorSpy = sinon.spy(fakeLogger, 'error'); debugSpy = sinon.spy(fakeLogger, 'debug'); @@ -242,7 +242,7 @@ describe('BackbeatAPI', () => { it('should connect to MongoDB when configuration is present', done => { const mockDb = { db: sinon.stub().returns({}) }; - mongoClientStub.yields(null, mockDb); + mongoClientStub.resolves(mockDb); bbapi._setupMongoClient(err => { assert.ifError(err); @@ -256,7 +256,7 @@ describe('BackbeatAPI', () => { it('should log an error when MongoDB connection fails', done => { const mockError = new Error('Connection failed'); - mongoClientStub.yields(mockError); + mongoClientStub.rejects(mockError); bbapi._setupMongoClient(err => { assert.strictEqual(err, mockError); diff --git a/tests/unit/lib/util/LocationStatusManager.spec.js b/tests/unit/lib/util/LocationStatusManager.spec.js index c6284c7fd..7de13ed7f 100644 --- a/tests/unit/lib/util/LocationStatusManager.spec.js +++ b/tests/unit/lib/util/LocationStatusManager.spec.js @@ -249,13 +249,13 @@ describe('LocationStatusManager', () => { ].forEach(params => { it(params.case, done => { lsm._mongoClient = { - createCollection: sinon.stub().yields(), + createCollection: sinon.stub().resolves(), collection: () => ({ - find: sinon.stub().yields(null, { - toArray: sinon.stub().yields(null, params.mongoLocations), + find: sinon.stub().returns({ + toArray: sinon.stub().resolves(params.mongoLocations), }), - insert: sinon.stub().yields(), - deleteMany: sinon.stub().yields(), + insertOne: sinon.stub().resolves(), + deleteMany: sinon.stub().resolves(), }), }; lsm._setupLocationStatusStore(err => { @@ -337,7 +337,7 @@ describe('LocationStatusManager', () => { describe('_addNewLocations', () => { it('should add new locations', done => { lsm._locationStatusColl = { - insert: sinon.stub().yields(), + insertOne: sinon.stub().resolves(), }; lsm._addNewLocations([], err => { assert.ifError(err); @@ -361,7 +361,7 @@ describe('LocationStatusManager', () => { } }, ]; - const deleteManyStub = sinon.stub().yields(); + const deleteManyStub = sinon.stub().resolves(); lsm._locationStatusColl = { deleteMany: deleteManyStub, }; diff --git a/tests/unit/notification/configManager/MongoConfigManager.spec.js b/tests/unit/notification/configManager/MongoConfigManager.spec.js index 3ca439a8e..3a95b5646 100644 --- a/tests/unit/notification/configManager/MongoConfigManager.spec.js +++ b/tests/unit/notification/configManager/MongoConfigManager.spec.js @@ -110,7 +110,7 @@ describe('MongoConfigManager ::', () => { collection: getCollectionStub, command: mongoCommandStub, }); - const mongoConnectStub = sinon.stub(MongoClient, 'connect').callsArgWith(2, null, { + const mongoConnectStub = sinon.stub(MongoClient.prototype, 'connect').resolves({ db: getDbStub, }); manager._setupMongoClient(err => { @@ -127,8 +127,7 @@ describe('MongoConfigManager ::', () => { it('should fail when mongo client setup fails', () => { const manager = new MongoConfigManager(params); - sinon.stub(MongoClient, 'connect').callsArgWith(2, - errors.InternalError, null); + sinon.stub(MongoClient.prototype, 'connect').rejects(errors.InternalError); manager._setupMongoClient(err => { assert.deepEqual(err, errors.InternalError); }); @@ -137,7 +136,7 @@ describe('MongoConfigManager ::', () => { it('should fail when when getting the metadata db', () => { const manager = new MongoConfigManager(params); const getDbStub = sinon.stub().throws(errors.InternalError); - sinon.stub(MongoClient, 'connect').callsArgWith(2, null, { + sinon.stub(MongoClient.prototype, 'connect').resolves({ db: getDbStub, }); manager._setupMongoClient(err => { diff --git a/tests/unit/oplogPopulator/oplogPopulator.js b/tests/unit/oplogPopulator/oplogPopulator.js index e6365b801..c808c918b 100644 --- a/tests/unit/oplogPopulator/oplogPopulator.js +++ b/tests/unit/oplogPopulator/oplogPopulator.js @@ -277,21 +277,11 @@ describe('OplogPopulator', () => { collection: collectionStub, command: mongoCommandStub, }); - const mongoConnectStub = sinon.stub(MongoClient, 'connect').resolves({ + sinon.stub(MongoClient.prototype, 'connect').resolves({ db: dbStub, }); await oplogPopulator._setupMongoClient() .then(() => { - const mongoUrl = 'mongodb://user:password@localhost:27017,localhost:27018,' + - 'localhost:27019/?w=majority&readPreference=primary&replicaSet=rs0'; - assert(mongoConnectStub.calledOnceWith( - mongoUrl, - { - replicaSet: 'rs0', - useNewUrlParser: true, - useUnifiedTopology: true, - } - )); assert(dbStub.calledOnceWith('metadata', { ignoreUndefined: true })); assert(collectionStub.calledOnceWith('__metastore')); assert(mongoCommandStub.calledOnceWith({ diff --git a/yarn.lock b/yarn.lock index 29600683f..461fa1d55 100644 --- a/yarn.lock +++ b/yarn.lock @@ -577,7 +577,7 @@ resolved "https://registry.yarnpkg.com/@log4js-node/log4js-api/-/log4js-api-1.0.2.tgz#7a8143fb33f077df3e579dca7f18fea74a02ec8b" integrity sha512-6SJfx949YEWooh/CUPpJ+F491y4BYJmknz4hUN1+RHvKoUEynKbRmhnwbk/VLmh4OthLLDNCyWXfbh4DG1cTXA== -"@mongodb-js/saslprep@^1.1.0": +"@mongodb-js/saslprep@^1.1.0", "@mongodb-js/saslprep@^1.1.5": version "1.1.9" resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz#e974bab8eca9faa88677d4ea4da8d09a52069004" integrity sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw== @@ -900,6 +900,13 @@ resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz#1306dbfa53768bcbcfc95a1c8cde367975581859" integrity sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA== +"@types/whatwg-url@^11.0.2": + version "11.0.5" + resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-11.0.5.tgz#aaa2546e60f0c99209ca13360c32c78caf2c409f" + integrity sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ== + dependencies: + "@types/webidl-conversions" "*" + "@types/whatwg-url@^8.2.1": version "8.2.2" resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63" @@ -1332,14 +1339,6 @@ bintrees@1.0.2: resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8" integrity sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw== -bl@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5" - integrity sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - bl@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e" @@ -1381,17 +1380,12 @@ browserslist@^4.24.0: node-releases "^2.0.18" update-browserslist-db "^1.1.1" -bson@^1.1.4: - version "1.1.6" - resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.6.tgz#fb819be9a60cd677e0853aee4ca712a785d6618a" - integrity sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg== - bson@^5.5.0: version "5.5.1" resolved "https://registry.yarnpkg.com/bson/-/bson-5.5.1.tgz#f5849d405711a7f23acdda9a442375df858e6833" integrity sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g== -bson@^6.8.0: +bson@^6.7.0, bson@^6.8.0: version "6.10.0" resolved "https://registry.yarnpkg.com/bson/-/bson-6.10.0.tgz#559c767cc8b605c3ab14e5896214c8f2abdd6a12" integrity sha512-ROchNosXMJD2cbQGm84KoP7vOGPO6/bOAW0veMMbzhXLqoZptcaYRVLitwvuhwhjjpU1qP4YZRWLhgETdgqUQw== @@ -1784,7 +1778,7 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -denque@^1.1.0, denque@^1.4.1: +denque@^1.1.0: version "1.5.1" resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== @@ -2611,7 +2605,6 @@ http-proxy-agent@^7.0.0: "httpagent@git+https://github.com/scality/httpagent#1.1.0": version "1.1.0" - uid "8f9958eb9cde086db7819a86582fba640a5f8876" resolved "git+https://github.com/scality/httpagent#8f9958eb9cde086db7819a86582fba640a5f8876" dependencies: agentkeepalive "^4.5.0" @@ -2715,7 +2708,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2968,7 +2961,7 @@ isarray@0.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== -isarray@^1.0.0, isarray@~1.0.0: +isarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== @@ -3720,18 +3713,13 @@ mongodb-connection-string-url@^2.6.0: "@types/whatwg-url" "^8.2.1" whatwg-url "^11.0.0" -mongodb@^3.1.13: - version "3.7.4" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.7.4.tgz#119530d826361c3e12ac409b769796d6977037a4" - integrity sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw== +mongodb-connection-string-url@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz#c13e6ac284ae401752ebafdb8cd7f16c6723b141" + integrity sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg== dependencies: - bl "^2.2.1" - bson "^1.1.4" - denque "^1.4.1" - optional-require "^1.1.8" - safe-buffer "^5.1.2" - optionalDependencies: - saslprep "^1.0.0" + "@types/whatwg-url" "^11.0.2" + whatwg-url "^13.0.0" mongodb@^5.2.0: version "5.9.2" @@ -3744,6 +3732,15 @@ mongodb@^5.2.0: optionalDependencies: "@mongodb-js/saslprep" "^1.1.0" +mongodb@^6.10.0: + version "6.10.0" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-6.10.0.tgz#20a9f1cf3c6829e75fc39e6d8c1c19f164209c2e" + integrity sha512-gP9vduuYWb9ZkDM546M+MP2qKVk5ZG2wPF63OvSRuUbqCR+11ZCAE1mOfllhlAG0wcoJY5yDL/rV3OmYEwXIzg== + dependencies: + "@mongodb-js/saslprep" "^1.1.5" + bson "^6.7.0" + mongodb-connection-string-url "^3.0.0" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4007,13 +4004,6 @@ opencollective-postinstall@^2.0.0: resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== -optional-require@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/optional-require/-/optional-require-1.1.8.tgz#16364d76261b75d964c482b2406cb824d8ec44b7" - integrity sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA== - dependencies: - require-at "^1.0.6" - optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -4142,11 +4132,6 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - process-on-spawn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.1.0.tgz#9d5999ba87b3bf0a8acb05322d69f2f5aa4fb763" @@ -4257,7 +4242,7 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== @@ -4277,19 +4262,6 @@ rambda@^7.4.0: resolved "https://registry.yarnpkg.com/rambda/-/rambda-7.5.0.tgz#1865044c59bc0b16f63026c6e5a97e4b1bbe98fe" integrity sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA== -readable-stream@^2.3.5: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" @@ -4343,11 +4315,6 @@ release-zalgo@^1.0.0: dependencies: es6-error "^4.0.1" -require-at@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/require-at/-/require-at-1.0.6.tgz#9eb7e3c5e00727f5a4744070a7f560d4de4f6e6a" - integrity sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g== - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -4411,16 +4378,11 @@ safe-array-concat@^1.1.2: has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - safe-json-stringify@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" @@ -4440,13 +4402,6 @@ safe-regex-test@^1.0.3: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saslprep@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" - integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== - dependencies: - sparse-bitfield "^3.0.3" - sax@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" @@ -4735,13 +4690,6 @@ string_decoder@~0.10.x: resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -4833,6 +4781,13 @@ tr46@^3.0.0: dependencies: punycode "^2.1.1" +tr46@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469" + integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== + dependencies: + punycode "^2.3.0" + tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -5025,7 +4980,7 @@ utf8@^3.0.0: resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -5134,6 +5089,14 @@ whatwg-url@^11.0.0: tr46 "^3.0.0" webidl-conversions "^7.0.0" +whatwg-url@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-13.0.0.tgz#b7b536aca48306394a34e44bda8e99f332410f8f" + integrity sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig== + dependencies: + tr46 "^4.1.1" + webidl-conversions "^7.0.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"