diff --git a/.eslintrc b/.eslintrc index 0af482f99a4d..cc352eef163a 100644 --- a/.eslintrc +++ b/.eslintrc @@ -8,7 +8,7 @@ "alerts" : false, "Apps" : false, "Assets" : false, - "AudioRecorder" : false, + "CachedChatSubscription" : false, "ChatMessage" : false, "ChatMessages" : false, "chatMessages" : false, @@ -16,6 +16,7 @@ "ChatSubscription" : false, "cordova" : false, "device" : false, + "DynamicCss" : false, "facebookConnectPlugin" : false, "FileUpload" : false, "fileUploadHandler" : false, @@ -23,20 +24,31 @@ "handleError" : false, "getAvatarUrlFromUsername" : false, "getAvatarSuggestionForUser" : false, + "isChrome" : false, + "isFirefox" : false, + "isRtl" : false, + "jscolor" : false, + "KonchatNotification" : false, + "msgStream" : false, + "MsgTyping" : false, "modal" : false, "menu" : false, "Npm" : false, "openRoom" : false, + "OnePassword" : false, "Package" : false, + "popover" : false, "readMessage" : false, "RocketChat" : true, "roomExit" : true, "RoomHistoryManager" : false, "RoomManager" : false, "RoomRoles" : false, + "Servers" : false, "Settings" : false, "SideNav" : false, "t" : false, + "toolbarSearch" : false, "TwitterConnect" : false, "UserRoles" : false, "VideoRecorder" : false, diff --git a/packages/rocketchat-livechat/assets/rocket-livechat.js b/packages/rocketchat-livechat/assets/rocket-livechat.js index 6d61b917dabb..09620b8baefd 100644 --- a/packages/rocketchat-livechat/assets/rocket-livechat.js +++ b/packages/rocketchat-livechat/assets/rocket-livechat.js @@ -472,8 +472,6 @@ } }(this || {})); -/* globals EventEmitter */ - (function(w) { w.RocketChat = w.RocketChat || { _: [] }; var config = {}; diff --git a/packages/rocketchat-livechat/client/views/app/livechatAppearance.js b/packages/rocketchat-livechat/client/views/app/livechatAppearance.js index 3019a1a5686e..1a6356db4e37 100644 --- a/packages/rocketchat-livechat/client/views/app/livechatAppearance.js +++ b/packages/rocketchat-livechat/client/views/app/livechatAppearance.js @@ -1,4 +1,3 @@ -/* globals jscolor */ /* eslint new-cap: ["error", { "newIsCapExceptions": ["jscolor"] }]*/ import { Meteor } from 'meteor/meteor'; import { Mongo } from 'meteor/mongo'; diff --git a/packages/rocketchat-message-snippet/package.js b/packages/rocketchat-message-snippet/package.js index 4de3d9a55861..563daf7638de 100644 --- a/packages/rocketchat-message-snippet/package.js +++ b/packages/rocketchat-message-snippet/package.js @@ -1,4 +1,3 @@ -/* globals Package */ Package.describe({ name: 'rocketchat:message-snippet', version: '0.0.1', diff --git a/packages/rocketchat-reactions/server/setReaction.js b/packages/rocketchat-reactions/server/setReaction.js index 26a8d5dc0c59..b090cd559b21 100644 --- a/packages/rocketchat-reactions/server/setReaction.js +++ b/packages/rocketchat-reactions/server/setReaction.js @@ -1,4 +1,3 @@ -/* global msgStream */ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/tap:i18n'; diff --git a/packages/rocketchat-search/client/search/search.js b/packages/rocketchat-search/client/search/search.js index 3238c2c6ccd5..22be63831ccc 100644 --- a/packages/rocketchat-search/client/search/search.js +++ b/packages/rocketchat-search/client/search/search.js @@ -1,7 +1,8 @@ -/* globals ReactiveVar, TAPi18n */ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; +import { ReactiveVar } from 'meteor/reactive-var'; +import { TAPi18n } from 'meteor/tap:i18n'; import toastr from 'toastr'; import _ from 'underscore'; diff --git a/packages/rocketchat-search/server/service/providerService.js b/packages/rocketchat-search/server/service/providerService.js index 78d893f092eb..64590845ac15 100644 --- a/packages/rocketchat-search/server/service/providerService.js +++ b/packages/rocketchat-search/server/service/providerService.js @@ -1,7 +1,6 @@ -/* globals RocketChat */ import { Meteor } from 'meteor/meteor'; +import { RocketChat } from 'meteor/rocketchat:lib'; import _ from 'underscore'; - import { validationService } from '../service/validationService'; import SearchLogger from '../logger/logger'; diff --git a/packages/rocketchat-slackbridge/server/slackbridge_import.server.js b/packages/rocketchat-slackbridge/server/slackbridge_import.server.js index bdf3602d1551..2b869e0e32da 100644 --- a/packages/rocketchat-slackbridge/server/slackbridge_import.server.js +++ b/packages/rocketchat-slackbridge/server/slackbridge_import.server.js @@ -1,4 +1,3 @@ -/* globals msgStream */ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { Random } from 'meteor/random'; diff --git a/packages/rocketchat-ui-flextab/client/tabs/inviteUsers.js b/packages/rocketchat-ui-flextab/client/tabs/inviteUsers.js index 00e35f7787e5..0391f5d3181e 100644 --- a/packages/rocketchat-ui-flextab/client/tabs/inviteUsers.js +++ b/packages/rocketchat-ui-flextab/client/tabs/inviteUsers.js @@ -6,6 +6,7 @@ import { Template } from 'meteor/templating'; import { AutoComplete } from 'meteor/mizzao:autocomplete'; import { RocketChat } from 'meteor/rocketchat:lib'; import { t } from 'meteor/rocketchat:ui'; +import { Deps } from 'meteor/deps'; import toastr from 'toastr'; const acEvents = { @@ -124,7 +125,7 @@ Template.inviteUsers.onRendered(function() { users.set(usersArr); }); }); -/* global Deps */ + Template.inviteUsers.onCreated(function() { this.selectedUsers = new ReactiveVar([]); const filter = { exceptions :[Meteor.user().username].concat(this.selectedUsers.get().map((u) => u.username)) }; diff --git a/packages/rocketchat-ui-login/client/login/form.js b/packages/rocketchat-ui-login/client/login/form.js index 6a91957a98d0..86e1c30ebed7 100644 --- a/packages/rocketchat-ui-login/client/login/form.js +++ b/packages/rocketchat-ui-login/client/login/form.js @@ -1,4 +1,3 @@ -/* globals OnePassword, device */ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; diff --git a/packages/rocketchat-ui-master/client/main.js b/packages/rocketchat-ui-master/client/main.js index b3e542c30449..459e5508b538 100644 --- a/packages/rocketchat-ui-master/client/main.js +++ b/packages/rocketchat-ui-master/client/main.js @@ -1,4 +1,3 @@ -/* globals toolbarSearch, menu, fireGlobalEvent, CachedChatSubscription, DynamicCss, popover */ import { Meteor } from 'meteor/meteor'; import { Match } from 'meteor/check'; import { ReactiveVar } from 'meteor/reactive-var'; diff --git a/packages/rocketchat-ui-master/server/inject.js b/packages/rocketchat-ui-master/server/inject.js index fffa2d89526e..1ef0717440fd 100644 --- a/packages/rocketchat-ui-master/server/inject.js +++ b/packages/rocketchat-ui-master/server/inject.js @@ -1,5 +1,5 @@ -/* globals Inject */ import { Meteor } from 'meteor/meteor'; +import { Inject } from 'meteor/meteorhacks:inject-initial'; import _ from 'underscore'; import s from 'underscore.string'; diff --git a/packages/rocketchat-ui-message/client/message.js b/packages/rocketchat-ui-message/client/message.js index 4acd3f952ffd..fb1b63a914d3 100644 --- a/packages/rocketchat-ui-message/client/message.js +++ b/packages/rocketchat-ui-message/client/message.js @@ -9,6 +9,7 @@ import { DateFormat } from 'meteor/rocketchat:lib'; import { renderEmoji } from 'meteor/rocketchat:emoji'; import { renderMessageBody } from './renderMessageBody'; import { RocketChat } from 'meteor/rocketchat:lib'; +import { RoomRoles, UserRoles } from 'meteor/rocketchat:ui'; import { t } from 'meteor/rocketchat:ui'; async function renderPdfToCanvas(canvasId, pdfLink) { @@ -92,7 +93,6 @@ Template.message.helpers({ if (!this.u || !this.u._id) { return []; } - /* globals UserRoles RoomRoles */ const userRoles = UserRoles.findOne(this.u._id); const roomRoles = RoomRoles.findOne({ 'u._id': this.u._id, diff --git a/packages/rocketchat-ui-message/client/messageBox.js b/packages/rocketchat-ui-message/client/messageBox.js index 9f2d58919cc4..75ea52fed62f 100644 --- a/packages/rocketchat-ui-message/client/messageBox.js +++ b/packages/rocketchat-ui-message/client/messageBox.js @@ -229,7 +229,6 @@ Template.messageBox.helpers({ }, }; }, - /* globals MsgTyping*/ usersTyping() { const maxUsernames = 4; const users = MsgTyping.get(this._id); diff --git a/packages/rocketchat-ui-message/client/popup/messagePopup.js b/packages/rocketchat-ui-message/client/popup/messagePopup.js index 27f89fadc0fc..4a109515b84d 100644 --- a/packages/rocketchat-ui-message/client/popup/messagePopup.js +++ b/packages/rocketchat-ui-message/client/popup/messagePopup.js @@ -1,4 +1,3 @@ -/* globals toolbarSearch */ // This is not supposed to be a complete list // it is just to improve readability in this file diff --git a/packages/rocketchat-ui-message/client/popup/messagePopupSlashCommandPreview.js b/packages/rocketchat-ui-message/client/popup/messagePopupSlashCommandPreview.js index dc7693954d80..d59fd6a382d0 100644 --- a/packages/rocketchat-ui-message/client/popup/messagePopupSlashCommandPreview.js +++ b/packages/rocketchat-ui-message/client/popup/messagePopupSlashCommandPreview.js @@ -1,4 +1,3 @@ -/* global toolbarSearch */ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Session } from 'meteor/session'; diff --git a/packages/rocketchat-ui-message/client/startup/messageBoxActions.js b/packages/rocketchat-ui-message/client/startup/messageBoxActions.js index 015236ed767f..651f199f6ccc 100644 --- a/packages/rocketchat-ui-message/client/startup/messageBoxActions.js +++ b/packages/rocketchat-ui-message/client/startup/messageBoxActions.js @@ -1,4 +1,3 @@ -/* globals device */ import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import mime from 'mime-type/with-db'; diff --git a/packages/rocketchat-ui-sidenav/client/roomList.js b/packages/rocketchat-ui-sidenav/client/roomList.js index 558eff571379..6b77ce7e35d0 100644 --- a/packages/rocketchat-ui-sidenav/client/roomList.js +++ b/packages/rocketchat-ui-sidenav/client/roomList.js @@ -1,6 +1,5 @@ -/* globals RocketChat */ import { Meteor } from 'meteor/meteor'; -import { UiTextContext } from 'meteor/rocketchat:lib'; +import { RocketChat, UiTextContext } from 'meteor/rocketchat:lib'; import { Template } from 'meteor/templating'; Template.roomList.helpers({ diff --git a/packages/rocketchat-ui-sidenav/client/sideNav.js b/packages/rocketchat-ui-sidenav/client/sideNav.js index 0474135186ad..15400b520be7 100644 --- a/packages/rocketchat-ui-sidenav/client/sideNav.js +++ b/packages/rocketchat-ui-sidenav/client/sideNav.js @@ -4,8 +4,6 @@ import { lazyloadtick } from 'meteor/rocketchat:lazy-load'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; -/* globals menu*/ - Template.sideNav.helpers({ flexTemplate() { return SideNav.getFlex().template; diff --git a/packages/rocketchat-ui-sidenav/client/sidebarHeader.js b/packages/rocketchat-ui-sidenav/client/sidebarHeader.js index 88f87cb2cae0..4c540e7b1906 100644 --- a/packages/rocketchat-ui-sidenav/client/sidebarHeader.js +++ b/packages/rocketchat-ui-sidenav/client/sidebarHeader.js @@ -1,8 +1,8 @@ -/* globals popover menu */ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; +import { popover } from 'meteor/rocketchat:ui'; const setStatus = (status) => { AccountBox.setStatus(status); diff --git a/packages/rocketchat-ui-sidenav/client/sidebarItem.js b/packages/rocketchat-ui-sidenav/client/sidebarItem.js index 0fcdb1c8eccc..8aa05be9ca74 100644 --- a/packages/rocketchat-ui-sidenav/client/sidebarItem.js +++ b/packages/rocketchat-ui-sidenav/client/sidebarItem.js @@ -1,11 +1,10 @@ -/* globals menu popover */ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import moment from 'moment'; import { renderMessageBody } from 'meteor/rocketchat:ui-message'; - +import { popover } from 'meteor/rocketchat:ui'; Template.sidebarItem.helpers({ or(...args) { diff --git a/packages/rocketchat-ui-sidenav/client/sortlist.js b/packages/rocketchat-ui-sidenav/client/sortlist.js index fc381364b3e4..899093c82405 100644 --- a/packages/rocketchat-ui-sidenav/client/sortlist.js +++ b/packages/rocketchat-ui-sidenav/client/sortlist.js @@ -1,6 +1,6 @@ -/* globals popover */ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; +import { popover } from 'meteor/rocketchat:ui'; const checked = function(prop, field) { const userId = Meteor.userId(); diff --git a/packages/rocketchat-ui-sidenav/client/toolbar.js b/packages/rocketchat-ui-sidenav/client/toolbar.js index 026f4bee1079..6bd7d26a8a92 100644 --- a/packages/rocketchat-ui-sidenav/client/toolbar.js +++ b/packages/rocketchat-ui-sidenav/client/toolbar.js @@ -1,5 +1,3 @@ -/* global menu, toolbarSearch */ - import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { ReactiveVar } from 'meteor/reactive-var'; diff --git a/packages/rocketchat-ui/client/components/header/header.js b/packages/rocketchat-ui/client/components/header/header.js index e2a1fd576a36..b21fbed5410a 100644 --- a/packages/rocketchat-ui/client/components/header/header.js +++ b/packages/rocketchat-ui/client/components/header/header.js @@ -1,4 +1,3 @@ -/* globals fireGlobalEvent*/ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; diff --git a/packages/rocketchat-ui/client/components/icon.js b/packages/rocketchat-ui/client/components/icon.js index bf942d44cd1e..ca728b0d4e76 100644 --- a/packages/rocketchat-ui/client/components/icon.js +++ b/packages/rocketchat-ui/client/components/icon.js @@ -1,4 +1,3 @@ -/* globals isFirefox, isChrome */ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Template } from 'meteor/templating'; diff --git a/packages/rocketchat-ui/client/lib/avatar.js b/packages/rocketchat-ui/client/lib/avatar.js index 6ff52065450a..43eaede3db41 100644 --- a/packages/rocketchat-ui/client/lib/avatar.js +++ b/packages/rocketchat-ui/client/lib/avatar.js @@ -3,7 +3,7 @@ import { Session } from 'meteor/session'; Blaze.registerHelper('avatarUrlFromUsername', getAvatarUrlFromUsername); -this.getAvatarAsPng = function(username, cb) { +export const getAvatarAsPng = function(username, cb) { const image = new Image; image.src = getAvatarUrlFromUsername(username); image.onload = function() { diff --git a/packages/rocketchat-ui/client/lib/chatMessages.js b/packages/rocketchat-ui/client/lib/chatMessages.js index e0e53e20238b..629c913d135b 100644 --- a/packages/rocketchat-ui/client/lib/chatMessages.js +++ b/packages/rocketchat-ui/client/lib/chatMessages.js @@ -1,4 +1,3 @@ -/* globals MsgTyping */ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Random } from 'meteor/random'; @@ -195,7 +194,6 @@ ChatMessages = class ChatMessages { //eslint-disable-line this.editing.saved = this.input.value; return this.editing.savedCursor = this.input.selectionEnd; } - /* globals readMessage KonchatNotification */ /** * * @param {string} rim room ID * * @param {Element} input DOM element diff --git a/packages/rocketchat-ui/client/lib/codeMirror/codeMirrorComponent.js b/packages/rocketchat-ui/client/lib/codeMirror/codeMirrorComponent.js index 193a5a8a209a..60cd4ab84eff 100644 --- a/packages/rocketchat-ui/client/lib/codeMirror/codeMirrorComponent.js +++ b/packages/rocketchat-ui/client/lib/codeMirror/codeMirrorComponent.js @@ -1,5 +1,4 @@ -/* global CodeMirrors */ -CodeMirrors = {}; +const CodeMirrors = {}; import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; diff --git a/packages/rocketchat-ui/client/lib/cordova/facebook-login.js b/packages/rocketchat-ui/client/lib/cordova/facebook-login.js index 32cf7486acfc..0677892ae34c 100644 --- a/packages/rocketchat-ui/client/lib/cordova/facebook-login.js +++ b/packages/rocketchat-ui/client/lib/cordova/facebook-login.js @@ -1,6 +1,6 @@ -/* globals facebookConnectPlugin Facebook*/ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; +import { Facebook } from 'meteor/facebook-oauth'; Meteor.loginWithFacebookCordova = function(options, callback) { if (!callback && typeof options === 'function') { diff --git a/packages/rocketchat-ui/client/lib/cordova/keyboard-fix.js b/packages/rocketchat-ui/client/lib/cordova/keyboard-fix.js index 1f29da562996..95b5344f32a6 100644 --- a/packages/rocketchat-ui/client/lib/cordova/keyboard-fix.js +++ b/packages/rocketchat-ui/client/lib/cordova/keyboard-fix.js @@ -1,4 +1,3 @@ -/* globals device cordova*/ import { Meteor } from 'meteor/meteor'; if (Meteor.isCordova) { diff --git a/packages/rocketchat-ui/client/lib/cordova/push.js b/packages/rocketchat-ui/client/lib/cordova/push.js index d3f8b02b88ba..dbb098ab7bf4 100644 --- a/packages/rocketchat-ui/client/lib/cordova/push.js +++ b/packages/rocketchat-ui/client/lib/cordova/push.js @@ -1,7 +1,7 @@ -/* globals Push Servers*/ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; +import { Push } from 'meteor/rocketchat:push'; if (Meteor.isCordova) { // Push.addListener 'token', (token) -> diff --git a/packages/rocketchat-ui/client/lib/cordova/user-state.js b/packages/rocketchat-ui/client/lib/cordova/user-state.js index db4762e0f4e5..a7dd9d0892f9 100644 --- a/packages/rocketchat-ui/client/lib/cordova/user-state.js +++ b/packages/rocketchat-ui/client/lib/cordova/user-state.js @@ -1,5 +1,5 @@ -/* globals UserPresence, readMessage */ import { Meteor } from 'meteor/meteor'; +import { UserPresence } from 'meteor/konecty:user-presence'; import _ from 'underscore'; let timer = undefined; diff --git a/packages/rocketchat-ui/client/lib/fileUpload.js b/packages/rocketchat-ui/client/lib/fileUpload.js index d4adfd3327d3..b0d48defee7d 100644 --- a/packages/rocketchat-ui/client/lib/fileUpload.js +++ b/packages/rocketchat-ui/client/lib/fileUpload.js @@ -1,10 +1,9 @@ -/* globals Handlebars, fileUpload, modal, t */ -/* exported fileUpload */ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { Session } from 'meteor/session'; import s from 'underscore.string'; import { fileUploadHandler } from 'meteor/rocketchat:file-upload'; +import { Handlebars } from 'meteor/ui'; const readAsDataURL = (file, callback) => { const reader = new FileReader(); @@ -135,7 +134,7 @@ const getUploadPreview = async(file, preview) => { return getGenericUploadPreview(file, preview); }; -fileUpload = async(files) => { +fileUpload = async(files) => { //eslint-disable-line files = [].concat(files); const roomId = Session.get('openedRoom'); diff --git a/packages/rocketchat-ui/client/lib/menu.js b/packages/rocketchat-ui/client/lib/menu.js index 2ebabfd3f197..80a5c38791a0 100644 --- a/packages/rocketchat-ui/client/lib/menu.js +++ b/packages/rocketchat-ui/client/lib/menu.js @@ -18,7 +18,6 @@ window.addEventListener('resize', _.debounce((() => { }; })(), 100)); -/* globals isRtl */ this.menu = new class extends EventEmitter { constructor() { super(); diff --git a/packages/rocketchat-ui/client/lib/notification.js b/packages/rocketchat-ui/client/lib/notification.js index 0baca53d0b2e..45bbb61d84c9 100644 --- a/packages/rocketchat-ui/client/lib/notification.js +++ b/packages/rocketchat-ui/client/lib/notification.js @@ -8,6 +8,7 @@ import { Session } from 'meteor/session'; import _ from 'underscore'; import s from 'underscore.string'; import { e2e } from 'meteor/rocketchat:e2e'; +import { getAvatarAsPng } from './avatar'; KonchatNotification = { //eslint-disable-line notificationStatus: new ReactiveVar, @@ -85,7 +86,6 @@ KonchatNotification = { //eslint-disable-line } } - /* globals getAvatarAsPng*/ return getAvatarAsPng(notification.payload.sender.username, function(avatarAsPng) { notification.icon = avatarAsPng; return KonchatNotification.notify(notification); //eslint-disable-line diff --git a/packages/rocketchat-ui/client/lib/recorderjs/audioRecorder.js b/packages/rocketchat-ui/client/lib/recorderjs/audioRecorder.js index ee239c0e778b..d87921bea587 100644 --- a/packages/rocketchat-ui/client/lib/recorderjs/audioRecorder.js +++ b/packages/rocketchat-ui/client/lib/recorderjs/audioRecorder.js @@ -1,7 +1,6 @@ -/* globals Recorder */ // TODO: embed Recorder class here // TODO: create the worker for mp3 encoding on-the-fly -AudioRecorder = new (class AudioRecorder { +AudioRecorder = new (class AudioRecorder { //eslint-disable-line start(cb) { window.audioContext = new (window.AudioContext || window.webkitAudioContext); @@ -33,7 +32,7 @@ AudioRecorder = new (class AudioRecorder { startUserMedia(stream) { this.stream = stream; const input = window.audioContext.createMediaStreamSource(stream); - this.recorder = new Recorder(input, { + this.recorder = new window.Recorder(input, { workerPath: 'mp3-realtime-worker.js', numChannels: 1, }); diff --git a/packages/rocketchat-ui/package.js b/packages/rocketchat-ui/package.js index ac46fd441ea6..1d7bff405e88 100644 --- a/packages/rocketchat-ui/package.js +++ b/packages/rocketchat-ui/package.js @@ -28,6 +28,7 @@ Package.onUse(function(api) { 'rocketchat:e2e', 'mizzao:autocomplete', 'rocketchat:file-upload', + 'konecty:user-presence', ]); api.use('kadira:flow-router', 'client');