From d942715b3e183084260323918602b01e1783ce17 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Fri, 8 Feb 2019 15:58:47 -0200 Subject: [PATCH 1/5] [IMPROVE] Open rooms quicker --- .../rocketchat-lib/client/lib/openRoom.js | 3 + .../client/lib/RoomManager.js | 7 +- .../rocketchat-ui/client/views/app/room.js | 86 +++++++++++-------- 3 files changed, 55 insertions(+), 41 deletions(-) diff --git a/packages/rocketchat-lib/client/lib/openRoom.js b/packages/rocketchat-lib/client/lib/openRoom.js index 9be03e45dfcc..0a96b6501e82 100644 --- a/packages/rocketchat-lib/client/lib/openRoom.js +++ b/packages/rocketchat-lib/client/lib/openRoom.js @@ -24,6 +24,9 @@ openRoom = function(type, name) { BlazeLayout.render('main', { modal: RocketChat.Layout.isEmbedded(), center: 'loading' }); return; } + + BlazeLayout.render('main'); + if (currentTracker) { currentTracker = undefined; } diff --git a/packages/rocketchat-ui-utils/client/lib/RoomManager.js b/packages/rocketchat-ui-utils/client/lib/RoomManager.js index 6d9abeb45f20..dd9e3398cc5d 100644 --- a/packages/rocketchat-ui-utils/client/lib/RoomManager.js +++ b/packages/rocketchat-ui-utils/client/lib/RoomManager.js @@ -87,10 +87,9 @@ export const RoomManager = new function() { Notifications.onRoom(openedRooms[typeName].rid, 'deleteMessageBulk', onDeleteMessageBulkStream); // eslint-disable-line no-use-before-define } } - Meteor.defer(() => { - record.ready = true; - Dep.changed(); - }); + + record.ready = true; + Dep.changed(); }); }); } diff --git a/packages/rocketchat-ui/client/views/app/room.js b/packages/rocketchat-ui/client/views/app/room.js index a117589c60af..a3890ec4d95e 100644 --- a/packages/rocketchat-ui/client/views/app/room.js +++ b/packages/rocketchat-ui/client/views/app/room.js @@ -229,43 +229,7 @@ Template.room.helpers({ }, messagesHistory() { - const hideMessagesOfType = []; - settings.collection.find({ _id: /Message_HideType_.+/ }).forEach(function(record) { - let types; - const type = record._id.replace('Message_HideType_', ''); - switch (type) { - case 'mute_unmute': - types = ['user-muted', 'user-unmuted']; - break; - default: - types = [type]; - } - return types.forEach(function(type) { - const index = hideMessagesOfType.indexOf(type); - - if ((record.value === true) && (index === -1)) { - hideMessagesOfType.push(type); - } else if (index > -1) { - hideMessagesOfType.splice(index, 1); - } - }); - }); - - const query = - { rid: this._id }; - - if (hideMessagesOfType.length > 0) { - query.t = - { $nin: hideMessagesOfType }; - } - - const options = { - sort: { - ts: 1, - }, - }; - - return ChatMessage.find(query, options); + return Template.instance().messages.get(); }, hasMore() { @@ -965,6 +929,54 @@ Template.room.onCreated(function() { }); this.sendToBottomIfNecessary = () => {}; + + const hideMessagesOfType = []; + settings.collection.find({ _id: /Message_HideType_.+/ }).forEach(function(record) { + let types; + const type = record._id.replace('Message_HideType_', ''); + switch (type) { + case 'mute_unmute': + types = ['user-muted', 'user-unmuted']; + break; + default: + types = [type]; + } + return types.forEach(function(type) { + const index = hideMessagesOfType.indexOf(type); + + if ((record.value === true) && (index === -1)) { + hideMessagesOfType.push(type); + } else if (index > -1) { + hideMessagesOfType.splice(index, 1); + } + }); + }); + + const query = + { rid: this.data._id }; + + if (hideMessagesOfType.length > 0) { + query.t = + { $nin: hideMessagesOfType }; + } + + const options = { + sort: { + ts: 1, + }, + }; + + this.messages = new ReactiveVar([]); + + const updateMessages = _.debounce(() => { + this.messages.set(ChatMessage.find(query, options).fetch()); + }, 100); + + ChatMessage.find(query).observe({ + added: updateMessages, + updated: updateMessages, + removed: updateMessages, + }); }); // Update message to re-render DOM Template.room.onDestroyed(function() { From ac9c0ab78b2c329c7e3b2d6dfaad9f14c149e674 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Fri, 8 Feb 2019 16:47:38 -0200 Subject: [PATCH 2/5] Close observer on room destroy --- packages/rocketchat-ui/client/views/app/room.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/rocketchat-ui/client/views/app/room.js b/packages/rocketchat-ui/client/views/app/room.js index a3890ec4d95e..d37c040183e6 100644 --- a/packages/rocketchat-ui/client/views/app/room.js +++ b/packages/rocketchat-ui/client/views/app/room.js @@ -972,7 +972,7 @@ Template.room.onCreated(function() { this.messages.set(ChatMessage.find(query, options).fetch()); }, 100); - ChatMessage.find(query).observe({ + this.messageObserver = ChatMessage.find(query).observe({ added: updateMessages, updated: updateMessages, removed: updateMessages, @@ -980,6 +980,9 @@ Template.room.onCreated(function() { }); // Update message to re-render DOM Template.room.onDestroyed(function() { + if (this.messageObserver) { + this.messageObserver.stop(); + } window.removeEventListener('resize', this.onWindowResize); }); From 6170d8ea881589df36f88be609c1c37dc94db0e8 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Mon, 11 Feb 2019 17:10:58 -0200 Subject: [PATCH 3/5] Fix tests --- packages/rocketchat-ui/client/views/app/room.js | 12 ++++++++---- tests/end-to-end/ui/07-emoji.js | 2 ++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/rocketchat-ui/client/views/app/room.js b/packages/rocketchat-ui/client/views/app/room.js index d37c040183e6..b5efc28d9353 100644 --- a/packages/rocketchat-ui/client/views/app/room.js +++ b/packages/rocketchat-ui/client/views/app/room.js @@ -968,14 +968,18 @@ Template.room.onCreated(function() { this.messages = new ReactiveVar([]); - const updateMessages = _.debounce(() => { + const updateMessages = () => { + this.messages.set(ChatMessage.find(query, options).fetch()); + }; + + const updateMessagesDebounced = _.debounce(() => { this.messages.set(ChatMessage.find(query, options).fetch()); }, 100); this.messageObserver = ChatMessage.find(query).observe({ - added: updateMessages, - updated: updateMessages, - removed: updateMessages, + added: process.env.TEST_MODE ? updateMessages : updateMessagesDebounced, + updated: process.env.TEST_MODE ? updateMessages : updateMessagesDebounced, + removed: process.env.TEST_MODE ? updateMessages : updateMessagesDebounced, }); }); // Update message to re-render DOM diff --git a/tests/end-to-end/ui/07-emoji.js b/tests/end-to-end/ui/07-emoji.js index a6025d34fc6d..2a4ef28bab1e 100644 --- a/tests/end-to-end/ui/07-emoji.js +++ b/tests/end-to-end/ui/07-emoji.js @@ -98,6 +98,7 @@ describe('[Emoji]', () => { }); it('it should be that the value on the message is the same as the emoji clicked', () => { + browser.pause(100); mainContent.lastMessage.getText().should.equal('😀'); }); }); @@ -132,6 +133,7 @@ describe('[Emoji]', () => { }); it('it should be that the value on the message is the same as the emoji clicked', () => { + browser.pause(100); mainContent.lastMessage.getText().should.equal('😄'); }); }); From b65e489b8ce2d5b00aba6f8bf867b6c7a57d5b7e Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Tue, 12 Feb 2019 16:10:31 -0200 Subject: [PATCH 4/5] Back to cursor and improve permission query --- .../client/models/Subscriptions.js | 5 +- .../rocketchat-ui/client/views/app/room.js | 90 ++++++++----------- 2 files changed, 40 insertions(+), 55 deletions(-) diff --git a/packages/rocketchat-models/client/models/Subscriptions.js b/packages/rocketchat-models/client/models/Subscriptions.js index 38ad38eb4794..cad88e5aea7a 100644 --- a/packages/rocketchat-models/client/models/Subscriptions.js +++ b/packages/rocketchat-models/client/models/Subscriptions.js @@ -11,10 +11,11 @@ Object.assign(Subscriptions, { const query = { rid: roomId, - roles: roleName, }; - return !_.isUndefined(this.findOne(query)); + const subscription = this.findOne(query); + + return subscription && Array.isArray(subscription.roles) && subscription.roles.includes(roleName); }, findUsersInRoles(roles, scope, options) { diff --git a/packages/rocketchat-ui/client/views/app/room.js b/packages/rocketchat-ui/client/views/app/room.js index b5efc28d9353..a340e4429eaf 100644 --- a/packages/rocketchat-ui/client/views/app/room.js +++ b/packages/rocketchat-ui/client/views/app/room.js @@ -229,7 +229,43 @@ Template.room.helpers({ }, messagesHistory() { - return Template.instance().messages.get(); + const hideMessagesOfType = []; + settings.collection.find({ _id: /Message_HideType_.+/ }).forEach(function(record) { + let types; + const type = record._id.replace('Message_HideType_', ''); + switch (type) { + case 'mute_unmute': + types = ['user-muted', 'user-unmuted']; + break; + default: + types = [type]; + } + return types.forEach(function(type) { + const index = hideMessagesOfType.indexOf(type); + + if ((record.value === true) && (index === -1)) { + hideMessagesOfType.push(type); + } else if (index > -1) { + hideMessagesOfType.splice(index, 1); + } + }); + }); + + const query = + { rid: this._id }; + + if (hideMessagesOfType.length > 0) { + query.t = + { $nin: hideMessagesOfType }; + } + + const options = { + sort: { + ts: 1, + }, + }; + + return ChatMessage.find(query, options); }, hasMore() { @@ -929,58 +965,6 @@ Template.room.onCreated(function() { }); this.sendToBottomIfNecessary = () => {}; - - const hideMessagesOfType = []; - settings.collection.find({ _id: /Message_HideType_.+/ }).forEach(function(record) { - let types; - const type = record._id.replace('Message_HideType_', ''); - switch (type) { - case 'mute_unmute': - types = ['user-muted', 'user-unmuted']; - break; - default: - types = [type]; - } - return types.forEach(function(type) { - const index = hideMessagesOfType.indexOf(type); - - if ((record.value === true) && (index === -1)) { - hideMessagesOfType.push(type); - } else if (index > -1) { - hideMessagesOfType.splice(index, 1); - } - }); - }); - - const query = - { rid: this.data._id }; - - if (hideMessagesOfType.length > 0) { - query.t = - { $nin: hideMessagesOfType }; - } - - const options = { - sort: { - ts: 1, - }, - }; - - this.messages = new ReactiveVar([]); - - const updateMessages = () => { - this.messages.set(ChatMessage.find(query, options).fetch()); - }; - - const updateMessagesDebounced = _.debounce(() => { - this.messages.set(ChatMessage.find(query, options).fetch()); - }, 100); - - this.messageObserver = ChatMessage.find(query).observe({ - added: process.env.TEST_MODE ? updateMessages : updateMessagesDebounced, - updated: process.env.TEST_MODE ? updateMessages : updateMessagesDebounced, - removed: process.env.TEST_MODE ? updateMessages : updateMessagesDebounced, - }); }); // Update message to re-render DOM Template.room.onDestroyed(function() { From a5f62b1a13fca7865399f3397bf3da9988fd4a3f Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Tue, 12 Feb 2019 17:04:54 -0200 Subject: [PATCH 5/5] More improvements --- package-lock.json | 326 ++++++++++-------- package.json | 1 + .../client/lib/autotranslate.js | 9 +- .../client/models/Subscriptions.js | 9 +- .../client/lib/MessageAction.js | 5 + .../client/lib/RoomHistoryManager.js | 16 +- .../rocketchat-ui/client/views/app/room.js | 2 +- 7 files changed, 220 insertions(+), 148 deletions(-) diff --git a/package-lock.json b/package-lock.json index 81bfde72dcf9..f7a1cad3e666 100644 --- a/package-lock.json +++ b/package-lock.json @@ -666,7 +666,7 @@ }, "@types/events": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==" }, "@types/express": { @@ -1504,7 +1504,7 @@ }, "axios": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", + "resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz", "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", "requires": { "follow-redirects": "^1.3.0", @@ -1842,7 +1842,7 @@ }, "babel-plugin-add-module-exports": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz", "integrity": "sha1-mumh9KjcZ/DN7E9K7aHkOl/2XiU=", "dev": true }, @@ -1863,79 +1863,79 @@ }, "babel-plugin-syntax-async-functions": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", "dev": true }, "babel-plugin-syntax-async-generators": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", "dev": true }, "babel-plugin-syntax-class-constructor-call": { "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", "dev": true }, "babel-plugin-syntax-class-properties": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", "dev": true }, "babel-plugin-syntax-decorators": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", "dev": true }, "babel-plugin-syntax-do-expressions": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=", "dev": true }, "babel-plugin-syntax-dynamic-import": { "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", "dev": true }, "babel-plugin-syntax-exponentiation-operator": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", "dev": true }, "babel-plugin-syntax-export-extensions": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", "dev": true }, "babel-plugin-syntax-flow": { "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", "dev": true }, "babel-plugin-syntax-function-bind": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=", "dev": true }, "babel-plugin-syntax-jsx": { "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", "dev": true }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", "dev": true }, @@ -2334,7 +2334,7 @@ }, "babel-preset-es2015": { "version": "6.3.13", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.3.13.tgz", + "resolved": "http://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.3.13.tgz", "integrity": "sha1-l9zn7ykuGMubK3VF2AxZPCjZUX8=", "dev": true, "requires": { @@ -2362,7 +2362,7 @@ }, "babel-preset-react": { "version": "6.3.13", - "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.3.13.tgz", + "resolved": "http://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.3.13.tgz", "integrity": "sha1-E9VeBqZfqqoHw5v2Op2DbgMhFvo=", "dev": true, "requires": { @@ -2376,7 +2376,7 @@ }, "babel-preset-stage-0": { "version": "6.3.13", - "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.3.13.tgz", + "resolved": "http://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.3.13.tgz", "integrity": "sha1-eKN8VvCzmI8qeZMtywzrj/N3sNE=", "dev": true, "requires": { @@ -3192,7 +3192,7 @@ }, "bl": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz", "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "requires": { "readable-stream": "^2.3.5", @@ -3285,7 +3285,7 @@ }, "boom": { "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "resolved": "http://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "requires": { @@ -3555,7 +3555,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { "core-util-is": "~1.0.0", @@ -3892,7 +3892,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { "ansi-styles": "^2.2.1", @@ -3995,7 +3995,7 @@ }, "chimp": { "version": "0.51.1", - "resolved": "https://registry.npmjs.org/chimp/-/chimp-0.51.1.tgz", + "resolved": "http://registry.npmjs.org/chimp/-/chimp-0.51.1.tgz", "integrity": "sha1-6hIbzfJsidV/jvNBlUDPPCeaPMU=", "dev": true, "requires": { @@ -4041,7 +4041,7 @@ "dependencies": { "async": { "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "resolved": "http://registry.npmjs.org/async/-/async-0.9.2.tgz", "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", "dev": true }, @@ -4076,7 +4076,7 @@ }, "fibers": { "version": "1.0.15", - "resolved": "https://registry.npmjs.org/fibers/-/fibers-1.0.15.tgz", + "resolved": "http://registry.npmjs.org/fibers/-/fibers-1.0.15.tgz", "integrity": "sha1-IvA5yPGLhWGQ+75N7PBWFUwerpw=", "dev": true }, @@ -4113,7 +4113,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -4165,7 +4165,7 @@ }, "progress": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "resolved": "http://registry.npmjs.org/progress/-/progress-1.1.8.tgz", "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "dev": true }, @@ -4188,7 +4188,7 @@ }, "chokidar": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.6.1.tgz", + "resolved": "http://registry.npmjs.org/chokidar/-/chokidar-1.6.1.tgz", "integrity": "sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=", "dev": true, "requires": { @@ -4741,7 +4741,7 @@ }, "cryptiles": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "resolved": "http://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, "requires": { @@ -4842,7 +4842,7 @@ }, "ctype": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", + "resolved": "http://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", "dev": true }, @@ -4870,7 +4870,7 @@ "dependencies": { "fibers": { "version": "1.0.15", - "resolved": "https://registry.npmjs.org/fibers/-/fibers-1.0.15.tgz", + "resolved": "http://registry.npmjs.org/fibers/-/fibers-1.0.15.tgz", "integrity": "sha1-IvA5yPGLhWGQ+75N7PBWFUwerpw=", "dev": true } @@ -4888,7 +4888,7 @@ "dependencies": { "core-js": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "resolved": "http://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" } } @@ -5133,7 +5133,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -5163,7 +5163,7 @@ }, "deprecate": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/deprecate/-/deprecate-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/deprecate/-/deprecate-1.0.0.tgz", "integrity": "sha1-ZhSQ7SQokWpsiIPYg05WRvTkpKg=" }, "des.js": { @@ -5210,7 +5210,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { "core-util-is": "~1.0.0", @@ -5277,7 +5277,7 @@ "dependencies": { "domelementtype": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" } } @@ -5399,8 +5399,7 @@ "ejs": { "version": "2.5.9", "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.9.tgz", - "integrity": "sha512-GJCAeDBKfREgkBtgrYSf9hQy9kTb3helv0zGdzqhM7iAkW8FA/ZF97VQDbwFiwIT8MQLLOe5VlPZOEvZAqtUAQ==", - "dev": true + "integrity": "sha512-GJCAeDBKfREgkBtgrYSf9hQy9kTb3helv0zGdzqhM7iAkW8FA/ZF97VQDbwFiwIT8MQLLOe5VlPZOEvZAqtUAQ==" }, "electron-to-chromium": { "version": "1.3.87", @@ -5568,7 +5567,7 @@ }, "es6-promisify": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "requires": { "es6-promise": "^4.0.3" @@ -5968,7 +5967,7 @@ }, "events": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "evp_bytestokey": { @@ -6327,7 +6326,7 @@ }, "external-editor": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { @@ -6470,13 +6469,13 @@ "dependencies": { "lodash": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", "dev": true }, "underscore.string": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "resolved": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", "dev": true } @@ -7421,7 +7420,7 @@ }, "gherkin": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-4.0.0.tgz", + "resolved": "http://registry.npmjs.org/gherkin/-/gherkin-4.0.0.tgz", "integrity": "sha1-edzgTRIj6kO0hip2vlzo+JwSwyw=", "dev": true }, @@ -7575,7 +7574,7 @@ "dependencies": { "minimist": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=", "dev": true } @@ -8120,7 +8119,7 @@ }, "hapi": { "version": "8.8.0", - "resolved": "https://registry.npmjs.org/hapi/-/hapi-8.8.0.tgz", + "resolved": "http://registry.npmjs.org/hapi/-/hapi-8.8.0.tgz", "integrity": "sha1-h+N6Bum0meiXkOLcERqpZotuYX8=", "dev": true, "requires": { @@ -8151,7 +8150,7 @@ "dependencies": { "accept": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/accept/-/accept-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/accept/-/accept-1.0.0.tgz", "integrity": "sha1-g++IOWi4WkDFARYEKCoiD/AeYq0=", "dev": true, "requires": { @@ -8161,7 +8160,7 @@ }, "ammo": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ammo/-/ammo-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/ammo/-/ammo-1.0.0.tgz", "integrity": "sha1-4FlIG/aAhzj66G1GT3L6DBLWeoU=", "dev": true, "requires": { @@ -8171,7 +8170,7 @@ }, "boom": { "version": "2.7.2", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.7.2.tgz", + "resolved": "http://registry.npmjs.org/boom/-/boom-2.7.2.tgz", "integrity": "sha1-2tYo2Jf3/S4yzIIZfxMweXHPg1Q=", "dev": true, "requires": { @@ -8180,7 +8179,7 @@ }, "call": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/call/-/call-2.0.1.tgz", + "resolved": "http://registry.npmjs.org/call/-/call-2.0.1.tgz", "integrity": "sha1-SbQnCZQ96JoyJYqpEbWHUeI3eg4=", "dev": true, "requires": { @@ -8190,7 +8189,7 @@ }, "catbox": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/catbox/-/catbox-4.3.0.tgz", + "resolved": "http://registry.npmjs.org/catbox/-/catbox-4.3.0.tgz", "integrity": "sha1-IiN3vWfxKRrA4l0AAC0GWp3385o=", "dev": true, "requires": { @@ -8201,7 +8200,7 @@ }, "catbox-memory": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/catbox-memory/-/catbox-memory-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/catbox-memory/-/catbox-memory-1.1.1.tgz", "integrity": "sha1-QqUvgLye+nJmAeltQBYDNhJIGig=", "dev": true, "requires": { @@ -8210,7 +8209,7 @@ }, "cryptiles": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.4.tgz", + "resolved": "http://registry.npmjs.org/cryptiles/-/cryptiles-2.0.4.tgz", "integrity": "sha1-CeoXdbnhx95+YKmdQqtvCM4aEoU=", "dev": true, "requires": { @@ -8227,28 +8226,54 @@ "hoek": "2.x.x", "joi": "6.x.x", "wreck": "5.x.x" + }, + "dependencies": { + "wreck": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/wreck/-/wreck-5.6.1.tgz", + "integrity": "sha1-r/ADBAATiJ11YZtccYcN0qjdBpo=", + "dev": true, + "requires": { + "boom": "2.x.x", + "hoek": "2.x.x" + } + } } }, "heavy": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/heavy/-/heavy-3.0.0.tgz", + "resolved": "http://registry.npmjs.org/heavy/-/heavy-3.0.0.tgz", "integrity": "sha1-/QEIdiExYy+IVIontVQSws9SKwA=", "dev": true, "requires": { "boom": "2.x.x", "hoek": "2.x.x", "joi": "5.x.x" + }, + "dependencies": { + "joi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-5.1.0.tgz", + "integrity": "sha1-FSrQfbjunGQBmX/1/SwSiWBwv1g=", + "dev": true, + "requires": { + "hoek": "^2.2.x", + "isemail": "1.x.x", + "moment": "2.x.x", + "topo": "1.x.x" + } + } } }, "hoek": { "version": "2.14.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.14.0.tgz", + "resolved": "http://registry.npmjs.org/hoek/-/hoek-2.14.0.tgz", "integrity": "sha1-gSEWkfUqWoNa5J7b8eickANHaqQ=", "dev": true }, "inert": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/inert/-/inert-2.1.5.tgz", + "resolved": "http://registry.npmjs.org/inert/-/inert-2.1.5.tgz", "integrity": "sha1-eybZTEHGLAPsHU726LRe1WuDSFk=", "dev": true, "requires": { @@ -8270,7 +8295,7 @@ }, "iron": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/iron/-/iron-2.1.2.tgz", + "resolved": "http://registry.npmjs.org/iron/-/iron-2.1.2.tgz", "integrity": "sha1-WR2RiiVAdTxEbY5DfNzwz6gBEU8=", "dev": true, "requires": { @@ -8287,7 +8312,7 @@ }, "joi": { "version": "6.4.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-6.4.1.tgz", + "resolved": "http://registry.npmjs.org/joi/-/joi-6.4.1.tgz", "integrity": "sha1-9Q9CRTVgBo5jg9oVrC0w3Xzra24=", "dev": true, "requires": { @@ -8299,7 +8324,7 @@ "dependencies": { "isemail": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/isemail/-/isemail-1.1.1.tgz", "integrity": "sha1-4Mj23D9HCX53dzlcaJYnGqJWw7U=", "dev": true }, @@ -8313,7 +8338,7 @@ }, "kilt": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/kilt/-/kilt-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/kilt/-/kilt-1.1.1.tgz", "integrity": "sha1-d7SmFjyn+lshN6iMFzNCFuwj1ds=", "dev": true, "requires": { @@ -8322,7 +8347,7 @@ }, "mimos": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mimos/-/mimos-2.0.2.tgz", + "resolved": "http://registry.npmjs.org/mimos/-/mimos-2.0.2.tgz", "integrity": "sha1-wyQXF+dblZkr54esfdbbGptTmx4=", "dev": true, "requires": { @@ -8332,7 +8357,7 @@ "dependencies": { "mime-db": { "version": "1.14.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.14.0.tgz", + "resolved": "http://registry.npmjs.org/mime-db/-/mime-db-1.14.0.tgz", "integrity": "sha1-1WHxC27mbbUflK5leilRp0IX7YM=", "dev": true } @@ -8340,7 +8365,7 @@ }, "peekaboo": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/peekaboo/-/peekaboo-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/peekaboo/-/peekaboo-1.0.0.tgz", "integrity": "sha1-wNspJq1lTSygH3ymUKtFkadk/EI=", "dev": true }, @@ -8352,7 +8377,7 @@ }, "shot": { "version": "1.5.3", - "resolved": "https://registry.npmjs.org/shot/-/shot-1.5.3.tgz", + "resolved": "http://registry.npmjs.org/shot/-/shot-1.5.3.tgz", "integrity": "sha1-SGEHREO8VHLCNRthpGtOrsAH9Xo=", "dev": true, "requires": { @@ -8361,7 +8386,7 @@ }, "statehood": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/statehood/-/statehood-2.1.1.tgz", + "resolved": "http://registry.npmjs.org/statehood/-/statehood-2.1.1.tgz", "integrity": "sha1-AfFwtmxeklqvZ5qdMiulkYb8AAk=", "dev": true, "requires": { @@ -8375,7 +8400,7 @@ }, "subtext": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/subtext/-/subtext-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/subtext/-/subtext-1.1.1.tgz", "integrity": "sha1-DJGCWuZdUXhVWT2DHjPvdaKEFWs=", "dev": true, "requires": { @@ -8389,7 +8414,7 @@ "dependencies": { "content": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content/-/content-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/content/-/content-1.0.1.tgz", "integrity": "sha1-gD60s7eJVGD9jGnGhMd1RmmvG6E=", "dev": true, "requires": { @@ -8399,7 +8424,7 @@ }, "pez": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pez/-/pez-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/pez/-/pez-1.0.0.tgz", "integrity": "sha1-hEMYpc5wku7d/6KV4YB5rHefoBg=", "dev": true, "requires": { @@ -8412,7 +8437,7 @@ "dependencies": { "b64": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/b64/-/b64-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/b64/-/b64-2.0.0.tgz", "integrity": "sha1-tZlbJPR+v9nxMQF6bntdZHVvtvM=", "dev": true, "requires": { @@ -8421,7 +8446,7 @@ }, "nigel": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nigel/-/nigel-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/nigel/-/nigel-1.0.1.tgz", "integrity": "sha1-RjmJr4gSePuqHTzJOCPb0XtDYKE=", "dev": true, "requires": { @@ -8431,7 +8456,7 @@ "dependencies": { "vise": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vise/-/vise-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/vise/-/vise-1.0.0.tgz", "integrity": "sha1-KDRb5N5aNB4V/SgW/Z6j5zA+jfM=", "dev": true, "requires": { @@ -8446,7 +8471,7 @@ }, "topo": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/topo/-/topo-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/topo/-/topo-1.0.2.tgz", "integrity": "sha1-QhV8N8HeTTeIPM3R1skChHqGDbk=", "dev": true, "requires": { @@ -8455,7 +8480,7 @@ }, "vision": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/vision/-/vision-2.0.1.tgz", + "resolved": "http://registry.npmjs.org/vision/-/vision-2.0.1.tgz", "integrity": "sha1-0BIlW6buQm0GlqNOHfMy/sVeZzw=", "dev": true, "requires": { @@ -8467,7 +8492,7 @@ }, "wreck": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/wreck/-/wreck-6.0.0.tgz", + "resolved": "http://registry.npmjs.org/wreck/-/wreck-6.0.0.tgz", "integrity": "sha1-T0CGaWHl14rOBPMqa38x8/PFFjg=", "dev": true, "requires": { @@ -8589,7 +8614,7 @@ }, "hawk": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "resolved": "http://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, "requires": { @@ -8621,7 +8646,7 @@ }, "hoek": { "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "resolved": "http://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "dev": true }, @@ -8926,7 +8951,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { "core-util-is": "~1.0.0", @@ -9262,7 +9287,7 @@ }, "is-builtin-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { @@ -9417,7 +9442,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" }, "is-object": { @@ -9570,6 +9595,12 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "isemail": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", + "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=", + "dev": true + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -9598,7 +9629,7 @@ }, "jasmine-core": { "version": "2.99.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", + "resolved": "http://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", "dev": true }, @@ -9739,7 +9770,7 @@ }, "jsonfile": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "requires": { @@ -9832,7 +9863,7 @@ }, "kew": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "resolved": "http://registry.npmjs.org/kew/-/kew-0.7.0.tgz", "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", "dev": true }, @@ -9983,7 +10014,7 @@ }, "graceful-fs": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "resolved": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", "optional": true, "requires": { @@ -10004,7 +10035,7 @@ }, "promise": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", + "resolved": "http://registry.npmjs.org/promise/-/promise-6.1.0.tgz", "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=", "optional": true, "requires": { @@ -10604,17 +10635,17 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", + "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", "requires": { "map-age-cleaner": "^0.1.1", "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "p-is-promise": "^2.0.0" } }, "memory-fs": { @@ -10891,7 +10922,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -10913,7 +10944,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -11039,14 +11070,14 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "minimist-options": { @@ -11134,7 +11165,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" @@ -11360,7 +11391,7 @@ }, "ncp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", "optional": true }, @@ -11372,7 +11403,7 @@ }, "next-tick": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, @@ -11591,7 +11622,7 @@ }, "npm-install-package": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/npm-install-package/-/npm-install-package-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/npm-install-package/-/npm-install-package-2.1.0.tgz", "integrity": "sha1-1+/jz816sAYUuJbqUxGdyaslkSU=", "dev": true }, @@ -11606,7 +11637,7 @@ "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -11831,7 +11862,7 @@ }, "os-locale": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "requires": { "lcid": "^1.0.0" @@ -11869,9 +11900,9 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-is-promise": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" }, "p-limit": { "version": "2.0.0", @@ -12158,7 +12189,7 @@ }, "es6-promise": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz", + "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz", "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=", "dev": true }, @@ -12214,7 +12245,7 @@ }, "progress": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "resolved": "http://registry.npmjs.org/progress/-/progress-1.1.8.tgz", "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "dev": true }, @@ -12960,7 +12991,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "simple-get": { @@ -13265,7 +13296,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" } } @@ -13281,7 +13312,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -13309,7 +13340,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -13372,7 +13403,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -13484,7 +13515,7 @@ }, "regjsgen": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", "dev": true }, @@ -13647,7 +13678,7 @@ }, "requestretry": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.5.0.tgz", + "resolved": "http://registry.npmjs.org/requestretry/-/requestretry-1.5.0.tgz", "integrity": "sha1-7RV7ulNSbt6z7DKo5wSkmYvs5ic=", "dev": true, "requires": { @@ -13757,7 +13788,7 @@ }, "rimraf": { "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "resolved": "http://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", "requires": { "glob": "^6.0.1" @@ -13852,7 +13883,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { "ret": "~0.1.10" @@ -13874,7 +13905,7 @@ }, "sax": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "resolved": "http://registry.npmjs.org/sax/-/sax-1.2.1.tgz", "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" }, "schema-inspector": { @@ -13887,7 +13918,7 @@ "dependencies": { "async": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" } } @@ -13952,7 +13983,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -14284,7 +14315,7 @@ }, "sntp": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "resolved": "http://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, "requires": { @@ -14620,7 +14651,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" @@ -15149,7 +15180,7 @@ }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, @@ -15786,7 +15817,7 @@ "dependencies": { "semver": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" } } @@ -16546,7 +16577,7 @@ }, "fibers": { "version": "1.0.15", - "resolved": "https://registry.npmjs.org/fibers/-/fibers-1.0.15.tgz", + "resolved": "http://registry.npmjs.org/fibers/-/fibers-1.0.15.tgz", "integrity": "sha1-IvA5yPGLhWGQ+75N7PBWFUwerpw=", "dev": true }, @@ -16918,7 +16949,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { "string-width": "^1.0.1", @@ -16977,6 +17008,18 @@ "xpath.js": ">=0.0.3" } }, + "xml-encryption": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/xml-encryption/-/xml-encryption-0.11.2.tgz", + "integrity": "sha512-jVvES7i5ovdO7N+NjgncA326xYKjhqeAnnvIgRnY7ROLCfFqEDLwP0Sxp/30SHG0AXQV1048T5yinOFyvwGFzg==", + "requires": { + "async": "^2.1.5", + "ejs": "^2.5.6", + "node-forge": "^0.7.0", + "xmldom": "~0.1.15", + "xpath": "0.0.27" + } + }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -17010,7 +17053,7 @@ }, "xolvio-ddp": { "version": "0.12.3", - "resolved": "https://registry.npmjs.org/xolvio-ddp/-/xolvio-ddp-0.12.3.tgz", + "resolved": "http://registry.npmjs.org/xolvio-ddp/-/xolvio-ddp-0.12.3.tgz", "integrity": "sha1-NqarlhKyQLWg0cCoNJCK8XwLjwI=", "dev": true, "requires": { @@ -17035,7 +17078,7 @@ }, "async": { "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "resolved": "http://registry.npmjs.org/async/-/async-0.9.2.tgz", "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", "dev": true }, @@ -17047,7 +17090,7 @@ }, "bl": { "version": "0.9.5", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", + "resolved": "http://registry.npmjs.org/bl/-/bl-0.9.5.tgz", "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", "dev": true, "requires": { @@ -17056,7 +17099,7 @@ }, "bluebird": { "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "resolved": "http://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", "dev": true }, @@ -17068,7 +17111,7 @@ }, "combined-stream": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", + "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", "dev": true, "requires": { @@ -17089,7 +17132,7 @@ }, "form-data": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", + "resolved": "http://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", "dev": true, "requires": { @@ -17100,7 +17143,7 @@ }, "hawk": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz", + "resolved": "http://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz", "integrity": "sha1-HnMc45RH+h0PbXB/e87r7A/R7B8=", "dev": true, "requires": { @@ -17129,13 +17172,13 @@ }, "mime-db": { "version": "1.12.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", + "resolved": "http://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", "dev": true }, "mime-types": { "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", + "resolved": "http://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", "dev": true, "requires": { @@ -17162,7 +17205,7 @@ }, "readable-stream": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { @@ -17174,7 +17217,7 @@ }, "request": { "version": "2.53.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.53.0.tgz", + "resolved": "http://registry.npmjs.org/request/-/request-2.53.0.tgz", "integrity": "sha1-GAo66St7Y5gC5PlUXdj83rcddgw=", "dev": true, "requires": { @@ -17213,7 +17256,7 @@ }, "xolvio-fiber-utils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/xolvio-fiber-utils/-/xolvio-fiber-utils-2.0.3.tgz", + "resolved": "http://registry.npmjs.org/xolvio-fiber-utils/-/xolvio-fiber-utils-2.0.3.tgz", "integrity": "sha1-vsjXDHQGGjFjFbun0w0lyz6C3FA=", "dev": true, "requires": { @@ -17223,7 +17266,7 @@ "dependencies": { "fibers": { "version": "1.0.15", - "resolved": "https://registry.npmjs.org/fibers/-/fibers-1.0.15.tgz", + "resolved": "http://registry.npmjs.org/fibers/-/fibers-1.0.15.tgz", "integrity": "sha1-IvA5yPGLhWGQ+75N7PBWFUwerpw=", "dev": true } @@ -17231,7 +17274,7 @@ }, "xolvio-jasmine-expect": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xolvio-jasmine-expect/-/xolvio-jasmine-expect-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/xolvio-jasmine-expect/-/xolvio-jasmine-expect-1.1.0.tgz", "integrity": "sha1-vCud1ghCMR8EV59agtzqaisxnH0=", "dev": true, "requires": { @@ -17254,12 +17297,17 @@ "dependencies": { "fibers": { "version": "1.0.15", - "resolved": "https://registry.npmjs.org/fibers/-/fibers-1.0.15.tgz", + "resolved": "http://registry.npmjs.org/fibers/-/fibers-1.0.15.tgz", "integrity": "sha1-IvA5yPGLhWGQ+75N7PBWFUwerpw=", "dev": true } } }, + "xpath": { + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", + "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==" + }, "xpath.js": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz", @@ -17287,7 +17335,7 @@ }, "yargs": { "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", "requires": { "camelcase": "^2.0.1", diff --git a/package.json b/package.json index 05e9ce0664ac..2adfd9d18f6d 100644 --- a/package.json +++ b/package.json @@ -172,6 +172,7 @@ "lru-cache": "^5.1.1", "mailparser": "^2.4.3", "marked": "^0.5.2", + "mem": "4.1.0", "meteor-node-stubs": "^0.4.1", "mime-db": "^1.37.0", "mime-type": "^3.0.7", diff --git a/packages/rocketchat-autotranslate/client/lib/autotranslate.js b/packages/rocketchat-autotranslate/client/lib/autotranslate.js index 0e606971120c..110d786ecaeb 100644 --- a/packages/rocketchat-autotranslate/client/lib/autotranslate.js +++ b/packages/rocketchat-autotranslate/client/lib/autotranslate.js @@ -2,6 +2,9 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { RocketChat } from 'meteor/rocketchat:lib'; import _ from 'underscore'; +import mem from 'mem'; + +const findSubscriptionByRid = mem((rid) => RocketChat.models.Subscriptions.findOne({ rid })); RocketChat.AutoTranslate = { messageIdsToWait: {}, @@ -10,7 +13,7 @@ RocketChat.AutoTranslate = { getLanguage(rid) { let subscription = {}; if (rid) { - subscription = RocketChat.models.Subscriptions.findOne({ rid }, { fields: { autoTranslateLanguage: 1 } }); + subscription = findSubscriptionByRid(rid); } const language = (subscription && subscription.autoTranslateLanguage) || Meteor.user().language || window.defaultUserLanguage(); if (language.indexOf('-') !== -1) { @@ -48,7 +51,7 @@ RocketChat.AutoTranslate = { Tracker.autorun(() => { if (RocketChat.settings.get('AutoTranslate_Enabled') && RocketChat.authz.hasAtLeastOnePermission(['auto-translate'])) { RocketChat.callbacks.add('renderMessage', (message) => { - const subscription = RocketChat.models.Subscriptions.findOne({ rid: message.rid }, { fields: { autoTranslate: 1, autoTranslateLanguage: 1 } }); + const subscription = findSubscriptionByRid(message.rid); const autoTranslateLanguage = this.getLanguage(message.rid); if (message.u && message.u._id !== Meteor.userId()) { if (!message.translations) { @@ -72,7 +75,7 @@ RocketChat.AutoTranslate = { RocketChat.callbacks.add('streamMessage', (message) => { if (message.u && message.u._id !== Meteor.userId()) { - const subscription = RocketChat.models.Subscriptions.findOne({ rid: message.rid }, { fields: { autoTranslate: 1, autoTranslateLanguage: 1 } }); + const subscription = findSubscriptionByRid(message.rid); const language = this.getLanguage(message.rid); if (subscription && subscription.autoTranslate === true && ((message.msg && (!message.translations || !message.translations[language])))) { // || (message.attachments && !_.find(message.attachments, attachment => { return attachment.translations && attachment.translations[language]; })) RocketChat.models.Messages.update({ _id: message._id }, { $set: { autoTranslateFetching: true } }); diff --git a/packages/rocketchat-models/client/models/Subscriptions.js b/packages/rocketchat-models/client/models/Subscriptions.js index cad88e5aea7a..602f06c5e271 100644 --- a/packages/rocketchat-models/client/models/Subscriptions.js +++ b/packages/rocketchat-models/client/models/Subscriptions.js @@ -1,10 +1,11 @@ import { Users } from '..'; import _ from 'underscore'; +import mem from 'mem'; const Subscriptions = {}; Object.assign(Subscriptions, { - isUserInRole(userId, roleName, roomId) { + isUserInRole: mem(function(userId, roleName, roomId) { if (roomId == null) { return false; } @@ -16,9 +17,9 @@ Object.assign(Subscriptions, { const subscription = this.findOne(query); return subscription && Array.isArray(subscription.roles) && subscription.roles.includes(roleName); - }, + }, { maxAge: 1000 }), - findUsersInRoles(roles, scope, options) { + findUsersInRoles: mem(function(roles, scope, options) { roles = [].concat(roles); const query = { @@ -38,7 +39,7 @@ Object.assign(Subscriptions, { })); return Users.find({ _id: { $in: users } }, options); - }, + }, { maxAge: 1000 }), }); export { Subscriptions }; diff --git a/packages/rocketchat-ui-utils/client/lib/MessageAction.js b/packages/rocketchat-ui-utils/client/lib/MessageAction.js index 27723cbaa33e..026915b5746e 100644 --- a/packages/rocketchat-ui-utils/client/lib/MessageAction.js +++ b/packages/rocketchat-ui-utils/client/lib/MessageAction.js @@ -10,6 +10,7 @@ import { settings } from 'meteor/rocketchat:settings'; import _ from 'underscore'; import moment from 'moment'; import toastr from 'toastr'; +import mem from 'mem'; const call = (method, ...args) => new Promise((resolve, reject) => { Meteor.call(method, ...args, function(err, data) { @@ -56,6 +57,10 @@ export const MessageAction = new class { config.group = 'menu'; } + if (config.condition) { + config.condition = mem(config.condition); + } + return Tracker.nonreactive(() => { const btns = this.buttons.get(); btns[config.id] = config; diff --git a/packages/rocketchat-ui-utils/client/lib/RoomHistoryManager.js b/packages/rocketchat-ui-utils/client/lib/RoomHistoryManager.js index f58ea4a34d87..163dd46f1b18 100644 --- a/packages/rocketchat-ui-utils/client/lib/RoomHistoryManager.js +++ b/packages/rocketchat-ui-utils/client/lib/RoomHistoryManager.js @@ -24,6 +24,17 @@ export const upsertMessage = ({ msg, subscription }) => { return ChatMessage.upsert({ _id: msg._id }, msg); }; +function upsertMessageBulk({ msgs, subscription }) { + const { queries } = ChatMessage; + ChatMessage.queries = []; + msgs.forEach((msg, index) => { + if (index === msgs.length - 1) { + ChatMessage.queries = queries; + } + upsertMessage({ msg, subscription }); + }); +} + export const RoomHistoryManager = new class { constructor() { this.defaultLimit = 50; @@ -91,7 +102,10 @@ export const RoomHistoryManager = new class { previousHeight = wrapper.scrollHeight; } - messages.forEach((msg) => msg.t !== 'command' && upsertMessage({ msg, subscription })); + upsertMessageBulk({ + msgs: messages.filter((msg) => msg.t !== 'command'), + subscription, + }); if (wrapper) { const heightDiff = wrapper.scrollHeight - previousHeight; diff --git a/packages/rocketchat-ui/client/views/app/room.js b/packages/rocketchat-ui/client/views/app/room.js index a340e4429eaf..b8439556f5fb 100644 --- a/packages/rocketchat-ui/client/views/app/room.js +++ b/packages/rocketchat-ui/client/views/app/room.js @@ -495,7 +495,7 @@ Template.room.events({ roomTypes.openRouteLink('d', { name: this._arguments[1].u.username }, { ...FlowRouter.current().queryParams, reply: message._id }); }, 'click, touchend'(e, t) { - Meteor.setTimeout(() => t.sendToBottomIfNecessaryDebounced(), 100); + Meteor.setTimeout(() => t.sendToBottomIfNecessaryDebounced && t.sendToBottomIfNecessaryDebounced(), 100); }, 'click .messages-container-main'() {