diff --git a/node/package.json b/node/package.json index cdca3833..01431972 100644 --- a/node/package.json +++ b/node/package.json @@ -50,7 +50,6 @@ "@types/generic-pool": "3.1.10", "@types/html-minifier": "4.0.1", "@types/ioredis": "4.26.7", - "@types/mongodb": "4.0.7", "@types/node-schedule": "1.3.2" } } diff --git a/node/src/database/attendee.js b/node/src/database/attendee.js index 1c9c457b..78eb6dae 100644 --- a/node/src/database/attendee.js +++ b/node/src/database/attendee.js @@ -32,14 +32,13 @@ class AttendeeDb { static async add(data) { const db = await Db.get(); - /** @type {MongoDb.FindAndModifyWriteOpResultObject} */ - const result = await db.collection("attendee").findOneAndUpdate({ + const result = /** @type {MongoDb.ModifyResult} */(await db.collection("attendee").findOneAndUpdate({ // eslint-disable-line no-extra-parens eventId: MongoDb.Long.fromNumber(data.eventId), userId: MongoDb.Long.fromNumber(data.userId) }, {$set: { eventId: MongoDb.Long.fromNumber(data.eventId), userId: MongoDb.Long.fromNumber(data.userId) - }}, {upsert: true, returnOriginal: false}); + }}, {upsert: true, returnDocument: "after"})); data._id = result.value._id.toHexString(); @@ -61,7 +60,7 @@ class AttendeeDb { static async getByEventId(id) { const db = await Db.get(); - return db.collection("attendee").aggregate([ + return /** @type {Promise<{discordId: string}[]>} */(db.collection("attendee").aggregate([ // eslint-disable-line no-extra-parens { $match: {eventId: Db.toLong(id)} }, @@ -87,7 +86,7 @@ class AttendeeDb { discordId: "$user.discord.id" } } - ]).toArray(); + ]).toArray()); } // ### ## # # ## # # ## diff --git a/node/src/database/event.js b/node/src/database/event.js index 171404a2..b22bba6d 100644 --- a/node/src/database/event.js +++ b/node/src/database/event.js @@ -50,10 +50,10 @@ class EventDb { event.description = data.description; } - /** @type {MongoDb.InsertOneWriteOpResult} */ - await db.collection("event").insertOne(event); + /** @type {MongoDb.InsertOneResult} */ + const result = await db.collection("event").insertOne(event); - data._id = Db.fromLong(event._id); + data._id = result.insertedId.toNumber(); return data; } @@ -73,8 +73,7 @@ class EventDb { static async get(id) { const db = await Db.get(); - /** @type {EventTypes.EventMongoData} */ - const event = await db.collection("event").findOne({_id: MongoDb.Long.fromNumber(id)}); + const event = /** @type {EventTypes.EventMongoData} */(await db.collection("event").findOne({_id: MongoDb.Long.fromNumber(id)})); // eslint-disable-line no-extra-parens if (!event) { return void 0; @@ -113,15 +112,14 @@ class EventDb { range.start = {$lte: end}; } - /** @type {EventTypes.EventMongoData[]} */ - const events = await db.collection("event").find({ + const events = /** @type {EventTypes.EventMongoData[]} */(await db.collection("event").find({ // eslint-disable-line no-extra-parens $and: [ { start: {$lte: end}, end: {$gte: start} } ] - }).toArray(); + }).toArray()); return events.map((e) => ({ _id: Db.fromLong(e._id), diff --git a/node/src/database/index.js b/node/src/database/index.js index 9fc079ac..3bfd6475 100644 --- a/node/src/database/index.js +++ b/node/src/database/index.js @@ -69,14 +69,11 @@ class Db { client = new MongoDb.MongoClient(`mongodb://web_sixgg:${process.env.WEB_SIXGG_PASSWORD}@db:27017/sixgg`, { authMechanism: "SCRAM-SHA-256", authSource: "admin", - useUnifiedTopology: true, promoteLongs: false }); } - if (!client.isConnected()) { - await client.connect(); - } + await client.connect(); if (!db) { db = client.db("sixgg"); diff --git a/node/src/database/session.js b/node/src/database/session.js index d1daabe5..c36a44b9 100644 --- a/node/src/database/session.js +++ b/node/src/database/session.js @@ -32,7 +32,7 @@ class SessionDb { static async delete(id) { const db = await Db.get(); - await db.collection("session").deleteOne({_id: MongoDb.ObjectID.createFromHexString(id)}); + await db.collection("session").deleteOne({_id: MongoDb.ObjectId.createFromHexString(id)}); } // # # @@ -55,7 +55,7 @@ class SessionDb { refreshToken: Encryption.encryptWithSalt(session.refreshToken) }; - await db.collection("session").findOneAndUpdate({_id: MongoDb.ObjectID.createFromHexString(session._id), ip: session.ip, userId: MongoDb.Long.fromNumber(session.userId)}, {$set: { + await db.collection("session").findOneAndUpdate({_id: MongoDb.ObjectId.createFromHexString(session._id), ip: session.ip, userId: MongoDb.Long.fromNumber(session.userId)}, {$set: { ip: session.ip, userId: MongoDb.Long.fromNumber(session.userId), accessToken: { diff --git a/node/src/database/twitch.js b/node/src/database/twitch.js index 953af5d4..af8fd6af 100644 --- a/node/src/database/twitch.js +++ b/node/src/database/twitch.js @@ -34,8 +34,7 @@ class TwitchDb { static async get() { const db = await Db.get(); - /** @type {TwitchTypes.EncryptedMongoTokens} */ - const encryptedTokens = await db.collection("twitch").findOne({}); + const encryptedTokens = /** @type {TwitchTypes.EncryptedMongoTokens} */(await db.collection("twitch").findOne({})); // eslint-disable-line no-extra-parens if (!encryptedTokens) { return void 0; diff --git a/node/src/database/user.js b/node/src/database/user.js index 35efd2be..df273ed0 100644 --- a/node/src/database/user.js +++ b/node/src/database/user.js @@ -43,8 +43,7 @@ class UserDb { static async get(id) { const db = await Db.get(); - /** @type {UserTypes.UserMongoData} */ - const user = await db.collection("user").findOne({_id: id}); + const user = /** @type {UserTypes.UserMongoData} */(await db.collection("user").findOne({_id: id})); // eslint-disable-line no-extra-parens if (!user) { return void 0; @@ -77,8 +76,7 @@ class UserDb { await db.collection("user").deleteMany({"discord.id": {$nin: discordIds}}); - /** @type {UserTypes.UserMongoData[]} */ - const users = await db.collection("user").find().toArray(); + const users = /** @type {UserTypes.UserMongoData[]} */(await db.collection("user").find().toArray()); // eslint-disable-line no-extra-parens return users.map((u) => ({ _id: Db.fromLong(u._id), @@ -105,8 +103,7 @@ class UserDb { static async getByGuildMember(member) { const db = await Db.get(); - /** @type {{user: UserTypes.UserMongoData, session: SessionTypes.EncryptedMongoSessionData}} */ - const encryptedData = await db.collection("session").aggregate([ + const encryptedData = /** @type {{user: UserTypes.UserMongoData, session: SessionTypes.EncryptedMongoSessionData}} */(await db.collection("session").aggregate([ // eslint-disable-line no-extra-parens { $match: { "discord.id": member.id @@ -129,7 +126,7 @@ class UserDb { { $unwind: "$user" } - ]).next(); + ]).next()); if (!encryptedData) { return void 0; @@ -189,8 +186,7 @@ class UserDb { static async getByEventAttendees(eventId) { const db = await Db.get(); - /** @type {UserTypes.UserMongoData[]} */ - const attendees = await db.collection("attendee").aggregate([ + const attendees = /** @type {UserTypes.UserMongoData[]} */(await db.collection("attendee").aggregate([ // eslint-disable-line no-extra-parens { $match: { eventId: MongoDb.Long.fromNumber(eventId) @@ -222,7 +218,7 @@ class UserDb { guildMember: 1 } } - ]).toArray(); + ]).toArray()); return attendees.map((a) => ({ _id: Db.fromLong(a._id), @@ -247,8 +243,7 @@ class UserDb { static async getBySession(id, ip) { const db = await Db.get(); - /** @type {{user: UserTypes.UserMongoData, session: SessionTypes.EncryptedMongoSessionData}} */ - const encryptedData = await db.collection("session").aggregate([ + const encryptedData = /** @type {{user: UserTypes.UserMongoData, session: SessionTypes.EncryptedMongoSessionData}} */(await db.collection("session").aggregate([ // eslint-disable-line no-extra-parens { $match: { _id: new MongoDb.ObjectId(id), @@ -272,7 +267,7 @@ class UserDb { { $unwind: "$user" } - ]).next(); + ]).next()); if (!encryptedData) { return void 0; @@ -337,8 +332,7 @@ class UserDb { /** @type {UserTypes.UserMongoData} */ let userResult; if (await db.collection("user").findOne({"discord.id": user.id})) { - /** @type {MongoDb.FindAndModifyWriteOpResultObject} */ - const result = await db.collection("user").findOneAndUpdate({"discord.id": user.id}, {$set: { + const result = /** @type {MongoDb.ModifyResult} */(await db.collection("user").findOneAndUpdate({"discord.id": user.id}, {$set: { // eslint-disable-line no-extra-parens discord: { id: user.id, username: user.username, @@ -353,7 +347,7 @@ class UserDb { id: c.id, type: c.type })) - }}); + }})); userResult = result.value; userResult._id = Db.toLong(userResult._id); @@ -379,7 +373,7 @@ class UserDb { await Db.id(userResult, "user"); - await db.collection("user").insertOne(userResult); + await /** @type {MongoDb.Collection} */(db.collection("user")).insertOne(userResult); // eslint-disable-line no-extra-parens } const expires = new Date(), @@ -390,8 +384,7 @@ class UserDb { expires.setSeconds(expires.getSeconds() + token.expires_in - 3600); - /** @type {MongoDb.FindAndModifyWriteOpResultObject} */ - const sessionResult = await db.collection("session").findOneAndUpdate({ip: req.ip, userId: userResult._id}, {$set: { + const sessionResult = /** @type {MongoDb.ModifyResult} */(await db.collection("session").findOneAndUpdate({ip: req.ip, userId: userResult._id}, {$set: { // eslint-disable-line no-extra-parens ip: req.ip, userId: userResult._id, accessToken: { @@ -403,7 +396,7 @@ class UserDb { encrypted: new MongoDb.Binary(encryptedTokens.refreshToken.encrypted) }, expires - }}, {upsert: true, returnOriginal: false}); + }}, {upsert: true, returnDocument: "after"})); return { user: {