From 2fb6d12f7323dbe282e6e84cf0a2735ce3eb6754 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Mon, 26 Feb 2018 15:22:15 -0300 Subject: [PATCH 1/5] Fix livechat routes to allow inviting other agents to the same chat. --- .../.app/imports/client/visitor.js | 2 +- .../client/views/app/livechatCurrentChats.js | 2 +- .../client/views/sideNav/livechat.js | 2 +- packages/rocketchat-livechat/roomType.js | 8 ++++---- .../server/lib/QueueMethods.js | 3 +++ .../rocketchat-livechat/server/models/Rooms.js | 15 +++++++++++++++ packages/rocketchat-livechat/server/startup.js | 4 ++-- 7 files changed, 27 insertions(+), 9 deletions(-) diff --git a/packages/rocketchat-livechat/.app/imports/client/visitor.js b/packages/rocketchat-livechat/.app/imports/client/visitor.js index bb0613cb92e0e..bbad77bdd2cce 100644 --- a/packages/rocketchat-livechat/.app/imports/client/visitor.js +++ b/packages/rocketchat-livechat/.app/imports/client/visitor.js @@ -66,7 +66,7 @@ export default { msgStream.on(roomId, { token: this.getToken() }, (msg) => { if (msg.t === 'command') { Commands[msg.msg] && Commands[msg.msg](); - } else if (msg.t !== 'livechat_video_call') { + } else if ( (msg.t !== 'livechat_video_call') && (msg.t !== 'au') ) { ChatMessage.upsert({ _id: msg._id }, msg); if (msg.t === 'livechat-close') { diff --git a/packages/rocketchat-livechat/client/views/app/livechatCurrentChats.js b/packages/rocketchat-livechat/client/views/app/livechatCurrentChats.js index 2a1ae39eec429..659784c4f33ad 100644 --- a/packages/rocketchat-livechat/client/views/app/livechatCurrentChats.js +++ b/packages/rocketchat-livechat/client/views/app/livechatCurrentChats.js @@ -26,7 +26,7 @@ Template.livechatCurrentChats.helpers({ Template.livechatCurrentChats.events({ 'click .row-link'() { - FlowRouter.go('live', { code: this.code }); + FlowRouter.go('live', { id: this._id }); }, 'click .load-more'(event, instance) { instance.limit.set(instance.limit.get() + 20); diff --git a/packages/rocketchat-livechat/client/views/sideNav/livechat.js b/packages/rocketchat-livechat/client/views/sideNav/livechat.js index 659850b883191..15bccfe076db1 100644 --- a/packages/rocketchat-livechat/client/views/sideNav/livechat.js +++ b/packages/rocketchat-livechat/client/views/sideNav/livechat.js @@ -31,7 +31,7 @@ Template.livechat.helpers({ return ChatSubscription.find(query, { sort: { 't': 1, - 'name': 1 + 'fname': 1 }}); }, diff --git a/packages/rocketchat-livechat/roomType.js b/packages/rocketchat-livechat/roomType.js index 5a012f7edf5d0..94bfe76897c04 100644 --- a/packages/rocketchat-livechat/roomType.js +++ b/packages/rocketchat-livechat/roomType.js @@ -5,17 +5,17 @@ class LivechatRoomRoute extends RoomTypeRouteConfig { constructor() { super({ name: 'live', - path: '/live/:code(\\d+)' + path: '/live/:id' }); } action(params) { - openRoom('l', params.code); + openRoom('l', params.id); } link(sub) { return { - code: sub.code + id: sub.rid }; } } @@ -36,7 +36,7 @@ class LivechatRoomType extends RoomTypeConfig { } findRoom(identifier) { - return ChatRoom.findOne({code: parseInt(identifier)}); + return ChatRoom.findOne({_id: identifier}); } roomName(roomData) { diff --git a/packages/rocketchat-livechat/server/lib/QueueMethods.js b/packages/rocketchat-livechat/server/lib/QueueMethods.js index b7b600bbc46cc..148a7816cda35 100644 --- a/packages/rocketchat-livechat/server/lib/QueueMethods.js +++ b/packages/rocketchat-livechat/server/lib/QueueMethods.js @@ -22,6 +22,8 @@ RocketChat.QueueMethods = { lm: new Date(), code: roomCode, label: guest.name || guest.username, + name: (roomInfo && roomInfo.name) || guest.name || guest.username, + fname: (roomInfo && roomInfo.fname) || guest.name || guest.username, // usernames: [agent.username, guest.username], t: 'l', ts: new Date(), @@ -123,6 +125,7 @@ RocketChat.QueueMethods = { lm: new Date(), code: roomCode, label: guest.name || guest.username, + fname: guest.name || guest.username, // usernames: [guest.username], t: 'l', ts: new Date(), diff --git a/packages/rocketchat-livechat/server/models/Rooms.js b/packages/rocketchat-livechat/server/models/Rooms.js index 19003d79cb8e0..023285c0fae86 100644 --- a/packages/rocketchat-livechat/server/models/Rooms.js +++ b/packages/rocketchat-livechat/server/models/Rooms.js @@ -69,6 +69,21 @@ RocketChat.models.Rooms.findLivechatByCode = function(code, fields) { return this.findOne(query, options); }; +RocketChat.models.Rooms.findLivechatById = function(_id, fields) { + const options = {}; + + if (fields) { + options.fields = fields; + } + + const query = { + t: 'l', + _id + }; + + return this.findOne(query, options); +}; + /** * Get the next visitor name * @return {string} The next visitor name diff --git a/packages/rocketchat-livechat/server/startup.js b/packages/rocketchat-livechat/server/startup.js index 1af415b4fbdc5..1c131d052a823 100644 --- a/packages/rocketchat-livechat/server/startup.js +++ b/packages/rocketchat-livechat/server/startup.js @@ -1,6 +1,6 @@ Meteor.startup(() => { - RocketChat.roomTypes.setRoomFind('l', (code) => { - return RocketChat.models.Rooms.findLivechatByCode(code); + RocketChat.roomTypes.setRoomFind('l', (_id) => { + return RocketChat.models.Rooms.findLivechatById(_id); }); RocketChat.authz.addRoomAccessValidator(function(room, user) { From 41e7cbd662049bc074f8c96cfeced70e310e4932 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Mon, 26 Feb 2018 16:39:19 -0300 Subject: [PATCH 2/5] Fix indentation tabs. --- .../server/lib/QueueMethods.js | 6 +++--- .../rocketchat-livechat/server/models/Rooms.js | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/rocketchat-livechat/server/lib/QueueMethods.js b/packages/rocketchat-livechat/server/lib/QueueMethods.js index 148a7816cda35..0b5d204fbe976 100644 --- a/packages/rocketchat-livechat/server/lib/QueueMethods.js +++ b/packages/rocketchat-livechat/server/lib/QueueMethods.js @@ -22,8 +22,8 @@ RocketChat.QueueMethods = { lm: new Date(), code: roomCode, label: guest.name || guest.username, - name: (roomInfo && roomInfo.name) || guest.name || guest.username, - fname: (roomInfo && roomInfo.fname) || guest.name || guest.username, + name: (roomInfo && roomInfo.name) || guest.name || guest.username, + fname: (roomInfo && roomInfo.fname) || guest.name || guest.username, // usernames: [agent.username, guest.username], t: 'l', ts: new Date(), @@ -125,7 +125,7 @@ RocketChat.QueueMethods = { lm: new Date(), code: roomCode, label: guest.name || guest.username, - fname: guest.name || guest.username, + fname: guest.name || guest.username, // usernames: [guest.username], t: 'l', ts: new Date(), diff --git a/packages/rocketchat-livechat/server/models/Rooms.js b/packages/rocketchat-livechat/server/models/Rooms.js index 023285c0fae86..43c438c8540cd 100644 --- a/packages/rocketchat-livechat/server/models/Rooms.js +++ b/packages/rocketchat-livechat/server/models/Rooms.js @@ -70,18 +70,18 @@ RocketChat.models.Rooms.findLivechatByCode = function(code, fields) { }; RocketChat.models.Rooms.findLivechatById = function(_id, fields) { - const options = {}; + const options = {}; - if (fields) { - options.fields = fields; - } + if (fields) { + options.fields = fields; + } - const query = { - t: 'l', - _id - }; + const query = { + t: 'l', + _id + }; - return this.findOne(query, options); + return this.findOne(query, options); }; /** From 70f8833d4f122a3dd14c9252aa9728721cf487ce Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Tue, 6 Mar 2018 19:18:29 -0300 Subject: [PATCH 3/5] Simplified livechat room names using 'fname' field --- packages/rocketchat-lib/server/models/Subscriptions.js | 5 ++--- packages/rocketchat-livechat/roomType.js | 6 +----- packages/rocketchat-livechat/server/lib/Livechat.js | 2 +- packages/rocketchat-livechat/server/lib/QueueMethods.js | 8 +++----- packages/rocketchat-livechat/server/models/Rooms.js | 4 ---- packages/rocketchat-livechat/server/models/indexes.js | 1 - packages/rocketchat-ui-sidenav/client/chatRoomItem.js | 9 +-------- 7 files changed, 8 insertions(+), 27 deletions(-) diff --git a/packages/rocketchat-lib/server/models/Subscriptions.js b/packages/rocketchat-lib/server/models/Subscriptions.js index 726a0b4299c27..534c045fa8372 100644 --- a/packages/rocketchat-lib/server/models/Subscriptions.js +++ b/packages/rocketchat-lib/server/models/Subscriptions.js @@ -8,7 +8,6 @@ class ModelSubscriptions extends RocketChat.models._Base { this.tryEnsureIndex({ 'rid': 1, 'alert': 1, 'u._id': 1 }); this.tryEnsureIndex({ 'rid': 1, 'roles': 1 }); this.tryEnsureIndex({ 'u._id': 1, 'name': 1, 't': 1 }); - this.tryEnsureIndex({ 'u._id': 1, 'name': 1, 't': 1, 'code': 1 }, { unique: 1 }); this.tryEnsureIndex({ 'open': 1 }); this.tryEnsureIndex({ 'alert': 1 }); this.tryEnsureIndex({ 'unread': 1 }); @@ -341,13 +340,13 @@ class ModelSubscriptions extends RocketChat.models._Base { return this.update(query, update, { multi: true }); } - updateNameByRoomId(roomId, name) { + updateDisplayNameByRoomId(roomId, fname) { const query = {rid: roomId}; const update = { $set: { - name + fname } }; diff --git a/packages/rocketchat-livechat/roomType.js b/packages/rocketchat-livechat/roomType.js index 94bfe76897c04..a33231c19acfe 100644 --- a/packages/rocketchat-livechat/roomType.js +++ b/packages/rocketchat-livechat/roomType.js @@ -40,11 +40,7 @@ class LivechatRoomType extends RoomTypeConfig { } roomName(roomData) { - if (!roomData.name) { - return roomData.label; - } else { - return roomData.name; - } + return roomData.name || roomData.fname || roomData.label; } condition() { diff --git a/packages/rocketchat-livechat/server/lib/Livechat.js b/packages/rocketchat-livechat/server/lib/Livechat.js index 99079cb7f6b9f..56468c23d2f36 100644 --- a/packages/rocketchat-livechat/server/lib/Livechat.js +++ b/packages/rocketchat-livechat/server/lib/Livechat.js @@ -293,7 +293,7 @@ RocketChat.Livechat = { }); if (!_.isEmpty(guestData.name)) { - return RocketChat.models.Rooms.setLabelByRoomId(roomData._id, guestData.name) && RocketChat.models.Subscriptions.updateNameByRoomId(roomData._id, guestData.name); + return RocketChat.models.Rooms.setNameById(roomData._id, roomData.name, guestData.name) && RocketChat.models.Subscriptions.updateDisplayNameByRoomId(roomData._id, guestData.name); } }, diff --git a/packages/rocketchat-livechat/server/lib/QueueMethods.js b/packages/rocketchat-livechat/server/lib/QueueMethods.js index 0b5d204fbe976..0e03384d48c4f 100644 --- a/packages/rocketchat-livechat/server/lib/QueueMethods.js +++ b/packages/rocketchat-livechat/server/lib/QueueMethods.js @@ -20,9 +20,6 @@ RocketChat.QueueMethods = { _id: message.rid, msgs: 1, lm: new Date(), - code: roomCode, - label: guest.name || guest.username, - name: (roomInfo && roomInfo.name) || guest.name || guest.username, fname: (roomInfo && roomInfo.fname) || guest.name || guest.username, // usernames: [agent.username, guest.username], t: 'l', @@ -43,7 +40,7 @@ RocketChat.QueueMethods = { }, roomInfo); const subscriptionData = { rid: message.rid, - name: guest.name || guest.username, + fname: guest.name || guest.username, alert: true, open: true, unread: 1, @@ -57,7 +54,8 @@ RocketChat.QueueMethods = { t: 'l', desktopNotifications: 'all', mobilePushNotifications: 'all', - emailNotifications: 'all' + emailNotifications: 'all', + roles: ['owner'] }; RocketChat.models.Rooms.insert(room); diff --git a/packages/rocketchat-livechat/server/models/Rooms.js b/packages/rocketchat-livechat/server/models/Rooms.js index 43c438c8540cd..a6aa56f7749a6 100644 --- a/packages/rocketchat-livechat/server/models/Rooms.js +++ b/packages/rocketchat-livechat/server/models/Rooms.js @@ -177,10 +177,6 @@ RocketChat.models.Rooms.closeByRoomId = function(roomId, closeInfo) { }); }; -RocketChat.models.Rooms.setLabelByRoomId = function(roomId, label) { - return this.update({ _id: roomId }, { $set: { label } }); -}; - RocketChat.models.Rooms.findOpenByAgent = function(userId) { const query = { open: true, diff --git a/packages/rocketchat-livechat/server/models/indexes.js b/packages/rocketchat-livechat/server/models/indexes.js index 6dbd49633926c..1cd8fe3daf9fd 100644 --- a/packages/rocketchat-livechat/server/models/indexes.js +++ b/packages/rocketchat-livechat/server/models/indexes.js @@ -1,5 +1,4 @@ Meteor.startup(function() { - RocketChat.models.Rooms.tryEnsureIndex({ code: 1 }); RocketChat.models.Rooms.tryEnsureIndex({ open: 1 }, { sparse: 1 }); RocketChat.models.Users.tryEnsureIndex({ 'visitorEmails.address': 1 }); }); diff --git a/packages/rocketchat-ui-sidenav/client/chatRoomItem.js b/packages/rocketchat-ui-sidenav/client/chatRoomItem.js index 50f22bdc25e24..3aa77d6005cd4 100644 --- a/packages/rocketchat-ui-sidenav/client/chatRoomItem.js +++ b/packages/rocketchat-ui-sidenav/client/chatRoomItem.js @@ -1,12 +1,5 @@ Template.chatRoomItem.helpers({ roomData() { - let {name} = this; - const realNameForDirectMessages = RocketChat.settings.get('UI_Use_Real_Name') && this.t === 'd'; - const realNameForChannel = RocketChat.settings.get('UI_Allow_room_names_with_special_chars') && this.t !== 'd'; - if ((realNameForDirectMessages || realNameForChannel) && this.fname) { - name = this.fname; - } - let unread = false; if (((FlowRouter.getParam('_id') !== this.rid) || !document.hasFocus()) && (this.unread > 0)) { unread = this.unread; @@ -30,7 +23,7 @@ Template.chatRoomItem.helpers({ avatar, username : this.name, route: RocketChat.roomTypes.getRouteLink(this.t, this), - name, + name: RocketChat.roomTypes.getRoomName(this.t, this), unread, active, archivedClass, From a7f5dcf4f700929c6a1c500f627c3159bfd1a0e5 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Thu, 8 Mar 2018 13:13:39 -0300 Subject: [PATCH 4/5] Fix: - link to previous chats are not working (still using code); - there are references to the deprecated code field across the code base; - added migration to remove an index from the rocketchat_subscription collection. --- .../views/app/tabbar/visitorHistory.html | 2 +- .../server/lib/Livechat.js | 2 -- .../server/lib/QueueMethods.js | 7 ++---- .../server/methods/takeInquiry.js | 1 - .../server/methods/webhookTest.js | 1 - .../server/models/LivechatInquiry.js | 1 - .../server/models/Rooms.js | 23 +------------------ server/startup/migrations/v108.js | 7 ++++++ 8 files changed, 11 insertions(+), 33 deletions(-) create mode 100644 server/startup/migrations/v108.js diff --git a/packages/rocketchat-livechat/client/views/app/tabbar/visitorHistory.html b/packages/rocketchat-livechat/client/views/app/tabbar/visitorHistory.html index 9963af801c0b7..5d31eb9af9f68 100644 --- a/packages/rocketchat-livechat/client/views/app/tabbar/visitorHistory.html +++ b/packages/rocketchat-livechat/client/views/app/tabbar/visitorHistory.html @@ -8,7 +8,7 @@

{{_ "Past_Chats"}}

diff --git a/packages/rocketchat-livechat/server/lib/Livechat.js b/packages/rocketchat-livechat/server/lib/Livechat.js index 56468c23d2f36..bf9127bb81ec2 100644 --- a/packages/rocketchat-livechat/server/lib/Livechat.js +++ b/packages/rocketchat-livechat/server/lib/Livechat.js @@ -347,7 +347,6 @@ RocketChat.Livechat = { unread: 1, userMentions: 1, groupMentions: 0, - code: room.code, u: { _id: agent.agentId, username: agent.username @@ -408,7 +407,6 @@ RocketChat.Livechat = { _id: room._id, label: room.label, topic: room.topic, - code: room.code, createdAt: room.ts, lastMessageAt: room.lm, tags: room.tags, diff --git a/packages/rocketchat-livechat/server/lib/QueueMethods.js b/packages/rocketchat-livechat/server/lib/QueueMethods.js index 0e03384d48c4f..51f9e56bda42e 100644 --- a/packages/rocketchat-livechat/server/lib/QueueMethods.js +++ b/packages/rocketchat-livechat/server/lib/QueueMethods.js @@ -14,7 +14,7 @@ RocketChat.QueueMethods = { } } - const roomCode = RocketChat.models.Rooms.getNextLivechatRoomCode(); + RocketChat.models.Rooms.updateLivechatRoomCount(); const room = _.extend({ _id: message.rid, @@ -46,7 +46,6 @@ RocketChat.QueueMethods = { unread: 1, userMentions: 1, groupMentions: 0, - code: roomCode, u: { _id: agent.agentId, username: agent.username @@ -88,7 +87,7 @@ RocketChat.QueueMethods = { throw new Meteor.Error('no-agent-online', 'Sorry, no online agents'); } - const roomCode = RocketChat.models.Rooms.getNextLivechatRoomCode(); + RocketChat.models.Rooms.updateLivechatRoomCount(); const agentIds = []; @@ -105,7 +104,6 @@ RocketChat.QueueMethods = { message: message.msg, name: guest.name || guest.username, ts: new Date(), - code: roomCode, department: guest.department, agents: agentIds, status: 'open', @@ -121,7 +119,6 @@ RocketChat.QueueMethods = { _id: message.rid, msgs: 1, lm: new Date(), - code: roomCode, label: guest.name || guest.username, fname: guest.name || guest.username, // usernames: [guest.username], diff --git a/packages/rocketchat-livechat/server/methods/takeInquiry.js b/packages/rocketchat-livechat/server/methods/takeInquiry.js index f1277d8d4cccc..8f1eed7c3fc7b 100644 --- a/packages/rocketchat-livechat/server/methods/takeInquiry.js +++ b/packages/rocketchat-livechat/server/methods/takeInquiry.js @@ -26,7 +26,6 @@ Meteor.methods({ unread: 1, userMentions: 1, groupMentions: 0, - code: inquiry.code, u: { _id: agent.agentId, username: agent.username diff --git a/packages/rocketchat-livechat/server/methods/webhookTest.js b/packages/rocketchat-livechat/server/methods/webhookTest.js index c7961c89cc41c..a40db1ee8de4c 100644 --- a/packages/rocketchat-livechat/server/methods/webhookTest.js +++ b/packages/rocketchat-livechat/server/methods/webhookTest.js @@ -18,7 +18,6 @@ Meteor.methods({ _id: 'fasd6f5a4sd6f8a4sdf', label: 'title', topic: 'asiodojf', - code: 123123, createdAt: new Date(), lastMessageAt: new Date(), tags: [ diff --git a/packages/rocketchat-livechat/server/models/LivechatInquiry.js b/packages/rocketchat-livechat/server/models/LivechatInquiry.js index 197bb4dbaf576..0b6315d64019b 100644 --- a/packages/rocketchat-livechat/server/models/LivechatInquiry.js +++ b/packages/rocketchat-livechat/server/models/LivechatInquiry.js @@ -6,7 +6,6 @@ class LivechatInquiry extends RocketChat.models._Base { this.tryEnsureIndex({ 'name': 1 }); // name of the inquiry (client name for now) this.tryEnsureIndex({ 'message': 1 }); // message sent by the client this.tryEnsureIndex({ 'ts': 1 }); // timestamp - this.tryEnsureIndex({ 'code': 1 }); // (for routing) this.tryEnsureIndex({ 'agents': 1}); // Id's of the agents who can see the inquiry (handle departments) this.tryEnsureIndex({ 'status': 1}); // 'open', 'taken' } diff --git a/packages/rocketchat-livechat/server/models/Rooms.js b/packages/rocketchat-livechat/server/models/Rooms.js index a6aa56f7749a6..6786e71f3ac1d 100644 --- a/packages/rocketchat-livechat/server/models/Rooms.js +++ b/packages/rocketchat-livechat/server/models/Rooms.js @@ -48,27 +48,6 @@ RocketChat.models.Rooms.findLivechat = function(filter = {}, offset = 0, limit = return this.find(query, { sort: { ts: - 1 }, offset, limit }); }; -RocketChat.models.Rooms.findLivechatByCode = function(code, fields) { - code = parseInt(code); - - const options = {}; - - if (fields) { - options.fields = fields; - } - - // if (this.useCache) { - // return this.cache.findByIndex('t,code', ['l', code], options).fetch(); - // } - - const query = { - t: 'l', - code - }; - - return this.findOne(query, options); -}; - RocketChat.models.Rooms.findLivechatById = function(_id, fields) { const options = {}; @@ -88,7 +67,7 @@ RocketChat.models.Rooms.findLivechatById = function(_id, fields) { * Get the next visitor name * @return {string} The next visitor name */ -RocketChat.models.Rooms.getNextLivechatRoomCode = function() { +RocketChat.models.Rooms.updateLivechatRoomCount = function() { const settingsRaw = RocketChat.models.Settings.model.rawCollection(); const findAndModify = Meteor.wrapAsync(settingsRaw.findAndModify, settingsRaw); diff --git a/server/startup/migrations/v108.js b/server/startup/migrations/v108.js new file mode 100644 index 0000000000000..5306e599821f9 --- /dev/null +++ b/server/startup/migrations/v108.js @@ -0,0 +1,7 @@ +RocketChat.Migrations.add({ + version: 108, + up() { + RocketChat.models.Subscriptions.tryDropIndex('u._id_1_name_1_t_1_code_1'); + console.log('Fixing ChatSubscription u._id_1_name_1_t_1_code_1'); + } +}); From 78bc2ea8fcfa2c603d14e773b2dbda37b18bd504 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Thu, 24 May 2018 10:26:41 -0300 Subject: [PATCH 5/5] package version updated. --- package-lock.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2a971ee02b58b..4e58eae320cbe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Rocket.Chat", - "version": "0.64.0-develop", + "version": "0.65.0-develop", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -4683,6 +4683,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "optional": true, "requires": { "prr": "1.0.1" } @@ -10591,7 +10592,8 @@ "natives": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.3.tgz", - "integrity": "sha512-BZGSYV4YOLxzoTK73l0/s/0sH9l8SHs2ocReMH1f8JYSh5FUWu4ZrKCpJdRkWXV6HFR/pZDz7bwWOVAY07q77g==" + "integrity": "sha512-BZGSYV4YOLxzoTK73l0/s/0sH9l8SHs2ocReMH1f8JYSh5FUWu4ZrKCpJdRkWXV6HFR/pZDz7bwWOVAY07q77g==", + "optional": true }, "natural-compare": { "version": "1.4.0", @@ -12342,7 +12344,8 @@ "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "optional": true }, "pseudomap": { "version": "1.0.2",