From 02fa5c3a992bcdbcc36bee6e13402ba10eafc1d4 Mon Sep 17 00:00:00 2001 From: Christopher Hoskin Date: Thu, 19 Oct 2023 14:48:08 +0100 Subject: [PATCH] Merge pull request #15341 from overleaf/csh-issue-11625-mongo-ug-5-notifications Upgrade mongodb module for notifications from 4.11.0 to 6.1.0 GitOrigin-RevId: 8e185d2d9128e2bc889bbc00a7f21fbee0f27daa --- package-lock.json | 129 ++++++++++-------- .../app/js/HealthCheckController.js | 4 +- .../notifications/app/js/Notifications.js | 12 +- services/notifications/package.json | 2 +- .../test/unit/js/NotificationsTests.js | 18 +-- 5 files changed, 89 insertions(+), 76 deletions(-) diff --git a/package-lock.json b/package-lock.json index 022f8d0f2f..0e1c96bdf9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38477,7 +38477,7 @@ "bunyan": "^1.8.15", "express": "^4.18.2", "method-override": "^3.0.0", - "mongodb": "^4.11.0", + "mongodb": "^6.1.0", "request": "^2.88.2" }, "devDependencies": { @@ -38489,54 +38489,70 @@ } }, "services/notifications/node_modules/bson": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", - "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", - "dependencies": { - "buffer": "^5.6.0" - }, + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.2.0.tgz", + "integrity": "sha512-ID1cI+7bazPDyL9wYy9GaQ8gEEohWvcUl/Yf0dIdutJxnmInEEyCsb4awy/OiBfall7zBA179Pahi3vCdFze3Q==", "engines": { - "node": ">=6.9.0" + "node": ">=16.20.1" } }, - "services/notifications/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "services/notifications/node_modules/gcp-metadata": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "optional": true, + "peer": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" } }, "services/notifications/node_modules/mongodb": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.1.tgz", - "integrity": "sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.1.0.tgz", + "integrity": "sha512-AvzNY0zMkpothZ5mJAaIo2bGDjlJQqqAbn9fvtVgwIIUPEfdrqGxqNjjbuKyrgQxg2EvCmfWdjq+4uj96c0YPw==", "dependencies": { - "bson": "^4.7.2", - "mongodb-connection-string-url": "^2.6.0", - "socks": "^2.7.1" + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^6.1.0", + "mongodb-connection-string-url": "^2.6.0" }, "engines": { - "node": ">=12.9.0" + "node": ">=16.20.1" }, - "optionalDependencies": { - "@aws-sdk/credential-providers": "^3.186.0", - "@mongodb-js/saslprep": "^1.1.0" + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } } }, "services/project-history": { @@ -46765,39 +46781,36 @@ "express": "^4.18.2", "method-override": "^3.0.0", "mocha": "^10.2.0", - "mongodb": "^4.11.0", + "mongodb": "^6.1.0", "request": "^2.88.2", "sandboxed-module": "^2.0.4", "sinon": "^9.2.4" }, "dependencies": { "bson": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", - "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", - "requires": { - "buffer": "^5.6.0" - } + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.2.0.tgz", + "integrity": "sha512-ID1cI+7bazPDyL9wYy9GaQ8gEEohWvcUl/Yf0dIdutJxnmInEEyCsb4awy/OiBfall7zBA179Pahi3vCdFze3Q==" }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "gcp-metadata": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "optional": true, + "peer": true, "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" } }, "mongodb": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.1.tgz", - "integrity": "sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.1.0.tgz", + "integrity": "sha512-AvzNY0zMkpothZ5mJAaIo2bGDjlJQqqAbn9fvtVgwIIUPEfdrqGxqNjjbuKyrgQxg2EvCmfWdjq+4uj96c0YPw==", "requires": { - "@aws-sdk/credential-providers": "^3.186.0", "@mongodb-js/saslprep": "^1.1.0", - "bson": "^4.7.2", - "mongodb-connection-string-url": "^2.6.0", - "socks": "^2.7.1" + "bson": "^6.1.0", + "mongodb-connection-string-url": "^2.6.0" } } } diff --git a/services/notifications/app/js/HealthCheckController.js b/services/notifications/app/js/HealthCheckController.js index 58ea0eb926..dfbe879d7e 100644 --- a/services/notifications/app/js/HealthCheckController.js +++ b/services/notifications/app/js/HealthCheckController.js @@ -18,11 +18,11 @@ const logger = require('@overleaf/logger') module.exports = { check(callback) { - const userId = ObjectId() + const userId = new ObjectId() const cleanupNotifications = callback => db.notifications.remove({ user_id: userId }, callback) - let notificationKey = `smoke-test-notification-${ObjectId()}` + let notificationKey = `smoke-test-notification-${new ObjectId()}` const getOpts = endPath => ({ url: `http://localhost:${port}/user/${userId}${endPath}`, timeout: 5000, diff --git a/services/notifications/app/js/Notifications.js b/services/notifications/app/js/Notifications.js index 837a5a49fd..027ff636ce 100644 --- a/services/notifications/app/js/Notifications.js +++ b/services/notifications/app/js/Notifications.js @@ -20,7 +20,7 @@ module.exports = Notifications = { callback = function () {} } const query = { - user_id: ObjectId(userId), + user_id: new ObjectId(userId), templateKey: { $exists: true }, } db.notifications.find(query).toArray(callback) @@ -31,7 +31,7 @@ module.exports = Notifications = { callback = function () {} } const query = { - user_id: ObjectId(userId), + user_id: new ObjectId(userId), key: notification.key, } return db.notifications.count(query, function (err, count) { @@ -54,7 +54,7 @@ module.exports = Notifications = { return callback() } const doc = { - user_id: ObjectId(userId), + user_id: new ObjectId(userId), key: notification.key, messageOpts: notification.messageOpts, templateKey: notification.templateKey, @@ -88,8 +88,8 @@ module.exports = Notifications = { removeNotificationId(userId, notificationId, callback) { const searchOps = { - user_id: ObjectId(userId), - _id: ObjectId(notificationId), + user_id: new ObjectId(userId), + _id: new ObjectId(notificationId), } const updateOperation = { $unset: { templateKey: true, messageOpts: true } } db.notifications.updateOne(searchOps, updateOperation, callback) @@ -97,7 +97,7 @@ module.exports = Notifications = { removeNotificationKey(userId, notificationKey, callback) { const searchOps = { - user_id: ObjectId(userId), + user_id: new ObjectId(userId), key: notificationKey, } const updateOperation = { $unset: { templateKey: true } } diff --git a/services/notifications/package.json b/services/notifications/package.json index 43eacb5d85..cc7060d57d 100644 --- a/services/notifications/package.json +++ b/services/notifications/package.json @@ -26,7 +26,7 @@ "bunyan": "^1.8.15", "express": "^4.18.2", "method-override": "^3.0.0", - "mongodb": "^4.11.0", + "mongodb": "^6.1.0", "request": "^2.88.2" }, "devDependencies": { diff --git a/services/notifications/test/unit/js/NotificationsTests.js b/services/notifications/test/unit/js/NotificationsTests.js index 54eff4d640..0362b1af79 100644 --- a/services/notifications/test/unit/js/NotificationsTests.js +++ b/services/notifications/test/unit/js/NotificationsTests.js @@ -18,7 +18,7 @@ const assert = require('assert') const { ObjectId } = require('mongodb') const userId = '51dc93e6fb625a261300003b' -const notificationId = 'fb625a26f09d' +const notificationId = '574ee8d6f40c3a244e704249' const notificationKey = 'notification-key' describe('Notifications Tests', function () { @@ -46,7 +46,7 @@ describe('Notifications Tests', function () { }) this.stubbedNotification = { - user_id: ObjectId(userId), + user_id: new ObjectId(userId), key: 'notification-key', messageOpts: 'some info', templateKey: 'template-key', @@ -63,7 +63,7 @@ describe('Notifications Tests', function () { if (err) return done(err) notifications.should.equal(this.stubbedNotificationArray) assert.deepEqual(this.findStub.args[0][0], { - user_id: ObjectId(userId), + user_id: new ObjectId(userId), templateKey: { $exists: true }, }) return done() @@ -75,7 +75,7 @@ describe('Notifications Tests', function () { describe('addNotification', function () { beforeEach(function () { this.stubbedNotification = { - user_id: ObjectId(userId), + user_id: new ObjectId(userId), key: 'notification-key', messageOpts: 'some info', templateKey: 'template-key', @@ -150,7 +150,7 @@ describe('Notifications Tests', function () { describe('when the notification is set to expire', function () { beforeEach(function () { this.stubbedNotification = { - user_id: ObjectId(userId), + user_id: new ObjectId(userId), key: 'notification-key', messageOpts: 'some info', templateKey: 'template-key', @@ -190,7 +190,7 @@ describe('Notifications Tests', function () { return describe('when the notification has a nonsensical expires field', function () { beforeEach(function () { this.stubbedNotification = { - user_id: ObjectId(userId), + user_id: new ObjectId(userId), key: 'notification-key', messageOpts: 'some info', templateKey: 'template-key', @@ -229,8 +229,8 @@ describe('Notifications Tests', function () { err => { if (err) return done(err) const searchOps = { - user_id: ObjectId(userId), - _id: ObjectId(notificationId), + user_id: new ObjectId(userId), + _id: new ObjectId(notificationId), } const updateOperation = { $unset: { templateKey: true, messageOpts: true }, @@ -253,7 +253,7 @@ describe('Notifications Tests', function () { err => { if (err) return done(err) const searchOps = { - user_id: ObjectId(userId), + user_id: new ObjectId(userId), key: notificationKey, } const updateOperation = {